是的,OMX.qcom.video.encoder.avc 可以做到这一点,但不是在所有设备/android 版本上。在我的带有 Android 4.3 的 Nexus 4 上,编码器工作正常,但在我的 S3 上却不行(运行 4.1)
使用 OMX.qcom.video.encoder.avc(似乎某些 S3 有另一个编码器)运行 4.1 的 S3 的解决方案是在色度窗格之前添加 1024 个字节。
// The encoder may need some padding before the Chroma pane
int padding = 1024;
if ((mWidth==640 && mHeight==480) || mWidth==1280 && mHeight==720) padding = 0;
// Interleave the U and V channel
System.arraycopy(buffer, 0, tmp, 0, mYSize); // Y
for (i = 0; i < mUVSize; i++) {
tmp[mYSize + i*2 + padding] = buffer[mYSize + i + mUVSize]; // Cb (U)
tmp[mYSize + i*2+1 + padding] = buffer[mYSize + i]; // Cr (V)
}
return tmp;
相机使用 YV12 和编码器 COLOR_FormatYUV420SemiPlanar。
您的快照显示了与我相同的人工制品,对于某些分辨率,您可能需要类似的 hack,可能还有另一个填充长度
您还应该避免分辨率不是 16 的倍数,即使显然是 4.3 ( http://code.google.com/p/android/issues/detail?id=37769 )!