我有一个H264流,使用Android MediaCodec进行解码。当我查询输出MediaFormat时,颜色格式为2141391875.显然,这是一种称为HAL_PIXEL_FORMAT_NV12_ADRENO_TILED的专用NV12变体。这是在Nexus 7(2013)上。
我想获取这些数据并将其转换为RGB,这样我就可以创建一个Bitmap。我发现StackOverflow帖子用于将其他格式转换为RGB格式,而非此格式。我尝试过其他帖子中的代码,结果就是颜色条纹。 (要查看位图,我在与Surface关联的Canvas上绘制,以及将其写为JPEG - 在两种情况下看起来都相同。)
如何将此特定数据转换为RGB?
答案 0 :(得分:1)
2141391875十进制是十六进制的0x7FA30C03,根据this header file是OMX_QCOM_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka
。这与您找到的常量相同:这是专有的Qualcomm颜色格式。
最简单(也是最快)的转换方式是让OpenGL ES为您完成工作。请参阅示例ExtractMpegFramesTest,它将视频帧解码为SurfaceTexture,将纹理渲染到屏幕外表面,然后使用glReadPixels()
读取像素。 GLES驱动程序将为您处理RGB转换。
如果您想自己进行转换,则需要对颜色格式进行反向工程,或者找到已经这样做并且愿意分享的人。