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

rv1126解码的一些原理

        rv1126解码篇中,出现最重要的两个api一个是,send_vdec_thread线程里面调用的RK_MPI_SYS_SendMediaBuffer,把数据发到解码器。另外一个是read_vdec_thread线程的RK_MPI_SYS_GetMediaBuffer获取解码器里面的数据。

        今天想探讨一下他的底层原理。是怎么实现的,为什么在其中的一个线程里调用RK_MPI_SYS_SendMediaBuffer发送数据,另外一个线程调用RK_MPI_SYS_GetMediaBuffer,就可以获取到数据为什么呢?不管是海思还是瑞芯微的编解码,都是放到一个地方,再从其他地方拿来使用,流程知道,但是实现的原理不知道。通过画图分析。

用解码演示,编码也是一样的。下面两个柱子就表示两个线程,左边的send_vdec_thread发的是vdec的数据,有没有想过这个数据send后会到哪里?

        其实vdec存放在一个队列里面,可以像一下,队列是起到一个桥梁的作用,让两个线程通讯。

        所以上面的两个线程都要使用vdec的数据,所以下图,瑞芯微在rkmedia底层维护了一个队列。

        这个队列不仅是放解码数据,编码数据它也能放,或者一些其他数据都能放,所以底层是void*的

        所以vdec的数据发到了这个rk-queue里面,所以这个队列里面就有vdec的每一帧数据,队列有了数据RK_MPI_SYS_GetMediaBuffer线程就可以使用接口获取到每一帧的vdec的数据。大致的一个框图就是这样的

        但是还有一个问题, 左边发的是编码后的数据,右边拿的应该是解码后的数据,所以底层这个队列不止要存放数据,还要能解码数据,如果是编码,还要对数据编码。就是还要根据传入模模块号编解码数据。如果模块号是ednc就编码,vdec就是解码。

        总结:在RV1126/RV1109上面若对数据进行编解码操作通常使用RK_MPI_SYS_SendMediaBuffer根据MOD_ID对其进行对应的编解码工作,编解码工作完成之后就把对应的数据存放到RKMEDIA_QUEUE里面。若要获取对应的编解码数据,则调用RK_MPI_SYS_GetMediaBuffer从RKMEDIA_QUEUE获取每一帧编解码数据。应该海思平台也是这样做的。

        真正情况就是通过编解码器拿到数据,还有一种把编码器bind之后也能拿到数据,但是bind拿到数据是最原始的数据,没有修改的。一般数据都是VI的数据,如果是文件的就要通过RK_MPI_SYS_SendMediaBuffer拿到。

在RV1126上面做对应的编解码工作,一般分为两种:

  1. .RK_MPI_SYS_Bind方式,RK_MPI_SYS_Bind方式通常用在直接获取CMOS摄像头的数据(原生的VI数据),并且不做任何加工处理。
  2. .RK_MPI_SYS_SendMediaBuffer方式,这种方式能够解码CMOS摄像头VI处理过后的数据(包括:opencv、yolov3、asfort)或者读取文件的编解码数据等等。

 

http://www.lryc.cn/news/541068.html

相关文章:

  • 二级公共基础之数据结构与算法篇(七)排序技术
  • 深蕾科技智能多媒体SoC产品助力“DataEye剧查查之夜”微短剧盛会
  • Apache Doris 实现毫秒级查询响应
  • 计算机考研之数据结构:P 问题和 NP 问题
  • 新数据结构(13)——I/O
  • PySide6学习专栏(四):用多线程完成复杂计算任务
  • Python多线程编程理解面试题解析
  • Flutter - 初体验
  • 使用最广泛的Web应用架构
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-split_dota.py
  • Unity shader glsl着色器特效之 模拟海面海浪效果
  • `AdminAdminDTO` 和 `userSession` 对象中的字段对应起来的表格
  • sqlserver查询内存使用情况的方法
  • rust笔记7-生命周期显式标注
  • SQL Server 导入Excel数据
  • 【笔记】LLM|Ubuntu22服务器极简本地部署DeepSeek+联网使用方式
  • 【面试题】2025.02.19-前端面试题汇总
  • 小米AX3000T 路由器如何开启 SSH 安装 OpenWRT 系统,不需要降级 v1.0.91 (2025)
  • 火语言RPA--Excel插入空行
  • 具有整合各亚专科医学领域知识能力的AI智能体开发纲要(2025版)
  • 【Java 优选算法】位运算
  • 细分数字货币钱包的不同种类
  • Nginx Embedded Variables 嵌入式变量解析(4)
  • ARM64 Trust Firmware [四]
  • SQLMesh 系列教程6- 详解 Python 模型
  • 聊一聊vue如何实现角色权限的控制的
  • Python连接MySQL数据库图文教程,Python连接数据库MySQL入门教程
  • 懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)
  • 天 锐 蓝盾终端安全管理系统:办公U盘拷贝使用管控限制
  • LeetCode 2595.奇偶位数:位运算