P5 RV1126编码测试Demo

目录

前言

01 测试Demo大致流程图

02 代码分析

2.1 VI设备初始化

2.2 使能通道 —— RK_MPI_VI_EnableChn

 2.3 VI 和 VENC绑定

2.4 创建 编码线程


 

前言

                             

从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板

🎬 个人主页:@ChenPi

🐻推荐专栏1: 《C++_@ChenPi的博客-CSDN博客》✨✨✨ 

🔥 推荐专栏2: 《Linux C应用编程(概念类)_@ChenPi的博客-CSDN博客》✨✨✨

🛸推荐专栏3:《嵌入式音视频_@ChenPi的博客-CSDN博客》
🌺本篇简介  :使用RV1126进行编码测试  

首先我们使用的硬件为瑞芯微的RV1126

kmedia是RK官方封装一层简易的API,把RGA、MPP、RKNN等等这些接口封装成高级的接口

该平台支持以下功能:

  1. VI(输入视频捕获)
  2. VO(视频输出显示)
  3. AI(音频采集)、AO(音频输出)
  4. VENC(H.265/H.264/JPEG/MJPEG编码)
  5. VDEC(H.265/H.264/JPEG、MJPEG 解码)
  6. RGA视频处理(包括旋转、缩放、裁剪)
  7. AENC(音频编码)、ADEC(音频解码)、
  8. MD(移动侦测)
  9. OD(遮挡侦测)
  10. VMIX(视频合成)
  11. MUXER(视频封装)
  12. VP(视频一入四出)

01 测试Demo大致流程图

  

因为这个测试Demo主要是编码进行视频编码

所以只用到VI和VENC 

  1. VI(输入视频捕获)
  2. VENC(H.265/H.264/JPEG/MJPEG编码)

02 代码分析

2.1 VI设备初始化

VI设备初始化有两步

  1. 设置通道属性
  2. 使能通道

 设置通道属性 —— RK_MPI_VI_SetChnAttr

设置通道的属性关键在于VI_CHN_ATTR_S结构体

结构体原型:

typedef struct rkVI_CHN_ATTR_S {const RK_CHAR *pcVideoNode; //video节点路径RK_U32 u32Width;            //分辨率宽度RK_U32 u32Height;           //分辨率高度IMAGE_TYPE_E enPixFmt;      //(VI格式)  RK_U32 u32BufCnt;          // 映射类型默认是:MMAPVI_CHN_BUF_TYPE enBufType; // VI通道模式VI_CHN_WORK_MODE enWorkMode;   //VI工作模式
} VI_CHN_ATTR_S;

需要注意的点:

结构体中的enBufType //VI 捕 捉 视 频 的 类 型  :

  • DMA 模 式(VI_CHN_BUF_TYPE_DMA) 
  • MMAP 模式(VI_CHN_BUF_TYPE_MMAP)

DMA:指的是直接访问内存的方式,相当于音视频数据直接从硬件传输到内存里面。这种方式的优点就
是两边传输的速度非常之快,但缺点就是非常消耗硬件资源,对硬件外设资源要求较高。

MMAP:指的是内存映射,这种方式就是把硬件外设、磁盘的文件映射到虚拟内存上面。然后用户只需
要对虚拟内存进行读写操作就可以对硬件外设进行操作了。这种方法的优点是用户不需要直接操作硬件就能够修改硬件的内容,换言之就是对硬件的消耗没那么大。

但是缺点就是:

第一,它的读写速度相对 DMA来说没那么快;

第二,有时候硬件写到虚拟内存的数据可能会出现丢失情况,导致数据出现丢失的情况。

2.2 使能通道 —— RK_MPI_VI_EnableChn

VENC的初始化:关键在于VENC_CHN_ATTR_S结构体,这个结构体是VENC设置的结构体

RV1126 编码器参数结构体包含在 VENC 通道属性结构体里面,我们可以看到 VENC 通道结
构 体 里 面 包 含 三 个 重 要 结 构 体 : 分 别 是

  • VENC_ATTR_S( 编 码 器 基 础 属 性 结 构 体 ) 
  • VENC_RC_ATTR_S(编码码率控制属性结构体)
  • VENC_GOP_ATTR_S(编码器 GOP 属性结构体)

设置完上述成员变量后,则使用RK_MPI_VENC_CreateChn创建编码层。

 2.3 VI 和 VENC绑定

设置完VI模块和VENC模块后,需要进行绑定VI和VENC才能够正常采集到编码数据。

