directshow stop函数

xxwy89 2013-03-25 07:33:52
自己弄了一个源滤镜添加H.264裸视频流,后面跟上推模式下的分离器,以及解码器,渲染器,但是播放过程中调用IMediaControl的成员函数Stop(),百分之九十九卡死在这一行,请问怎么处理呀?
...全文
194 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsldragon 2013-12-25
  • 打赏
  • 举报
回复
我是运行停止三次,一般前两次正常,第三次卡死
lsldragon 2013-12-25
  • 打赏
  • 举报
回复
指点一下,我也卡死在这儿了,不知道什么问题
luoliba007 2013-10-17
  • 打赏
  • 举报
回复
请问要怎么样才能让线程退出来呢?
luoliba007 2013-10-17
  • 打赏
  • 举报
回复
楼主,你这个问题解决没有呢?我现在做directshow释放的时候调用stop,也会卡死在这一句,实在是不明白到底是哪里出了问题,如果楼主解决了,还请指教,谢谢了。
xxwy89 2013-03-27
  • 打赏
  • 举报
回复
这是sourcefilter的几个方法实现,各位大侠帮忙看看: CInputDataFilter::CInputDataFilter(LPUNKNOWN lpunk, HRESULT *phr) : CSource(NAME("InputData Filter"), lpunk, CLSID_InputData_Filter) { ASSERT(phr); CAutoLock cAutoLock(&m_cStateLock); m_paStreams = (CSourceStream **)new CDataOutputPin*[1]; if(m_paStreams == NULL) { if(phr) *phr = E_OUTOFMEMORY; return; } m_paStreams[0] = new CDataOutputPin(phr, this, L"Output"); if(m_paStreams[0] == NULL) { if(phr) *phr = E_OUTOFMEMORY; return; } m_mediaType.InitMediaType(); } CInputDataFilter::~CInputDataFilter() { m_listBuffer.clear(); } CUnknown * WINAPI CInputDataFilter::CreateInstance(LPUNKNOWN lpunk, HRESULT *phr) { ASSERT(phr); CAutoLock cAutoLock(&m_cStateLock); CUnknown *punk = new CInputDataFilter(lpunk, phr); if(punk == NULL) { if(phr) *phr = E_OUTOFMEMORY; } return punk; } STDMETHODIMP CInputDataFilter::NonDelegatingQueryInterface(REFIID riid, void ** ppv) { CAutoLock cAutoLock(&m_cStateLock); CheckPointer(ppv, E_POINTER); if (riid == IID_IInputData) { return GetInterface((IInputData*) this, ppv); } else { return CSource::NonDelegatingQueryInterface(riid, ppv); } } STDMETHODIMP CInputDataFilter::SetMediaType(AM_MEDIA_TYPE *pMediaType) { CAutoLock cAutoLock(pStateLock()); CheckPointer(pMediaType, E_POINTER); CMediaType mediaType(*pMediaType); m_mediaType = *pMediaType; return NOERROR; } STDMETHODIMP CInputDataFilter::PushData(BYTE *inBuffer, int length) { CAutoLock cAutoLock(pStateLock()); string cBuffer; cBuffer.assign((char*)inBuffer, length); m_listBuffer.push_back(cBuffer); return NOERROR; }
Daisy__Ben 2013-03-26
  • 打赏
  • 举报
回复
围观中……LZ太强悍了,但是问题描述的有点简单 如果有必要,可以贴下IBaseFilter上的那几个控制函数的实现
ArcRain 2013-03-25
  • 打赏
  • 举报
回复
DEBUG调试时可以暂停进程,看看函数调用堆栈在哪个模块没退出来。 STOP里的话,基本上是线程没退出来。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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