P5 RV1126编码测试Demo

news2024/9/29 6:43:33

目录

前言

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;          // 映射类型默认是:MMAP
  VI_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.coloradmin.cn/o/1333512.html

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

相关文章

JavaEE:CAS详解

一.什么是CAS CAS: 全称 Compare and swap ,字面意思 :” 比较并交换 “ ,一个 CAS 涉及到以下操作: 我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。 我们来进行操作: 1. 比较 V 和 A 是否相等。…

Java多线程、线程池及线程同步(synchronized关键字、悲观锁、乐观锁)

1.进程与线程定义 进程包含线程,如一个百度网盘进程,该进程的线程可以有上传,下载。 2.创建线程的三种方式 方式1-继承Thread类 方式2-实现Runnabled接口 1.常规写法 2.匿名内部类写法 方式3-实现Callable接口 示例代码: f1.get…

WorkPlus超级APP助力企业节省IT人力成本,实现快速移动化

在信息化时代,移动应用已经成为企业发展的重要组成部分。然而,开发和维护原生客户端的成本却相对较高,需要大量的iOS、安卓和桌面端工程师。为了解决这一问题,WorkPlus作为一个功能完备的超级APP,为企业节约了大量的IT…

MyBatis动态sql中foreach标签介绍和使用

MyBatis动态sql中foreach标签介绍和使用 参数解释: foreach 的主要作用在构建 in 条件中,它可以在 sql 语句中进行迭代一个集合。foreach 元素的属性主要有 collection,item,separator,index,open&#x…

Github 2023-12-24 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-24统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5Jupyter Notebook项目2C项目1C项目1Go项目1Java项目1JavaScript项目1Ruby项目1 Serverless Frame…

探索微软Edge:使用方法和心得分享

学习目标: 了解微软Edge的基本功能和使用方法。掌握在微软Edge上进行浏览、搜索和书签管理的技巧。学习如何使用微软Edge进行隐私和安全管理。探索微软Edge的扩展和其他高级功能。 学习内容: 微软Edge的简介:了解微软Edge的起源、特点和与其…

AI一键注释代码、阅读整个项目、转换编程语言。已开源!

获取github源码地址和国内url、key方式:在文章底部 大家好今天给大家介绍一款开源项目,这个项目是由渡码维护的,这个项目支持自己的大模型和使用openai两种方式,本文章介绍使用openai的方式! 使用过程中发现两个问题…

如何利用flume进行日志采集

介绍 Apache Flume 是一个分布式、可靠、高可用的日志收集、聚合和传输系统。它常用于将大量日志数据从不同的源(如Web服务器、应用程序、传感器等)收集到中心化的存储或数据处理系统中。 基本概念 Agent(代理): …

【JAVA面试题】什么是引用传递?什么是值传递?

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 前言 博客的正文部分可以详细介绍Java中参数传递的机制,强调Java是按值传递的,并解释了基本数据类型和对象引用在这种传…

【FPGA】分享一些FPGA视频图像处理相关的书籍

在做FPGA工程师的这些年,买过好多书,也看过好多书,分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

每次maven刷新jdk都要重新设置

pom.xml <java.version>17</java.version> 改为<java.version>1.8</java.version>

【BBuf的CUDA笔记】十,Linear Attention的cuda kernel实现解析

欢迎来 https://github.com/BBuf/how-to-optim-algorithm-in-cuda 踩一踩。 0x0. 问题引入 Linear Attention的论文如下&#xff1a; Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention&#xff1a;https://arxiv.org/pdf/2006.16236.pdf 。官方…

WPF中DataContext的绑定技巧-粉丝专栏

&#xff08;关注博主后&#xff0c;在“粉丝专栏”&#xff0c;可免费阅读此文&#xff09; 先看效果&#xff1a; 上面的绑定值都是我们自定义的属性&#xff0c;有了以上的提示&#xff0c;那么我们可以轻松绑定字段&#xff0c;再也不用担心错误了。附带源码。 …

Python学习路线 - Python语言基础入门 - Python基础综合案例 - 数据可视化 - 地图可视化

Python学习路线 - Python语言基础入门 - Python基础综合案例 - 数据可视化 - 地图可视化 基础地图使用基础地图演示基础地图演示 - 视觉映射器 疫情地图-国内疫情地图案例效果数据整理 疫情地图-省级疫情地图省疫情地图 基础地图使用 基础地图演示 代码示例&#xff1a; &quo…

【c++、数据结构课设】哈夫曼树

时间过的真快&#xff0c;转眼之间一个学期即将结束&#xff0c;想必这个时候大家都在准备各科的课设作业&#xff0c;本期内容是我的数据结构课设&#xff0c;希望能给大家带来帮助&#xff0c;如果有任何不足或需要改进的地方&#xff0c;欢迎各位提出宝贵的意见。 屏幕录制2…

2023年12月24日学习总结

今日to do list&#xff1a; 做kaggle上面的流量预测项目☠️ 学习时不刷手机&#x1f921; okkkkkkkkkkkkkk 开始&#x1f44d;&#x1f34e; 0、我在干什么&#xff1f; 我在预测一个名字叫做elborn基站的下行链路流量&#xff0c;用过去29天的数据预测未来10天的数据 1、…

Json和Xml

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第21章《Json和Xml》 二、Xml的介绍 Xml的含义&#xff1a; 可标记性语言&#xff0c;它将数据以一种特别简单文本格式储存。让所有人和几乎所有的计算机都能理解。 XML文件示例&#xff1a; <?xml version"1.…

HarmonyOS - 基础组件绘制

文章目录 所有组件开发 tipsBlankTextImageTextInputButtonLoadingProgress 本文改编自&#xff1a;<HarmonyOS第一课>从简单的页面开始 https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667360160710997 所有组件 在 macOS 上&#xff0c;组…

原来电脑并不需要重装系统才能恢复出厂设置,这个操作学起来!

前言 小伙伴们应该都知道手机上有恢复出厂设置的功能&#xff0c;如果想要把手机送给朋友或者卖给别人&#xff0c;就会先恢复出厂设置。 但换到Windows电脑上之后&#xff0c;如果出现同样的情况&#xff0c;就会第一时间想到重装系统。就好像Windows电脑上不存在恢复出厂设…

顶级旗舰ET9出道,蔚来还是那个「最不计成本」的中国车品牌

作者 |张祥威 编辑 |德新 2008年&#xff0c;李斌和新浪的曹国伟几人一起喝酒&#xff0c;发了第一条微博&#xff0c;「天冷带围巾&#xff0c;心冷发微博」&#xff0c;一晚上涨了2000多个粉丝&#xff0c;他偶尔还会针砭时事&#xff0c;很快积累了最早一波粉丝。 创立蔚来…