自定义的transform filter连接video render有关问题!
自定义的transform filter连接video render问题!!!!!!
自定义了个transform filter,发现,能与video render连接,但是图像出不来,是黑的,数据源,是将h264转yuv再转rgb后的数据,下面贴出的是GetMediaType与CheckTransform,transform部分可以参考:http://bbs.csdn.net/topics/390634312 求各位大神啊!!!!!分数不够可以追加啊!!!!!
------解决方案--------------------
那个帖子,我给了点建议,试试先!代码多调试一步一步来!
自定义了个transform filter,发现,能与video render连接,但是图像出不来,是黑的,数据源,是将h264转yuv再转rgb后的数据,下面贴出的是GetMediaType与CheckTransform,transform部分可以参考:http://bbs.csdn.net/topics/390634312 求各位大神啊!!!!!分数不够可以追加啊!!!!!
HRESULT CMyTransformFilter::GetMediaType(int iPosition,CMediaType *pMediaType)
{
if(m_pInput->IsConnected() == FALSE)
{
return E_UNEXPECTED;
}
if(iPosition < 0) // 0 Return a 32bit mediatype
{ // 1 Return a 24bit mediatype
return E_INVALIDARG; // 2 Return 16bit RGB565
} // 3 Return a 16bit mediatype (rgb555)
if(iPosition > 4) // 4 Return 8 bit palettised format
{ // >4 Invalid
return VFW_S_NO_MORE_ITEMS;
}
if(iPosition <= 4 )
{
HRESULT hr = m_pInput->ConnectionMediaType(pMediaType);
if(FAILED(hr))
{
return hr;
}
}
ASSERT(pMediaType->formattype == FORMAT_VideoInfo);
VIDEOINFOHEADER *pVih = reinterpret_cast<VIDEOINFOHEADER*>(pMediaType->pbFormat);
pVih->bmiHeader.biCompression = BI_RGB;
pVih->bmiHeader.biSizeImage = 1280 * 720;
pVih->bmiHeader.biBitCount = 24;
pVih->bmiHeader.biHeight = 720;
pVih->bmiHeader.biWidth = 1280;
pVih->bmiHeader.biPlanes = 1;
pMediaType->SetType(&MEDIATYPE_Video);
pMediaType->SetSubtype(&MEDIASUBTYPE_RGB24);
pMediaType->SetFormatType(&FORMAT_VideoInfo);
return S_OK;
HRESULT CMyTransformFilter::CheckTransform(const CMediaType *mtIn,const CMediaType *mtOut)
{
CheckPointer(mtIn,E_POINTER);
CheckPointer(mtOut,E_POINTER);
HRESULT hr;
if(FAILED(hr = CheckInputType(mtIn)))
{
return hr;
}
if((*mtOut->FormatType() != FORMAT_VideoInfo)
||(mtOut->cbFormat < sizeof(VIDEOINFOHEADER))
||(mtOut->subtype != MEDIASUBTYPE_RGB24))
{
return E_INVALIDARG;
}
BITMAPINFOHEADER *pBmiOut = HEADER(mtOut->pbFormat);
if((pBmiOut->biPlanes != 1)
||(pBmiOut->biBitCount != 24)
||(pBmiOut->biCompression != BI_RGB))
{
return E_INVALIDARG;
}
return S_OK;
}
}
------解决方案--------------------
那个帖子,我给了点建议,试试先!代码多调试一步一步来!