Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Android camera2 API进行视频录制和图像处理的CaptureSessions_Android_Image Processing_Video_Android Camera2 - Fatal编程技术网

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

使用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过程中

我正在构建一个摄像头应用程序(使用Camera2API),它可以处理三个任务。它在
纹理视图中预览当前图像,作为
片段的一部分。其次,它将单个图像转发到第二个实例,该实例允许进一步处理(在本机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获取缓冲区,对其进行处理并将其提供给媒体编解码器。问题是字节缓冲区转换很费力。。对于每个新设备,我都必须验证转换。任何想法都会大有裨益