采集的时候用到的结构体·MPP_CHN_S

typedef struct rkMPP_CHN_S {MOD_ID_E enModId;RK_S32 s32DevId;RK_S32 s32ChnId;
} MPP_CHN_S;

其中MPP_CHN_S的enModId是模块的ID、 s32ChnId是通道id。

这里分别创建两个MPP_CHN_S结构体,

  • VI的MPP_CHN_S,它的enModId选择的是RK_ID_VI,s32Id应该和VI创建的ID进行适配;
  • VENC的MPP_CHN_S,它的enModId选择的是RK_ID_VENC,s32ChnId和VENC创建的Id对应。

创建完两个MPP_CHN_S结构体后,利用RK_MPI_SYS_BIND把VI和VENC进行绑定。

2.4 创建 编码线程

从collect_venc_thread线程主要作用是获取VENC编码的码流数据,并实时保存到H264文件。

在这个线程里面,有几个重要的API需要讲解:

RK_MPI_SYS_GetMediaBuffer的作用是获取对应通道的数据,

这个API第一个参数是模块ID,第二个参数是通道ID第三个参数阻塞时间这里默认是-1不阻塞。

获取VENC通道的数据后,这其中

  • RK_MPI_MB_GetPtr是获取VENC缓冲区数据,
  • RK_MPI_MB_GetSize是获取VENC的缓冲区长度,并把缓冲区数据fwrite写到H264文件。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MP算法和OMP算法及其思想

主要介绍MP(Matching Pursuits)算法和OMP(Orthogonal Matching Pursuit)算法[1],这两个算法虽然在90年代初就提出来了,但作为经典的算法,国内文献(可能有我没有搜索到)都仅描述了算法步骤和简单的应用,并未对其进行详尽的分析&…

SpringMVC详细示例实战教程

一、SpringMVC基础入门&#xff0c;创建一个HelloWorld程序 1.首先&#xff0c;导入SpringMVC需要的jar包。 2.添加Web.xml配置文件中关于SpringMVC的配置 123456789101112131415<!--configure the setting of springmvcDispatcherServlet and configure the mapping-->&…

学成在线--8.Freemarker入门教程

文章目录1.FreeMarker介绍1&#xff09;常用的java模板引擎还有哪些&#xff1f;2&#xff09;freemarker是一个用Java开发的模板引擎3&#xff09;模板数据模型输出2.FreeMarker快速入门1&#xff09;创建测试工程2&#xff09;配置文件3&#xff09;创建模型类4&#xff09;创…

if...elif...else...fi和case...esac的脚本条件判断式

注意1&#xff1a; if 表达式和case 表达式的区别及什么时候使用哪个要有明确的区分&#xff1f; 『 if .... then .... fi 』对于变量的判断是以『比对』的方式来分辨的&#xff0c; 如果符合状态就进行某些行为&#xff0c;并且透过较多层次 (就是elif ) 的方式来进行多个变量…

安卓自定义View进阶-分类与流程

