//设置输出的类型及尺寸,只支持输出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);