使用Android camera2 API进行视频录制和图像处理的CaptureSessions

时间:2017-09-20 21:25:24

标签: android image-processing video android-camera2

我正在构建一个处理三项任务的相机应用程序(使用camera2 api)。它会预览TextureView中的当前图片,作为Fragment的一部分。其次,它将单个图像转发到允许进一步处理的第二个实例(在本机JNI中使用JavaCV或openCV),最后它记录并存储视频流。

我开始使用camera2 API的相机示例,该示例允许通过ImageReader保存图像,并在单个图像可用时扩展处理单个图像的功能。 资料来源:Camera2BasicImageReader onAvailable processing

对于录制内容,我已阅读有关如何将相机数据输入MediaCodecMediaRecorder进程的信息。让我困惑的是以下内容:

在没有经常复制数据的情况下,camera2管理这些任务(单个图像处理,视频录制)的内存的最有效方法是什么。 API是否希望开发人员向previewRequestBuilder添加更多目标以及捕获会话的表面,或者是否优先使用单个线程管道来处理图像并将其存储在Bytebuffer中,以保留所有帧视频?

mRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);

// This is the output Surface 
Surface surface = new Surface(texture);
Surface mImageSurface = mImageReader.getSurface();

// Add the new target to CaptureRequest.Builder
mRequestBuilder.addTarget(surface);  // preview in TextureView
mRequestBuilder.addTarget(mImageSurface); // used for image processing
// TODO: need video recording target or usage of 
//       one target for image processing and video recording?

// Here, we create a CameraCaptureSession for camera preview.
mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageSurface), new CameraCaptureSession.StateCallback(){...});

0 个答案:

没有答案