首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

写了一个mpeg4的解码的filter,注册后,render一个文件时“cannot render this pin”,为什么?该如何处理

2012-03-20 
写了一个mpeg4的解码的filter,注册后,render一个文件时“cannot render this pin”,为什么?CheckInputType中

写了一个mpeg4的解码的filter,注册后,render一个文件时“cannot render this pin”,为什么?
CheckInputType中判断成功:return   S_OK;
CheckTransform中也判断成功。
里面也有颜色空间转换,而且保证是正确的。

我看了一下我的decoder   filter的outpin(graph中没有render   filter):
Major   Type:     Video   -   Sub   Type:     RGB24   -   Format:       RGB   0x0,   0   bits
rcSrc=(0,0,720,576)
rcDst=(0,0,0,0)
但是一旦加上最后的render,就提示cannot   render   this   pin。

用网上下的一个可以解码mpeg4的filter看了一下,是:
Major   Type:     Video   -   Sub   Type:     RGB24   -   Format:       RGB   720x576,   24   bits,
Aspect   Ratio:   4x3,
Interlace   format:   Frames
rcSrc=(0,0,720,576)
rcDst=(0,0,720,576)

为什么呢????

[解决办法]
首先肯定一点,不要怀疑别的,要怀疑你的Decoder某些地方写对不对。
关键是看你的解码器中GetMediaType函数是怎么实现的。看你给出的信息,我猜多半是你的OutputPin上的VIDEOINFOHEADER媒体信息给的不正确了。
[解决办法]
Major Type: Video - Sub Type: RGB24 - Format: RGB 0x0, 0 bits

很明显是format格式不对.
即,有没有调用类似以下的语句:
BOOL bPass = mPreferredMt.SetFormat((BYTE *)inFormat, inLength);
其中inFormat是avi或mepg4的VIDEOINFOHEADER
[解决办法]
最为关键的pMediaType-> SetFormat函数没有调用!!!!!
[解决办法]
这样做:
VIDEOINFOHEADER * vih =(VIDEOINFOHEADER *) pMediaType-> pbFormat;
if (vih == NULL)
{
return E_OUTOFMEMORY;
}

ZeroMemory(vih, sizeof(VIDEOINFOHEADER));

vih-> rcSource.right= m_width;
vih-> rcSource.bottom= abs(m_height);
vih-> rcTarget.right= m_width;
vih-> rcTarget.bottom= abs(m_height);
vih-> bmiHeader.biWidth= m_width;
vih-> bmiHeader.biHeight = abs(m_height);
vih-> bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
vih-> bmiHeader.biPlanes = 1;
vih-> AvgTimePerFrame = m_AvgTimePerFrame;

... ...

热点排行