如果有的话,MediaCodec编码器(I420,NV12,Planar,Semi-Planar等)的差异是什么?

时间:2015-04-13 19:56:42

标签: android mediacodec renderscript mediamuxer

参考此页:http://bigflake.com/mediacodec/

A5。摄像机输出和MediaCodec编码器输入的颜色格式不同。相机支持YV12(平面YUV 4:2:0)和NV21(半平面YUV 4:2:0)。 MediaCodec编码器支持以下一项或多项:

#19 COLOR_FormatYUV420Planar(I420)

#20 COLOR_FormatYUV420PackedPlanar(也是I420)

#21 COLOR_FormatYUV420SemiPlanar(NV12)

#39 COLOR_FormatYUV420PackedSemiPlanar(也是NV12)

#0x7f000100 COLOR_TI_FormatYUV420PackedSemiPlanar(也是NV12)

在我的应用程序中,我正在以YUY2格式从外部摄像头捕获帧,将它们转换为可用格式,然后将它们提供给MediaMuxer。

根据我在此处阅读的内容,这意味着我需要查询设备支持MediaCodecInfo.CodeCapabilities的内容。然后,基于此,执行从YUY2到适当格式的转换。至少这是我的理解。

在编解码器格式的海洋中,我不确定它们之间的差异以及我是否需要在我的应用程序中考虑所有这些。如果是这样,我需要知道这些格式的字节布局。我已经填写了我认为正确的那些。从顶部开始向下移动:

FormatYUV420Planar - YYYY YYYY UU VV

FormatYUVPackedPlanar - ???

FormatYUV420SemiPlanar - YYYY YYYY VU VU

FormatYUV420PackedSemiPlanar - ???

COLOR_TI_FormatYUV420PackedSemiPlanar - ???

1 个答案:

答案 0 :(得分:3)

打包格式是指所有3个组件在一个平面中打包在一起的格式。有关视觉管道中广泛使用的不同颜色格式的更多信息,请参阅以下链接。

  1. fourcc

  2. videoLan

  3. Microsoft

  4. 对于COLOR_TI_FormatYUV420PackedSemiPlanar,我建议将ColorConverter中的颜色转换功能称为here。它与YUV420SemiPlanar类似,但在数据采集方式上有一些特定的差异。