RK3588 MPP解码句柄泄露问题记录

这篇具有很好参考价值的文章主要介绍了RK3588 MPP解码句柄泄露问题记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 问题背景

最近在用瑞芯微3588开发板做一个视频处理的项目,前两天拷机发生了闪退,弹出的问题是“打开文件过多”,经过初步排查定位到是MPP硬解码部分出的问题。

我的MPP解码部分主要用来读取网络相机rtsp流,主要参考了一个github项目GitHub - MUZLATAN/ffmpeg_rtsp_mpp: ffmpeg 拉取rtsp h264流, 使用mpp解码, 目前在firefly 板子上跑通了

 我将它封装成C++类的形式,方便使用。最开始使用是没有问题的,但是在我加了一个相机异常处理机制的时候,就出现了“打开文件过多”的问题。这个相机异常处理机制主要是解决相机未连接、断电重连的时候,软件依然正常运行,而且在相机重连之后可以重新读取画面,而软件不需要重启。

我的解决办法是,如果检测到无法从相机获取数据了,就调用析构函数释放掉解码器(我封装的那个类),然后重新实例化解码类尝试连接相机。那个项目里,获取相机数据采用的是ffmpeg的av_read_frame然后用mpp调用硬件进行解码。

if (av_read_frame(pFormatCtx, av_packet) < 0) //从相机获取数据
    {
        printf("av_read_frame get packet failed!");
        return -1;
    }

 在我尝试多次插拔相机之后,软件就出现了文章开头的问题:打开文件过多。

2. 问题现象及分析

问题现象主要分为两种,一种是相机一直连接或者一直不连接,这样软件不会出现问题;第二种是相机时而连接,时而不连接,就会导致“文件打开过多”。

经过查阅,得知rk3588开发板的每个进程最多能打开1024个文件

利用lsof指令实时监控软件打开的文件数

lsof -p 进程号 | wc -l

RK3588 MPP解码句柄泄露问题记录

发现打开的文件数量确实在一直上涨,而且也确实发生在插拔相机的时候。但是现在并不清楚到底泄露了什么资源,可以进一步查看进程具体打开了哪些文件

查看软件打开的文件:

ls -l /proc/进程id/fd

RK3588 MPP解码句柄泄露问题记录

 可以看出来,每次插拔相机都导致一个mpp_service和若干个dmabuf增加,也就是泄露。

所以,原因应该也很明显了,就是解码器释放的时候没有完全释放掉资源,下面就需要排查代码了。

3. 问题解决

启动人眼搜索大法,一行行排查代码,看到疑似申请了资源的代码都详细查看一下

最后定位到两个函数:

RK3588 MPP解码句柄泄露问题记录

RK3588 MPP解码句柄泄露问题记录

 第一个函数mpp_create会申请mpp services,是导致mpp_services泄露的根源;

第二个函数mpp_buffer_group_get会申请缓冲区暂存解码出来的图像。

在两个函数头文件声明的地方,也都发现了相应的释放函数:

RK3588 MPP解码句柄泄露问题记录

RK3588 MPP解码句柄泄露问题记录

添加到析构函数中,问题解决~

4. 总结

这么想来,RAII真是福音,修改后的代码已放到这儿了

MPP解码https://download.csdn.net/download/a1367666195/87925718?spm=1001.2014.3001.5503文章来源地址https://www.toymoban.com/news/detail-490407.html

