2016-07-30 5 views
1

キューの現在のコールバック量を知るには?Androidカメラがキューのコールバックバッファの長さを取得する

カウントが1コールバックに低下することがあり、1秒あたり2フレームしか得られないことがあります。

セットアップ:

private void setupCallback(int bufferSize) 
{ 
    mCamera.setPreviewCallbackWithBuffer(this); 
    for (int i = 0; i <= NUM_BUFFERS; ++i) 
    { 
     byte[] cameraBuffer = new byte[bufferSize]; 
     mCamera.addCallbackBuffer(cameraBuffer); 
    } 
} 

@Override 
public void onPreviewFrame(byte[] data, Camera camera) 
{ 
    processFrame(data); 
    camera.addCallbackBuffer(data); 
} 

ログは言う:

D /カメラ-JNI:長さと同じコードを持つ4

しかし、時にはのキューからコールバックバッファを使用して、それは言います:

D/Ca mera-JNI:長さ1のキューからコールバックバッファを使用する

何か問題が発生し、それらのバッファをリセットする方法を教えてください。

答えて

0

Android APIでこれを行う方法はありません。 onPreviewFrameが本質的に非ブロッキングになるように、processFrameを別のスレッドに移動できます。このようにして、大量のキューがプロセス内にあり、そのキューを追跡することができます。

onPreviewFrameが、Camera.open()という同じスレッドで呼び出されることにも注意してください。そのスレッドが何かをやっているときは、onPreviewFrameは呼び出されず、対応するバッファはバッファプールから削除されます。このため、Cameraを処理するための専用スレッドがあることをお勧めします。

+0

processFrameには15msしかかかりません。私は、その期間にonPreviewFrameが3〜4回撮影することを疑う。前の処理がまだ処理されている場合、onPreviewFrameに何が起こるか教えていただけますか? –

+0

私はデフォルトスレッディングに関する注釈を追加しました。どのスレッドで 'Camera.open()'を呼びますか?メインスレッドの – szym

+0

。私は問題が何かを知りました。しかし、それは問題を解決しませんでした。 UIロジックが1つのonPreviewCallbacksを除くすべての例外をスローしていました。だから別のスレッドを作ってもそれを修正することはできません。コール間の時間が長すぎるとコールバックをリセットすることに決めました。 –

関連する問題