カメラフレームをプレビューモードにしようとしています。 githubからサンプルプロジェクトを実行しています https://github.com/googlesamples/Android-Camera2Basic
私が抱えている問題は、フレームをプレビューモードにすることです。
コードは次のとおりです。
private CameraCaptureSession.CaptureCallback mCaptureCallback = new CameraCaptureSession.CaptureCallback() {
private void process(CaptureResult result) {
switch (mState) {
case STATE_PREVIEW: {
//HERE, HOW CAN I RETRIEVE THE CURRENT FRAME?
break;
}
case STATE_WAITING_LOCK: {
...
break;
}
case STATE_WAITING_PRECAPTURE: {
...
break;
}
case STATE_WAITING_NON_PRECAPTURE: {
...
break;
}
}
}
フレームを取得しようとしたもう1つのことは、mImageReader.setOnImageAvailableListenerを設定することです。フレームのonImageAvailableコールバックを取得できると期待していましたが、onImageAvailableが呼び出されることはありません。 onPreviewFrameは私自身のメソッドであり、現在のフレームを渡す必要があります。
mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), ImageFormat.JPEG, /*maxImages*/2);
mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, mBackgroundHandler);
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
mTextureView.onPreviewFrame(reader.acquireNextImage().getPlanes([0].getBuffer().array());
}
};
私が間違っていることは何ですか?ありがとう。
CameraCaptureSession.setRepeatingRequest()
メソッドに送信されたCaptureRequest
がImageReader
のSurface
をリストしなかったため、プレビューフレームが使用可能な場合、OnImageAvailableListener.onImageAvailable
コールバックが呼び出されることはありません。出力ターゲット。
カメラにリクエストを送信するときに、各キャプチャのデータを送信する出力Surface
s(基本的には生のバイトバッファ)を特定します。したがって、「プレビューフレーム」を取得してonImageAvailable()
コールバックをトリガーし、onPreviewFrame()
メソッドに送信するには、次の行を追加するだけです。
mPreviewRequestBuilder.addTarget(mImageReader.getSurface());
この行は、同じリクエストビルダーにSurfaceTexture
のSurface
を追加する他の同様の行の後に、e.g。を続けることができます。
これにより、すべてのプレビューフレームが関数に送信され、キャプチャボタンからの「出力フレーム」も送信されることに注意してください。 onImageAvailable()
コールバックのコードで区別したい場合があります。