如何使用MediaCodec编码器获取RGB颜色格式帧

时间:2014-07-12 18:35:31

标签: android opencv colors video-processing mediacodec

我使用Android的MediaCodec API使用以下代码创建了一个编码器:

MediaFormat mMediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);
            mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitrate);
            mMediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
            mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,     MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
            mMediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10);
            Log.i(TAG, "Starting encoder");
            encoder = MediaCodec.createByCodecName(Utils.selectCodec("video/avc").getName());
            encoder.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
            Surface surface = encoder.createInputSurface();
            encoder.start();

我正在使用createInputSurface()将输入传递给编码器。问题是我想在后续调用dequeueOutputBuffer()时想要RGB颜色格式帧,但是因为我已经将颜色格式设置为MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface所以我想我没有得到RGB帧。我需要将这些帧传递给OpenCv进行图像处理。 有没有办法从dequeueOutputBuffer()获得RGB帧?

注意:在配置编码器时我无法将RGB设置为颜色格式,因为它不受支持。

1 个答案:

答案 0 :(得分:1)

编码器的输出是AVC编码的帧。它不是RGB或YUV,而是AVC。

颜色格式指定了进入编码器的帧的格式,而不是来自 out 的帧,因此它不会影响你从{ {1}}。

如果您需要操作原始帧,则应在将它们传递到编码器之前执行此操作。