老出这个错误提示:未找到可用于建立连接的介质筛选器组合,高手来看一下

zhujiannihao123 2006-06-13 03:13:16
我写了一个一进一出的Filter,Filter重CBaseFilter继承,实现了三个方法:1,GetPin。2,GetPinCount。3,FindPin。
输出Pin是从TBCBaseOutputPin继承,实现了三个方法: 1,CheckMediaType。2,GetMediaType。3,DecideBufferSize。
输入Pin 是从TBCBaseInputPin继承,实现CheckMediaType。

先说输入Pin 的CheckMediaType实现:什么没有做就是返回S_ok.

在说说输出Pin的CheckMediaType实现:
if IsEqualGUID(mtIn.majortype, MEDIATYPE_Audio ) and IsEqualGUID(mtIn.subtype,MEDIASUBTYPE_WAVE) then
result := S_OK
else result := S_FALSE;
比较提供的媒体类型的majortype是不是等于MEDIATYPE_Audio,subtype是不是等于MEDIASUBTYPE_WAVE

GetMediaType的实现
ASSERT((Position = 0) or (Position = 1));
if(Position = 0) then
begin
MediaType.majortype := MEDIATYPE_Audio; //majortype 赋值为MEDIATYPE_Audio
MediaType.Subtype := MEDIASUBTYPE_WAVE; //Subtype 赋值为MEDIASUBTYPE_WAVE
result := S_OK;
exit;
end;
result := VFW_S_NO_MORE_ITEMS;

3,DecideBufferSize的实现
本Filter跟上一级Filter商议好了的管理器的属性 。我把这个属性直接设置给输出Pin提供的内存管理器

现象是:我写的这个中间Filter,输入Pin 可以正常的连接上一级Filter,当是输出Pin不能连接下一级Filter, 老出这个错误提示:未找到可用于建立连接的介质筛选器组合。为什么。高手指点我的哪个
函数重载有错误
...全文
5163 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhujiannihao123 2006-06-16
  • 打赏
  • 举报
回复
还有一个问题,麻烦大家跟我看看:
我选用从CBaseFilter继承,输入和输出pin从CBaseinputPin,CBaseOutputPin继承。
实验: 推图片的SourceFilter----自己写的Filter----播放Filter.(连接正常)
传输数据时,发生错误(地址错误,有一个地址不能读!!)

我的输入pin::Receive 做的工作:继承CBaseinputPin::Receive 处理后,把Sample交给我自己的写的Filter的Receive方法。

我的Filter的receive方法的实现是参照CTransInPlaceFilter的receive方法写的。具体是:首先判断输入Pin 和输出pin 是不用同一个内存管理器(不是相同,调用Copy,copy方法也照抄CTransInPlaceFilter的Copy),处理完后,调用FOutput::Deliver(Sample)把数据送出。

实验结果:传输数据时,发生错误(地址错误,有一个地址不能读!!),不要copy还是出同样的错误(不可读的哪个地址都是相同的)。实在找不到错误,大家帮帮看看,是不是那个方法没有重载。
zhujiannihao123 2006-06-16
  • 打赏
  • 举报
回复
哈,真郁闷,跟不到啊
king820802 2006-06-14
  • 打赏
  • 举报
回复
那用OutPutDebugString这些输出的语句啊!
要知道那里出问题了,这种问题是最好找了
zx_star 2006-06-14
  • 打赏
  • 举报
回复
用什么语言都无法单步跟踪,最多只能跟踪到CBase一级的函数,是很烦人的
zhujiannihao123 2006-06-14
  • 打赏
  • 举报
回复
我老是为开始Directshow,不能单步跟踪而苦恼,各位高手能不指点一下,;楼上的仁兄可能说清楚点吗,(最好用Delphi怎么跟踪)
zhujiannihao123 2006-06-14
  • 打赏
  • 举报
回复
你好lserlohn谢谢你的回帖,SetMediaType不是checkmediatype通过以后,保存媒体类型和输入Pin
在发起连接的输出Pin上的吗??
也谢谢yyhzpk,我是手工连接不上,我的实验和你说的差不多。我是在Getmediatype中把上级Filter连接时的媒体类型完全设置给本次连接。结果成功
yyhzpk 2006-06-14
  • 打赏
  • 举报
回复
你是手工连接,还是render,如果手工连接不上,
肯定是你checkmediatype没通过,单步跟一下就知道了
lserlohn 2006-06-13
  • 打赏
  • 举报
回复
检查SetMediaType,这个是与下一级Filter协商媒体类型用的

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