如何在IQualProp::get_AvgFrameRate中重置帧速率?

How to reset a frame rate in IQualProp::get_AvgFrameRate?

本文关键字:帧速率 AvgFrameRate IQualProp get      更新时间:2023-10-16

我使用 IQualProp::get_AvgFrameRate 方法从 EVR 渲染器获得平均帧速率。它运行良好,但是在 DirectShow 图形中调用暂停/运行后,我得到了错误的帧速率值。这是我的一些解决方案:

  1. 标准解决方案:

    布尔暂停(( { IMediaControl* pMediaControl; pMediaControl->Pause((; }

    布尔运行(( { IMediaControl* pMediaControl; pMediaControl->Run((; }

在 pMediaControl->Run(( 之后,渲染器向我显示的帧速率值比所需的低两倍。但是在 10-15 秒内,这些值会恢复。

  1. Via Stop(( 方法:

    布尔暂停(( { IMediaControl* pMediaControl; pMediaControl->Stop((; pMediaControl->Pause((; }

    布尔运行(( { IMediaControl* pMediaControl; pMediaControl->Run((; }

在 Pause(( 中,我添加了 pMediaControl->Stop((。在 Run(( 之后,我得到了正确的帧速率,但渲染器冻结了 10-15 秒。

  1. Using IMediaFilter::Run((

    布尔暂停(( { IMediaControl* pMediaControl; pMediaControl->Stop((; pMediaControl->Pause((; }

    布尔运行(( { IMediaFilter* pMediaFilter; pMediaFilter->Run(1000000(;延迟 10ms }

在这里,我得到了很好的结果,没有冻结和错误的值。但是 CPU 利用率比 Pause(( 之前高出两倍。

想法?

当我通过计算帧获得平均帧速率时,我可以返回到我的旧模式,但我想使用 IQualProp::get_AvgFrameRate 方法。

我回到了旧模式。 重写获取平均 FPS 的代码比三个源过滤器的返工更好