到了这里,关于RK3588 MPP解码句柄泄露问题记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 玩转rk3588(六):rk3588使用ffmpeg实现硬件解码,解决opencv中VideoCapture获取网络摄像头视频时,一直在open时返回false的问题(一)

    目录 0、前言 1、开发环境 2、安装rkmpp 3、安装x264 4、安装libdrm 5、安装ffmpeg 6、相关报错 1)libdrm编译过程中报错

    2024年02月03日
    浏览(33)
  • RK3399Pro-硬件编解码器MPP库快速上手--(二)MPP编码入门

    整个编码分为mpp_create,mpp_init, 再通过mpp的接口mpi-control接口来进行参数设置.一般需要配置三类信息: 码率控制方式(MPPEncRcCfg),通过命令MPP_ENC_RC_CFG配置; 输入控制配置(MppEncPrepCfg),通过命令MPP_ENC_SET_PREP_CFG配置; 协议控制配置(MppEncCodecCfg),通过命令MPP_ENC_SET_CO

    2024年02月02日
    浏览(23)
  • rk3588/rk356x/rv1109/rv1126 live555移植+mpp编译 rtsp拉流

    本文主要是为了记录一下rk板子的踩坑日记。 项目主要是rk3588 rtsp拉流。 1.下载MPP源码:https://github.com/rockchip-linux/mpp 2.rk3588/rk356x的板子进入Mpp源码目录 mpp/build/linux/aarch64 (rk3588/rk356x是64位板子)中,修改 arm.linux.cross.cmake 文件中的配置 修改 make-Makefiles.bash 的配置,主要改

    2023年04月19日
    浏览(29)
  • rk3588 ffmpeg使用硬件解码

    在https://johnvansickle.com/ffmpeg/下载最新的版本然后解压 将ffmpeg移动到/usr/local/bin文件夹 命令行输入ffmpeg没有报错就安装好了 git下载mpp包 编译安装 解压 –prefix 指定安装目录 –host 当前编译工具链的前缀 ll /usr/bin/gcc*查看 编译指令 –enable-gpl 允许使用GPL代码,生成的库和二进制

    2024年02月04日
    浏览(28)
  • RK3588芯片支持8K视频的硬编解码

    RK3588是一款采用8nm制程工艺的高端通用型SoC,CPU采用四核A76和四核A55的八核架构,GPU采用Mail G610MP4,集成6TOPS独立NPU,支持四通道LPDDR5,有效保证了RK3588芯片的性能输出。RK3588在视频编解码方面也十分突出,支持8K视频的硬编硬解,非常适合VR(虚拟现实)、AR(增强现实)、

    2024年02月12日
    浏览(32)
  • 53、RK3588测试视频编解码和 POE OAK Camera编码结合开发

    基本思想:一直想学rk3588的视频编解码,奈何没有设备,最近获得机会,利用空闲时间好好研究一番,正好手中的深度相机oak camera支持视频编码,逐想用软解编码和瑞芯微的mpp硬解码去走一波,本实验使用的poe-rj45接口和usb低电压接口测试 测试数据

    2024年02月06日
    浏览(71)
  • RK3588 编解码盒子 之 RTL8211FS-CG光口调试

    [RK3588从入门到精通] 专栏总目录 本文是基于RK3588平台,SDK版本:RK3588_ANDROID12.0 RTL8211FS-CG光口调试总结。 视频桥接芯片:RTL8211FS-CG 驱动代码:“kernel/drivers/net/phy/realtek.c” 本次调试的方案功能:RK3588 调试RTL8211FS-CG 转接出光口 硬件工程师参考RTL8211FS-CG发布的设计图设计 以下

    2023年04月16日
    浏览(25)
  • 记一次奇怪的文件句柄泄露问题

    记录并分享一下最近工作中遇到的 Too many open files 异常的解决过程。 产品有个上传压缩包并导入配置信息到数据库中的功能,主要流程如下: 用户上传压缩包; 后端解压存放在临时目录,并返回列表给用户; 用户选择需要导入哪些信息; 后端按需插入数据库中,完成后删

    2024年02月05日
    浏览(38)
  • RK3588环境配置过程全记录 step 1

    最近在做毕设,由于是第一次接触NPU,所以踩了不少坑,顺便将它记录下来,防止后来者继续踩(doge)hh。 许多人都和我一样,刚到手拿到一块NPU算力版的时候都不知道从何下手,是先在PC端操作呢还是直接在板子上操作? 本人虽然熟悉一些类似于STM32 ,esp等板子,但是也是

    2024年02月09日
    浏览(34)
  • 踩坑记录2——RK3588跑通YOLO v5+DeepSORT

    上篇说到RK3588编译OpenCV, 这篇记录一下跑通YOLO v5+DeepSORT的愉(chi)快(shi)历程. 如果本身缺少ffmpeg而编译了没有ffmpeg版本的OpenCV, 则视频无法读取. 解决方案参照CSDN, 首先安装ffmpeg: 之后安装一堆dev: libavcodec-dev 、libavformat-dev、libavutil-dev 、libavfilter-dev、 libavresample-dev、 libswresample

    2024年01月22日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包