标签:http ar sp for div on 代码 bs ef
大意了,每四行计算时,牵引错误,试试下面的代码吧,不过这种代码很有优化的余地书籍可以参考“视频技术手册”,上面有YUV422到YUV420采样转换的讲解
int YUV422To420(unsigned char *pYUV, unsigned int *yuv, int lWidth, int lHeight){ //spint 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[j]; pY[j+lWidth] = pYUVTempNext[j]; pY[j+lWidth*2] = pYUV2[j]; pY[j+lWidth*3] = pYUV3[j]; // U pU[j/2] = (3*pYUVTemp[j+1] + pYUV2[j+1])/4; pU[j/2+lWidth/2] = (pYUVTempNext[j+1] + 3*pYUV3[j+1])/4; // Y1 pY[j+1] = pYUVTemp[j+2]; pY[j+lWidth+1] = pYUVTempNext[j+2]; pY[j+lWidth*2+1] = pYUV2[j+2]; pY[j+lWidth*3+1] = pYUV3[j+2]; // V pV[j/2] = (3*pYUVTemp[j+3] + pYUV2[j+3])/4; pV[j/2+lWidth/2] = (pYUVTempNext[j+3] + 3*pYUV3[j+3])/4;
} // 分别加四行 pYUVTemp+=lWidth*2*4; pYUVTempNext+=lWidth*2*4; pYUV2+=lWidth*2*4; pYUV3+=lWidth*2*4; // Y加上四行 pY+=lWidth*4; // UV加两行 pU+=lWidth; pV+=lWidth; } return 1;}
http://bbs.csdn.net/topics/370045077
格式转换至yuv422转 yuv420
原文地址:http://www.cnblogs.com/pengkunfan/p/4102632.html