YUV422To420

int YUV422To420(unsigned char *pYUV, unsigned int *yuv, int lWidth, int lHeight)
{        
int i,j;
unsigned int *pY = yuv;
unsigned int *pU = yuv + lWidth*lHeight;
unsigned int *pV = pU + (lWidth*lHeight)/4;

unsigned char *pYUVTemp = pYUV;
unsigned char *pYUVTempNext = pYUV+lWidth*2;
unsigned char *pYUV2 = pYUVTempNext + lWidth*2;
unsigned char *pYUV3 = pYUVTempNext + lWidth*4;
        
 for(i=0; i<lHeight; i+=4)
 {
    for(j=0; j<lWidth; j+=4)
     {
         // Y0
         pY[j] = *pYUVTemp++;
         pY[j+lWidth] = *pYUVTempNext++;
         pY[j+lWidth*2] = *pYUV2++;
         pY[j+lWidth*3] = *pYUV3++;
         // U
         pU[j/2] = (3*pYUVTemp[j] + pYUV2[j])/4;
         pU[j/2+lWidth/2] = (pYUVTempNext[j] + 3*pYUV3[j])/4;
         // Y1
         pY[j+1] = *pYUVTemp++;
         pY[j+lWidth+1] = *pYUVTempNext++;
         pY[j+lWidth*2+1] = *pYUV2++;
         pY[j+lWidth*3+1] = *pYUV3++;
         // V
         pV[j/2] = (3*pYUVTemp[j] + pYUV2[j])/4;
         pV[j/2+lWidth/2] = (pYUVTempNext[j] + 3*pYUV3[j])/4;

     }
       pYUVTemp+=lWidth*2*4;
       pYUVTempNext+=lWidth*2*4;
       pYUV2+=lWidth*2*4;
       pYUV3+=lWidth*2*4;
       pY+=lWidth*4;
       pU+=lWidth;
       pV+=lWidth;
   }
        
       return 1;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值