uv422转换为yuv420_yuv422与yuv420转换成RGB来显示

const int w = m_dwWidth, h = m_dwHeight;

BYTE * const p = (BYTE *)ddsd.lpSurface;

if (p == NULL) {

m_MonDDrawList[i].pddsBackBuffer->Unlock(NULL);

continue;

}

DDPIXELFORMAT ddpf = ddsd.ddpfPixelFormat;

const int stride = ddsd.lPitch;

//char *s = new char[2048*1536*5];

//char peric[1024] = {0};

//sprintf(peric,"pY:%u\n", (const char*)pFrame->pY);

//OutputDebugString(peric);

#if 0

/* yuv420 转RGB */

int j = 0;

int stride_uv;

int c, d, e;

unsigned char* cur;

BYTE *line = (BYTE *)ddsd.lpSurface;

int width = m_dwWidth, height = m_dwHeight, t_width;

unsigned char* y = pFrame->pY;

unsigned char* u = pFrame->pU;

unsigned char* v = pFrame->pV;

stride_uv = (width+1)>>1;

for( j = 0 ; j < height ; j++ ){

cur = line;

for( i = 0 ; i < width ; i++ ){

c = y[j*width+i] - 16;

d = u[j*stride_uv+(i>>1)] - 128;

e = v[j*stride_uv+(i>>1)] - 128;

(*cur) = clip(( 298 * c           + 409 * e + 128) >> 8);cur++;

(*cur) = clip(( 298 * c - 100 * d - 208 * e + 128) >> 8);cur++;

(*cur) = clip(( 298 * c + 516 * d           + 128) >> 8);cur+=2;

}

line += t_width<<2;

}

#else

/* yuv422 转RGB */

int j = 0;

for(j = 0;j < h;j ++)

{

//memcpy(s + j * stride,(char*)pFrame->pY + j * w, w);

memcpy(p + j * stride,(char*)pFrame->pY + j * w, w);

//memmove(p + j * stride,(char*)pFrame->pY + j * w, w);

}

for(j = 0;j < h/2;j++)

{

//memcpy(s + stride * h + j * stride / 2,  (char*)pFrame->pV + j * w / 2, w / 2);

memcpy(p + stride * h + j * stride / 2,  (char*)pFrame->pV + j * w / 2, w / 2);

//memmove(p + stride * h + j * stride / 2,  (char*)pFrame->pV + j * w / 2, w / 2);

}

for(j = 0;j < h/2;j ++)

{

//memcpy(s + stride * h + stride * h / 4 + j* stride / 2, (char*)pFrame->pU + j * w / 2, w / 2);

memcpy(p + stride * h + stride * h / 4 + j* stride / 2, (char*)pFrame->pU + j * w / 2, w / 2);

//memmove(p + stride * h + stride * h / 4 + j* stride / 2, (char*)pFrame->pU + j * w / 2, w / 2);

}

#endif

===================================================================

//m_pYUV2RGBFun(pFrame->pY, pFrame->uYStride, pFrame->pU, pFrame->pV, pFrame->uUVStride,

//    (UCHAR *)ddsd.lpSurface, pFrame->uWidth, pFrame->uHeight, ddsd.lPitch);

const int w = m_dwWidth, h = m_dwHeight;

BYTE * p = (BYTE *)ddsd.lpSurface;

if (p == NULL) {

m_MonDDrawList[i].pddsBackBuffer->Unlock(NULL);

continue;

}

DDPIXELFORMAT ddpf = ddsd.ddpfPixelFormat;

const int stride = ddsd.lPitch;

int j = 0;

if(pFrame->uReserved == 1)

{//  yuv422

for(j = 0;j < h*w*2;j ++)

{

*p++=*pFrame->pU++;

*p++=*pFrame->pY++;

*p++=*pFrame->pV++;

*p++=*pFrame->pY++;

}

}

else

{

// yuv420

for(j = 0;j < h;j ++)

{

memcpy(p + j * stride,(char*)pFrame->pY + j * w, w);

}

for(j = 0;j < h/2;j++)

{

memcpy(p + stride * h + j * stride / 2,    (char*)pFrame->pV + j * w / 2, w / 2);

}

for(j = 0;j < h/2;j ++)

{

memcpy(p + stride * h + stride * h / 4 + j* stride / 2, (char*)pFrame->pU + j * w / 2, w / 2);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值