自己根据CSourceStream做DirectShow 源Filter不能停止,求助
gloom 2007-06-05 01:58:45 输出Pin是从CSourceStream派生的,我重载了DoBufferProcessingLoop函数
因以原来是FillBuffer返回S_FALSE时会结束运行,我改成返回S_FALSE也继续运行,代码如下
HRESULT CNetOutPin::DoBufferProcessingLoop(void) {
Command com;
OnThreadStartPlay();
do {
while (!CheckRequest(&com)) {
IMediaSample *pSample;
HRESULT hr = GetDeliveryBuffer(&pSample,NULL,NULL,0);
if (FAILED(hr)) {
Sleep(1);
continue;
}
hr = FillBuffer(pSample);
if (hr == S_OK) {
hr = Deliver(pSample);
pSample->Release();
if(hr != S_OK)
{
DbgLog((LOG_TRACE, 2, TEXT("Deliver() returned %08x; stopping"), hr));
return S_OK;
}
} else if (hr == S_FALSE) {
// 只有这个地方做了修改,如何返回S_FALSE也正常运行,只是不调用Deliver传递数据
pSample->Release();
} else {
pSample->Release();
DbgLog((LOG_ERROR, 1, TEXT("Error %08lX from FillBuffer!!!"), hr));
DeliverEndOfStream();
m_pFilter->NotifyEvent(EC_ERRORABORT, hr, 0);
return hr;
}
}
if (com == CMD_RUN || com == CMD_PAUSE) {
Reply(NOERROR);
} else if (com != CMD_STOP) {
Reply((DWORD) E_UNEXPECTED);
DbgLog((LOG_ERROR, 1, TEXT("Unexpected command!!!")));
}
} while (com != CMD_STOP);
return S_FALSE;
}
结果调用 FilterGraph的StopWhenReady不能正常停止,Stop()可以停止,但随后报错,在GraphEdit中也是这样,怎么办?