android - MediaCodec解码器1080p输出yuv格式

时间:2017-04-25 17:00:46

标签: android mediacodec

Android MediaCodec可用于解码输出yuv420格式。我想它应该是NV12格式,但是当我在Nexus6 7.1.1设备上试用它时。结果非常陌生:

  1. 对于720p视频,它工作正常,输出yuv可以通过ffplay用以下命令播放:

    ffplay -v info -f rawvideo -pixel_format yuv420p -video_size 1280x720 out.yuv

    out.yuv文件大小正好是width * height * 3/2。

  2. 对于1080p视频,输出yuv颜色顶部不正确。 out.yuv文件大小为3133440,但宽度*高度* 3/2应为3110400,因此另有23040字节。 听起来像顶层颜色不正确。

  3. enter image description here

    当尝试将其解码为表面时,它看起来不错。所以我猜问题只来自1080p YUV包。

1 个答案:

答案 0 :(得分:1)

对于1080p,实际解码图片的高度很可能是1920x1088,而不是1920x1080。 (1920x1088加起来大小为3133440.)最底部的8个像素被解码并返回,但你不应该显示它们。

在这种情况下,输出MediaFormat.KEY_HEIGHT中的MediaFormat字段可能为1088,而crop-top字段为0,crop-bottom为1079.请参阅{{3有关如何读取这些字段的示例。

正如beetlej建议的那样,如果你使用https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java#976方法收到的Image课程(从Android 5.0开始提供),这些细节将会得到处理。