ImageReader의 OnImageAvailableListener함수에서 onImageAvailable안에서 이미지 데이터를 받아와서 직접 처리하고 싶은데 onImageAvailable 함수가 호출이 안되는것 같아서 질문드립니다..
앱 실행하고 카메라 preview까지는 잘 출력하는데 어떻게 해야 onImageAvailable 함수를 호출할 수 있을까요??
private void showCameraPreview() {
try {
SurfaceTexture texture = mTextureView.getSurfaceTexture();
texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
Surface textureViewSurface = new Surface(texture);
mCaptureRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mCaptureRequestBuilder.addTarget(textureViewSurface);
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
mImageReaderPreview = ImageReader.newInstance(mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.YUV_420_888, 10);
final ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Log.e("ImageReader", "onImageAvailable");
Image mImage = reader.acquireNextImage();
// if(mImage == null) return;
// convertYUV420888ToNV21(mImage);
// mFrameProcessor.setNextFrame(convertYUV420888ToNV21(mImage));
mImage.close();
}
};
mImageReaderPreview.setOnImageAvailableListener(readerListener, null);
// final CameraCaptureSession.CaptureCallback captureListener = new CameraCaptureSession.CaptureCallback() {
// @Override
// public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) {
// super.onCaptureCompleted(session, request, result);
// Log.e("captureListener", "onCaptureCompleted");
// }
// };
mCamera.createCaptureSession(Arrays.asList(textureViewSurface, mImageReaderPreview.getSurface()), new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
try {
mCameraSession = cameraCaptureSession;
// mCameraSession.setRepeatingRequest(mCaptureRequestBuilder.build(), captureListener, null);
mCameraSession.setRepeatingRequest(mCaptureRequestBuilder.build(), null, null);
} catch (CameraAccessException e) {
Log.e("tag", "MMM onConfigured", e);
}
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
Log.e("tag", "MMM onConfigureFailed");
}
}, null);
} catch (CameraAccessException e) {
Log.e("tag", "MMM showCameraPreview ", e);
}
}