使用Android camera2 API进行视频录制和图像处理的CaptureSessions
我正在构建一个摄像头应用程序(使用Camera2API),它可以处理三个任务。它在使用Android camera2 API进行视频录制和图像处理的CaptureSessions,android,image-processing,video,android-camera2,Android,Image Processing,Video,Android Camera2,我正在构建一个摄像头应用程序(使用Camera2API),它可以处理三个任务。它在纹理视图中预览当前图像,作为片段的一部分。其次,它将单个图像转发到第二个实例,该实例允许进一步处理(在本机JNI中使用JavaCV或openCV),最后记录并存储视频流 我从Camera2API的camera示例开始,该示例允许通过ImageReader保存图像,并扩展了在图像可用时处理单个图像的功能。 资料来源:, 对于录制,我已经了解了如何将相机数据馈送到MediaCodec或MediaRecorder过程中
纹理视图中预览当前图像,作为片段的一部分。其次,它将单个图像转发到第二个实例,该实例允许进一步处理(在本机JNI中使用JavaCV或openCV),最后记录并存储视频流
我从Camera2API的camera示例开始,该示例允许通过ImageReader保存图像,并扩展了在图像可用时处理单个图像的功能。
资料来源:,
对于录制,我已经了解了如何将相机数据馈送到MediaCodec
或MediaRecorder
过程中。现在让我困惑的是:
在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(){...});
你能找到最好的方法吗?我也在寻找类似的任务。目前计划使用ImageReader获取缓冲区,对其进行处理并将其提供给媒体编解码器。问题是字节缓冲区转换很费力。。对于每个新设备,我都必须验证转换。任何想法都会大有裨益