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);
}
}