DirectShow编程问题,函数第一次调用成功,第二次调用却失败,奇怪????

lingbin 2003-08-05 04:28:25
在过程中用到以下函数:

hr=CoCreateInstance(CLSID_RM_MPEG2_VIDEO_SUBPICTURE,NULL,CLSCTX_INPROC_SERVER,
IID_IBaseFilter,(LPVOID *)&pMPEG4DecoderFilter);

当我第一次调用它的时候 hr 返回 S_OK 成功,然后我再调用一次,它却返回 E_OUTOFMEMORY 的失败信息,是怎么回事,同样调用一个函数,两次调用结果竟然不同为什么,有没有解决的办法。
...全文
52 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingbin 2003-08-10
  • 打赏
  • 举报
回复
我顶
lingbin 2003-08-10
  • 打赏
  • 举报
回复
to COKING:
用IMediaPosition的put_CurrentPosition函数怎么知道当前是否是文件头还是文件尾,还有我现在的快进和快退好像不怎么样,我是用put_CurrentPosition来设置文件播放位置,不知您有没有更好的办法。

还有播放下一首歌时,有没有那个接口的那个方法可以实现,我现在是把前面那一首强制关闭,然后再播放下一首,可是这样如果连续按十来次“下一首”按钮时,程序就会出现非法操作,不知您有没有更好的办法解决?
lingbin 2003-08-08
  • 打赏
  • 举报
回复
播放MP3的快进、快退,那个会,给点代码吧。
COKING 2003-08-06
  • 打赏
  • 举报
回复
我的QQ:18679947
COKING 2003-08-06
  • 打赏
  • 举报
回复
DEFINE_GUID(CLSID_RM_MPEG2_VIDEO_SUBPICTURE,
0x4e3abd41, 0x458e, 0x11d1, 0x91, 0x7e, 0x0, 0x0, 0x1b, 0x4f, 0x0, 0x6f);
这些是GUID的128位定义。我想应该是其他方面提供的吧!

因为我看不到代码,不知道你要干什么呀!
lingbin 2003-08-05
  • 打赏
  • 举报
回复
我在那句前面也用到了同样的函数调用,如下:
hr=CoCreateInstance(CLSID_MP4_AVISPLITTER,NULL,CLSCTX_INPROC_SERVER,
IID_IBaseFilter,(LPVOID *)&pMPEG4SplitterFilter);

这句又没有出错,是不是CLSID_RM_MPEG2_VIDEO_SUBPICTURE定义有问题,各位高手帮看看啊。
lingbin 2003-08-05
  • 打赏
  • 举报
回复
to COKING(疯间猖越):
"CLSID_RM_MPEG2_VIDEO_SUBPICTURE"实现代码是这样的,
DEFINE_GUID(CLSID_RM_MPEG2_VIDEO_SUBPICTURE,
0x4e3abd41, 0x458e, 0x11d1, 0x91, 0x7e, 0x0, 0x0, 0x1b, 0x4f, 0x0, 0x6f);
你看看有什么问题,我都搞不懂那些参数干什么用的。

还有你说Release掉接口,我在hr=CoCreateInstance(CLSID_RM_MPEG2_VIDEO_SUBPICTURE,NULL,CLSCTX_INPROC_SERVER,
IID_IBaseFilter,(LPVOID *)&pMPEG4DecoderFilter);
前面用:pMPEG4DecoderFilter->Release();时出现错误,应该是这个pMPEG4DecoderFilter接口还没有建好,所以一用Release就出错。
COKING 2003-08-05
  • 打赏
  • 举报
回复
应该要把前一个接口Release掉,再设为NULL.
下一次在判断是否要创建呀!

为什么只能调用一次,可能和“CLSID_RM_MPEG2_VIDEO_SUBPICTURE”的实现代码有关的。
比如:RealPlay和media player只能运行一个实例。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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