社区
多媒体/流媒体开发
帖子详情
directshow 问题
天天学习^好好向上
2009-05-07 04:55:51
我用directshow写了一个程序,就是简单的使用IGraphBuilder直接RenderFile,
但是我在vc环境中debug时,发现生成的filtergraph和 不调试,直接运行,生成filtergraph不一样
在vc环境的解码filter和直接运行的filter用的不是同一个
但是程序是在同一台机器上,难道调试模式和运行模式,对与directshow还有什么不一样吗?
那个大侠遇到过这个问题啊,帮忙解决一下
...全文
110
7
打赏
收藏
directshow 问题
我用directshow写了一个程序,就是简单的使用IGraphBuilder直接RenderFile, 但是我在vc环境中debug时,发现生成的filtergraph和 不调试,直接运行,生成filtergraph不一样 在vc环境的解码filter和直接运行的filter用的不是同一个 但是程序是在同一台机器上,难道调试模式和运行模式,对与directshow还有什么不一样吗? 那个大侠遇到过这个问题啊,帮忙解决一下
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
UDX协议
2009-05-09
打赏
举报
回复
CyberLink Video/SP Decoder(PDVD7)应该是它有反调试技术。
如果你在debug模式下,他会不加载。
其实很多解码器,压缩器都会保护自己。
天天学习^好好向上
2009-05-09
打赏
举报
回复
我如果在debug模式,那么文件filter链路
MPEG2_ts.MPG->CyberLink Demux(PDVD7)->Microsoft MPEG-2 Video Decocde->VideoRenderer
如果不在debug模式,那么文件filter链路就会变成
MPEG2_ts.MPG->CyberLink Demux(PDVD7)->CyberLink Video/SP Decoder(PDVD7)->VideoRenderer
实际上第二个才是正确的,就是在DEBUG模式下不对,如果程序在debug模式下运行就异常了,不能放映,直接运行就能放映了
天天学习^好好向上
2009-05-09
打赏
举报
回复
我就是在graphedit中看到的,如果在VS2005中运行,graphedit用connect remote 查看,看到使用的解码器,是一个,如果不debug,直接从外部运行,用graphedit用connect remote 查看,看到的却是另外一个解码器,都是同一个程序,同一个机器,结果2种状态却不一样。
然后我找到了另外一个同事用bcb写的一个播放器,对于这个文件,在bcb的debug状态,和直接运行状态,2个的生成的图也不一样。
这directshow也真是太神奇了
天天学习^好好向上
2009-05-09
打赏
举报
回复
确实是这个问题,这个解码器在调试状态无法插入,可能确实保护了
luckyboy101
2009-05-08
打赏
举报
回复
HRESULT AddToRot(IUnknown *pUnkGraph, DWORD *pdwRegister)
{
IMoniker *pMoniker;
IRunningObjectTable *pROT;
if(FAILED(GetRunningObjectTable(0,&pROT)))
{
return E_FAIL;
}
WCHAR wsz[256];
wsprintfW(wsz,L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph,
GetCurrentProcessId());
HRESULT hr=CreateItemMoniker(L"!", wsz,&pMoniker);
if(SUCCEEDED(hr))
{
hr=pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE,pUnkGraph,
pMoniker,pdwRegister);
pMoniker->Release();
}
pROT->Release();
return hr;
}
void RemoveFromRot(DWORD pdwRegister)
{
IRunningObjectTable *pROT;
if(SUCCEEDED(GetRunningObjectTable(0,&pROT)))
{
pROT->Revoke(pdwRegister);
pROT->Release();
}
}
#ifdef _DEBUG
hr=AddToRot(pGraph,&dwRegister);
#endif
在graphedit中看看vc中的filter
UDX协议
2009-05-07
打赏
举报
回复
一般不会出现,你可以注册到rot上,在ge中可以明确看到不同点。
如果真如你说的不同,请把filter链路的名字排出来,帮你分析一下。
天天学习^好好向上
2009-05-07
打赏
举报
回复
难道没有哪位遇到过这种问题吗?
VS与
directshow
开发版本
问题
关于VS开发环境与
DirectShow
版本
问题
,
DirectShow
已经从DirectX中分离出来。帮助你安装合理的版本
DirectShow
AV 视频管理源码
DirectShow
AV 视频管理源码
DirectShow
AV 视频管理源码
DirectShow
AV 视频管理源码
DirectShow
AV 视频管理源码
graphedt dx8.1
directshow
的老的经典工具
graphedt dx8.1
directshow
的老的经典工具
DirectShow
开发指南
DirectShow
开发指南
DirectShow
开发指南
解压密码是 mao.ji.need.help
DirectShow
开发
DirectShow
开发
DirectShow
开发
c++
directshow
采集摄像头
VC++ 采集摄像头程序,对于显示摄像头的有一定的借鉴意义
多媒体/流媒体开发
2,554
社区成员
20,277
社区内容
发帖
与我相关
我的任务
多媒体/流媒体开发
专题开发/技术/项目 多媒体/流媒体开发
复制链接
扫一扫
分享
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章