自己根据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中也是这样,怎么办?
...全文
427 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gloom 2007-06-12
  • 打赏
  • 举报
回复
请教楼上的,如果我当前没有数据需要传送,返回S_OK岂不是会传送一个空白帧数据?
rageliu 2007-06-12
  • 打赏
  • 举报
回复
调试下吧,看哪儿出的错误,找到错误代码才好搞
rageliu 2007-06-12
  • 打赏
  • 举报
回复
好象那是个pull模式的source filter,好久没看到过了,不过停止等一般是由render一直向上传递,直到source,返回S_FALSE怎么继续执行的呢?
tufaqing 2007-06-06
  • 打赏
  • 举报
回复
这个函数好像没有问题,可能是其他地方的问题吧。该加锁的地方加锁了吗?你可以不用修改这个函数,只要FillBuffer都返回S_OK就可以了。
gloom 2007-06-06
  • 打赏
  • 举报
回复
大家帮忙啊
gloom 2007-06-05
  • 打赏
  • 举报
回复
我在VS2003中很整齐的代码到了CSDN怎么这么乱了?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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