将专用NV12视频帧转换为RGB

时间:2015-02-20 02:37:14

标签: android bitmap rgb mediacodec

我有一个H264流,使用Android MediaCodec进行解码。当我查询输出MediaFormat时,颜色格式为2141391875.显然,这是一种称为HAL_PIXEL_FORMAT_NV12_ADRENO_TILED的专用NV12变体。这是在Nexus 7(2013)上。

我想获取这些数据并将其转换为RGB,这样我就可以创建一个Bitmap。我发现StackOverflow帖子用于将其他格式转换为RGB格式,而非此格式。我尝试过其他帖子中的代码,结果就是颜色条纹。 (要查看位图,我在与Surface关联的Canvas上绘制,以及将其写为JPEG - 在两种情况下看起来都相同。)

如何将此特定数据转换为RGB?

1 个答案:

答案 0 :(得分:1)

2141391875十进制是十六进制的0x7FA30C03,根据this header fileOMX_QCOM_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka。这与您找到的常量相同:这是专有的Qualcomm颜色格式。

最简单(也是最快)的转换方式是让OpenGL ES为您完成工作。请参阅示例ExtractMpegFramesTest,它将视频帧解码为SurfaceTexture,将纹理渲染到屏幕外表面,然后使用glReadPixels()读取像素。 GLES驱动程序将为您处理RGB转换。

如果您想自己进行转换,则需要对颜色格式进行反向工程,或者找到已经这样做并且愿意分享的人。