怎样设置Transform Filter的输出media type,我实现了虚函数GetMediaType(int iPosition, CMediaType *pmt);但运行的时候这个函数为什么不调用呢?
DEFINE_GUID(CLSID_FilterTransform,
0x7f45ab89, 0x60bf, 0x48ec, 0x86, 0x88, 0x2f, 0xd8, 0xf, 0x29, 0xa2, 0xe7);
CFilterTransform::CFilterTransform(TCHAR *tszName, LPUNKNOWN punk, HRESULT *phr)
: CTransInPlaceFilter (tszName, punk, CLSID_FilterTransform, phr)
, m_tStart(0)
{
}
//*****************
HRESULT CFilterTransform::Transform(IMediaSample *pSample)
{
return S_OK;
}
//********************/
HRESULT CFilterTransform::CheckInputType(const CMediaType* mtIn)
{
if (mtIn->subtype==MEDIASUBTYPE_RGB24)
{
AfxMessageBox(L"mtIn->subtype==MEDIASUBTYPE_RGB24");
return S_OK;
}
}
HRESULT CFilterTransform::Receive(IMediaSample * pSample)
{
HRESULT hr;
OutputPin()->Deliver(pSample);
return hr;
}
HRESULT CFilterTransform::GetMediaType(int iPosition, CMediaType *pmt)
{
int width = 320 ;
int height = 240 ;
if (iPosition != 0)
{
return E_INVALIDARG;
}
pmt->SetType(&MEDIATYPE_Video);
pmt->SetSubtype(&MEDIASUBTYPE_UYVY) ;
pmt->SetFormatType(&FORMAT_VideoInfo);
pmt->SetSampleSize(width*height*2);
pmt->SetTemporalCompression(FALSE);
VIDEOINFOHEADER info;
ZeroMemory(&info, sizeof(VIDEOINFOHEADER));
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biSizeImage = width*height*2 ;
info.bmiHeader.biClrImportant = 0;
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info.bmiHeader.biHeight = height ;
info.bmiHeader.biWidth = width;
info.bmiHeader.biCompression = mmioFOURCC(U,Y,V,Y);
info.bmiHeader.biBitCount = 16 ;
pmt->SetFormat((BYTE*)&info, sizeof(VIDEOINFOHEADER));
return NOERROR;
}
你把Receive(IMediaSample * pSample)去掉试一下