作者: 裘羽
转自: http://wu-to.com/bbs/blog/article.php?uid-11-itemid-410.html
BOOL YUV422To420(BYTE* pYUV, BYTE* pY, BYTE* pU, BYTE* pV, LONG lWidth, LONG lHeight)
{
int i,j;
BYTE* pYUVTemp = pYUV;
BYTE* pYUVTempNext = pYUV+lWidth*2;
for(i=0; i <lHeight; i+=2)
{
for(j=0; j <lWidth; j+=2)
{
pY[j] = *pYUVTemp++;
pY[j+lWidth] = *pYUVTempNext++;
pU[j/2] =(*(pYUVTemp) + *(pYUVTempNext))/2;
pYUVTemp++;
pYUVTempNext++;
pY[j+1] = *pYUVTemp++;
pY[j+1+lWidth] = *pYUVTempNext++;
pV[j/2] =(*(pYUVTemp) + *(pYUVTempNext))/2;
pYUVTemp++;
pYUVTempNext++;
}
pYUVTemp+=lWidth*2;
pYUVTempNext+=lWidth*2;
pY+=lWidth*2;
pU+=lWidth/2;
pV+=lWidth/2;
}
return TRUE;
}
//
// Deliver
//
HRESULT CTeeOutputPin::Deliver(IMediaSample *pMediaSample)
{
CheckPointer(pMediaSample,E_POINTER);
// Make sure that we have an output queue
if(m_pOutputQueue == NULL)
return NOERROR;
pMediaSample->AddRef();
AM_MEDIA_TYPE* pType;
HRESULT hr=pMediaSample->GetMediaType(&pType);
// VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER *) pType->pbFormat;
// int h = pvi->bmiHeader.biHeight;
// int w = pvi->bmiHeader.biWidth;
BYTE *pData;
pMediaSample->GetPointer(&pData);
FILE *fp;
fp=fopen("c://out.txt","ab");
char out[256];
sprintf(out,"%08x %d %08x /n",pMediaSample,pMediaSample->GetSize(),pData);
fwrite(out,1,strlen(out),fp);
fclose(fp);
unsigned char*lpYUV420P_Y;
unsigned char*lpYUV420P_U;
unsigned char*lpYUV420P_V;
int g_SrcWidth =320, g_SrcHeight=240;
lpYUV420P_Y=new unsigned char[g_SrcWidth * g_SrcHeight];
lpYUV420P_U=new unsigned char[g_SrcWidth * g_SrcHeight];
lpYUV420P_V=new unsigned char[g_SrcWidth * g_SrcHeight];
YUV422To420(pData,lpYUV420P_Y,lpYUV420P_U,lpYUV420P_V,g_SrcWidth , g_SrcHeight);
fp=fopen("c://out.yuv","ab");
fwrite(lpYUV420P_Y,1,g_SrcWidth * g_SrcHeight,fp);
fwrite(lpYUV420P_U,1,g_SrcWidth * g_SrcHeight/4,fp);
fwrite(lpYUV420P_V,1,g_SrcWidth * g_SrcHeight/4,fp);
fclose(fp);
delete lpYUV420P_Y;
delete lpYUV420P_U;
delete lpYUV420P_V;
return m_pOutputQueue->Receive(pMediaSample);
} // Deliver
[转]将视频文件转成YUV格式
最新推荐文章于 2023-11-22 14:27:12 发布