视频GPU加速内存泄露的解决

分类: C/C++ 发布时间: 2017-07-27 21:58

最近一直在研究ffmpeg,追着雷神的博客和源码。雷神的视频文章写得真的很清晰,很适合我这种小白上手,只不过英年早逝。使用他的GPU加速进行解码的时候发现了内存问题,只能自己硬着头皮进行解决了。

源码下载路径:http://pan.baidu.com/s/1i4Q9zCD 密码:kkmf

图片(GPU)

ffmpeg内存泄漏

ffmpeg内存泄漏

下面是修复ffmpeg内存泄漏后的截图。

ffmpeg无内存泄漏效果

ffmpeg无内存泄漏效果

产生的原因主要是在dxva2_retrieve_data中的m_pBackBuffer没有释放,修改为

GetClientRect(d3dpp.hDeviceWindow, &m_rtViewport);
ctx->d3d9device->StretchRect(surface, NULL, m_pBackBuffer, &m_rtViewport, D3DTEXF_LINEAR);
ctx->d3d9device->EndScene();
ctx->d3d9device->Present(NULL, NULL, NULL, NULL);

if ( m_pBackBuffer )
{
	m_pBackBuffer->Release();
	m_pBackBuffer = NULL;
}

LeaveCriticalSection(&cs);

再添加一个释放函数。在解码结束后释放解码器。

int dxva2_close(AVCodecContext *s)
{
	dxva2_destroy_decoder(s);
	dxva2_uninit(s);
	return 0;
}

添加上面两个函数后,就不会再有内存泄漏了。


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!