#define CLIPVALUE(x, minValue, maxValue) ((x) < (minValue) ? (minValue) : ((x) > (maxValue) ? (maxValue) : (x)))
#define YUVToR(Y, U, V) ( (Y) + 1.4075 * ((V) - 128) )
#define YUVToG(Y, U, V) ( (Y) - 0.3455 * ((U) - 128) - 0.7169 * ((V) - 128) )
#define YUVToB(Y, U, V) ( (Y) + 1.779 * ((U) - 128) )bool MyVideo::yuv422torgb(unsigned char *rgbImageData, unsigned char *yuvImageData, short width, short height)
{if (yuvImageData == NULL){return -1;}if (rgbImageData == NULL){rgbImageData = (unsigned char*)malloc(width * height * 3);}int y, u, v;int frame_size = width * height;for (int j = 0; j < height; j++){unsigned char* pRGB = rgbImageData + j * width * 3;unsigned char* pY = yuvImageData + j * width;unsigned char* pU = yuvImageData + frame_size + (j >> 1) * width;unsigned char* pV = pU + (frame_size >> 1);for (int i = 0; i < width; i++){y = *(pY + i);u = *(pU + (i >> 1));v = *(pV + (i >> 1));*(pRGB) = CLIPVALUE(YUVToB(y, u, v), 0, 255);*(pRGB + 1) = CLIPVALUE(YUVToG(y, u, v), 0, 255);*(pRGB + 2) = CLIPVALUE(YUVToR(y, u, v), 0, 255);pRGB += 3;}}return 0;
}