自定义View绘制流程函数调用链(简化版) 一.自定义View分类 我将自定义View分为了两类(sloop个人分类法&#xff0c;非官方)&#xff1a; 1.自定义ViewGroup 自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件&#xff0c;大多继承自ViewGroup或各种Layout&…

【笔试记录】2021/3/13美团

2021/3/13美团笔试 1.旋转二维数组 m, n map(int, input().split()) a [] for _ in range(m):a.append(list(map(int, input().split()))) for j in range(n):for k in range(m):print(a[k][j], end )print(end\n)输入输出 2.找出输入字符串中的所有数字 s input() n …

学成在线--9.页面静态化

文章目录一.页面静态化流程二.数据模型1.轮播图DataUrl接口1&#xff09;需求分析2&#xff09;接口定义3&#xff09;Dao4&#xff09;Service5&#xff09;Controller6&#xff09;测试2.远程请求接口1&#xff09;添加依赖2&#xff09;配置RestTemplate3&#xff09;测试Re…

数据库MySQL/mariadb知识点——日志记录(2)二进制日志

二进制日志 记录已提交事务导致数据改变或潜在导致数据改变的SQL语句&#xff0c;通过“重放”日志文件中的事件来生成数据副本&#xff0c;不依赖存储引擎类型。 开启二进制日志&#xff0c;默认是关闭的&#xff0c;二进制日志和数据分开存放 开启记录二进制文件的功能&#…

【面试记录】Python常见面试200题及答案总结

Python常见面试200题及答案总结 /待完善/ 1. 列出5个常用python标准库&#xff1f; os&#xff1a;提供了不少与操作系统相关联的函数&#xff0c;提供了一种可移植的使用操作系统功能的方法。使用os模块中提供的接口&#xff0c;可实现跨平台访问。但是&#xff0c;并不是所…

Linux负载均衡软件LVS之一(概念篇)

2019独角兽企业重金招聘Python工程师标准>>> 一、 LVS简介 LVS是Linux Virtual Server的简称&#xff0c;也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目&#xff0c;它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分…

学成在线--10.页面预览

文章目录一.需求分析二. 搭建环境1.在cms服务中集成freemarker&#xff1a;2.在application.yml配置freemarker三.Service四.Controller五.页面预览测试-- 配置Nginx代理六.页面预览测试-- 添加“页面预览”链接一.需求分析 页面在发布前增加页面预览的步骤&#xff0c;方便用…

【代码刷题】排序算法总结(python实现)

排序算法总结&#xff08;Python实现&#xff09;算法介绍算法分类相关概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;1.1 思想1.2 python实现1.3 复杂度1.4 稳定性2. 快速排序&#xff08;Quick Sort&#xff09;2.1 思想&#xff08;伪代码&#xff09;2.2 python实现2…

学成在线--11.RabbitMQ快速入门

文章目录一.RabbitMQ简介二.相关知识1.AMQP2.JMS是什么 &#xff1f;三.RabbitMQ的工作原理四.Hello World1.创建Maven工程2.生产者3.消费者五.总结一.RabbitMQ简介 MQ全称为Message Queue&#xff0c;即消息队列&#xff0c; RabbitMQ是由erlang语言开发&#xff0c;基于AMQP…

maven工程建立和SSM(springMVC+spring+mybatis)整合

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.环境&#xff1a; maven 版本&#xff1a;3.5.1 ecelipse mars.2 JDK : jdk1.8.0_45 tomcat : apache-tomcat-8.0.0-RC1 2. 建…

Java——网络编程(实现基于命令行的多人聊天室)

2019独角兽企业重金招聘Python工程师标准>>> 目录&#xff1a; 1.ISO和TCP/IP分层模型 2.IP协议 3.TCP/UDP协议 4.基于TCP的网络编程 5.基于UDP的网络编程 6.基于TCP的多线程的聊天室的实现 1.ISO和TCP/IP分层模型&#xff1a; OSI分层模型&#xff08;Open System …

一网打尽中文编码转换---6种编码30个方向的转换

一网打尽中文编码转换——6种编码30个方向的转换 1.问题提出 在学编程序时&#xff0c;曾经有人问过“你可以编一个记事本程序吗?”当时很不屑一顾&#xff0c;但是随着学习MFC的深入&#xff0c;了解到记事本程序也并非易事&#xff0c;难点就是四种编码之间的转换。 对于编…

十万服务器秒级管控 腾讯云如何将AIOps用于日常管理?

AIOps&#xff0c;是指基于算法的 IT运维&#xff08;Algorithmic IT Operations&#xff09;&#xff0c;由 Gartner定义的新类别&#xff0c;源自业界之前所说的 ITOA&#xff08;IT Operations and Analytics&#xff09;。我们已经到达了这样的一个时代&#xff0c;数据科学…

ssm(springMVC + spring+MyBatis) 小例

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 整体环境参见本人另一文&#xff1a;http://blog.csdn.net/jiangyu1013/article/details/51983360 此工程访问入口为index.jsp页面. 工…

学成在线--13.RabbitMQ工作模式

文章目录一.Work queues二.Publish/subscribe1.工作模式2.代码1&#xff09;生产者2&#xff09;消费者3.测试4.思考三.Routing1.工作模式2.代码1&#xff09;生产者2&#xff09;消费者3.测试4.思考四.Topics1.工作模式2.代码1&#xff09;生产者2&#xff09;消费者3.测试4.思…

《C++字符串完全指南——第一部分:win32 字符编码》

《C字符串完全指南--第一部分:win32 字符编码》 原作者:Michael Dun 译 者:Dingqiao Wang 引言 毫无疑问&#xff0c;你肯定见过像TCHAR, std::string, BSTR等等这类字符串类型.也包括一些以_tcs开头的奇怪的宏。也许你正盯着屏幕"哇哇"的发愁&#xff0c;然…