如何从MediaCodec获得解码格式



我正在使用MediaCodec

我正在使用它来解码.mp4视频

MediaCodec将视频解码为YUV格式,但我需要获取RGBA

一切都可以,但是我发现有几种可能的格式,例如YUV420YUV422等...

所以,据我了解,我需要确切知道要应用哪种转换YUV420_to_RGBAYUV422_to_RGBA或其他内容...

所以,问题是 - 使用MediaCodec如何了解解码格式?

随时提出。

编辑

我发现这种方式可以获得COLOR_FORMAT

 AMediaFormat_getInt32(format, AMEDIAFORMAT_KEY_COLOR_FORMAT, &format_color);

但是,我得到了117 ...

如何知道这个数字等于什么?

感谢@fadden最终我发现了问题,我尝试从不正确的AMediaFormat ...

获得AMEDIAFORMAT_KEY_COLOR_FORMAT

就像这个不正确

AMediaFormat *format = AMediaExtractor_getTrackFormat(ex, i);
int format_color;
AMediaFormat_getInt32(format, AMEDIAFORMAT_KEY_COLOR_FORMAT, &format_color);

这里format_color117-有些无效值...

获得AMEDIAFORMAT_KEY_COLOR_FORMAT的正确方法是

AMediaCodec *codec = AMediaCodec_createDecoderByType(mime);
AMediaCodec_configure(codec, format, nullptr, nullptr, 0);
AMediaCodec_start(codec);
int format_color;
auto format = AMediaCodec_getOutputFormat(codec);
AMediaFormat_getInt32(format, AMEDIAFORMAT_KEY_COLOR_FORMAT, &format_color);

在这里 format_color = 21根据此https://develveper.android.com/reference/Randroid/Media/mediacodecinfo.codeccapabilities.html 21 is COLOR_FormatYUV422Flexible

最新更新