Linux_55:RV1126的VENC模块讲解

目录

一、本章节讲解

二、VENC模块的思维导图

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

[3.1. 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.u32Gop **:**H264的CBR码率控制GOP设置,这里GOP的设置是25

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

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

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

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

stRcAttr.stH264Cbr.u32DstFrameRateNum **:**H264的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),具体结构如下图。

相关推荐
艾莉丝努力练剑25 分钟前
【AI接入大模型SDK】ChatSDK示例验证
人工智能·学习·面试·大模型·sdk
wulitoud27 分钟前
把 Claude、Codex、Gemini 的引擎换成本地模型:免费、离线、数据不出本机
人工智能·llama·claude·本地模型
火山引擎开发者社区4 小时前
TLS for DeepSeek Harness 可观测实践:从系统总览到会话复盘
人工智能
星恒讯工业路由器5 小时前
新一代通信网:从“连接万物”到“智联万物”的关键跃迁
网络·物联网·智能路由器·工业路由器·工业物联网·5g-a·新一代通信网
comedate5 小时前
Windows / Linux GPU 虚拟内存布局差异与 CUDA 越界访问行为
linux·windows·mmu·cuda 越界访问
数字融合6 小时前
透明化地铁线视频孪生综合监控项目技术
大数据·人工智能·virtualenv
鼎艺创新科技6 小时前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
十三画者7 小时前
【文献分享】ConfRetro:融合3D构象信息的逆合成预测Transformer框架
人工智能·深度学习·数据挖掘·数据分析·transformer·数据可视化
前沿在线7 小时前
百度文心助手推出任务引擎 2.0,日活用户同比增长 83%,日均对话轮次增长超 2 倍
人工智能·ai·大模型
zandy10117 小时前
AI办公工具选哪个?千问办公、百度搭子、WorkBuddy三款高阶智能体深度拆解
人工智能·ai办公工具