有关此主题的一些相关问题和讨论:
在运行Android 4.2.2的Sony Xperia ZR上,我必须添加Y平面对齐,以使其在几乎所有分辨率上正常工作。上面的代码添加了1024字节宽度不能被32整除和2048字节对齐的其他分辨率。这使得MediaCodec可以为所有可以被16整除的分辨率正确编码帧(除了176x144之外,其中UV平面看起来错位)。
- Mediacodec和相机,颜色空间不正确
- 通过MediaCodec API使QualComm编码器正常工作
- https://groups.google.com/d/msg/android-platform/awaNwgb6EbY/a-YiIOwaL0QJ
- https://code.google.com/p/android/issues/detail?id=37769
在运行Android 4.2.2的Sony Xperia ZR上,我必须添加Y平面对齐,以使其在几乎所有分辨率上正常工作。上面的代码添加了1024字节宽度不能被32整除和2048字节对齐的其他分辨率。这使得MediaCodec可以为所有可以被16整除的分辨率正确编码帧(除了176x144之外,其中UV平面看起来错位)。
int getYPadding() {
if (mediaCodecInfo.getName().contains("OMX.qcom") && android.os.Build.VERSION.SDK_INT < 18) {
if ((getWidth() % 32) != 0) {
return (getWidth()*getHeight()) % 1024;
} else {
return (getWidth()*getHeight()) % 2048;
}
}
return 0;
}
我尝试在运行相同的 Android 4.2.2
并使用 QualComm
编码器的 LG G2
上测试这个对齐方式,但似乎它不能正确工作。 UV
平面未对齐(帧底部有一个绿色条纹)。我无法计算适用于两种手机的填充。
我还可以访问运行 Android 4.3
的 Sony Xperia Z1
,采用了 QualComm
芯片组,看起来它没有这样的问题。每个分辨率的视频都很好,Y
平面无需任何对齐。
我知道这与硬件有关,可能很复杂,但由于我必须支持运行 Android 版本低于 4.3
的用户,所以我有一个问题。是否有可能通过程序确定编码器针对给定颜色格式期望的 Y
平面对齐和垂直/水平步幅值?
Sony Xperia ZR
的所有分辨率上正常工作了。在LG G2
上仍然有一些问题,但我想我会将其整理成一个单独的问题,并附上一些截图。 - Andrey Chernih