在 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 视频文件:
- picturepush.com/public/8931745 - 完整图 - +6 Mb 每次播放后都会增长私有字节
- picturepush.com/public/8931760 - 带 DMO 转换器,不带采样器 - 无内存泄漏
- picturepush.com/public/8931766 - 使用 DMO 转换器,没有采样器,但使用视频渲染器 - 每次播放后 +7 Mb 增长私有字节
- picturepush.com/public/8931770 - 只有解码器 - 没有内存泄漏