yuv420转rgba,yuv420内存排列为yyyy,u,v
bool yuv420ToRgb(uint8_t* yuv, int w, int h, uint8_t* rgb)
{
uint8_t* pBufy = new uint8_t[w * h];
uint8_t* pBufu = new uint8_t[w * h / 4];
uint8_t* pBufv = new uint8_t[w * h / 4];
memcpy(pBufy, yuv, w * h);
memcpy(pBufu, yuv + w * h, w * h / 4);
memcpy(pBufv, yuv + w * h * 5 / 4, w * h / 4);
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
int r = (int)(pBufy[y * w + x] + 1.370705 * (pBufv[y * w / 4 + x /
int g = (int)(pBufy[y * w + x] - 0.698001 * (pBufu[y * w / 4 + x / 2] - 128) - 0.703125 * (pBufv[y * w / 4 + x / 2] - 128));
int b = (int)(pBufy[y * w + x] + 1.732446 * (pBufu[y * w / 4 + x / 2] - 128));
if (r > 255)
r = 255;
if (r < 0)
r = 0;
if (g > 255)
g = 255;
if (g < 0)
g = 0;
if (b > 255)
b = 255;
if (b < 0)
free(pBufy);
free(pBufu);
free(pBufv);
return true;
}
}
}



