在我的Android应用程序中,我需要获取android.hardware.camera2返回的每个帧,使用它的数据进行处理,然后才将它显示在surfacetexture上。 这个问题与我的相似,但它对我没有帮助: Camera preview image data processing with Android L and Camera2 API
我试图从这里获取框架(如问题答案中所示):
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
= new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Log.d("Img", "onImageAvailable");
mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));
}
};
这没用,因为只有在用户执行图像捕获后才会调用回调。而且我只是在捕获时才需要它,我需要获得发送到camerapreview表面的每个帧。 我想知道,也许可以在这里采取远程(从纹理):
public void onSurfaceTextureUpdated(SurfaceTexture texture) {
Log.d("Img", "onSurfaceTextureUpdated");
}
如果是,怎么样?
我使用谷歌的这个样本作为基础:
答案 0 :(得分:0)
是的,你绝对可以通过相机回调获得缓冲区。您可以提供自己的纹理并在需要时更新它,甚至可以修改此缓冲区的像素数据。
你应该推送原作' SurfaceTexture(在createCaptureSession()中指定)在屏幕外,否则会干扰您的过滤/修改缓冲区。
这种方法的主要警告是,现在你有责任及时制作伪预览缓冲区。
答案 1 :(得分:0)
我也想做一些图像处理。我一直在github.com/googlesamples/android-Camera2Basic上编写代码,我相信mCaptureSession会将相机的管道重定向到预览纹理和捕获本身,但不能同时重定向。预览纹理由mCaptureSession.setRepeatingRequest'刷新',并且当在captureStillPicture()上触发'capture'时调用mOnImageAvailableListener,但如果禁用'预览纹理'并使用与'预览纹理相同的构建器设置重复请求'必须尝试调用mOnImageAvailableListener它才行不通。还有其他人一直在努力吗?任何启示?