视频GPU加速内存泄露的解决
最近一直在研究ffmpeg,追着雷神的博客和源码。雷神的视频文章写得真的很清晰,很适合我这种小白上手,只不过英年早逝。使用他的GPU加速进行解码的时候发现了内存问题,只能自己硬着头皮进行解决了。
源码下载路径:http://pan.baidu.com/s/1i4Q9zCD 密码:kkmf
图片(GPU)
下面是修复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;
}
添加上面两个函数后,就不会再有内存泄漏了。
扫描下方二维码,关注业余草微信公众号,回复“FFmpeg”关键词,获取 FFmpeg 视频教程!