DirectShow H264 Source Filter中 PushPin的MediaType设置
2011-06-15 16:58
991 查看
在连接Source Filter和H264 decoder时,decoder会检查source filter的media type,若匹配,则连接成功。下面的设置经过测试可以正常连接,并且解码器能解出图像。decoder使用DivX H264 Decoder。
其中pvi->bmiHeader.biCompression = 0x31435641; //AVC1表示source filter传给解码器的是没有加start code即0x00 0x00 0x00 0x01的NALU数据,此时subtype要选MEDIASUBTYPE_AVC1;pvi->bmiHeader.biCompression = 0x34363248; //H264表示传给解码器的是有start code的NALU,subtype要选MEDIASUBTYPE_H264。
MEDIASUBTYPE_AVC1和MEDIASUBTYPE_H264的GUID值定义如下:
// 31435641-0000-0010-8000-00AA00389B71
DEFINE_GUID(MEDIASUBTYPE_AVC1,
0x31435641, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
// 34363248-0000-0010-8000-00aa00389b71
DEFINE_GUID(MEDIASUBTYPE_H264,
0x34363248, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
HRESULT CPushPinRTP::GetMediaType(CMediaType *pmt) { CheckPointer(pmt,E_POINTER); CAutoLock cAutoLock(m_pFilter->pStateLock()); VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER *) pmt->AllocFormatBuffer(sizeof(VIDEOINFOHEADER)); if (NULL == pvi) return(E_OUTOFMEMORY); ZeroMemory(pvi, sizeof(VIDEOINFOHEADER)); pvi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); //pvi->bmiHeader.biCompression = 0x31435641; //AVC1 pvi->bmiHeader.biCompression = 0x34363248; //H264 pvi->bmiHeader.biBitCount = 24; pvi->bmiHeader.biPlanes = 1; pvi->bmiHeader.biWidth = 1024; pvi->bmiHeader.biHeight = 720; pvi->AvgTimePerFrame = (UNITS/MILLISECONDS)*(LONGLONG)(UNITS/FPS_30); SetRectEmpty(&(pvi->rcSource)); // we want the whole image area rendered. SetRectEmpty(&(pvi->rcTarget)); // no particular destination rectangle pmt->SetType(&MEDIATYPE_Video); pmt->SetFormatType(&FORMAT_VideoInfo); pmt->SetTemporalCompression(TRUE); //pmt->SetSubtype(&MEDIASUBTYPE_AVC1); pmt->SetSubtype(&MEDIASUBTYPE_H264); pmt->SetVariableSize(); return NOERROR; } // GetMediaType
其中pvi->bmiHeader.biCompression = 0x31435641; //AVC1表示source filter传给解码器的是没有加start code即0x00 0x00 0x00 0x01的NALU数据,此时subtype要选MEDIASUBTYPE_AVC1;pvi->bmiHeader.biCompression = 0x34363248; //H264表示传给解码器的是有start code的NALU,subtype要选MEDIASUBTYPE_H264。
MEDIASUBTYPE_AVC1和MEDIASUBTYPE_H264的GUID值定义如下:
// 31435641-0000-0010-8000-00AA00389B71
DEFINE_GUID(MEDIASUBTYPE_AVC1,
0x31435641, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
// 34363248-0000-0010-8000-00aa00389b71
DEFINE_GUID(MEDIASUBTYPE_H264,
0x34363248, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
相关文章推荐
- DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)
- DirectShow中H.264 SourceFilter的Pin配置
- DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)
- DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)
- 转载 rageliu 的 DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)
- DirectShow中写push模式的source filter流程 + 源代码(内附详细注释) 分类: DirectX 2014-10-08 18:01 564人阅读 评论(0) 收藏
- DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)[转]
- Directshow 注册 source filter
- DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)
- DirectShow中写push模式的source filter流程
- DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)
- (转)DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)
- DirectShow中写push模式的source filter流程 + 源码(内附具体凝视)
- DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)
- 关于新手 DirectShow写source filter的具体流程
- RTSP/RTMP/HTTP DirectShow Source Filter
- DirectShow中H.264 SourceFilter的Pin配置
- RTSP/RTMP/HTTP/URL DirectShow Source Filter
- DirectShow的RTP发包(H264)Filter <转>
- DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)