这个MSDN页面描述了一些过滤器需要在暂停状态下从GetState()返回VFW_S_CANT_CUE,如果在暂停状态下过滤器可能无法交付。这一切似乎都足够清楚了。似乎如果有任何疑问,那么返回VFW_S_CANT_CUE以确保Pause()不会挂起可能是更好的方法。
不过,返回VFW_S_CANT_CUE有什么缺点吗?如果图中的多路复用器或多路分解器筛选器返回VFW_S_CANT_CUE,从暂停状态恢复流是否可能表现不佳或失去同步?
我继承了几个过滤器的源代码,这些过滤器有时由于我不清楚的原因而返回VFW_S_CANT_CUE (例如,只有在没有输出样本的情况下才返回VFW_S_CANT_CUE )。我想知道总是返回VFW_S_CANT_CUE是否有任何风险。
发布于 2015-05-01 14:21:03
在停止/暂停转换期间,返回VFW_S_CANT_CUE会禁用与渲染器的同步:过滤器图形管理器不会等待渲染器报告它们已准备就绪,这在视频渲染器的情况下意味着它会接收横幅帧并呈现它(我假设是通过发送EC_PAUSED通知)。禁用同步意味着IMediaControl::Pause会立即返回,而不会等待标语帧,而实时信号源可能更愿意这样做。
我能想到的唯一缺点是Pause调用完成后,你不能确定视频渲染器呈现的是有效的帧而不是黑色。我认为你所看到的VFW_S_CANT_CUE背后的模糊推理是开发人员试图避免他在调试过程中偶然发现的死锁。
发布于 2019-04-30 18:28:09
如果filter在GetState()方法中返回VFW_S_CANT_CUE (即LiveSource),则Pause()方法不会等待样本排队。正因为如此,当过滤器图启动时,流时间启动。否则,过滤器图将等待,直到几个样本已排队。并且只有在该流时间之后才会被启动(因为在Pause()之后,Run()方法被调用)
https://stackoverflow.com/questions/29971197
复制相似问题