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. leetcode 567. Permutation in String 字符串的排列 滑动窗口法
  2. 代码重构中的几个概念
  3. IEEE的论文需要注意的一些
  4. java+redis+lua生成自动增长的ID序列号
  5. C#中DataTable中的Compute方法使用收集
  6. Kafka消息系统基础知识索引消息
  7. 华为机试HJ64:MP3光标位置
  8. Apache CXF实现Web Service(5)—— GZIP使用
  9. 2019.7.5刷题统计
  10. mysql change column_Modify column Vs change column
  11. 处理javaweb中文乱码
  12. 迅歌点歌系统服务器过期或不信任怎么办,点歌机常见问题解析
  13. CPE/CPA/CPL/CPC/CPM/CPO/CPS/CPV/CPT/CPP广告
  14. 算法面试题-用单向链表表示十进制整数,求两个正整数之和。1234+34=1268
  15. CSP 2018-9-4 再卖菜 搜索 + 剪枝
  16. FPGA输出五路PWM
  17. 扇贝编程的python课怎么样_‎扇贝编程-人人能学会的python课 a l’App Store
  18. HTML入门级学习附教程链接~
  19. 【续】DeepMind项目取得新进展:一种改进机器人学习系统的新思路
  20. SOLIDWORKS Simulation带接触的装配体分析方法

热门文章

  1. 【数据结构基础】线性数据结构——线性表概念 及 数组的封装(C和Java)
  2. 吴恩达机器学习课后作业1——单变量线性回归(Linear regression with one variable)
  3. 互联网时代,云计算的6大特征
  4. PC端微信浏览器js点击事件失效
  5. r76800h参数 r7 6800h核显锐龙r7 6800h什么水平
  6. 计算机专业用r5跟i5,r5处理器和i5差距
  7. 智慧社区小助手的设计与开发
  8. 如何导入导出MySQL数据库----*.sql文件操作
  9. keil MDK 在程序调试结束时卡死
  10. 服务器系统如何加密文件夹,用服务器共享文件夹管理软件、电脑共享文件加密软件保护共享文件安全...