FFmepg D3D11va解码渲染 内存泄漏排查

  • 背景介绍
  • 排查思路
    • D3D渲染对象
    • FFmpeg内存探测

背景介绍

Rtsp播放器,采用FFmepg D3D11va硬解码 + D3D11渲染。
正常播放,内存使用正常,稳定在80M左右。
轮询,即定时关闭后重新打开,发现存在内存泄漏,半小时内存增长30M。

排查思路

因为内存泄漏只会出现在轮询的时候,所以初步定位泄漏发生在关闭视频,资源释放的时候。
因为D3D11渲染view这块收尾比较仓促,所以初步将目光对准了d3d11的渲染view。

D3D渲染对象

D3D成员变量几乎全采用ComPtr维护,该智能指针可以帮助我们来管理这些COM组件实现的接口实例,而无需过多担心内存的泄漏。该智能指针的大小和一般的指针大小是一致的,没有额外的内存空间占用。
这里不放心的话,可以使用ID3D11Debug来协助检查内存泄漏。
具体用法见检查D3D对象是否释放

![我的d3d对象打印结果](https://img-blog.csdnimg.cn/e0f220ef13224d21bd39f337dbcd029f.png)

经检测,有两个对象没有释放,遂手动释放。

重新测试,发现居然还有内存泄漏的情况,顿感棘手。
因为现在所有的解码渲染流程都和软解一样,但是软解不存在内存泄漏。
花费一个下午。通过控制变量,再次确认排除了渲染,解码流程存在泄漏的可能。
第二天,终于想起一个点,硬解采用了内存探测的方式打开输入流,会不会是探测这部分数据未释放导致泄漏?

FFmpeg内存探测


观察这段代码,明显有两处申请内存的地方。
我之前一直以为这里的空间通过
avformat_close_input(&m_pFmtCtx)这一行代码就可以回收,现在心里却有些拿不准。
于是baidu了一下,发现这里确实需要手动释放。于是修改如下:

// An highlighted block
if (m_pFmtCtx) {if (m_pFmtCtx->pb) {av_freep(&(m_pFmtCtx->pb->buffer));avio_context_free(&m_pFmtCtx->pb);}avformat_close_input(&m_pFmtCtx);}

通过验证,内存泄漏修复,大功告成!

FFmepg D3D11va解码渲染 内存泄漏排查相关推荐

  1. iview select 内存泄漏_Vue遇到的内存泄漏排查处理

    Vue遇到的内存泄漏排查处理 1.定位问题跟踪具体那一部分造成的泄漏. (1)js写法(闭包.全局变量等).dom事件监听.循环定时器等这些造成的泄漏在度娘上应该都很好找到处理: (2)组件的泄漏(D ...

  2. 一次恐怖的 Java 内存泄漏排查实战

    转载自  一次恐怖的 Java 内存泄漏排查实战 最近在看<深入理解Java虚拟机:JVM高级特性与最佳实践>(第二版)这本书,理论+实践结合,深入浅出,强烈推荐给大家. 这两天对JVM内 ...

  3. 填坑总结:python内存泄漏排查小技巧

    摘要:最近服务遇到了内存泄漏问题,运维同学紧急呼叫解决,于是在解决问题之余也系统记录了下内存泄漏问题的常见解决思路. 本文分享自华为云社区<python内存泄漏排查小技巧>,作者:luti ...

  4. 异常连接导致的内存泄漏排查

    目录 异常连接导致的内存泄漏排查 背景 详细流程 使用windbg分析dump文件 使用wireshark抓包分析 完成端口和重叠IO 重叠I/O 完成端口 Reactor模型与Proactor模型 ...

  5. C++内存泄漏排查以及几个工具

    近期排查老项目App的偶发闪退问题过程中,发现程序竟然有内存泄漏的情况,表现为连续运行多天后程序占用的虚拟内存和物理内存都会持续升高,经过排查修改,找出了多处内存泄漏,现对排查过程做个小结. 内存泄漏 ...

  6. 记一次SOFA内存泄漏排查过程

    记一次内存泄漏排查过程 起因 某天中午大家还在安静的午休,睡得正香的时候突然被一阵手机滴-滴滴直响短信惊醒.一看是应用的服务器告警并且对应服务的所有机器都在告警"健康检查失败,自动拉下线&q ...

  7. iOS 内存泄漏排查方法及原因分析

    级别: ★★☆☆☆ 标签:「iOS」「内存泄漏排查」「Leaks工具」 作者: MrLiuQ 审校: QiShare团队 本文将从以下两个层面解决iOS内存泄漏问题: 内存泄漏排查方法(工具) 内存泄 ...

  8. JS内存泄漏排查方法——Chrome Profiles

    本文转自JS内存泄漏排查方法--Chrome Profiles 概述 Google Chrome浏览器提供了非常强大的JS调试工具,Heap Profiling便是其中一个.Heap Profilin ...

  9. 内存泄漏排查攻略之:Show me your Memory

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源| cnblogs.com/yougewe/p/11334342.html java 语言有个神奇的地方,那就是你时不时会去 ...

最新文章

  1. 【Android】自定义view-拖动小球移动
  2. HDU - 6704 K-th occurrence (后缀数组+主席树)
  3. java 的 == 和equals()区别
  4. js - 执行上下文和作用域以及闭包
  5. c# maiform父窗体改变动态的gridew 奇偶行变色的快捷方法
  6. oracle 调用java 类_oracle数据库PL SQL调用Java类程序代码
  7. 一天搞定DXUT三步曲之二:添加文本
  8. margin负值的巧妙运用(HTML、CSS)
  9. 2.泡妞与设计模式(三) 外观模式
  10. 大众汽车宣布联手AWS开发汽车工业云
  11. 错误:has been compiled by a more recent version of the Java Runtime (class file version 56.0)
  12. wamp+php+下载,PHPWind Wamp
  13. windows7共享打印机无法连接0x00000bcb错误怎么解决
  14. 数码数字字体_2020年最佳创意数字艺术软件
  15. 【畅购商城】购物车模块之添加购物车
  16. RT_Thread_串口数据解包
  17. 读书笔记:卓有成效的管理者
  18. openjweb1.8 java web应用快速开发平台产品白皮书
  19. css-边框(border)
  20. FLASH2.0学习教程

热门文章

  1. 01.微信小程序开发之环境搭建
  2. div在body中水平垂直居中
  3. 从第一性原理谈谈如何做好智驾产品
  4. 【单元复习】之标日初级上册第三、四单元
  5. 手机访问个人电脑资源
  6. 1、My Scripts
  7. 使用高德(百度)地图API
  8. Go语言之基本数据类型
  9. [转]Openstack Havana Dashboard测试和使用
  10. 上班工作事情,下班ue