現時点ではこれについて自分で学んでいるだけなので、これは完全な答えではないかもしれませんが、できる限り多くの情報を提供します.
自分でカメラから画像を取得して、スレッドにディスパッチする必要があります。これは、例のアクティビティがカメラからのフレームで呼び出され、戻り値として (すぐに) 表示されるフレームを返す必要があるためです。その間に空白の画面を表示したり、その他のハックなものを表示したりせずに、2 つ以上のフレームを並行して処理することはできません。おそらく、(固定サイズの) バッファをどこかに割り当てて、フレームを取得したらワーカー スレッドでフレームの処理を開始することをお勧めします (これはディスパッチャになります)。ワーカー スレッドが完了すると、ビューに画像を提供するディスパッチャーに通知します。すべてのワーカー スレッドがビジーである (つまり、バッファに空きスロットがない) ときにカメラからフレームが送信されると、フレームはドロップされます。バッファ内のスペースが再び解放されると、
initialitzeCamera
の関数のコードJavaCameraView
を見て、NativeCameraView
これを行う方法のアイデアを得ることができます (これは、OpenCV を使用しないアプリでも同様に行う必要があるため、Google も役立つはずです)。私にとっては、ネイティブカメラのパフォーマンスが大幅に向上しています(重い処理をしなくても、はるかにスムーズです)が、ymmv ...
私自身はまだそれほど詳しくないので、実装に関する実際の詳細についてはお答えできません。ただし、これはいくつかのアイデアを提供します。