//设置输出的类型及尺寸,只支持输出rgb24 32 565 三种,只显示当前的
HRESULT CFilter::GetMediaType(int iPosition, CMediaType *pMediaType)
{
if(m_pInput->IsConnected() == FALSE)
{
return E_UNEXPECTED;
}
if(iPosition < 0)
{
return E_INVALIDARG;
}
if(iPosition > 0)
{
return VFW_S_NO_MORE_ITEMS;
}
ASSERT (pMediaType) ;
pMediaType->InitMediaType() ;
pMediaType->SetType(&MEDIATYPE_Video) ;
switch(mbmDes.bmBitsPixel)
{
case 24:
pMediaType->SetSubtype(&MEDIASUBTYPE_RGB24);
break;
case 32:
pMediaType->SetSubtype(&MEDIASUBTYPE_RGB32);
break;
case 16:
pMediaType->SetSubtype(&MEDIASUBTYPE_RGB565);
default:
return VFW_S_NO_MORE_ITEMS;
}
RECT rcDest = {0};
VIDEOINFO *pvi = (VIDEOINFO *) pMediaType->AllocFormatBuffer(sizeof(VIDEOINFO));
ZeroMemory(pvi, sizeof(VIDEOINFO));
pvi->bmiHeader.biCompression = BI_RGB;
pvi->bmiHeader.biBitCount = mbmDes.bmBitsPixel;
pvi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pvi->bmiHeader.biWidth = mbmDes.bmWidth;
pvi->bmiHeader.biHeight = mbmDes.bmHeight;
pvi->bmiHeader.biPlanes = 1;
long llBufferSize = (mbmDes.bmWidth * mbmDes.bmBitsPixel + 31) / 32 * 4;
llBufferSize *= abs(mbmDes.bmHeight);
rcDest.right = mbmDes.bmWidth;
rcDest.bottom = mbmDes.bmHeight;
pvi->bmiHeader.biSizeImage = llBufferSize;
//SetRectEmpty(&(pvi->rcSource));
memset(&(pvi->rcSource),0,sizeof(RECT));
pvi->rcSource.right = mBmpInfo.biWidth;
pvi->rcSource.bottom= mBmpInfo.biHeight;
memcpy(&(pvi->rcTarget),&rcDest,sizeof(RECT));
pMediaType->SetFormatType(&FORMAT_VideoInfo);
//pmt->SetTemporalCompression(FALSE);
pMediaType->SetSampleSize(pvi->bmiHeader.biSizeImage);
本文介绍了一个函数用于设置视频输出的媒体类型,包括视频格式、分辨率等关键参数,并针对不同的位深选择不同的子类型。
854

被折叠的 条评论
为什么被折叠?



