所有手机是否都支持h.264编码器中的YUV 420(半)平面彩色格式?

时间:2015-06-16 01:50:14

标签: android mediacodec yuv encoder

Preambule:这可能听起来像是一个非常具体的问题,但实际上这是使用与Android兼容的MediaCodec 16+ h.264应用程序来实现的。电话。

我有一个MediaCodec Encoder的应用程序,它从缓冲区接收数据 - 而不是表面,因为我对图像进行了大量的操作。在创建NV12时,我会遍历手机中可能的编码器列表,以确保我使用专有的编码器(如果有的话)。这部分不是问题。

问题是每个编码器都有其颜色格式首选项。这可能导致在编码之前进行颜色格式转换。例如,在我的概念验证中,我包含了转换为NV21YV12h.264的方法,以及遵循非常严格的规则,例如放置某些平面的开头/交错平面在缓冲区中的精确偏移处等。只是能够使编码视频看起来很好可能是一个很长的故事。

所以,如果我确定在编码器接受的Android MediaCodec {{1}}中有一个标准,那么这将限制我为获取API 16而必须做的自定义量MediaCodec概念验证适用于所有设备。

[编辑]

喔。我刚刚看到在Android 18之前创建输入表面是不可能的。我将不得不依赖于检测每种情况下的专有编解码器和颜色格式,随机崩溃,慢速FPS等.Bwe ...有点在2017年或2018年,将有足够的具有相关API功能的设备使用MediaCodec编写一个不错的应用程序。

1 个答案:

答案 0 :(得分:2)

真正简短的回答是:否。

从Android 4.3开始,有一个CTS测试可以验证设备是支持420平面输入还是420半平面输入 - 最重要的是,它会以与其他设备相同的方式解释它。

在实践中,Android 4.1中的大多数设备都支持某种形式的平面或半平面,但是需要解决许多怪癖,这些怪怪特定于不同的设备和芯片组。一些编码器(一组三星Exynos设备)宣传semiplanar但是用与其他设备(和参考)相比交换的色度分量来解释它。一些编码器(也是三星Exynos)广告平面,但将其解释为专有的平铺格式(或崩溃)。一些编码器(Qualcomm)假设亮度和色度平面之间有额外的对齐。

有关您可能遇到的问题的详细信息,请参阅https://code.google.com/p/android/issues/detail?id=37769。实际上,您可以在大量设备上使用它,但是您需要或多或少地对每台设备进行验证,并为每台设备启用不同的怪异解决方法。

相关问题