二:RV1126视频编码流程

  1. 项目介绍:

本章节讲的是RV1126视频编码的流程,在整个项目之中视频编码功能是核心之一。视频编码流程主要分三步:VI的初始化VENC的初始化绑定VI和VENC节点开启VENC线程进行视频编码的采集

  1. 项目框图:
image.png

2.1. VI设备的初始化

image.png
容器的使用增加代码的解耦性。
其中else部分的set_vi_container将*vi_container放进all_containers.vi_containers[index]中,然后2.3中的get_vi_container将*vi_container提取出来
image.png

VI设备的初始化,需要用到以下参数:pcVideoNode(设备节点)、u32Width(宽度)、u32Height(高度)、enPixFmt(图片格式)、u32BufCnt(buf的数量)、enWorkMode(工作模式)。设置完成之后,则调用RK_MPI_VI_SetChnAttr设置VI的属性,并使能VI设备(RK_MPI_VI_EnableChn)

RV1126视频设备节点:

image.png

2.2. VENC模块的初始化

image.png
容器的使用增加代码的解耦性。
其中else部分的set_venc_container将*venc_container放进all_containers.venc_containers[index]中,然后2.3中的get_venc_container将*vi_container提取出来
image.png

VENC模块的初始化,下面有几个重要参数:enType(编码类型)、imageType(图片格式)、u32VirWidth(图片虚宽)、u32VirHeight(图片虚高)、u32Profile(编码等级)、bByFrame(预留参数默认0)****、u32PicWidth(图片宽度)、u32PicHeight(图片高度)、enRotation(是否旋转)。设置完成之后,使用RK_MPI_VENC_CreateChn创建VENC编码器。

2.3. 绑定VI和VENC节点

image.png

使用RK_MPI_SYS_Bind把VI节点和VENC进行绑定,其中enModId是模块ID号、s32ChnId是通道号。

2.4. 开启VENC线程采集每一帧视频编码数据并存储到视频队列

image.png

在这个video_venc_thread线程里面,利用RK_MPI_SYS_GetMediaBuffer的API采集VENC的数据,并把数据赋值到video_data_packet_t结构体里面(这个结构体里面主要存储编码后视频的缓冲区数据和长度)。并且把这个结构体的数据入到video_packet_queue队列里面(具体操作:putVideoPacketQueue)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容