news 2026/5/11 4:01:04

Linux_55:RV1126的VENC模块讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux_55:RV1126的VENC模块讲解

目录

一、本章节讲解

二、VENC模块的思维导图

三、VENC模块设置的代码截图

3.1. venc参数的设置

3.2.rkmedia_venc_init的实现

3.3.set_venc_container函数的实现


一、本章节讲解

本章节主要是介绍rockx+rv1126项目的VENC编码模块的讲解,在这个项目中VENC编码模块参数的设置是至关重要的,它可以对VI数据进行硬件编码让其可以进行编码码流的推流,VENC模块的配置在源文件rkmedia_module_function.cpp里面。

二、VENC模块的思维导图

上面思维导图主要是描述VENC模块设置的大致流程,这里要创建RV1126_VENC_CONFIG结构体并进行参数设置,设置完参数之后,则需要调用rkmedia_venc_init去初始化这两个VENC模块,最后把VENC的ID号存放到数组里面(venc_containers)。

三、VENC模块设置的代码截图

3.1. venc参数的设置

上述的参数是高分辨率VENC编码器的参数设置,我们来看看每个参数设置的意义

stVencAttr.enType编码器协议类型,这里填写的是H264编码器类型,RK_CODEC_TYPE_H264

stVencAttr.imageType编码器图像类型,这里写的类型要和图像输入类型保持一致,所以填写IMAGE_TYPE_NV12

stVencAttr.enType.u32PicWidth编码图像的分辨率宽度,这里是高分辨率所以写1920

stVencAttr.enType.u32PicHeight编码图像的分辨率高度,这里是高分辨率所以写1080

stVencAttr.enType.u32VirWidth编码图像的分辨率虚宽,这里写的跟u32PicWidth保持一致,所以填写1920

stVencAttr.enType.u32VirHeight编码图像的分辨率虚高,这里写的跟u32PicHeight保持一致,所以填写1080

stVencAttr.enType.u32Profile编码等级,这里填写66,指的是Baseline,这种模式更加适用于视频传输

stRcAttr.enRcMode编码器码率控制类型,这里填写的是H264 CBR码率控制模式,VENC_RC_MODE_H264CBR,下面码率控制的结构体都是以stH264Cbr作为设置

stRcAttr.stH264Cbr.u32GopH264的CBR码率控制GOP设置,这里GOP的设置是25

stRcAttr.stH264Cbr.u32BitRateH264的CBR码率控制码率大小的设置,这里是1920 * 1080 * 3 = 6220800比特率/s ~= 700KB/s

stRcAttr.stH264Cbr.u32SrcFrameRateDenH264的CBR码率控制控制结构体的源帧率分母的设置,这里写的是25

stRcAttr.stH264Cbr.u32SrcFrameRateNumH264的CBR码率控制控制结构体的源帧率分子的设置,这里写的是1

stRcAttr.stH264Cbr.u32DstFrameRateDenH264的CBR码率控制控制结构体的目标帧率分母的设置,这里写的是25

stRcAttr.stH264Cbr.u32DstFrameRateNumH264的CBR码率控制控制结构体的目标帧率分子的设置,这里写的是1

(备注:通常情况下源帧率的分子、分母和目标帧率的分子、分母数值保持一致)

设置完上述VENC编码参数后,我们就要调用自己封装的函数rkmedia_venc_init函数,对VENC模块进行设置,具体的实现如下

3.2.rkmedia_venc_init的实现

这个自定义函数还是非常简单的,就是把RK_MPI_VENC_CreateChn封装了一层,然后把RV1126_VENC_CONFIG的结构体指针传进去。

3.3.set_venc_container函数的实现

设置完VENC模块后,就要把VENC模块的ID号设置到VENC容器数组里面,高分辨率VENC的ID号是0,调用自己封装的函数是set_venc_container在这个自定义的函数里面,最主要是把VENC的ID号存放在VENC模块数组里面(venc_containers),具体结构如下图。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 3:56:31

《信息系统项目管理师教程(第4版)》——信息系统管理

在《信息系统项目管理师教程(第4版)》中,“信息系统管理”(第4章)是承接第3章“治理”的“落地与执行”篇。如果说第3章是公司董事会定下的“军规”,那么这章就是项目经理和IT部门每天实实在在的“干活指南…

作者头像 李华
网站建设 2026/5/11 3:49:30

ARM TLB指令VMALLS12E1深度解析与应用优化

1. ARM TLB指令体系概览在ARMv8/v9架构中,TLB(Translation Lookaside Buffer)作为地址转换的缓存组件,其维护操作直接影响系统性能与正确性。TLBI(TLB Invalidate)指令集提供了精细控制TLB失效的机制&#…

作者头像 李华
网站建设 2026/5/11 3:46:31

Jenkins Job DSL社区贡献指南:如何参与项目开发

Jenkins Job DSL社区贡献指南:如何参与项目开发 【免费下载链接】job-dsl-plugin A Groovy DSL for Jenkins Jobs 项目地址: https://gitcode.com/gh_mirrors/jo/job-dsl-plugin Jenkins Job DSL插件是一个强大的Groovy领域特定语言工具,用于以代…

作者头像 李华
网站建设 2026/5/11 3:43:31

Mentalist安全使用规范:合法渗透测试中的字典生成最佳实践

Mentalist安全使用规范:合法渗透测试中的字典生成最佳实践 【免费下载链接】mentalist Mentalist is a graphical tool for custom wordlist generation. It utilizes common human paradigms for constructing passwords and can output the full wordlist as well…

作者头像 李华
网站建设 2026/5/11 3:35:55

Linux操作系统应用软件编程——标准IO

文件操作:一切皆文件文件类型Linux系统下所有文件均属于以下七种类型1)b,块设备文件(存储类设备,例如硬盘)2)c,字符设备文件(包括但不限于输入输出设备,例如鼠…

作者头像 李华
网站建设 2026/5/11 3:35:34

在Windows上使用Switch手柄的完整指南:JoyCon-Driver终极教程

在Windows上使用Switch手柄的完整指南:JoyCon-Driver终极教程 【免费下载链接】JoyCon-Driver A vJoy feeder for the Nintendo Switch JoyCons and Pro Controller 项目地址: https://gitcode.com/gh_mirrors/jo/JoyCon-Driver 想要在Windows电脑上使用你的…

作者头像 李华