YUV422显示视频格式解释

来源:互联网 发布:mysql初始化root密码 编辑:程序博客网 时间:2024/06/05 17:41

H.264编码器输入要YUV420,而解码器解码之后显示一般又要YUV422,并且视频采集芯片输出往往也是YUV422,下面以我一个实际使用为例说一下YUV422格式:

/* YUV4:2:2格式(这是初始化背景为纯色,所以用了同一个Y) *//* Black color in UYVY format */#define UYVY_BLACK/*Y Cr Y Cb*/ 0x10801080/*black*/ /*blue:0x286e28ef red:0x51ef515b green:0x90239036/*//* DM6446中的测试代码,整个宏像素赋值 */    for (bufIdx=0; bufIdx < NUM_DISPLAY_BUFS; bufIdx++) {        /* Clear the video buffer */        buf = (unsigned int *) virtDisplays[bufIdx];        for (i=0; i < displaySize / sizeof(unsigned int); i++) {            buf[i] = UYVY_BLACK;        }        /* Translate the virtual address to physical as resizer needs this */        physDisplays[bufIdx] = Memory_getPhysicalAddress(virtDisplays[bufIdx]);        DBG("virtDisplays[%d] LA:%#lx PA:%#lx\n",            bufIdx, (unsigned long) virtDisplays[bufIdx], physDisplays[bufIdx]);    }

可以看到YUV422存储顺序为Y Cr Y Cb Y Cr Y Cb Y Cr Y Cb……,Y是全部保留,而Cr,Cb则是在一行中交替采样,而不像YUV420,一行采样 Cb,下一行采用Cr。注意区别。
这里写图片描述
再说一下上面YCbCr的由来,是通过RGB转化的,具体代码如下:

RGB -> YCbCr代码void rgb2ycbcr(unsigned char r,unsigned char g,unsigned char b){    unsigned char ycbcr_res[3];     ycbcr_res[0]= (unsigned char)(r * 0.256789 + g * 0.504129 + b * 0.097906)+ 16;       ycbcr_res[1]= (unsigned char)(r *-0.148223 + g * -0.290992 + b * 0.439215)+ 128;      ycbcr_res[2]= (unsigned char)(r * 0.439215 + g * -0.367789 + b *-0.071426)+ 128;}

代码测试
这里写图片描述

0 0
原创粉丝点击