MediaCodec和ImageReader

时间:2017-10-20 12:07:02

标签: android mediacodec

我想访问视频的YUV图像,并将ImageReader表面传递给MediaCodec (as refered in the documentation)看起来像一个非常聪明的方法。但是,我无法理解onImageAvailable回调提供的Image实例中的数据。只要看看它的Y平面,无论我提供什么视频,它看起来都是0值。 我读了一些看起来有点老的@fadden评论,指的是ImageReader表面还没有用于MediaCodec,这是否仍然如此?有没有人成功地将ImageCodec解码实现到ImageReader表面解决方案?

为了说明这一点,我正在为Y飞机跳这样:

Good Y Plane

它出现了:

Bad Y Plane

感谢您的任何指示

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。就我而言,这是因为我没有指定MediaCodec输出与ImageReader相同格式的图像。

        int imageFormat = ImageFormat.YUV_420_888;

        mImageReader = ImageReader.newInstance(
                videoFormat.getInteger(MediaFormat.KEY_WIDTH),
                videoFormat.getInteger(MediaFormat.KEY_HEIGHT),
                imageFormat,
                3
        );
        // I add the following line of code.
        videoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Flexible);
        // Then initialize the MediaCodec with videoFormat.