YV12 与 I420是有区别的。具体区别见上一篇。

YV12 : 亮度(行×列) + U(行×列/4) + V(行×列/4)
I420 : 亮度(行×列) + V(行×列/4) + U(行×列/4)

 

如果用I420的解析器播放YV12格式的文件的话,会产生偏蓝的问题。 x264仅支持I420的压缩。

YUY2 =  YUYV(命名太不规范).

 

 

YUY2转换成I420的方法如下,测试通过。

 

#define uint8_t BYTE
    void YUY2toI420(int inWidth, int inHeight, uint8_t *pSrc, uint8_t *pDest)
    {
        int i, j;
        uint8_t *u = pDest + (inWidth * inHeight);
        uint8_t *v = u + (inWidth * inHeight) / 4;

        for (i = 0; i < inHeight/2; i++)
        {

            uint8_t *src_l1 = pSrc + inWidth*2*2*i;
            uint8_t *src_l2 = src_l1 + inWidth*2;
            uint8_t *y_l1 = pDest + inWidth*2*i;
            uint8_t *y_l2 = y_l1 + inWidth;
            for (j = 0; j < inWidth/2; j++)
            {
                // two pels in one go
                *y_l1++ = src_l1[0];
                *u++ = src_l1[1];
                *y_l1++ = src_l1[2];
                *v++ = src_l1[3];
                *y_l2++ = src_l2[0];
                *y_l2++ = src_l2[2];
                src_l1 += 4;
                src_l2 += 4;
            }
        }
    }
Posted on 2012-04-17 11:05  我不是牛人  阅读(2270)  评论(0编辑  收藏  举报