1

在 AVI 容器视频文件中渲染 h.264 期间,我的应用程序的内存消耗以高速上升,大约 150 Mb/min。

这是我的图表图像的链接:http: //picturepush.com/public/8926555

如果使用 LAV 视频解码器 insted - 没有内存泄漏。

首先我建议,泄漏发生在我的代码中,但我只是关闭(在回调开始时设置“返回 S_OK”)两个样本抓取器过滤器 - 泄漏继续。

我也尝试在这样的停止图之后释放每个过滤器,但这没有删除泄漏:

if(m_pMediaControl)
{
    HRESULT hr = m_pMediaControl->Stop(); 

    LONG lCount;
    IUnknown* pUnk;
    IAMCollection*  p_Collection;
    hr = m_pMediaControl->get_FilterCollection(reinterpret_cast<IDispatch**>(&p_Collection));
    hr = p_Collection->get_Count(&lCount);
    for (int i=0; i<lCount; i++)
    {
        hr = p_Collection->Item(i, &pUnk);
        pUnk->Release();
    }
    p_Collection->Release();
}
m_pMediaControl.Release();

对任何建议都会很高兴,如何消除内存泄漏?

我在 graphedit 上创建了不同的图表,并观察了重复播放短(6 秒)h.264 视频文件:

  1. picturepush.com/public/8931745 - 完整图 - +6 Mb 每次播放后都会增长私有字节
  2. picturepush.com/public/8931760 - 带 DMO 转换器,不带采样器 - 无内存泄漏
  3. picturepush.com/public/8931766 - 使用 DMO 转换器,没有采样器,但使用视频渲染器 - 每次播放后 +7 Mb 增长私有字节
  4. picturepush.com/public/8931770 - 只有解码器 - 没有内存泄漏
4

0 回答 0