当前位置: 首页 > news >正文

解决 FFmpeg 使用 C/C++ 接口时,解码没有 shell 快的问题(使用多线程)

一、问题

        硬件设备为香橙派 5Plus,最近需要使用硬件视频解码来加速 YOLO 的检测,shell 窗口的FFmpeg已经调通,详见文章:

编译支持 RKmpp 和 RGA 的 ffmpeg 源码_rk3588 ffmpeg mpp-CSDN博客https://blog.csdn.net/plmm__/article/details/146188927?spm=1001.2014.3001.5501        在实际测试时,发现c++接口的解码占用情况较低,只有三个工作线程:

而使用 shell 窗口进行解码时,可以达到13个线程:

二、使用多线程

        询问 AI 后,原来是解码器的上下文 AVCodecContext 在初始化后默认是使用单线程,可以通过打印变量得到:

cout << "thread_count: " << codecContext->thread_count << endl;

我的输出是 1。这里可以手动指定线程数,也可以改为 0 ,FFmpeg 会根据 CPU 核心数和编解码器特性自动选择线程数。

        以下是我的代码片段:

/* 初始化编解码器上下文 */ 
    codecContext = avcodec_alloc_context3(codec);
    if (!codecContext)
        throw std::runtime_error("Couldn't allocate decoder context");

    /* 获取视频流,它包含了视频流的元数据和参数 */
    video_stream = formatContext->streams[videoStreamIndex];
    
    /* 复制视频参数到解码器上下文 */ 
    if (avcodec_parameters_to_context(codecContext, video_stream->codecpar) < 0)
        throw std::runtime_error("Couldn't copy decoder context");

    /* 自动选择线程数 */
    codecContext->thread_count = 0;

三、检查

        使用自动选择线程数后,工作线程会在 3 到 10 和线程之间浮动:

这个只是综合测试解码的情况,如果只解码并且不需要输出,应该就可以达到 shell 的 13 个线程。

http://www.dtcms.com/a/99593.html

相关文章:

  • 用Python实现资本资产定价模型(CAPM)
  • ubuntu 安装mysql
  • Python 中列表(List)、元组(Tuple)、集合(Set)和字典(Dict)四大数据结构的完整对比
  • macOS Jdk1.8安装(目前主流版本的jdk)
  • 【漫话机器学习系列】163.方差膨胀因子(Variance Inflation Factor, VIF)
  • Spring 通过多种方式实现使用线程
  • 在用redis当中可能遇到的问题解决方案以及redis中的一些名词解释
  • HTML 标签类型全面介绍
  • docker-compese 启动mysql8.0.36与phpmyadmin,并使用web连接数据库
  • Reactive编程:数据流和观察者
  • MySQL多表查询实验
  • c++-引用
  • 【STM32】WDG看门狗(学习笔记)
  • 积分赛——串口控制指示灯
  • MySQL排序详解
  • vue3 响应式系统指南
  • 无人机中继传输数据链技术,(无人机+自组网)远距离传输技术实现详解
  • 大唐杯02 DTM.PX4.016
  • 企业级知识库建设:自建与开源产品集成的全景解析 —— 产品经理、CTO 与 CDO 的深度对话
  • Python基础知识第二天:从格式化到流程控制
  • VSCode Java 单元测试没有运行按钮
  • 代码随想录day2 数组总结
  • 03-SpringBoot3入门-配置文件(自定义配置及读取)
  • Centos 7 搭建 jumpserver 堡垒机
  • Nginx 解决具有不安全、不正确或缺少 SameSite 属性的 Cookie方案
  • IPD流程:科技企业IPD流程培训稿
  • 独立站系统:架构设计、功能实现与用户界面优化
  • 【项目合集】只能xx养殖系统,STM32、esp8266、OLED屏幕、dht11、光敏、水位、加热、风扇
  • STL性能优化实战:如何让C++程序畅快运行
  • 从代码学习数值优化算法 - 分片McCormick放松方法Python版