YUV422显示视频格式解释

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值