Android MediaCodec编码器 – 三星设备的奇怪结果

编辑:

似乎问题是这个设备不需要16个维度的多个…但是32个的多个。事实是,我仍然不知道如何确定什么量化为有问题的设备。 这似乎使用qcom(我已经看到在Android 4.X上有问题,但这是Android 5.1.1)。


我正在Android应用中编码video。 我正在使用Android MediaCodec这样做,将每帧的RGB转换为YUV并传入像素。

我使用的代码已经存在了一段时间,并且适用于我遇到过的任何设备。

一位用户带着一个错误报告来找我,他们的MP4很奇怪。 该设备是三星T337A (Galaxy Tab 4)。

以下是MP4导出的样子:

在此处输入图像描述

注 – 出于任何奇怪的原因,它不会在所有分辨率下发生。 它确认发生在768×432和1280×720,但不会发生在640×352(例如我的应用程序确保所有分辨率都可以被16整除)。

Nexus 5X (使用相同的半平面YUV格式)上,输出适用于所有分辨率。

所以这是设备的东西,也许是其他我不知道的设备?


我查看了所有输出,它看起来正常并且与我上面提到的Nexus 5X相同(它在100%的时间都有效)。

正在使用的MediaCodecInfo是OMX.qcom.video.encoder.avc,使用的颜色格式是2135033992(这是COLOR_FormatYUV420Flexible )。 所以基本上没什么奇怪的。

代码有点广泛,我会在必要时发布,但只是寻找为什么会发生这种情况的一般想法。 我知道它是否更常见,但相同的代码适用于大量其他设​​备,所以一些时髦的东西正在发生……

确保使用正确的步幅和缓冲偏移值