VENC 模块,即视频编码模块。本模块支持多路实时编码,且每路编码独立,编码协议和编码 profile 可以不同。本模块支持视频编码同时,调度 Region 模块对编码图像内容进行叠加和遮挡。

VENC 模块的输入源包括三类:

  • 用户态读取图像文件向编码模块发送数据;
  • 视频输入(VIU)模块采集的图像经视频处理子系统(VPSS)发送到编码模块;
  • 视频输入(VIU)模块采集的图像直接发送到编码模块;

编码数据流程图

典型的编码流程包括了输入图像的接收、图像内容的遮挡和覆盖、图像的编码、以及码流的输出等过程。

VENC 模块由编码通道子模块(VENC)和编码协议子模块(H.264/H.265/JPEG/MJPEG)组成。

通道支持接收 YUV 格式图像输入,支持格式为 Semi-planar YUV 4:2:0 或 Semi-planarYUV 4:2:2,其中 H.264/H.265 只支持 Semi-planar YUV 4:2:0, JPEG/MJPEG 支持 Semiplanar YUV 4:2:0 或 Semi-planar YUV 4:2:2。另外, Hi3518EV200 能够支持单分量输入
(只存在 Y 分量)。通道模块接收外部原始图像数据,而不关心图像数据是来自哪个外部模块。

通道接收到图像之后,比较图像尺寸和编码通道尺寸:

  • 如果输入图像比编码通道尺寸大,VENC 将按照编码通道尺寸大小,调用 VGS 对源图像进行缩小,然后对缩小之后的图像进行编码。
  • 如果输入图像比编码通道尺寸小, VENC 丢弃源图像。 VENC 不支持放大输入图像编码。
  • 如果输入图像与编码通道尺寸相当, VENC 直接接受源图像,进行编码。

1、 通道的帧率控制默认不打开,需要用户调用接口设置。 RC 中也具有帧率控制功能。推荐使用 RC 的帧率控制,这样不会对码率控制造成过大的冲击。
2、 对于 Hi3518EV200 的 H.264 编码,输入图像格式由非单分量切换为单分量时,由于存在帧间预测量化误差,在编码出下一个 I 帧之前图像会存有色度残留。建议客户在切换单分量时调用接口 HI_MPI_VENC_ResetChn 进行通道复位。

REGION 模块支持对图像内容的遮挡和叠加。
完成视频区域管理之后,图像被送入具体协议类型编码通道,完成视频编码,输出码流。

编码通道

编码通道作为基本容器,保存编码通道的多种用户设置和管理编码通道的多种内部资源。编码通道完成图像转化为码流的功能,具体由码率控制器和编码器协同完成。这里的编码器指的是狭义上的编码器,只完成编码功能。码率控制器提供了对编码参数的控制和调整,从而对输出码率进行控制。

编码通道功能模块划分

码率控制

码率控制器实现对编码码率进行控制。
从信息学的角度分析,图像的压缩比越低,压缩图像的质量越高;图像压缩比例越高,压缩图像的质量越低。对于场景变化的真实场景,图像质量稳定,编码码率会波动;编码码率稳定,图像质量会波动。以 H.264 编码为例,通常图像 Qp 越低,图像的质量越好,码率越高;图像 Qp 越高,图像质量越差,码率越低。码率控制是针对连续的编码码流而言,所以, JPEG 协议编码通道不包括码率控制功能。

码率控制器分别提供了对 H.264\H.265\MJPEG 协议编码通道 CBR、 VBR、 FIXQP 等三种码率控制模式,对图像质量和码率进行调节。

Hi3518EV200 不支持 H.265 编码,所以,也不支持 H.265 类型的码率控制。

CBR(Constant Bit Rate)固定比特率。

即在码率统计时间内保证编码码率平稳。码率稳定主要由两个量来评估,这两个量都可以由用户在创建编码通道时指定。

码率统计时间 u32StatTime
单位为秒(s),码率统计时间越长,每帧图像的码率波动对于码率调节的影响越弱,码率的调节会更缓慢,图像质量的波动会更轻微;码率统计时间越短,每帧图像的码率波动对于码率调节的影响越强,图像码率的调节会更灵敏,图像质量的波动会更剧烈。

行级码率控制调节幅度 u32RowQpDelta
行级码率控制调节幅度是一帧内行级调节的最大范围,其中行级以宏块行为单位。调节幅度越大,允许行级调整的 QP 范围越大,码率越平稳。对于图像复杂度分布不均匀的场景,行级码率控制调节幅度设置过大会带来图像质量不均匀。

VBR(Variable Bit Rate)可变比特率,

即允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。以 H.264 编码为例, VENC 模块提供用户可设置 MaxQp,MinQp, MaxBitrate 和 ChangePos。 MaxQp, MinQp 用于控制图像的质量范围,MaxBitrate 用于钳位码率统计时间内的最大编码码率, ChangePos 用于控制开始调整Qp 的码率基准线。当编码码率大于 MaxBitrate*ChangePos 时,图像 qp 会逐步向MaxQp 调整,如果图像 QP 达到 MaxQp, QP 会被钳位到最大值, MaxBitrate 的钳位效果失效,编码码率有可能会超出 MaxBitrate。当编码码率小于 MaxBitrate*ChangePos时,图像 QP 会逐步向 MinQp 调整,如果图像 QP 达到 MinQp,此时编码的码率已经达到最大值,而且图像质量最好。

FIXQP
Fix Qp 固定 Qp 值。在码率统计时间内,编码图像所有宏块 Qp 值相同,采用用户设定的图像 Qp 值, I 帧和 P 帧的 QP 值可以分别设置。

高级跳帧参考模式

高级跳帧参考模式涉及 3 个参数: u32Base、 u32Enhance 和 bEnablePred,其含义请参考 VENC_PARAM_REF_S。高级跳帧参考模式示意如图所示。

彩转灰

彩转灰,即 VENC 支持把彩色图像转换成灰度图像进行编码。具体功能请参考相关API: HI_MPI_VENC_SetColor2Grey

裁剪编码

裁剪编码,即 VENC 从图像中裁剪出一部分进行编码,用户可以设置裁剪的起始点X、 Y 和裁剪的宽度 width 和高度 height,具体功能请参考相关 API:HI_MPI_VENC_GetCrop 和 HI_MPI_VENC_SetCrop 等。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