我正在编写一个文件源过滤器,它有一个视频输出PIN,输出引脚类型是H.264原始格式:
HRESULT CVideoOutPin::GetMediaType(CMediaType *pMediaType)
{
CAutoLock lock(m_pFilter->pStateLock());
ZeroMemory(pMediaType, sizeof(CMediaType));
pMediaType->InitMediaType();
// {7807c3af-524f-11ce-9f53-0020af0ba770}
pMediaType->SetSubtype(&MEDIASUBTYPE_h264raw);
unsigned int * pSize = (unsigned int *) pMediaType->ReallocFormatBuffer(sizeof(unsigned int) * 2);
pSize[0] = m_pFlvFile->GetWidth();
pSize[1] = m_pFlvFile->GetHeight();
pMediaType->SetFormat((BYTE *)pSize, sizeof(unsigned int) * 2);
//*pMediaType = m_oVideoMediaType;
return S_OK;
}
我在GraphEdit.exe中尝试了几个解压缩过滤器,但没有一个可以连接到我的输出引脚。
我可以使用任何DirectShow过滤器来完成图表吗?
答案 0 :(得分:4)
MEDIASUBTYPE_h264raw
看起来不像标准媒体子类型。您应该使用MEDIASUBTYPE_AVC1
(无开始代码)或MEDIASUBTYPE_H264
(带开始代码);见H.264 Media Types。如果您使用这些子类型中的任何一种,则合适的H.264解码器应该能够连接到您的输出引脚。 Windows 7附带这样的H.264解码器,第三方解码器应该提供适当的输入滤波器。