获取每个android.hardware.camera2帧的数据,然后在surfacetexture上显示

时间:2015-07-05 11:39:37

标签: android image-processing android-camera android-5.0-lollipop

在我的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");

        }

如果是,怎么样?

我使用谷歌的这个样本作为基础:

https://github.com/googlesamples/android-Camera2Basic

2 个答案:

答案 0 :(得分:0)

是的,你绝对可以通过相机回调获得缓冲区。您可以提供自己的纹理并在需要时更新它,甚至可以修改此缓冲区的像素数据。

你应该推送原作' SurfaceTexture(在createCaptureSession()中指定)在屏幕外,否则会干扰您的过滤/修改缓冲区。

这种方法的主要警告是,现在你有责任及时制作伪预览缓冲区。

答案 1 :(得分:0)

我也想做一些图像处理。我一直在github.com/googlesamples/android-Camera2Basic上编写代码,我相信mCaptureSession会将相机的管道重定向到预览纹理和捕获本身,但不能同时重定向。预览纹理由mCaptureSession.setRepeatingRequest'刷新',并且当在captureStillPicture()上触发'capture'时调用mOnImageAvailableListener,但如果禁用'预览纹理'并使用与'预览纹理相同的构建器设置重复请求'必须尝试调用mOnImageAvailableListener它才行不通。还有其他人一直在努力吗?任何启示?