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

问题描述 投票:0回答:1

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

  1. 标准解决方案:

    bool Pause(){IMediaControl * pMediaControl;pMediaControl-> Pause();}

    bool Run(){IMediaControl * pMediaControl;pMediaControl-> Run();}

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

  1. 通过Stop()方法:

    bool Pause(){IMediaControl * pMediaControl; pMediaControl-> Stop();pMediaControl-> Pause();}

    bool Run(){IMediaControl * pMediaControl;pMediaControl-> Run();}

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

  1. 使用IMediaFilter :: Run()

    bool Pause(){IMediaControl * pMediaControl; pMediaControl-> Stop();pMediaControl-> Pause();}

    bool Run(){IMediaFilter * pMediaFilter;pMediaFilter-> Run(1000000); //延迟10ms}

这里,我得到了不错的结果,没有冻结和错误的值。但是,CPU利用率是Pause()之前的两倍。

想法?

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

c++ rendering directshow
1个回答
0
投票

我回到了旧的模式。重写获得平均FPS的代码比重做三个源过滤器要好]

© www.soinside.com 2019 - 2024. All rights reserved.