typedef struct tagTABLE_YUV2RGB
{
unsigned short YtoR[256];
unsigned short YtoG[256];
unsigned short YtoB[256];
unsigned short UtoG[256];
unsigned short UtoB[256];
unsigned short VtoR[256];
unsigned short VtoG[256];
}TABLE_YUV2RGB; it
TABLE_YUV2RGB table_yuv2rgb; table
void Init()
{
for (long j = 0; j < 256; ++j)
{
table_yuv2rgb.YtoR[j] = table_yuv2rgb.YtoG[j]
= table_yuv2rgb.YtoB[j] = (unsigned short)(j << 7);
table_yuv2rgb.VtoR[j] = j * 180;
table_yuv2rgb.VtoG[j] = j * 91;
table_yuv2rgb.UtoG[j] = j * 44;
table_yuv2rgb.UtoB[j] = j * 226;
}
}tab
void ConvertYUY2toRGB24(BYTE* pDst, BYTE* pSrc, int w, int h)
{
long m = 0;
long k = 0;
int n=w/2;
int dec=w*4;
int tmpR0 = 0;
int tmpG0 = 0;
int tmpB0 = 0;
int tmpR1 = 0;
int tmpG1 = 0;
int tmpB1 = 0;
k=(h-1)*w<<1;
for( int i=h-1;i>-1;i--)
{
for(int j=0;j<n;j++)
{
tmpR0 = (table_yuv2rgb.YtoR[pSrc[k + 0]] + table_yuv2rgb.VtoR[pSrc[k + 3]] - 22906) >> 7;
tmpG0 = (table_yuv2rgb.YtoG[pSrc[k + 0]] - table_yuv2rgb.VtoG[pSrc[k + 3]] - table_yuv2rgb.UtoG[pSrc[k + 1]] + 17264) >> 7;
tmpB0 = (table_yuv2rgb.YtoB[pSrc[k + 0]] + table_yuv2rgb.UtoB[pSrc[k + 1]] - 28928) >> 7;
tmpR1 = (table_yuv2rgb.YtoR[pSrc[k + 2]] + table_yuv2rgb.VtoR[pSrc[k + 3]] - 22906) >> 7;
tmpG1 = (table_yuv2rgb.YtoG[pSrc[k + 2]] - table_yuv2rgb.VtoG[pSrc[k + 3]] - table_yuv2rgb.UtoG[pSrc[k + 1]] + 17264) >> 7;
tmpB1 = (table_yuv2rgb.YtoB[pSrc[k + 2]] + table_yuv2rgb.UtoB[pSrc[k + 1]] - 28928) >> 7;
if (tmpR0 > 255) tmpR0 = 255;
if (tmpG0 > 255) tmpG0 = 255;
if (tmpB0 > 255) tmpB0 = 255;
if (tmpR1 > 255) tmpR1 = 255;
if (tmpG1 > 255) tmpG1 = 255;
if (tmpB1 > 255) tmpB1 = 255;
if (tmpR0 < 0) tmpR0 = 0;
if (tmpG0 < 0) tmpG0 = 0;
if (tmpB0 < 0) tmpB0 = 0;
if (tmpR1 < 0) tmpR1 = 0;
if (tmpG1 < 0) tmpG1 = 0;
if (tmpB1 < 0) tmpB1 = 0;
pDst[m + 0] = tmpB0;
pDst[m + 1] = tmpG0;
pDst[m + 2] = tmpR0;
pDst[m + 3] = tmpB1;
pDst[m + 4] = tmpG1;
pDst[m + 5] = tmpR1;
k += 4;
m += 6;
}
k=k-dec;
}
}void