directshow stop函数 directshow,Stop()失败 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DEBUG调试时可以暂停进程,看看函数调用堆栈在哪个模块没退出来。STOP里的话,基本上是线程没退出来。 围观中……LZ太强悍了,但是问题描述的有点简单如果有必要,可以贴下IBaseFilter上的那几个控制函数的实现 这是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;} 楼主,你这个问题解决没有呢?我现在做directshow释放的时候调用stop,也会卡死在这一句,实在是不明白到底是哪里出了问题,如果楼主解决了,还请指教,谢谢了。 急!!mfc 对话框问题 ShowContextMenu自定义浏览器上下文菜单返回菜单命令的疑惑 有个字使用拼音,五笔都无法打出,怎么办?我现在要将这个字输入到数据库中。 请教VNC驱动的使用 关于定制ListCtrl VC 如果如何像VB一样调用set objShell=wscript.createObject("wscript.shell") vc中 怎样把 .xls 文件 转化成 .dat文件? 散分以犒赏兄弟们!——3 CEdit 中怎么响应回车事件? 到哪里可以下载到MSDN?谢谢! 卷映射拷贝服务(VSS)编程 关于WPARAM怎么转换为LPCTSTR
STOP里的话,基本上是线程没退出来。
如果有必要,可以贴下IBaseFilter上的那几个控制函数的实现
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;
}