关于这个主题有一些相关的问题和讨论:
- 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
我正在将相机预览帧(NV21
转换为NV12
)提供给MediaCodec
编码器(NV12
又名COLOR_FormatYUV420SemiPlanar
)。QualComm
在一些运行 Android 版本的带有编码器的设备上,4.3
我必须进行一些输入帧处理才能接收正确颜色的回帧。
在Sony Xperia ZR
运行时,Android 4.2.2
我必须添加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;
}
我已尝试测试此对齐方式,该对齐方式LG G2
运行相同Android 4.2.2
且具有QualComm
编码器,但看起来它无法正常工作。UV
平面未对齐(框架底部的绿色条纹)。我无法计算适用于两部手机的填充。
我也可以使用芯片组Sony Xperia Z1
运行,看起来它没有这样的问题。每种分辨率的视频看起来都很好,并且无论如何都不需要对齐平面。Android 4.3
QualComm
Y
我知道它与硬件相关并且可能很复杂,但是因为在4.3
我有问题之前我必须支持运行 Android 的用户。是否可以以编程方式确定Y
编码器期望给定颜色格式的平面对齐和垂直/水平步幅值?