太阳不下山 发表于 2021-7-11 10:40:07

YV12转RGB24

BOOL YV12RGB24(BYTE *yuv, BYTE *rgb)
{
if (!yuv || !rgb)
      return FALSE;

    BYTE* yData = yuv;
    BYTE* vData = yuv + frameWidth*frameHeight*5/4;
    BYTE* uData = yuv + frameWidth*frameHeight;
    if (!uData || !vData)
return FALSE;

    for (int iRow = 0; iRow < frameHeight; iRow++)
    {
      for (int jCol = 0; jCol < frameWidth; jCol++)
      {
            int Y = yData;
            int U = uData[(iRow / 2)*(frameWidth / 2) + (jCol / 2)];
            int V = vData[(iRow / 2)*(frameWidth / 2) + (jCol / 2)];
            int R = Y + (U - 128) + (((U - 128) * 103) >> 8);
            int G = Y - (((V - 128) * 88) >> 8) - (((U - 128) * 183) >> 8);
            int B = Y + (V - 128) + (((V - 128) * 198) >> 8);

            // r分量值
            R = R<0 ? 0 : R;
rgb = R > 255 ? 255 : R;
            // g分量值
            G = G<0 ? 0 : G;
rgb = G>255 ? 255 : G;
            // b分量值
            B = B<0 ? 0 : B;
rgb = B>255 ? 255 : B;
      }
    }
    return TRUE;
}

//算法优化加速
BOOL YV12RGB24(BYTE *yuv, BYTE *rgb)
{
if (!yuv || !rgb)
      return FALSE;

    BYTE* yData = yuv;
BYTE* vData = yuv + frameWidth*frameHeight + frameWidth/2 * frameHeight/2;
    BYTE* uData = yuv + frameWidth*frameHeight;
    if (!uData || !vData)
return FALSE;

BYTE *pRGB = rgb;
    for (int iRow = 0; iRow < frameHeight; iRow++)
    {
int iIndex = (iRow >> 1)*(frameWidth >> 1);
      for (int jCol = 0; jCol < frameWidth; jCol++)
      {
            int Y = yData;
int U = uData;
int V = vData;
            int R = Y + (U - 128) + (((U - 128) * 103) >> 8);
            int G = Y - (((V - 128) * 88) >> 8) - (((U - 128) * 183) >> 8);
            int B = Y + (V - 128) + (((V - 128) * 198) >> 8);

// b分量值
if (B >= 0 && B <= 255)
*pRGB++ = B;
else *pRGB++ = B < 0 ? 0 : 255;

// g分量值
if (G >= 0 && G <= 255)
*pRGB++ = G;
else *pRGB++ = G < 0 ? 0 : 255;

            // r分量值
if (R >= 0 && R <= 255)
*pRGB++ = R;
else *pRGB++ = R < 0 ? 0 : 255;
      }
    }
    return TRUE;
}
  
文档来源:51CTO技术博客https://blog.51cto.com/u_15298588/3034170
页: [1]
查看完整版本: YV12转RGB24