Android视频采集编码颜色格式选择

来源:互联网 发布:网络借钱最快的地方 编辑:程序博客网 时间:2024/04/29 04:57

Android视频采集编码颜色格式选择

ps:在Android平台通过Camera PreviewCallback预览帧回调的方式采集视频,并通过MediaCodec进行h264编码的时候,camera的setPreviewFormat的预览格式设置,和MediaCodec编码时需要设置MediaFormat的MediaFormat.KEY_COLOR_FORMAT的格式的对应关系的设置。

1.请参考以下链接,首先了解YUV420P,YUV420SP,NV21,YV12这些基本的颜色格式

YUV格式详解 http://blog.csdn.net/SearchSun/article/details/2443867
图文详解YUV420数据格式 http://blog.csdn.net/a656343072/article/details/9979347
android CodecCapabilities 图像格式 http://www.2cto.com/kf/201403/287429.html
android CodecCapabilities 图像格式 http://blog.csdn.net/jumper511/article/details/21719313

2.基本配置

        m_camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);Camera.Parameters parameters = m_camera.getParameters();        parameters.setPreviewSize(width, height);          parameters.setPictureSize(width, height);         //预览格式决定预览回调里的数据格式,5.0以下通常有2种 NV21和 YV12        parameters.setPreviewFormat(ImageFormat.NV21);







3.根据以上格式,我们知道我们预览格式如何转换以适应MediaCodec编码的需要

1>.如果我们预览格式设置为NV21,我们知道NV21的数据格式为2个planar,也就是两个平面,第一个平面是素有的Y分量,而第二个平面是V和U交错平面,并且是V在U前 ,在字节数组中是这样的结构:  YYYYYYYY VUVU

2>.如果预览数据格式设置为YV12,我们知道YV12为3个平面,第一个平面是所有的Y,第二个平面为所有的V,第三个平面为所有的U,在字节数组中是这样的结构: YYYYYYYY  VV  UU

3>. Android COLOR_FormatYUV420Planar   即YUV420P,也就是说它要求的传给编码器的数据格式为: YYYYYYYY UU VV

4>.Android COLOR_FormatYUV420SemiPlanar 即YUV420SP,它要求传给编码器的数据格式为: YYYYYYYY UVUV

★.如果预览格式设置为NV21,那么在MediaCodec中设置编码格式,如果编码器支持颜色格式COLOR_FormatYUV420SemiPlanar,这两个格式都是半平面也就  是有两个平面,第一个平面是所有的Y分量,第二个平面NV21为VUVU,而 COLOR_FormatYUV420SemiPlanar 为UVUV,也就是说如果预览格式为NV21,编码颜色格式为COLOR_FormatYUV420SemiPlanar,我们在预览数据需要给编码器编码的时候,需要转换NV21第二个平面里V和U的位置:

NV21(yyyyyyyy vuvu) ----------> COLOR_FormatYUV420SemiPlanar  (yyyyyyyy uvuv)

这样编码才能编码出正确的颜色

★.如果预览格式设置为YV12,编码器颜色格式  COLOR_FormatYUV420Planar,这两个格式都是平面模式,都包含三个平面,第一个平面都是所有的分量Y,  YV12的第二个平面为所有的分量V,第三个平面为所有分量U,而YUV420P的第二个平面为所有分量U,第三个平面为所有分量V.所有如果我们采用的YV12预览,编码器颜色格式为  COLOR_FormatYUV420Planar,我们需要交换预览数据里YV12的第二个平面V和第三个平面U的位置:


YV12(yyyyyyyy vv uu)  ---------->  COLOR_FormatYUV420Planar (yyyyyyyy uu vv)

★.以上仅适用与Android4.4及以下,Android 5.0及以上有新的颜色格式,请使用新的API 颜色格式,将不会那么麻烦。
0 0
原创粉丝点击