视频编码
概述
VENC模块,即视频编码模块。本模块支持多路实时编码,且每路编码独立,编码协议和编码profile可以不同。本模块支持视频编码同时,调度Region模块对编码图像内容进行叠加和遮挡。
不同型号的解决方案支持不同的编码规格,解决方案支持的编码规格如表1所示。
表 1 解决方案编码规格
功能描述
编码数据流程图

典型的编码流程包括了输入图像的接收、图像内容的遮挡和覆盖、图像的编码、以及码流的输出等过程。
VENC模块由编码通道子模块(VENC)和编码协议子模块(H.264/H.265/SVAC3.0/JPEG/MJPEG)组成。
通道支持接收YUV格式图像输入,其中H.264/H.265/SVAC3.0支持Semi-planar YVU 4:2:0/ Semi-planar YUV 4:2:0或单分量输入(PIXEL_FORMAT_YUV_400),JPEG/MJPEG支持Semi-planar YVU 4:2:0/ Semi-planar YUV 4:2:0、Semi-planar YVU 4:2:2/ Semi-planar YUV 4:2:2或单分量输入(PIXEL_FORMAT_YUV_400)。通道模块接收外部原始图像数据,而不关心图像数据是来自哪个外部模块。
Hi3519DV500解决方案输入YUV支持的压缩格式:OT_COMPRESS_MODE_NONE、OT_COMPRESS_MODE_SEG、OT_COMPRESS_MODE_SEG_COMPACT。
Hi3516CV610/Hi3516CV608解决方案输入YUV支持的压缩格式:OT_COMPRESS_MODE_NONE、OT_COMPRESS_MODE_SEG_COMPACT。
Hi3511CV100解决方案输入YUV支持的压缩格式:OT_COMPRESS_MODE_NONE、OT_COMPRESS_MODE_SEG、OT_COMPRESS_MODE_SEG_COMPACT, OT_COMPRESS_MODE_TILE。
Hi3519DV500解决方案输入YUV压缩格式为OT_COMPRESS_MODE_SEG_COMPACT时,VENC支持YUV的最大宽度为4096。
通道接收到图像之后,比较图像尺寸和编码通道尺寸:
- 如果输入图像比编码通道尺寸大,VENC将按照编码通道尺寸大小,调用VGS对源图像进行缩小,然后对缩小之后的图像进行编码。
- 如果输入图像比编码通道尺寸小,VENC丢弃源图像。VENC不支持放大输入图像编码。
- 如果输入图像与编码通道尺寸相当,VENC直接接收源图像,进行编码。
说明:
- 通道的帧率控制默认不打开,需要用户调用接口设置。RC中也具有帧率控制功能。推荐使用RC的帧率控制,这样不会对码率控制造成过大的冲击。
- 对于H.264/H.265/SVAC3.0编码,输入图像格式由非单分量切换为单分量时,由于存在帧间预测量化误差,在编码出下一个I帧之前图像会存有色度残留。建议客户在切换单分量时调用接口ss_mpi_venc_reset_chn进行通道复位。
REGION模块支持提供对图像内容的遮挡/叠加信息,编码前先完成遮挡/叠加,再进行编码,输出码流。
编码通道
编码通道作为基本容器,保存编码通道的多种用户设置和管理编码通道的多种内部资源。编码通道完成图像转化为码流的功能,具体由码率控制器和编码器协同完成。这里的编码器指的是狭义上的编码器,只完成编码功能。码率控制器提供了对编码参数的控制和调整,从而对输出码率进行控制。

码率控制
- 码率控制器实现对编码码率进行控制。
- 从信息学的角度分析,图像的压缩比越低,压缩图像的质量越高;图像压缩比例越高,压缩图像的质量越低。在场景变化的情况下,追求图像质量稳定,则编码码率会波动较大;如追求编码码率稳定,则图像质量会波动较大。以H.264编码为例,通常图像Qp越低,图像的质量越好,码率越高;图像Qp越高,图像质量越差,码率越低。
- 码率控制是针对连续的编码码流而言,JPEG协议编码通道不包括码率控制功能。
- 码率控制器分别提供了对MJPEG协议编码通道CBR、VBR、FIXQP三种码率控制模式,H.264/H.265/SVAC3.0协议编码通道CBR、ABR、VBR、AVBR、QVBR、CVBR、FIXQP、RANGEQP、QPMAP九种码率控制模式,对图像质量和码率进行调节,对于H.264/H.265/SVAC3.0协议通道的QPMAP模式,码控的策略由用户决定。
CBR(Constant Bit Rate)固定比特率。即在码率统计时间内保证编码码率平稳。码率稳定主要由两个量来评估。
-
码率统计时间stats_time
单位为秒(s),码率统计时间越长,每帧图像的码率波动对于码率调节的影响越弱,码率的调节会更缓慢,图像质量的波动会更轻微;码率统计时间越短,每帧图像的码率波动对于码率调节的影响越强,图像码率的调节会更灵敏,图像质量的波动会更剧烈。
-
行级码率控制调节幅度row_qp_delta
行级码率控制调节幅度是一帧内行级调节的最大范围,其中行级以宏块行为单位。调节幅度越大,允许行级调整的QP范围越大,码率越平稳。对于图像复杂度分布不均匀的场景,行级码率控制调节幅度设置过大会带来图像质量不均匀。
ABR:(Average Bit Rate),即恒定平均目标码率码控算法,简单场景分配较低比特数,复杂场景分配足够比特数,使得有限的bit数能够在不同场景下合理分配,这类似VBR,同时在短时间内(由vbv_buf_delay控制),平均码率又接近设置的目标码率,这样可以控制输出文件的大小,这又类似CBR。ABR可以认为是CBR和VBR的折中优化方案,特别在对质量和视频带宽都有要求的情况下,可以优先选择该模式。ABR码控适用于有突然运动的场景,例如云台转动场景,且在编码启动时需要给一定的时间收集统计信息。
-
码率统计时间stats_time
如CBR定义方法
-
行级码率控制调节幅度row_qp_delta
如CBR定义方法
-
vbv_buf_delay
用于平衡瞬时码率波动与编码图像质量稳定性的矛盾:减小vbv_buf_delay可以减小瞬时码率波动,但会增加编码图像质量波动;相反,增加vbv_buf_delay可以减少编码图像质量波动,但会增大瞬时码率波动。
VBR(Variable Bit Rate)可变比特率,即允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。以H.264编码为例,VENC模块提供用户可设置max_qp,min_qp,max_bit_rate和chg_pos。max_qp,min_qp用于控制图像的质量范围, max_bit_rate用于钳位码率统计时间内的最大编码码率,chg_pos用于控制开始调整QP的码率基准线。当编码码率大于max_bit_rate*chg_pos时,图像QP会逐步向max_qp调整,如果图像QP达到max_qp,QP会被钳位到最大值,max_bit_rate的钳位效果失效,编码码率有可能会超出max_bit_rate。当编码码率小于max_bit_rate*chg_pos时,图像QP会逐步向min_qp调整,如果图像QP达到min_qp,此时编码的码率已经达到最大值,而且图像质量最好。
AVBR(Adaptive Variable Bit Rate)自适应可变比特率,即允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。码率控制内部会检测当前场景的运动静止状态,在运动时用较高码率编码,在静止时主动降低目标码率。以H.264编码为例,VENC模块提供用户可设置max_bit_rate,chg_pos和min_still_percent。max_bit_rate表示运动场景下的最大码率,max_bit_rate*chg_pos*min_still_percent表示静止情况下的最小码率。根据运动程度的不同目标码率会在最大码率和最小码率间调整。max_qp,min_qp用于控制图像的质量范围,码率控制以QP钳位为最高优先级,超出min_qp,max_qp范围内码率控制将失效。
QVBR (Quality Variable Bit Rate)基于主观图像质量的可变比特率,该码控调节方式是利用实时统计的PSNR(图像质量客观评价指标)的大小来动态调整码率,从而保证编码图像质量平稳。在PSNR较小时主动升高目标码率,PSNR较大时主动降低目标码率。
以H.264编码为例,VENC模块提供用户可设置target_bit_rate、max_bit_percent、min_bit_percent、max_psnr_fluctuate和min_psnr_fluctuate。
- 当实时统计的PSNR小于min_psnr_fluctuate时,适当增加目标码率,最大码率=target_bit_rate* max_bit_percent;
- 当实时统计的PSNR大于max_psnr_fluctuate时,适当减小目标码率,最小码率= target_bit_rate* min_bit_percent,根据当前PSNR的不同目标码率会在最大码率和最小码率间调整,当PSNR值范围超过[min_psnr_fluctuate-4, max_psnr_fluctuate+4]∩ [20,40]时PSNR不再起作用,码率会在最大码率和最小码率间调整。max_qp,min_qp用于控制图像的质量范围,码率控制以QP钳位为最高优先级,超出min_qp,max_qp范围内码率控制将失效。码率浮动上下限的优先级高于PSNR的优先级,例如,当码率浮动到上限依然不能满足PSNR要求,则码率不会再继续上调。
CVBR (Constrained Variable Bit Rate) 是以VBR为基础,旨在提供平稳的图像质量的码控算法,同时对VBR的码率进行限制,以满足传输带宽以及存储空间的要求。具体而言,CVBR设置了短期与长期码率的限制。
- 短期码率限制确保网络带宽对传输的要求;
- 长期码率限制确保长时间视频录制时,存储设备有足够的空间储存数据。
编码时,短期码率依据长期码率的设置和码率的实际使用情况调整:当实际的平均码率低于长期目标码率时,CVBR会提供更高的短期码率上限;反之则降低短期码率上限。由此,可以将在场景简单时节省码率用于场景复杂的情况,以提供更加平稳的图像质量,并保证长期码率在限制范围以内。
FIXQP固定QP值。在码率统计时间内,编码图像所有宏块QP值相同,采用用户设定的图像QP值,I帧和P帧的QP值可以分别设置。
指定QP区间值。在码率统计时间内,编码图像所有宏块QP值都在用户指定范围内波动,I帧和P帧的QP值可以分别设置。
QPMAP 模式下允许用户自由决定码控的策略。用户需要申请内存,内存会映射到编码的图像上,通过内存的赋值完成编码图像的每一块QP和选择skip块倾向性大小的配置。QP的设置是以16*16块为单位,每一个16*16块的QP值,采用用户设定的相应块的QP值。所有这些块的QP值组成QP表,该表中QP值的组织方式如图1和图2所示。H.264的skip倾向性配置以16*16块为单位,H.265的skip倾向性配置以64*64块为单位,skip倾向性配置表如图3和图4所示,SVAC3.0的排布方式和H.265相同。
图 1 H.265 QPMAP LCU(64*64)排放位置


图 3 H.265 SkipWeight表排布(64*64)

图 4 H.264 SkipWeight表排布(16*16)

说明:
- 非normal_p模式下,qp表16x16块skip使能标志需配置为1,如果进行错误检查,处理的数据量较多,影响性能,因此在使用该功能时需保证配置正确。
- 使用QpMap表实现H.265协议通道编码p_skip帧/非ROI区域帧率低于ROI区域帧率时,需客户调用ss_mpi_venc_set_h265_sao关闭SAO功能。
- 使用QpMap表实现SVAC3.0协议通道编码p_skip帧/非ROI区域帧率低于ROI区域帧率时,需客户调用ss_mpi_venc_set_svac3_sao关闭SAO功能。
- QPMAP中,当bit7设置为skip时,将控制16x16块的MV和残差都为0;而当SkipWeight表设为8时,仅控制LCU的残差为0。
- QpMap模式下需要调用接口ss_mpi_venc_send_frame_ex发送图像和qpmap表。
- Gop Mode模式为OT_VENC_GOP_MODE_ADV_SMART_P时不支持QpMap模式。
- 使用Skip Weight时,建议调用接口ss_mpi_venc_set_skip_bias关闭帧级控制cu/mb选择Skip模式的倾向性,否则,Skip Weight是在帧级控制Skip模式的基础上进行调节。
- Qpmap模式下,QPMAP Qp表需要内存计算如下: stride计算: Hi3519DV500/Hi3511CV100: stride = (width +255) / 256 * 256 / 16 Hi3516CV610/Hi3516CV608: stride = (width +127) / 128 * 128 / 16 size计算: Hi3519DV500/Hi3516CV610/Hi3516CV608: H.264: qpmap_size = stride *((height + 15) / 16 * 16 / 16) H.265: qpmap_size = stride *((height + 31) / 32 * 32 / 16) Hi3511CV100: H.264: qpmap_size = stride *((height + 15) / 16 * 16 / 16) H.265: qpmap_size = stride *((height + 63) / 64 * 64 / 16) Qpmap模式下,skipweight表需要内存计算如下: stride计算: Hi3519DV500: H.264: stride = (width + 511) / 512 * 512 / 32 H.265: stride = (width + 1023) / 1024 * 1024 / 64 Hi3516CV610/Hi3516CV608: H.264: stride = (width + 255) / 256 * 256 / 32 H.265: stride = (width + 511) / 512 * 512 / 64 Hi3511CV100: H.264: stride = (width + 511) / 512 * 512 / 32 H.265: stride = (width + 2047) / 2048 * 2048 / 128 size计算: Hi3519DV500/Hi3516CV610/Hi3516CV608: H.264: skipweight_size = stride * ((height + 15) /16 * 16 / 16) H.265: skipweight_size = stride * ((height + 31)/ 32 * 32 / 32) Hi3511CV100: H.264: skipweight_size = stride * ((height + 15) /16 * 16 / 16) H.265: skipweight_size = stride * ((height + 63)/ 64 * 64 / 64).
- SVAC3.0的Qp和skipweight表计算方式和H.265相同。
-
驱动外部码控可以通过注册驱动回调函数接管驱动内部帧级QP调控,行级、宏块级别码控不受影响。注册方式参考ot_venc_export_symbol或版本包中otuser.c中示例。
-
帧级Qp调节的优先级从高到低为 绝对qpmap,驱动外部码控、omx外部码控、内部码控。
- 使用驱动外部码控时,ot_venc_rc_param中threshold_i、threshold_p、threshold_b、direction、row_qp_delta以及各种码控参数中max_reencode_times, qpmap_mode,qpmap_en的参数仍然有效。其他参数无效。但是仍然保持之前的约束。
- 使用驱动外部码控时,超大帧重编丢帧后的后内部无法调节帧QP,依赖外部码控调节。
- 使用驱动外部码控时,分层QP功能失效,相关功能接口ss_mpi_venc_set_hierarchical_qp。
- jpeg, mjpeg不支持使用驱动外部,设置了也无效。
- 无法保证低码率策略效果:帧级码控调节不生效。宏块级配置还存在,相关功能接口ss_mpi_venc_set_bitrate_strategy。
GOP结构
各种编码协议(H.264/H.265/SVAC3.0)对GOP结构类型模式的支持情况如表1。
表 1 编码协议支持GOP结构类型
- OT_VENC_GOP_MODE_I 只编码I帧。
-
OT_VENC_GOP_MODE_DUAL_P模式的帧结构,如图1所示。
其中:SP指特殊的P帧,这里简称SP帧,该帧Qp值小于其他P帧Qp值,sp_interval=0指不支持SP帧。
图 1 OT_VENC_GOP_MODE_DUAL_P模式的帧结构图

-
OT_VENC_GOP_MODE_SMART_P模式的帧结构,如图2所示。
对于H264/H265协议,BgInterval指IDR帧周期,VI指P帧,该帧只参考Bg帧,且Qp值小于其他P帧Qp值,Gop指VI帧周期。
对于SVAC3.0协议,BgInterval指显示CRR帧周期,Gop指RL帧周期。特别地,显示CRR帧后紧跟的一帧为RL帧,首个Gop的长度是指显示CRR帧到第二个RL帧的距离。
图 2 H264/H265协议OT_VENC_GOP_MODE_SMART_P模式的帧结构图

图 3 SVAC3.0协议OT_VENC_GOP_MODE_SMART_P模式的帧结构图

-
OT_VENC_GOP_MODE_ADV_SMART_P模式的帧结构,如图4所示。
其中:Bg指背景建模帧是IDR帧,且为长期参考帧,VI指P帧,该帧只参考Bg帧,且Qp值小于其他P帧Qp值。
图 4 OT_VENC_GOP_MODE_ADV_SMART_P模式的帧结构图

-
OT_VENC_GOP_MODE_BIPRED_B模式的帧结构,如图5所示。
其中:b_frame_num指IDR帧和P帧或P帧和P帧之间B帧的个数,且B帧不作参考帧,上图中b_frame_num = 2,用户需注意,可能在一个Gop的尾部,b_frame_num不一定为2,且一个Gop的最后一帧一定是P帧。
图 5 OT_VENC_GOP_MODE_BIPRED_B模式的帧结构图

-
OT_VENC_GOP_MODE_SMART_CRR模式的帧结构,图6所示。
其中:BgInterval指显示CRR帧周期,Gop指RL帧周期。特别地,显示CRR帧后紧跟的一帧为RL帧,首个Gop的长度是指显示CRR帧到第二个RL帧的距离。
非显示CRR帧会在BgInterval-ahead_num位置编码,该帧可被编码为一个或多个切片,每个切片与后续普通P帧交织存储。ahead_num计算公式如下:

delay_num表示每隔delay_num个P帧交织一个CRR切片。
图 6 OT_VENC_GOP_MODE_SMART_CRR模式的帧结构图

-
OT_VENC_GOP_MODE_ADV_SMART_CRR模式的帧结构,如图7所示。
此模式与OT_VENC_GOP_MODE_SMART_CRR模式的区别在于非显示CRR帧是由背景建模生成,且ahead_num的计算方式不同,计算公式如下:

图 7 OT_VENC_GOP_MODE_ADV_SMART_CRR模式的帧结构图

-
OT_VENC_GOP_MODE_SINGLE_SP模式的帧结构,图8所示。
其中:SP指特殊的P帧,这里简称SP帧,该帧Qp值小于其他P帧Qp值,sp_interval=0指不支持SP帧。
在sp_interval为0时,参考帧数为1,sp_interval非0时,参考帧数为2;当前仅H.264&H.265协议支持single_sp。
图 8 OT_VENC_GOP_MODE_SINGLE_SP模式的帧结构图

-
OT_VENC_GOP_MODE_LOW_DELAY_B模式的帧结构,如 图9所示。
图 9 OT_VENC_GOP_MODE_LOW_DELAY_B模式的帧结构图

此模式的B帧只参考前向相邻的两帧,特别地,IDR帧后的首个B帧的两个参考帧均为IDR帧。
说明:
- H.264非normal_p模式下,不支持svc-t。
- H.265协议的帧存管理方式默认在码流中传输,通过模块参数g_h265e_feature_en控制,默认为1。如果客户的解码器有兼容性问题可以加载h265e.ko设置g_h265e_feature_en=0。
- SVAC3.0 协议要求当前图像和非知识参考图像的POC差值小于128。设置GOP参数要满足此要求,如Dual P的sp_interval取值范围要求 [0,127)。
- SVAC3.0 SMART_P、SMART_CRR GOP模式的I帧均为显示知识图像,因此紧跟I帧的P帧均为RL帧(refrence library picture)。
- OT_VENC_GOP_MODE_I 相对于其他GOP结构将gop设置为1的差异在于OT_VENC_GOP_MODE_I 模式下不再申请参考\重构帧内存。
高级跳帧参考模式
高级跳帧参考模式涉及3个参数:base、enhance和pred_en,其含义请参考ot_venc_ref_param。高级跳帧参考模式示意如图1至图6所示。
须知:
- dual_p模式且sp_interval不等于0下配置高级跳帧参考需要满足如下条件:base*(enhance+1)= sp_interval,例如:4倍高级跳帧参考(base=2,enhance=1),那么dual_p的sp_interval =2*(1+1)=4。
- single_sp模式的高级跳帧参考需要满足如下条件:base固定为1,pred_en固定为TRUE,sp_interval不等于0时,需要满足如下条件:sp_interval % (enhance + 1) = 0,例如:4倍高级跳帧参考(enhance = 3),那么single_sp的sp_interval要是4的倍数。
- svac3.0协议规定被参考帧非CRR帧时,当前帧与被参考帧poc差值绝对值(abs_delta_doi) <= 127,svac3.0除了smart_p和smart_crr/adv_smart_crr的I帧为CRR帧外,其它gop/帧类型均为非CRR帧,因此在高级跳帧参考参数设置上,要遵从上述约束,否则会设置失败。此外,基于上述约束,高级跳帧参考使能时,不支持enable_idr设置为0,反之enable_idr设置为0时,不支持高级跳帧参考。
- smart_crr/adv_smart_crr/lowdelay_b 不支持高级跳帧参考。



图 4 dual_p (sp_interval!=0)高级跳帧参考示意图

图 5 dual_p (sp_interval=0)高级跳帧参考示意图


图 7 single_sp (sp_interval!=0)高级跳帧参考示意图

图 8 single_sp (sp_interval=0)高级跳帧参考示意图

彩转灰
彩转灰:即VENC支持把彩色图像转换成灰度图像进行编码。具体功能请参考相关API:ss_mpi_venc_set_chn_param中彩转灰部分。
裁剪编码
裁剪编码:即VENC从图像中裁剪出一部分进行编码,用户可以设置裁剪的起始点X、Y和裁剪的宽度width和高度height,具体功能请参考相关ss_mpi_venc_set_chn_param 和图1等。

ROI
ROI(Region Of Interest)编码:感兴趣区域编码。
用户可以通过配置ROI区域,对该区域的图像Qp进行限制,从而实现图像中该区域的Qp与其他图像区域的差异化。系统现仅支持对H.264/H.265/SVAC3.0编码通道进行ROI设置。系统提供了8个感兴趣区域,可供用户同时使用。
8个区域可以互相叠加,且叠加时的优先级按照0~7的索引号依次提高,这里,叠加优先级是指发生叠加时,图像区域的最终Qp值的判定,最终的区域Qp值按照优先级最高的区域设定。ROI区域可配置绝对Qp和相对Qp两种模式。
- 绝对Qp:ROI区域的Qp为用户设定的Qp值。
- 相对Qp:ROI区域的Qp为码率控制产生的Qp与用户设定的Qp偏移值的和。
以下示例编码图像采用FixQp模式,设置图像Qp为25,即图像中所有宏块Qp值为25。Roi区域0设置为绝对Qp模式,Qp值为10,索引为0;Roi区域1设置为相对Qp模式,Qp为-10,索引为1。区域0的index小于区域1的index,所以在发生互相重叠的图像区域按高优先级的区域(区域1)Qp设置。区域0除了发生重叠的部分的Qp值等于10。区域1的Qp值为25-10=15。

非ROI区域的低帧率编码
非ROI区域低帧率,即ROI区域正常编码,而非ROI区域低帧率编码,用户可以根据具体的情况设置非ROI区域的帧率,具体功能能请参考相关API:ss_mpi_venc_set_roi_bg_frame_rate,ss_mpi_venc_get_roi_bg_frame_rate。
QPMAP模式下OSD、ROI及非ROI区域低帧率
由码率控制可知,QPMAP模式下一帧图像每个16*16块的Qp由用户决定,所以:
- 该模式下,ROI区域大小、起点、Qp、个数可由用户决定,从图1和图2可知,非ROI区域低帧率也由用户决定。此时,使用ss_mpi_venc_set_jpeg_roi_attr接口不生效。
- 该模式下,使用REGION模块对图像内容的遮挡和叠加,最多支持叠加8个区域,但此时叠加区域的Qp则用QPMAP表决定,由REGION模块设置的overlay区域Qp配置无效。
JPEG抓拍模式
JPEG编码抓拍模式有两种工作模式:全部抓拍模式和抓拍模式。
支持两种抓拍模式:
- 全部抓拍模式:通道启动接收图像后,编码所有接收的图像。
- 抓拍模式:通道启动接收图像后,只编码标记为抓拍帧的图像。
P帧帧内刷新
P帧帧内刷新,可以为客户提供码率非常平滑的编码方式,每个I帧和P帧的大小可以非常接近。在网络带宽有限(如无线网络)的情况下,降低I帧过大带来的网络冲击,降低网传延时,降低网络传输出错的概率。
使用方式
- 通过接口ss_mpi_venc_set_intra_refresh设置刷新使能enable;
- 设置刷新使能后SDK会自动根据设置的刷新行数或列数refresh_num从每个GOP的第一帧开始按行(从上至下)或按列(从左至右)完成Intra宏块刷新;刷新间隔为GOP;
- H.264/H.265协议时SDK会自动把每次按行刷新第一帧的帧内预测宏块转换为一个I Slice,SVAC3.0协议内部刷新I宏块;
- 设置ss_mpi_venc_set_intra_refresh接口后,码率控制依然生效,可以调整ot_venc_gop_attr:gop_attr.normal_p.ip_qp_delta来控制Intra宏块刷新起始帧的大小,推荐值为-1。
注意事项
- ss_mpi_venc_set_intra_refresh设置的刷新行数或列数refresh_num需要保证在一个GOP周期内,图像内所有的宏块行或列都完成一次刷新;
- 由于刷新行数或列数refresh_num与编码参数GOP及跳帧参考参数相关,所以设置编码属性及跳帧参考高级接口后,ss_mpi_venc_set_intra_refresh接口需要重新设置;
- ss_mpi_venc_set_intra_refresh只对H.264/H.265/SVAC3.0协议有效;
- ss_mpi_venc_set_intra_refresh设置使能enable,H.264/H.265按行刷新Islice的帧会自动按照刷新Islice的大小做slice划分,用户设置的slice划分接口将无效,其它帧按用户的设置进行slice划分;
- 调用ss_mpi_venc_reset_chn接口复位通道后,此前设置的intra_refresh相关配置失效。
编码码流帧配置模式
编码码流帧配置支持两种模式:单包模式和多包模式(在不调用slice分割接口及其插入用户数据接口的情况下),如图1所示。
- 多包模式:对于H.264,当为I帧时,调用ss_mpi_venc_get_stream接口,一个I帧至少包含4个NAL包(NAL包分别为sps包、pps包、sei包、Islice包,且NAL包是独立的,包类型不同);对于JPEG,一帧图像包含2个包(1个图像参数包,1个图像数据包,2个包是独立的,包类型不同)。
- 单包模式:对于H.264,当为I帧时,调用ss_mpi_venc_get_stream接口,一个I帧包含1个NAL包(该NAL包的包类型为Islice包,且包含sps、pps、sei、Islice的数据);对于JPEG,一帧图像只有1个包(该包的包类型为图像数据包,且包含图像参数包的数据)。
两种模式可通过调用ss_mpi_venc_set_mod_param接口设置h.265e.ko/h.264e.ko/svac3e.ko/jpege.ko模块参数one_stream_buf来选择。模块参数为1表示单包模式;模块参数为0表示多包模式,系统默认为0。
当用户调用分包接口(例如:ss_mpi_venc_set_slice_split时,一帧会被分成多个slice,如果用户选择单包模式时,对于I帧来说,该帧第一个ISlice包会包含 sps、pps、sei的数据,该帧的其他ISlice则没有。即对于H.264,sps、pps、sei的数据只会出现在I帧的第一个Islice中并合为1个包,且包类型为ISlice;对于JPEG/MJPEG来说,图像参数包只会出现在一帧的第一个数据包中并合为1个包,且包类型为数据包。

编码码流buffer配置模式
编码码流buffer配置支持两种模式:一般模式和省内存模式。
- 一般模式:考虑到超大帧的情况,码流Buffer大小配置的下限为:H.264、H.265、SVAC3.0是通道宽x通道高x3/4,JPEG和MJPEG是通道宽x通道高。
- 省内存模式:码流Buffer大小配置的下限是32*1024 bytes,此模式需要用户保证码流buffer大小设置合理,否则会出现因码流buffer不足而不断重编或者丢帧的情况。
两种模式可通过调用ss_mpi_venc_set_mod_param接口设置相应的模块参数来选择。模块参数值为1表示省内存模式,模块参数值0表示一般模式。
编码帧存回收
- H.264、H.265、SVAC3.0编码目前支持的参考帧数最多为3个,当编码码流由多个参考帧切换到更少的参考帧数时,则编码参考帧Buffer会有闲置。当adv_smart_p功能由开启切换到关闭时,则adv_smart_p buffer闲置。
- 通过调用ss_mpi_venc_set_mod_param接口设置VENC的模块参数frame_buf_recycle可控制帧存回收。frame_buf_recycle为1时表示当ref_buffer和adv_smart_p buffer闲置时回收这些帧存VB,即销毁对应的VB Pool。如果回收,则系统切换参考帧个数或者开关adv_smart_p多次之后可能会产生较多的内存碎片。frame_buf_recycle默认为0,即不回收编码帧存。编码帧存回收仅在PrivateVB模式下有效。
编码帧存计算
编码帧存(参考帧和重构帧)分配支持两种方式:PrivateVB池方式和UserVB池方式。
- 编码PrivateVB池方式:创建编码通道时由VENC创建私有VB池作为该通道的参考帧和重构帧buffer。
- 编码UserVB池方式(仅H.264/H.265/SVAC3.0编码支持):创建编码通道时不分配参考帧和重构帧buffer,而是由用户调用接口ss_mpi_vb_create_pool(请参考”系统控制”章节)。创建一个视频缓存VB池,再通过调用接口 ss_mpi_venc_attach_vb_pool 把某个编码通道绑定到固定的视频缓存VB池中。
两种方式可通过调用ss_mpi_venc_set_mod_param接口设置相应的模块参数来选择。模块参数设置为OT_VB_SRC_PRIVATE表示使用编码PrivateVB池方式;设置为 OT_VB_SRC_USER表示使用编码UserVB池方式。
使用PrivateVB方式时每个编码通道之间没有关联,单独销毁某个通道对其它通道无影响,使用灵活。对于多个相同分辨率的编码通道,使用UserVB方式可以节省内存;对于单个编码通道使用UserVB的方式,在销毁再创建通道时(例如H.265切换到H.264),使用UserVB方式,参考帧和重构帧内存可以不必反复分配销毁,减少内存碎片的产生。
如果使用UserVB方式,需要先创建VB池,再把n个通道绑定到对应的VB池中。通道个数大于2的情况,使用UserVB可以减少内存消耗,需要的帧存个数请参考多通道使用的情况;通道数为1或2的情况,也不会增加内存消耗,此时需要的帧存个数可以参考单通道使用的情况。
-
多个通道绑定同一个VBPool,VB块个数BlkCnt的计算方法是:

非帧节省模式:Pic 和 Pic Info 的BlkCnt一致,计算公式如下:

帧节省模式:Pic info 的BlkCnt 与非帧节省模式下保持一致,但是Pic 的 BlkCnt计算公式如下:

refn请参考GOP结构小节的描述,使用4倍跳帧参考、svc-t或高级跳帧参考需要相应通道增加一个参考帧。
说明:
- 编码使用PrivateVB模式时,编码器使用通道MaxPicWidth和MaxPicHeight代入帧存计算公式计算出来的MaxFrameSize来分配参考帧和重构帧Buffer,只要在编码器限制的最大宽高MAX_WIDTH和MAX_HEIGHT范围内的PicWidth和PicHeight代入帧存计算公式计算出来的FrameSize不超过MaxFrameSize,这样的分辨率都能编码,其中MAX_WIDTH和MAX_HEIGHT请参看表1。
- UserVB池实际使用中是拆分为存储Picture的VB池和存储Picture信息(Pme、Tmv、PmeInfo)的VB池。
- 编码使用UserVB,并打开帧节省模式则编码器在绑定通道时会根据通道实际编码宽高代入帧存计算公式判断绑定Pic VB池的BlkSize(Pic Info 的 BlkSize不会提前判断)。
- Qpmap模式下内存计算见"码率控制"小节中qpmap段落。
多编码器编码
说明:
Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100仅支持一个编码器。
智能编码
智能编码(Smart Video Coding,简称:SVC)技术包括编码更低码率与前景保护的控制机制。目前智能编码策略包含智能编码1.0版本和智能编码2.0版本。
为了更加准确地对场景中的目标进行保护或者从背景中节省码率,智能编码将一帧图像按照前景、背景及可能目标区域等不同层次进行编码。智能编码1.0版本为用户提供了各区域对应QpMap值和Skip倾向性的配置接口。具体来说,当调用ss_mpi_venc_enable_svc接口使能智能编码后,可以进一步配置接口ss_mpi_venc_set_svc_param中对应的参数,以达到在不同的场景中对前景、背景及可能目标区域的质量进行不同控制的目的,而最终实现该场景的码率质量优化。例如,增加背景区域的QpMap值或者Skip倾向性可以节省码率,但也可能带来质量损失。同时,通过用户可根据已检测到的智能信息获得图像场景的复杂度的总体信息,来主动调节编码码率控制等相关参数。智能编码2.0版本相对于智能编码1.0为用户提供了更加精准的ROI区域识别,在使能智能编码后,可以进一步配置接口ss_mpi_venc_set_svc_param_ex中对应的参数。
特别说明:QpMap调节Qp的优先级高于参数设置的MinQP和MaxQp,因此在打开智能编码时,在码率不足或者码率充裕时,MaxQP和MinQP会失效。
复合编码
复合编码(Composite Encoding)技术能做到同一路视频码流可以解码输出两种效果的目标,可以用于隐私保护等特殊使用场景。
- 开启复合编码需要在编码通道创建之前调用ss_mpi_venc_set_chn_config接口设置composite_enc_en =TD_TRUE,仅H.265编码通道支持这个规格。在使能复合编码时mosaic_en可以根据客户需要设置为TD_TRUE或TD_FALSE。mosaic_en =TD_TRUE时编码器内部会根据客户输入的区域信息或者马赛克表信息在图像上叠加相应的马赛克;如果客户需要其他效果(例如椭圆形等)也可以自行叠加马赛克,并且设置mosaic_en =TD_FALSE。
- 开启复合编码需要用户态一次送2帧图像给编码器,不能使用绑定模式。使用复合编码一路视频可以解码出两种效果,可以节省存储空间和网络带宽,在解码端可以通过权限控制显示不同的内容。只显示基础层不会有额外的解码开销。更多的使用方法可以参考接口ss_mpi_venc_set_chn_config和ss_mpi_venc_send_multi_frame的描述。
特别说明:复合编码每帧需要启动2次编码逻辑,因此最大编码能力降低一半。复合编码码流的解码,如果输出基础层图像,解码器无额外性能和VB开销;如果输出增强层图像,解码器也需要启动2次逻辑,最大解码能力降低一半。
内部缩放
编码器可以支持在编码H.264/H.265/SVAC3.0协议时同时输出缩小后的yuv给另外一路视频编码通道进行编码,内部两个通道只使用一个VB交互,相比前级送帧可以节省VB个数。
- 只支持缩小输出,宽高最大缩小倍数[1,15],缩小后最大宽度支持到3200,分辨率其他限制和芯片支持的分辨率限制一致。
- 使用时需要将缩放输出的编码通道(大码流通道)绑定到另外一路编码通道(小码流通道),只支持绑定一路。
- 绑定后大码流通道内部根据小码流通道的宽高属性判断输出分辨率,小码流通道不能配置缩放、裁剪等改变分辨率的设置。
- 绑定时大码流通道做为绑定源,需要将dev_id设置为1;小码流通道做为绑定目的,需要将dev_id设置为0。
- 不支持绑定给jpeg、mjpeg通道。
- 大码流通道帧率控制或者异常丢帧时,小码流通道也会丢帧;大码流通道增帧时小码流通道不会对应增帧,小码流通道不支持增帧、重编。
- 大码流通道优先级不能高于小码流通道,否则小码流通道启动不及时VB被大码流通道连续覆盖,进行丢帧处理。
- 内部处理时是基于大码流裁剪/旋转/彩转灰后的内容进行缩放,如果大码流开启以上功能,小码流也会受影响。其他如叠加OSD等处理效果不会作用于小码流。
- 内部缩放不支持传递帧信息里的OT_FRAME_FLAG_SVC_FLAG,因此此模式下小码流不支持智能编码2.0处理。
- 当前仅Hi3516CV610/Hi3516CV608支持此功能。
隐私保护
编码器开启隐私保护功能后可以编码出符合SVAC3.0协议定义的隐私保护码流。与复合编码功能类似,编码出的码流可以解码出2层不同效果的图像,其中基础层具备马赛克效果从而实现隐私保护的特性。以下两个核心接口必需调用:
- 使用ss_mpi_venc_set_svac3_privacy接口开启隐私保护功能,此接口支持动态开关。
- 使用ss_mpi_venc_send_multi_frame接口送两帧图像以及马赛克信息至编码器。
须知:
- 由于隐私保护功能使用的送帧接口与普通功能的送帧接口不同,在动态开关隐私保护功能时请及时切换送帧方式。
- 当前仅Hi3511CV100支持此功能。
语义分割编码
语义分割编码功能可使编码器输出的SVAC3.0标准码流携带语义分割信息。语义分割信息的定义参见SVAC3.0标准协议文档第7.1.15.5章节《视频结构化信息扩展语法》和第I.1.13章节《智能分割信息语法》。此功能可使具备语义分割能力的前端设备向后端设备传输语义分割数据,从而减少后端设备的算力资源消耗。VENC支持点、框、图三种模式,其中图模式需要用户启动一个专用编码通道用于编码语义分割图,将此通道的属性is_aiseg_chn设置为true,并通过接口绑定至主图通道。主图通道将从语义分割图通道提取出码流并编码进主码流中,用户无需从语义分割通道获取码流。核心接口如下:
- ss_mpi_venc_set_svac3_aiseg:设置语义分割功能参数
-
ss_mpi_venc_get_svac3_aiseg:获取语义分割功能参数。
-
ss_mpi_venc_bind_aiseg_chn:绑定语义分割通道至主图通道
- ss_mpi_venc_unbind_aiseg_chn:主图通道解绑语义分割通道
- ss_mpi_venc_send_frame_aiseg:向语义分割图通道送语义分割图
须知:
- 语义分割图通道不建议开启VENC的其他功能,以确保语义分割通道的内存和性能达到最优。
- 目前仅Hi3511CV100支持此功能。
- 点/框模式下,用户需按照如下内存排布方式填充点框信息: 图 1 框模式数据结构内存排布
API参考
视频编码模块主要提供视频编码通道的创建和销毁、视频编码通道的复位、开启和停止接收图像、设置和获取编码通道属性、获取和释放码流等功能。
注意:Hi3519DV500/Hi3516CV610/Hi3516CV608不支持PRORES相关接口。Hi3511CV100不支持JPEG/MJPEG相关接口。
该功能模块提供以下MPI:
- ss_mpi_venc_create_chn:创建编码通道。
- ss_mpi_venc_destroy_chn:销毁编码通道。
- ss_mpi_venc_reset_chn:复位编码通道。
- ss_mpi_venc_start_chn:开启编码通道接收输入图像。
- ss_mpi_venc_stop_chn:停止编码通道接收输入图像。
- ss_mpi_venc_query_status:查询编码通道状态。
- ss_mpi_venc_set_chn_attr:设置编码通道的编码属性。
- ss_mpi_venc_get_chn_attr:获取编码通道的编码属性。
- ss_mpi_venc_get_stream:获取编码码流。
- ss_mpi_venc_release_stream:释放码流缓存。
- ss_mpi_venc_get_stream_buf_info:获取码流buffer的物理地址和大小。
- ss_mpi_venc_insert_user_data:插入用户数据。
- ss_mpi_venc_send_frame:支持用户发送原始图像进行编码。
- ss_mpi_venc_send_frame_ex:支持用户发送原始图像及该图的QpMap表信息进行编码。
- ss_mpi_venc_omx_send_frame:支持用户对于H.264/H.265/SVAC3.0编码通路发送外部码率控制信息进行编码。
- ss_mpi_venc_send_multi_frame:用户发送2个图像及马赛克区域信息进行编码。
- ss_mpi_venc_send_frame_batch_crop:用户发送原图和批量抠图信息。
- ss_mpi_venc_send_qpmap:支持绑定模式下用户发送qpmap。
- ss_mpi_venc_set_chn_config:设置编码通道复合编码配置。
- ss_mpi_venc_get_chn_config:获取编码通道复合编码配置。
- ss_mpi_venc_request_vi:请求VI(虚拟I帧)帧。
- ss_mpi_venc_request_idr:请求IDR帧。
- ss_mpi_venc_enable_idr:使能IDR帧。
- ss_mpi_venc_get_fd:获取编码通道对应的设备文件句柄。
- ss_mpi_venc_set_roi_attr:设置H.264/H.265/SVAC3.0通道的ROI属性。
- ss_mpi_venc_get_roi_attr:获取H.264/H.265/SVAC3.0通道的ROI配置属性。
- ss_mpi_venc_set_roi_attr_ex:设置H.264/H.265/SVAC3.0通道的ROI配置高级属性。
- ss_mpi_venc_get_roi_attr_ex:获取H.264/H.265/SVAC3.0通道的ROI配置高级属性。
- ss_mpi_venc_set_roi_bg_frame_rate:设置H.264/H.265/SVAC3.0通道的非ROI区域帧率属性。
- ss_mpi_venc_get_roi_bg_frame_rate:获取H.264/H.265/SVAC3.0通道的非Roi区域帧率配置属性。
- ss_mpi_venc_set_h264_intra_pred:设置H.264编码的帧内预测配置。
- ss_mpi_venc_get_h264_intra_pred:获取H.264编码的帧内预测配置。
- ss_mpi_venc_set_h264_trans:设置H.264编码的变换、量化配置。
- ss_mpi_venc_get_h264_trans:获取H.264编码的变换、量化配置。
- ss_mpi_venc_set_h264_entropy:设置H.264编码的熵编码配置。
- ss_mpi_venc_get_h264_entropy:获取H.264编码的熵编码配置。
- ss_mpi_venc_set_h264_dblk:设置H.264编码的deblocking配置。
- ss_mpi_venc_get_h264_dblk:获取H.264编码的deblocking配置。
- ss_mpi_venc_set_h264_vui:设置H.264编码的VUI配置。
- ss_mpi_venc_get_h264_vui:获取H.264编码的VUI配置。
- ss_mpi_venc_set_h265_vui:设置H.265协议编码通道的VUI参数。
- ss_mpi_venc_get_h265_vui:获取H.265协议编码通道的VUI配置
- ss_mpi_venc_set_jpeg_param:设置JPEG编码的参数集合。
- ss_mpi_venc_get_jpeg_param:获取JPEG编码的参数集合。
- ss_mpi_venc_set_mjpeg_param:设置MJPEG协议编码通道的高级参数。
- ss_mpi_venc_get_mjpeg_param:获取MJPEG协议编码通道的高级参数。
- ss_mpi_venc_set_rc_param:设置通道码率控制高级参数。
- ss_mpi_venc_get_rc_param:获取通道码率控制高级参数。
- ss_mpi_venc_set_ref_param:设置H.264/H.265/SVAC3.0编码通道高级跳帧参考参数。
- ss_mpi_venc_get_ref_param:获取H.264/H.265/SVAC3.0编码通道高级跳帧参考参数。
- ss_mpi_venc_set_jpeg_enc_mode:设置JPEG抓拍通道的抓拍模式。
- ss_mpi_venc_get_jpeg_enc_mode:获取JPEG抓拍通道的抓拍模式。
- ss_mpi_venc_set_slice_split:设置H.264/H.265/SVAC3.0编码的slice/patch分割配置。
- ss_mpi_venc_get_slice_split:获取H.264/H.265/SVAC3.0编码的slice/patch分割配置。
- ss_mpi_venc_set_search_window:设置H.264/H.265/SVAC3.0通道的搜索窗范围。
- ss_mpi_venc_get_search_window:获取H.264/H.265/SVAC3.0通道的搜索窗范围。
- ss_mpi_venc_set_h265_pu:设置H.265编码的PU配置。
- ss_mpi_venc_get_h265_pu:获取H.265编码的PU配置。
- ss_mpi_venc_set_h265_trans:设置H.265编码的变换、量化配置。
- ss_mpi_venc_get_h265_trans:获取H.265编码的变换、量化配置。
- ss_mpi_venc_set_h265_entropy:设置H.265通道的熵编码属性。
- ss_mpi_venc_get_h265_entropy:获取H.265通道的熵编码属性。
- ss_mpi_venc_set_h265_dblk:设置H.265编码的deblocking配置。
- ss_mpi_venc_get_h265_dblk:获取H.265编码的deblocking配置。
- ss_mpi_venc_set_h265_sao:设置H.265编码的SAO配置。
- ss_mpi_venc_get_h265_sao:获取H.265编码的SAO配置。
- ss_mpi_venc_set_frame_lost_strategy:设置瞬时码率超出阈值时丢帧策略的配置。
- ss_mpi_venc_get_frame_lost_strategy:获取瞬时码率超出阈值时丢帧策略的配置。
- ss_mpi_venc_set_super_frame_strategy:设置超大帧处理配置。
- ss_mpi_venc_get_super_frame_strategy:获取超大帧处理配置。
- ss_mpi_venc_get_intra_refresh:获取P帧帧内刷新设置参数。
- ss_mpi_venc_set_intra_refresh:设置P帧帧内刷新参数。
- ss_mpi_venc_set_mod_param:设置编码相关的模块参数。
- ss_mpi_venc_get_mod_param:获取编码相关的模块参数。
- ss_mpi_venc_set_sse_rgn:设置H.264/H.265/SVAC3.0通道的SSE属性。
- ss_mpi_venc_get_sse_rgn:获取H.264/H.265/SVAC3.0通道的SSE属性。
- ss_mpi_venc_set_chn_param:设置Venc通道参数。
- ss_mpi_venc_get_chn_param:获取Venc通道参数。
- ss_mpi_venc_set_fg_protect:设置通道的前景保护参数。
- ss_mpi_venc_get_fg_protect:获取通道的前景保护参数。
- ss_mpi_venc_set_scene_mode:设置编码场景模式。
- ss_mpi_venc_get_scene_mode:获取编码场景模式。
- ss_mpi_venc_attach_vb_pool:将编码通道绑定到某个视频缓存VB池中。
- ss_mpi_venc_detach_vb_pool:将编码通道从某个视频缓存VB池中解绑定。
- ss_mpi_venc_set_cu_pred:设置CU模式的倾向性。
- ss_mpi_venc_get_cu_pred:获取CU模式的倾向性配置。
- ss_mpi_venc_set_skip_bias:设置cu/mb选择Skip模式的倾向性。
- ss_mpi_venc_get_skip_bias:获取cu/mb选择Skip模式的倾向性配置。
- ss_mpi_venc_set_debreath_effect:设置去除呼吸效应参数。
- ss_mpi_venc_get_debreath_effect:获取去除呼吸效应参数。
- ss_mpi_venc_set_hierarchical_qp:设置分层qp参数。
- ss_mpi_venc_get_hierarchical_qp:获取分层qp参数。
- ss_mpi_venc_set_rc_adv_param:设置RC模块的高级参数。
- ss_mpi_venc_get_rc_adv_param:获取RC模块的高级参数。
- ss_mpi_venc_set_jpeg_roi_attr:设置jpeg ROI属性。
- ss_mpi_venc_get_jpeg_roi_attr:获取jpeg ROI属性。
- ss_mpi_venc_get_jpeg_roi_adv_attr:获取JPEG和MJPEG编码通道的ROI高级属性。
- ss_mpi_venc_set_jpeg_roi_adv_attr:设置JPEG和MJPEG编码通道的ROI高级属性。
- ss_mpi_venc_enable_svc:开启/关闭智能编码。
- ss_mpi_venc_get_svc_param:获取智能编码1.0相关参数。
- ss_mpi_venc_set_svc_param:设置智能编码1.0相关参数。
- ss_mpi_venc_set_svc_param_ex:设置智能编码相关参数。
- ss_mpi_venc_get_svc_param_ex:获取智能编码相关参数。
- ss_mpi_venc_send_svc_mask:发送智能检测目标mask信息。
- ss_mpi_venc_send_svc_region:发送智能检测目标框属性信息。
- ss_mpi_venc_get_md:获取编码器md检测信息。
- ss_mpi_venc_set_md:设置编码器md检测区域控制信息。
- ss_mpi_venc_get_deblur:获取背景去模糊算法相关参数。
- ss_mpi_venc_set_deblur:设置背景去模糊算法相关参数。
- ss_mpi_venc_get_param_set_id:获取H.264/H.265参数集ID。
- ss_mpi_venc_set_param_set_id:设置H.264/H.265参数集ID。
- ss_mpi_venc_get_h264_poc:获取H.264协议编码通道的POC类型。
- ss_mpi_venc_set_h264_poc:设置H.264协议编码通道的POC类型。
- ss_mpi_venc_get_jpeg_dering_attr:获取JPEG编码通道的强边去Ring效应参数。
- ss_mpi_venc_set_jpeg_dering_attr:设置JPEG编码通道的强边去Ring效应参数。
-
ss_mpi_venc_get_quality_balance:获取编码器以质量均衡为目标相关参数。
-
ss_mpi_venc_set_quality_balance:设置编码器以质量均衡为目标相关参数。
-
ss_mpi_venc_get_watermark:获取数字水印相关参数。
- ss_mpi_venc_set_watermark:设置数字水印相关参数。
- ss_mpi_venc_get_watermark_roi:获取数字水印保护区域相关参数。
- ss_mpi_venc_set_watermark_roi:设置数字水印保护区域相关参数。
- ss_mpi_venc_enable_jpeg_dblk:是否使能JPEG、MJPEG编码通道的去Block效应功能。
- ss_mpi_venc_get_adv_deblur:获取运动物体区域拖尾和残留区域检测参数。
- ss_mpi_venc_set_adv_deblur:设置运动物体区域拖尾和残留区域检测参数。
- ss_mpi_venc_set_svac3_trans:设置SVAC3.0协议编码通道的变换、量化的属性。
- ss_mpi_venc_get_svac3_trans:获取SVAC3.0协议编码通道的变换、量化的属性。
- ss_mpi_venc_set_svac3_dblk:设置SVAC3.0通道的Deblocking属性。
- ss_mpi_venc_get_svac3_dblk:获取SVAC3.0通道的Deblocking属性。
- ss_mpi_venc_set_svac3_sao:设置SVAC3.0通道的Sao属性。
- ss_mpi_venc_get_svac3_sao:获取SVAC3.0通道的Sao属性。
- ss_mpi_venc_set_svac3_alf:设置SVAC3.0通道的ALF属性。
- ss_mpi_venc_get_svac3_alf:获取SVAC3.0通道的ALF属性。
- ss_mpi_venc_set_svac3_privacy:设置SVAC3.0通道的隐私保护属性。
- ss_mpi_venc_get_svac3_privacy:获取SVAC3.0通道的隐私属性。
- ss_mpi_venc_set_svac3_emulation:设置SVAC3.0协议编码通道防伪起始码配置。
- ss_mpi_venc_get_svac3_emulation:获取SVAC3.0协议编码通道防伪起始码配置。
- ss_mpi_venc_enable_one_pack:是否使能编码通道的单包模式,使能后,一帧所有的ECS在一个码流包。
- ss_mpi_venc_set_bitrate_strategy:设置H.264/H.265/SVAC3.0编码通道码率策略。
- ss_mpi_venc_get_bitrate_strategy:获取码率策略配置。
- ss_mpi_venc_set_chn_capability:设置能力集配置。
- ss_mpi_venc_get_chn_capability:获取能力集配置。
- ot_venc_get_export_symbol:获取驱动导出符号。
- ss_mpi_venc_set_fast_enc_param:设置快速编码。
- ss_mpi_venc_get_fast_enc_param:获取快速编码。
- ss_mpi_venc_bind_aiseg_chn:绑定语义分割图编码通道与主图编码通道。
- ss_mpi_venc_unbind_aiseg_chn:解绑语义分割图编码通道与主图编码通道。
- ss_mpi_venc_send_frame_aiseg:向语义分割图通道送语义分割图。
- ss_mpi_venc_set_fg_mode:设置通道的前景模式。
- ss_mpi_venc_get_fg_mode:获取编码前景模式。
- ss_mpi_venc_set_prefilter_effect:设置预滤波参数。
- ss_mpi_venc_get_prefilter_effect:获取预滤波参数。
- ss_mpi_venc_enable_mux_stm_syntax:设置码流拼接功能参数。
- ss_mpi_venc_set_svac3_aiseg:设置SVAC3.0通道的语义分割功能属性。
- ss_mpi_venc_get_svac3_aiseg:获取SVAC3.0通道的语义分割功能属性。
ss_mpi_venc_create_chn
【描述】
创建编码通道。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ot_common_rc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 编码通道属性由三部分组成,编码器属性、码率控制器属性和帧结构类型属性,帧结构类型属性简称GOP类型属性。
- 编码器属性首先需要选择编码协议,然后分别对各种协议对应的属性进行赋值。
-
编码器属性最大宽高,通道宽高必须满足如下约束:
MaxPicWidth∈[MIN_WIDTH, MAX_WIDTH]
MaxPicHeight∈[MIN_HEIGHT, MAX_HEIGHT]
PicWidth∈[MIN_WIDTH, MAX_WIDTH]
PicHeight∈[MIN_HEIGHT, MAX_HEIGHT]
最大宽高,通道宽高必须是MIN_ALIGN的整数倍。
其中MIN_WIDTH,MAX_WIDTH,MIN_HEIGHT,MAX_HEIGHT,MIN_ALIGN分别表示编码通道支持的最小宽度,最大宽度,最小高度,最大高度,最小对齐单元(像素)。
编码器支持通道宽高如表1所示。
表 1 解决方案相关编码通道宽高
- 部分解决方案支持多编码器并行编码,H.265编码支持垂直划分Tile,根据通道宽高和码率控制器输出帧率决定tile划分数目;H.264编码支持水平划分Tile(实际是划分slice),根据通道宽高和帧率决定Tile划分数目。Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100不支持。
- 编码器属性必须设置编码码流buffer大小、获取码流方式、编码profile等,表2详细描述了各种协议的各项属性的特性。
表 2 编码器属性的约束
- 为了保证本芯片自编自解的解码性能也能达到最优,当只划分3个tile时,每个tile内部均分划2个slice,但是如果用户调用接口ss_mpi_venc_set_slice_split进行划分时内部不会自动划分。
- 推荐的编码宽高为:7680x4320(8k)、3840x2160(4k)、1920x1080(1080P)、1280x720(720P)。
- 编码器属性中除通道宽高(pic_width和pic_height)外都是静态属性,一旦创建编码通道成功,静态属性不支持被修改,除非该通道被销毁,重新创建。设置时需要注意的事项请参考ss_mpi_venc_set_chn_attr接口说明。
- H.264/H.265/SVAC3.0,编码帧存由YHeaderSize、CHeaderSize、YSize、CSize、PmeSize、 PmeInfoSize和TmvSize共同构成,编码器默认根据最大宽高计算帧存进行内存分配,在设置通道宽高时需保证根据通道宽高计算的每一部分帧存大小都不能大于最大宽高计算的帧存大小。H.264协议TmvSize大小为0, Hi3516CV610中SVAC3.0协议TmvSize大小为0。
-
JPEG/MJPEG,通道宽高的设置要满足:
PicWidth*PicHeight<= MaxPicWidth* MaxPicHeight
-
码率控制器属性首先需要配置RC模式,JPEG抓拍通道不需要配置码率控制器属性,其他协议类型通道(H.264/H.265/SVAC3.0/MJPEG)都必须配置。码率控制器属性RC模式必须与编码器属性协议类型匹配。
- 对H.264/H.265/SVAC3.0编码协议,码率控制均支持八种模式:CBR、ABR、VBR、AVBR、QVBR、CVBR、QPMAP和FIXQP。并且对于不同协议,相同RC模式的属性变量基本一致。
- MJPEG的码率控制支持三种模式:CBR、VBR和FIXQP。
- src_frame_rate应该设置为产生time_ref的实际帧率,RC需要根据src_frame_rate统计实际的帧率以及进行码率控制。详情请参看ot_venc_h264_cbr注意事项。
- CBR和ABR除了上述的属性之外,还需要设置平均比特率。平均比特率的单位是kbps。平均比特率的设置与编码通道宽高以及图像帧率都有关系。
- ABR除了上述的属性之外,还需要设置vbv_buf_delay。平均比特率乘以 vbv_buf_delay为视频缓冲区校验器的大小。
- VBR除了上述属性之外,还需要设置max_bit_rate,表示编码通道在码率统计时间内允许的最大码率。
- AVBR需要设置max_bit_rate。max_bit_rate:编码通道在码率统计时间内允许的最大码率。
- QVBR需要设置target_bit_rate。编码通道在target_bit_rate的基础上调节实时码率。实时码率可能大于target_bit_rate,也可能小于target_bit_rate。
-
CVBR需要设置以下码率:
- max_bit_rate:编码通道在短期统计时间short_term_stats_time内允许的最大码率。
- long_term_max_bit_rate:编码通道在长期统计时间long_term_stats_time内允许的最大码率。
- extra_bit_percent:编码器输出码流最大透支bit数相对于long_term_max_bit_rate的百分比。在码率不足时,为保证图像质量,编码器会通过透支一定bit数以提升图像质量,这部分透支的码率会在编码器压力较小时进行偿还。
-
FIXQP除了上述属性之外,还需要设置i_qp,p_qp,b_qp。i_qp:I帧时,图像固定使用的QP值。p_qp:P帧时,图像固定使用的QP值。b_qp:B帧时,图像固定使用的QP值。在设置I帧QP,P帧QP时,可以根据当前的带宽限制对I帧QP和P帧QP同时进行向上或是向下调整。为了减少呼吸效应,推荐I帧QP始终比P帧的QP小2~3。
- H.264编码通道profile为Baseline时,协议不支持编码B帧。
- H.265/SVAC3.0编码通道QPMAP除了上述属性之外,还需要设置qpmap_mode,表示 CU的QP值的选择方式。
- H.264/H.265/SVAC3.0 GOP结构属性首先需要配置Gop Mode模式,(JPEG/MJPEG通道不需要配置GOP结构属性)。
- Jpege编码时,使能MPF后获取码流不支持单包模式,调用接口ss_mpi_venc_set_mod_param设置one_stream_buf为多包模式。
- 多路Prores编码时性能和单路编码不具有转换关系,可能存在多路性能小于单路编码的性能。
- JPEGE编码通道OT_VENC_PIC_RECV_MULTI模式用于编码MPF/DCF,此时编码不会调用VGS模块进行图像缩小。使能该模式后需要调用ss_mpi_sys_bind接口将编码通道绑定到多个输入源,ss_mpi_sys_bind传递的数据接收者的设备号实际用于指定输入源,可以使用OT_VENC_RECV_SRC0、OT_VENC_RECV_SRC1、OT_VENC_RECV_SRC2、OT_VENC_RECV_SRC3枚举进行输入源指定。
- 当前无解决方案支持H.265 main 10 profile.
- Hi3511CV100 SVAC3.0协议支持设置语义分割图标志,表示该通道为语义分割图编码通道。
- 由于视频编码存在损失,语义分割通道参数应以提高编码质量为目标,尽可能避免解码后的语义分割图与语义分割图的差异。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_destroy_chn
【描述】
销毁编码通道。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 销毁并不存在的通道,返回失败。
- 销毁前必须停止接收图像,否则返回失败。
- 如果开启了OSD,则编码通道销毁前要调用接口ss_mpi_rgn_detach_from_chn(请参考“区域管理”章节)将OSD区域从当前通道撤出。
- 开启了OSD,如果需要销毁OSD,建议在调用ss_mpi_rgn_destroy(请参考“区域管理”章节)接口之前先调用ss_mpi_venc_reset_chn。
- 如果开了送流给UVC场景,则编码通道销毁前需要调用接口ss_mpi_uvc_destroy_chn将UVC收到的流都还给当前通道。
- 销毁通道后通道配置(ot_venc_chn_config),通道能力集(ot_venc_chn_capability)恢复初始值。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_reset_chn
【描述】
复位通道。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- Reset并不存在的通道,则返回失败OT_ERR_VENC_UNEXIST。
- 如果一个通道没有停止接收图像而reset通道,则返回失败。
- 开启了OSD,如果需要销毁OSD,建议在调用ss_mpi_rgn_destroy(请参考“区域管理”章节)接口之前先调用该接口。
- 如果开启了I帧刷slice、deblur、PVC、JPEG的ADV_ROI功能,在调用reset接口后相关功能将关闭。
- 如果用户设置搜索窗参数、码率策略模式,在调用reset接口后相关参数将重置为默认值。
- 对于正积压在缓存队列中的jpeg roi_map、qpmap、skipmap、user_sei_data、输入帧以及输出码流,在调用reset接口后缓存队列中数据将被清空。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_start_chn
【描述】
开启编码通道接收输入图像,允许指定接收帧数,超出指定的帧数后自动停止接收图像。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,则返回失败OT_ERR_VENC_UNEXIST。
- 需要接收的图像帧数设置为-1时表示不指定帧数。
- 如果通道已经开始接收图像,没有停止接收图像前再一次调用此接口指定接收帧数,返回操作不允许。
- 如果通道指定接收帧数接收图像,没有停止接收图像前允许再一次调用此接口不指定帧数接收图像。
- 只有开启接收之后编码器才开始接收图像编码。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_stop_chn
【描述】
停止编码通道接收输入图像。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,则返回失败。
- 此接口并不判断当前是否停止接收,即允许重复停止接收不返回错误。
- 此接口用于编码通道停止接收图像来编码,在编码通道销毁或复位前必须停止接收图像。
- 调用此接口仅停止接收原始数据编码,码流buffer并不会被清除。
- 此接口在部分场景(如缩小裁剪等需要VGS模块的场景)下耗时较长。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_query_status
【描述】
查询编码通道状态。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,则返回失败。
-
此接口用于查询此函数调用时刻的编码器状态,status 包含以下主要的信息:
-
left_pics表示待编码的帧个数。
在复位通道前,可以通过查询是否还有图像待编码来决定复位时机,防止复位时将可能需要编码的帧清理出去。
-
left_stream_bytes表示码流buffer中剩余的byte数目。
在复位通道前,可以通过查询是否还有码流没有被处理来决定复位时机,防止复位时将可能需要的码流清理出去。
-
left_stream_frames表示码流buffer中剩余的帧数目。
在复位通道前,可以通过查询是否还有图像的码流没有被取走来决定复位时机,防止复位时将可能需要的码流清理出去。
-
cur_packs表示当前帧的码流包个数。在调用ss_mpi_venc_get_stream之前应确保cur_packs大于0。
在按包获取时当前帧可能不是一个完整帧(被取走一部分),按帧获取时表示当前一个完整帧的包个数(如果没有一帧数据则为0)。用户在需要按帧获取码流时,需要查询一个完整帧的包个数,在这种情况下,通常可以在select成功后执行query操作,此时cur_packs是当前完整帧中包的个数。
-
left_recv_pics表示调用 ss_mpi_venc_start_chn 接口后剩余等待接收的帧数目。
-
left_enc_pics表示调用ss_mpi_venc_start_chn 接口后剩余等待编码的帧数目。
如果调用ss_mpi_venc_start_chn但没有指定接收帧数,left_recv_pics和left_enc_pics数目始终为0。
-
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_chn_attr
【描述】
设置编码通道属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 编码通道属性包括了编码器属性、帧结构类型属性和码率控制器属性三部分。
- 不能动态设置编码通道最大宽、最大高等属性。
- 设置未创建的通道的属性,则返回失败。
- 如果chn_attr为空,则返回失败。
- 设置编码图像大小时的限制和创建通道时的限制一样。
- 编码通道属性分为动态属性和静态属性两种。其中,动态属性的属性值在通道创建时配置,在通道销毁之前可以被修改;静态属性的属性值在通道创建时配置,在通道创建之后不能被修改。
- 此接口只能设置编码通道属性中的动态属性,如果设置静态属性,则返回失败。编码协议、获取码流的方式(按帧还是按包获取码流)、编码图像最大宽高属性属于静态属性。另外,各个编码协议的静态属性由各个协议模块指定,具体请参见ot_venc_chn_attr。
- 设置编码器属性中通道宽高属性时,需要首先停止编码通道接收输入图像。通道宽高设置后通道的优先级并不会恢复默认,编码通道的其它所有参数配置恢复默认值,关闭OSD,并且清空码流buffer和缓存图像队列。
- 如果去除呼吸效应功能开启时,修改GOP等于1为非法参数。
- 当编码器宽高属性、GOP结构、RC属性改变后,RC模块会重新初始化,所有RC高级参数都恢复到默认值。如果客户程序中有对RC高级参数的调整,需要重新设置。RC高级参数请参考ss_mpi_venc_set_rc_param、ss_mpi_venc_set_super_frame_strategy、ss_mpi_venc_set_frame_lost_strategy等。
-
重设码流分辨率时OSD功能使用推荐以下接口调用顺序:
1)ss_mpi_venc_stop_chn编码通道停止接收图像;
2)ss_mpi_rgn_detach_from_chn(请参考“区域管理”章节)把OSD区域从编码通道撤出;
3)ss_mpi_venc_set_chn_attr重设编码码流分辨率;
4)ss_mpi_rgn_attach_to_chn(请参考“区域管理”章节)把OSD区域叠加到编码通道上;
5)ss_mpi_venc_start_chn开始接收图像编码。
-
设置编码通道属性,无修改gop_mode时,则通道属性立即生效,修改gop_mode时,则通道属性延时1帧生效,最大延迟1帧生效。
-
修改gop_mode时,通道的非ROI区域帧率、去除呼吸效应、P帧刷Islice以及编码通道瞬时码率超过阈值时丢帧策略的属性、跳帧参考的属性(H.264/H.265/SVAC3.0)、pic_order_cnt_type(H.264)会恢复默认值,如需继续使用需要重新配置。
- 如果同时修改gop_mode和RC模式时,由于存在延迟生效,为了防止调用 ss_mpi_venc_get_rc_param获取RC参数不准确,建议等待延迟参数生效后再执行相应操作。
-
当编码帧存分配使用UserVB方式且打开帧节省模式时:
- 由于gop_mode变化,导致参考帧个数增加,内部会判断已绑定的VB池存储Picture的VB个数是否满足需求,如果个数不够,则接口会返回失败。
- 由于编码分辨率变化,导致需要的Picture 的VB大小增加,内部会判断已绑定的VB池存储Picture的VB 大小是否满足需求,如果大小不足,则接口返回失败。
-
使能能力集后,通道属性中max_pic_width、max_pic_height、buf_size、rcn_ref_share_buf_en、frame_buf_ratio需要和能力集中数值保值相同,其他参数需要保证在能力集范围之内,否则会创建通道失败。
- 使能能力集后支持设置属性时切换修改协议、profile。切换协议、profile后除本接口定义的属性、通道配置(ot_venc_chn_config)、通道能力集(ot_venc_chn_capability)之外,其他均恢复为初始值。其他所有特性如有需要均要重新配置。
- 设置属性进行协议切换时需要先停止通道(ss_mpi_venc_stop_chn)。切换协议前获取的但是未被释放的码流数据可能已被改写,数据不再完整,需要用户程序保证丢弃这部分数据。
- 使能能力集后切换协议遇到内部异常或者特定条件不满足,可能切换失败。在某些异常下内部老的协议已经销毁,新的协议创建失败,此时编码通道被动销毁,通道配置(ot_venc_chn_config)、通道能力集(ot_venc_chn_capability)将保存原来的配置,通道内存仍然存在。外部修正通道属性后可以继续调用本接口设置属性。或者调用销毁接口,释放通道内存。
- 外部主动调用销毁接口后,通道配置(ot_venc_chn_config)、通道能力集(ot_venc_chn_capability)将恢复默认值,通道内存也会释放。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_chn_attr
【描述】
获取编码通道属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 获取未创建的通道的属性,返回失败OT_ERR_VENC_UNEXIST。
- 如果chn_attr为空,则返回失败。
- 在切换GOP模式时,获取的通道属性是已设置的最新的属性。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_stream
【描述】
获取编码的码流。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
|
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,返回失败。
- 如果stream为空,返回OT_ERR_VENC_NULL_PTR。
- 如果milli_sec小于-1,返回OT_ERR_VENC_ILLEGAL_PARAM。
-
支持超时方式获取。支持select/poll系统调用。
- milli_sec = 0时,则为非阻塞获取,即如果缓冲无数据,则返回失败OT_ERR_VENC_BUF_EMPTY。
- milli_sec = -1时,则为阻塞,即如果缓冲无数据,则会等待有数据时才返回获取成功。
- milli_sec > 0时,则为超时,即如果缓冲无数据,则会等待用户设定的超时时间,若在设定的时间内有数据则返回获取成功,否则返回超时失败。
-
支持按包或按帧方式获取码流。如果按包获取,则:
- 对于JPEG编码协议,每次获取的是一个参数包或数据包。
- 对于H.264/H.265/SVAC3.0编码协议,每次获取的是一个NAL单元。
-
码流结构体ot_venc_stream包含以下部分:
-
码流包信息指针pack
指向一组ot_venc_pack的内存空间,该空间由调用者分配。如果是按包获取,则此空间不小于sizeof(ot_venc_pack)的大小;如果按帧获取,则此空间不小于N x sizeof(ot_venc_pack)的大小,其中N代表当前帧之中的包的个数,可以在select之后通过查询接口获得。
-
码流包个数pack_cnt
在输入时,此值指定pack中ot_venc_pack的个数。按包获取时,pack_cnt必须不小于1;按帧获取时,pack_cnt必须不小于当前帧的包个数。在函数调用成功后,pack_cnt返回实际填充pack的包的个数。
-
序列号seq
按帧获取时是帧序列号;按包获取时为包序列号。
-
码流特征信息,数据类型为联合体,包含了不同编码协议对应的码流特征信息h264_info/ jpeg_info/h265_info/svac3_info,码流特征信息的输出用于支持用户的上层应用。
- 码流高级特征信息,数据类型为联合体,包含了不同编码协议对应的码流高级特征信息h264_adv_info/h265_adv_info/svac3_adv_info,码流高级特征信息的输出用于支持用户的上层应用。
-
-
如果用户长时间不获取码流,码流缓冲区就会满。一个编码通道如果发生码流缓冲区满,就会不再启动编码,直到用户获取码流,从而有足够的码流缓冲可以用于编码时,才开始继续编码。
- 同时启用slice/patch低延时功能和按包接收流功能时,调用此接口获取一帧的最后一个slice/patch码流包时附带的码流信息才会更新。获取该帧内其他slice/patch码流包时附带的码流信息与前一帧相同。获取首帧的码流包时,附带的码流信息在更新前均为系统默认值。
- 建议用户获取码流接口调用与释放码流的接口调用成对出现,且尽快释放码流,防止出现由于用户态获取码流,释放不及时而导致的码流buffer满,停止编码。
-
建议用户使用select方式获取码流,且按照如下的流程:
-
调用ss_mpi_venc_query_status函数查询编码通道状态;
- 确保cur_packs和left_stream_frames同时大于0;
- 调用malloc分配cur_packs个包信息结构体;
- 调用ss_mpi_venc_get_stream获取编码码流;
-
调用ss_mpi_venc_release_stream释放码流缓存。
-
当one_stream_buf为1时,用户获取一帧码流时只会得到一个码流包(不包含用户数据)的地址,即pack_cnt为1,地址为pack[0]. addr。而在ot_venc_pack结构体中增加offset,用来指出一帧码流中有效数据的地址和pack[0].addr的偏移。如图1所示(以H.264单包为例),pack[0]. data_num = 3,即3种NAL包,分别为SPS、PPS、SEI。pack[0]. pack_info[0]. pack_type. h264_type = OT_VENC_H264_NALU_SPS,pack[0]. pack_info [1]. pack_type. h264_type = OT_VENC_H264_NALU_PPS,pack[0]. pack_info [2]. pack_type. h264_type = OT_VENC_H264_NALU_SEI;其他协议以此类推,data_num和pack_info只在单包模式才有意义。

-
两种模式可通过调用接口ss_mpi_venc_set_mod_param设置h265e.ko/svac3e.ko/h264e.ko/jpege.ko模块参数one_stream_buf来选择。
- one_stream_buf=1表示单包模式;
- one_stream_buf=0表示非单包模式,系统默认one_stream_buf=0。
-
码流获取支持cache方式,可通过调用接口 ss_mpi_venc_set_mod_param 设置venc模块参数buf_cache来选择。
- buf_cache=1表示使用cache方式;
- buf_cache=0表示非cache方式,系统默认buf_cache=0。
当每帧码流只从码流buffer拷贝一次时不建议使用cache方式。
-
【举例】
详细的内容,请参考sample代码。
【相关主题】
无。
ss_mpi_venc_release_stream
【描述】
释放码流缓存。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,则返回错误码OT_ERR_VENC_UNEXIST。
- 如果stream为空,则返回错误码OT_ERR_VENC_NULL_PTR。
- 此接口应当和ss_mpi_venc_get_stream配对起来使用,用户获取码流后必须及时释放已经获取的码流缓存,否则可能会导致码流buffer满,影响编码器编码,并且用户必须按先获取先释放的顺序释放已经获取的码流缓存。
- 在编码通道复位以后,所有未释放的码流包均无效,不能再使用或者释放这部分无效的码流缓存。
- 释放无效的码流会返回失败OT_ERR_VENC_ILLEGAL_PARAM,重复释放同一段码流时返回成功,但释放动作无效。
【举例】
请参见ss_mpi_venc_get_stream的举例。
【相关主题】
无。
ss_mpi_venc_get_stream_buf_info
【描述】
获取码流buffer的物理地址和大小。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,则返回错误码OT_ERR_VENC_UNEXIST。
- 如果stream_buf_info为空,则返回错误码OT_ERR_VENC_NULL_PTR。
- 当用户需要使用一帧码流的物理地址时,应先调用该接口来获取每个tile的码流buffer的起始物理地址及其大小,判断码流是否有折回。多tile编码时,获取到一个码流包时,首先需要判断出该段码流所在的tile,例如:当ot_venc_stream结构体中pack[0]. phys_addr大于或等于stream_buf_info-> phys_addr[i]并小于stream_buf_info-> phys_addr[i+1]时,该段码流属于第i个tile。然后计算码流是否有折回,pack[0]. phys_addr+ len大于stream_buf_info-> phys_addr[i]+ stream_buf_info-> buf_size则折回。通过获取码流因折回而得到的两个物理地址,从而正确使用码流的物理地址,其中len为该段码流的长度。
【举例】
如图1所示。

【相关主题】
无。
ss_mpi_venc_insert_user_data
【描述】
插入用户数据。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,则返回失败。
- 如果data为空,则返回失败。
- 插入用户数据,只支持H.264/H.265/SVAC3.0和MJPEG/JPEG编码协议。
- H.264/H.265/SVAC3.0协议通道最多同时分配4块内存空间用于缓存用户数据,并通过调用接口ss_mpi_venc_set_mod_param设置每段用户数据允许的最大字节数max_user_data_len。如果用户插入的数据多于4块,或插入的一段用户数据大于max_user_data_len时,此接口会返回错误。每段用户数据以SEI包的形式被插入到最新的图像码流包之前。在某段用户数据包被编码发送之后,H.264/H.265/SVAC3.0通道内缓存这段用户数据的内存空间被清零,用于存放新的用户数据。
- H.264/H.265协议,在调用接口ss_mpi_venc_set_mod_param将编码码流帧模式为单包模式时,用户数据的SEI包不进行拼包处理。
- JPEG/MJPEG协议通道分配1块1k byte大小的内存空间,用于缓存用户数据,可以插入多块用户数据,但总大小不能超出内存空间的限制。用户数据以APP segment(0xFFEF)形式添加到图像码流中。在用户数据被编码发送之后,JPEG/MJPEG通道内缓存这段用户数据的内存空间被清零,用于存放新的用户数据。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_send_frame
【描述】
支持用户发送原始图像进行编码。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 此接口支持用户发送图像至编码通道。
- 如果milli_sec小于-1,返回OT_ERR_VENC_ILLEGAL_PARAM。
- H.264/H.265/SVAC3.0编码通道支持接收Semi-planar YVU 4:2:0/ Semi-planar YUV 4:2:0或PIXEL_FORMAT_YUV_400图像,JPEG/MJPEG编码通道支持接收Semi-planar YVU 4:2:0/ Semi-planar YUV 4:2:0、Semi-planar YVU 4:2:2/ Semi-planar YUV 4:2:2或PIXEL_FORMAT_YUV_400图像。
- 仅JPEG/MJPEG编码通道支持非VB内存输入,且亮度色度支持不连续,MMZ内存申请释放由用户保证,用户保证内存在使用期间不会被修改。
- 视频输入的原始图像大小必须不小于编码通道的大小。
- 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像。
- Hi3511CV100支持使用此接口送马赛克、智能编码框、QPMAP等信息。
- 当帧信息中的color_gamut设置为OT_COLOR_GAMUT_USER时,VENC默认转换为OT_COLOR_GAMUT_BT709。
- ot_video_frame_info中携带的stride信息因不同芯片而异。
- Hi3511CV100/Hi3516CV100为8的整数倍。
- Hi3519DV500为16的整数倍。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_send_frame_ex
【描述】
支持用户对于H.264/H.265/SVAC3.0编码通路发送原始图像及该图的QpMap表信息进行编码,或者原始图像及该图mosaic信息;支持用户对于JPEG和MJPEG通路发送原始图像及该图的ROIMap表信息进行编码,或者原始图像及该图mosaic信息。
【语法】
td_s32 ss_mpi_venc_send_frame_ex(ot_venc_chn chn, const ot_venc_user_frame_info *frame, td_s32 milli_sec);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
|
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 此接口支持用户发送图像至编码通道。
- 如果milli_sec小于-1,返回OT_ERR_VENC_ILLEGAL_PARAM。
-
用户发送原始图像格式要求:
- H.264/H.265/SVAC3.0编码通道支持接收Semi-planar YVU 4:2:0/ Semi-planar YUV 4:2:0/PIXEL_FORMAT_YUV_400图像。
- JPEG/MJPEG编码通道支持接收Semi-planar YVU 4:2:0/ Semi-planar YUV 4:2:0、Semi-planar YVU 4:2:2/ Semi-planar YUV 4:2:2或单分量输入(PIXEL_FORMAT_YUV_400)图像。
-
仅JPEG/MJPEG编码通道支持非VB内存输入,且亮色度支持不连续,MMZ内存申请释放由用户保证,用户保证内存在使用期间不会被修改。
- 视频输入的原始图像大小必须不小于编码通道的大小。
- 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像,若码控模式为ABR/CBR/VBR/AVBR/QVBR/CVBR时,用户需调用ss_mpi_venc_set_rc_param接口使能QpMap功能,且只支持相对模式。
- Gop Mode模式为OT_VENC_GOP_MODE_ADV_SMART_P时不支持qpmap模式,调用此接口会返回不支持。
- Rc为fixqp模式下不支持该接口的QPmap功能。
- 指定当前帧编码类型时,GOP类型为OT_VENC_GOP_MODE_BIPRED_B时不支持指定当前帧编码为IDR帧,即frame_type 仅支持配置为OT_VENC_FRAME_TYPE_NONE。
- 指定当前帧类型为p_skip时,仅在GOP类型为OT_VENC_GOP_MODE_NORMAL_P时支持。
- 指定当前帧类型为p_skip时,同时qpmap_valid使能,p_skip功能不生效。
- 开启P帧帧内刷新时,不支持指定当前帧类型为p_skip。
- 马赛克的输入模式为OT_VENC_MOSAIC_MODE_RECT时,即用户输入马赛克区域,SDK内部执行矩形的马赛克叠加。马赛克使用CPU叠加到图像上,内部使用了neon汇编优化;马赛克块大小仅支持OT_MOSAIC_BLK_SIZE_32和OT_MOSAIC_BLK_SIZE_64两种;支持最多200个马赛克区域,区域可以重叠;每个马赛克区域起始点(x,y)、结束点(x1=x+w,y1=y+h)不能超出图像边界;在叠加马赛克前起始点(x,y)和结束点(x1,y1)会对齐到32x32或64x64,起始点(x,y)向左上方向对齐,结束点(x1,y1)向右下方向对齐;
- 当使用框模式时,由于马赛克使用CPU叠加到图像上,如果叠加马赛克的区域面积很大,或者重叠的区域很多,会增加CPU占用率。
-
马赛克的输入模式为OT_VENC_MOSAIC_MODE_MAP模式时,即用户输入马赛克表;该模式支持OT_MOSAIC_BLK_SIZE_4、OT_MOSAIC_BLK_SIZE_8、OT_MOSAIC_BLK_SIZE_16、OT_MOSAIC_BLK_SIZE_32、OT_MOSAIC_BLK_SIZE_64和OT_MOSAIC_BLK_SIZE_128共6种马赛克块大小,支持以左上角像素颜色填充和指定YUV值纯色填充两种马赛克块填充模式。每个块由1个bit表示是否打马赛克,1表示打,0表示不打。
- 对于Hi3519DV500/Hi3511CV100 mosaic_map_stride = align(align(width, blk_size) / blk_size, 128) / 8;
- 对于Hi3516CV610/Hi3516CV608 mosaic_map_stride = align(align(width, blk_size) / blk_size, 64) / 8;
mosaic_map_size = align(height, blk_size) / blk_size * stride。
-
调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像。
- Hi3519DV500/Hi3516CV610/Hi3516CV608仅支持送表方式输入马赛克信息。
- Hi3616CV610 JPEG/MJPEG不支持马赛克功能。
- Hi3516CV610/Hi3516CV608 只支持OT_MOSAIC_BLK_SIZE_16、OT_MOSAIC_BLK_SIZE_32两种大小的马赛克。
- Hi3511CV100不支持此接口,送马赛克等信息请使用ss_mpi_venc_send_frame接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_omx_send_frame
【描述】
支持用户对H.264/H.265/SVAC3.0编码通路发送外部码率控制信息进行编码,对于JPEG和MJPEG通路只支持发送原始图像进行编码。
【语法】
td_s32 ss_mpi_venc_omx_send_frame(ot_venc_chn chn, const ot_omx_user_frame_info *frame, td_s32 milli_sec);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
|
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 此接口支持用户发送图像至编码通道。
- 如果milli_sec小于-1,返回OT_ERR_VENC_ILLEGAL_PARAM。
-
用户发送原始图像格式要求:
- H.264/H.265/SVAC3.0编码通道支持接收Semi-planar YVU 4:2:0/Semi-planar YUV 4:2:0/PIXEL_FORMAT_YUV_400图像。
- JPEG、MJPEG编码通道支持接收Semi-planar YVU 4:2:0/Semi-planar YUV 4:2:0、Semi-planar YVU 4:2:2/Semi-planar YUV 4:2:2或单分量输入(PIXEL_FORMAT_YUV_400)图像。
-
仅JPEG/MJPEG编码通道支持非VB内存输入,且亮色度支持不连续,MMZ内存申请释放由用户保证,用户保证内存在使用期间不会被修改。
- 视频输入的原始图像大小必须不小于编码通道的大小。
- 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像,现仅支持H.264/H.265/SVAC3.0的CBR/VBR码率控制模式和H.264/H.265/SVAC3.0的ABR/AVBR/QVBR/CVBR/QPMAP码率控制模式的外部码率控制。
- 指定当前帧类型为p_skip时,仅在GOP类型为OT_VENC_GOP_MODE_NORMAL_P时支持。
- 开启P帧帧内刷新时,不支持指定当前帧类型为p_skip。
- 此接口仅支持H.264/H.265/SVAC3.0通道外部码率控制,只提供外部控制码率的功能,不保证图像效果。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_send_multi_frame
【描述】
用户发送2个图像及马赛克区域信息进行编码。
【语法】
td_s32 ss_mpi_venc_send_multi_frame(ot_venc_chn chn, const ot_venc_multi_frame_info *frame, td_s32 milli_sec);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 此接口必须在使能复合编码或隐私保护功能后使用,支持用户一次发送两张图像及对应的马赛克区域信息至编码通道。
- 如果milli_sec小于-1,返回OT_ERR_VENC_ILLEGAL_PARAM。
- 用户发送原始图像必须为Semi-planar YVU 4:2:0/Semi-planar YUV 4:2:0/PIXEL_FORMAT_YUV_400图像。
- 复合编码仅支持8bit像素位宽。输入的两张图像必须是同一时刻采集的,对应的time_ref和pts必须相同。复合编码不支持编码内部的CROP和VGS旋转缩放等操作,输入图像大小必须等于编码通道的大小。当马赛克输入模式为OT_VENC_MOSAIC_MODE_RECT时,图像ot_venc_multi_frame_info:frame[0]不能使用压缩模式。
- 马赛克的输入模式为OT_VENC_MOSAIC_MODE_RECT时,即用户输入马赛克区域,SDK内部执行矩形的马赛克叠加。马赛克使用CPU叠加到图像上,内部使用了neon汇编优化;马赛克块大小仅支持OT_MOSAIC_BLK_SIZE_32和OT_MOSAIC_BLK_SIZE_64两种;支持最多200个马赛克区域,区域可以重叠;每个马赛克区域起始点(x,y)、结束点(x1=x+w,y1=y+h)不能超出图像边界;在叠加马赛克前起始点(x,y)和结束点(x1,y1)会对齐到32x32或64x64,起始点(x,y)向左上方向对齐,结束点(x1,y1)向右下方向对齐;
- 当使用框模式时,由于马赛克使用CPU叠加到图像上,如果叠加马赛克的区域面积很大,或者重叠的区域很多,会增加CPU占用率。
- 马赛克的输入模式为OT_VENC_MOSAIC_MODE_MAP模式时,即用户输入马赛克表;该模式支持OT_MOSAIC_BLK_SIZE_4、OT_MOSAIC_BLK_SIZE_8、OT_MOSAIC_BLK_SIZE_16、OT_MOSAIC_BLK_SIZE_32、OT_MOSAIC_BLK_SIZE_64和OT_MOSAIC_BLK_SIZE_128共6种马赛克块大小,支持以左上角像素颜色填充和指定YUV值纯色填充两种马赛克块填充模式。每个块由1个bit表示是否打马赛克,1表示打,0表示不打,stride为128bit。mosaic_map_stride = align(align(width, blk_size) / blk_size, 128) / 8; mosaic_map_size = align(height, blk_size) / blk_size * stride。
- 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像。
- Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100仅支持送表方式输入马赛克信息。
- Hi3516CV610仅支持OT_MOSAIC_BLK_SIZE_16、OT_MOSAIC_BLK_SIZE_32两种马赛克块大小。
- Hi3511CV100主从片场景,马赛克信息由主片生成,从片用户从随帧信息中解析并填充到结构体中。
- 当用户使能空域SVC功能时,此接口输入的马赛克信息无效,允许输入两帧不同分辨率的图像(增强层分辨率高于基础层),且不超过用户设定的最大通道分辨率,但像素格式等信息应保持一致。
- 空域SVC功能不支持用户设置增强层分辨率,用户调用此接口送入首帧的分辨率作为增强层分辨率,因此不支持动态切换增强层分辨率。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_send_frame_batch_crop
【描述】
用户发送原图和批量抠图信息。
【语法】
td_s32 ss_mpi_venc_send_frame_batch_crop(ot_venc_chn chn, const ot_venc_frame_batch_crop_info *frame, td_s32 milli_sec);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 此接口支持用户发送图像和批量抠图信息至编码通道。
- 如果milli_sec小于-1,返回OT_ERR_VENC_ILLEGAL_PARAM。
- 用户发送原始图像必须为Semi-planar YVU 4:2:0/ Semi-planar YUV 4:2:0、Semi-planar YVU 4:2:2/ Semi-planar YUV 4:2:2或单分量输入(PIXEL_FORMAT_YUV_400)图像。
- JPEG编码通道支持非VB内存输入,且亮度色度支持不连续,MMZ内存申请与释放由用户负责,用户确保内存在使用期间不会被修改。
- 视频输入的原始图像大小必须等于编码通道的大小。
- 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像。
- 当前只支持JPEGE批量抠图,因此只有JPEGE协议支持该接口。
- 批量抠图信息中valid为true时只编码crop抠图坐标,原始图像不编码,valid为false时只编码原始图像。
- crop_num为输入批量抠图区域的个数,crop_num最大为OT_VENC_MAX_BATCH_CROP_RECT_NUM。
- crop_rect[OT_VENC_MAX_BATCH_CROP_RECT_NUM]为抠图区域的起始点及其宽高,按照数组下标先后顺序编码,收流也是按照数组下标收流存流,数组个数为crop_num;
-
抠图中每个抠图必须满足:
- rect.x Hi3519DV500必须16像素对齐,Hi3516CV610/Hi3516CV608必须8像素对齐。
- rect.y必须2像素对齐,rect.width,rect.height满足对应编码通道的宽高约束,宽高最小分辨率是32*32,(x+width,y+height)不能超过图像范围。
-
该接口一次送X个抠图坐标,内部一次性把X个抠图全部编码完成,收流一次把X个抠图收走,收流必须按帧收流,一帧里面包含X个包,每个包的is_frame_end都为true,每个包都是一个独立的抠图。
- 输入原始图像必须是非压格式。
- 不支持JPEGE ECS低延时,不支持JPEGE DCF/MPF。
- 不支持OSD,运行过程中不会从rgn获取OSD。
- Hi3511CV100不支持批量抠图功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_send_qpmap
【描述】
支持绑定模式下用户发送qpmap。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 此接口支持venc与前级在绑定下用户发送QPMAP至编码通道。
- 调用该接口发送QPMAP与实际编码的帧可能存在一定偏差,需要由用户保证送QPMAP的及时性。
- 码控模式为QPMAP时,首次送QPMAP信息前内部会丢帧。
- 建议用户分3个或3个以上QPMAP地址进行轮转。
- 此接口用户指定帧类型不生效。
- Hi3511CV100不支持此接口,送QPMAP等信息请使用ss_mpi_venc_send_frame接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_chn_config
【描述】
设置编码通道配置。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口需要在创建通道之前调用。
- 使能复合编码后,编码不支持绑定接收图像,只能通过接口ss_mpi_venc_send_multi_frame送图像到编码器。
- 复合编码使能后仅支持创建H.265编码通道;仅支持normal_p和smart_p两种GOP结构。
- 复合编码使能后,RC模式支持ABR、CBR、VBR、AVBR、CVBR、QVBR、FixQP、RangeQP,不支持QpMap模式,也不支持开启码控参数qpmap_en。
- 使能复合编码后,客户可以设置质量级别。质量级别为0时编码通道需要增加一个重构帧VB,总VB个数的计算方法是:TotalVB = RefNum + 2;质量级别为1时编码通道需要的参考帧需要增加一倍,总VB个数的计算方法是:TotalVB = RefNum * 2 + 2。参考帧数目RefNum取决于GOP结构和跳帧参考参数。
- 马赛克功能支持单独开启,调用ss_mpi_venc_send_frame_ex接口添加马赛克表信息,这种情况由马赛克信息valid生效,不需要配置本接口。
-
增帧策略选择,支持输入图像增帧策略OT_VENC_DUPLICATE_FRAME_STRATEGE_RECODE和输出码流拷贝增帧策略OT_VENC_DUPLICATE_FRAME_STRATEGE_COPY
- 输入图像增帧策略就是VENC级的增帧,参考ss_mpi_venc_set_chn_param描述。
- 输出码流拷贝增帧策略,结合ss_mpi_venc_set_chn_param中帧率参数使用,码流增帧约束有:
- 要求GOP值设置等于src_frame_rate,不相等时码流增帧策略自适应不生效。码流实际GOP为dst_frame_rate。
- 只支持H.264/H.265 NormalP模式,其他模式码流增帧策略自适应不生效。
- H.265不支持2倍及其以上增帧,例如输入帧率为30时最大支持帧率为59。
- H.264最大支持5倍码流增帧,比如输入5输出25。
- 不支持slice低延时/不支持复合编码/不支持水印/不支持高级跳帧参考/不支持intra_refresh。
- 拷贝帧不计算到码控,会导致实际码率不符合预期,PQ图像质量不符合预期等问题,正常场景不建议使用码流增帧策略,建议默认使用输入图像增帧方式其限制较少。
-
复合编码使能后除码流长度外,其他码流上报信息都只统计基础层图像的数据。
- 复合编码使能后,不支持开启svc智能编码。
- 复合编码只支持Normal_P和Smart_P。
-
复合编码使能后,不能使用p_skip编码,受影响的有:
- RC码率过冲插入p_skip帧;
- ROI背景低帧率;
- H.265编码skip倾向性。
-
仅Hi3511CV100 SVAC3.0协议支持空域SVC功能,Profile需设置为High 8 Profile。
- 空域SVC功能开启后不支持智能编码/时域SVC/语义分割/隐私保护/跳帧参考/OSD/CROP与缩放/Deblur/QPMAP/马赛克/skip倾向性/输入输出低延时等功能,不支持非NormalP模式或NormalP模式下GOP等于1,不支持分辨率切换,如需切换分辨率,请使用通道Reset或者销毁重新创建通道的方式。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_chn_config
【描述】
获取编码通道配置。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
无。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_request_vi
【描述】
请求VI(虚拟I帧)帧。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,则返回失败。
- 接受VI帧请求后,立即编出VI帧。
- VI帧请求,只支持H.264/H.265/SVAC3.0编码协议。
- 由于此接口不受帧率控制影响,每调用一次即编出一个VI,调用频繁会影响码流帧率和码率的稳定,使用时需要注意。此外,下一帧编码启动前多次接口调用只会编出一个VI。
- 请求VI帧只用于GOP模式为smart_p、smart_crr、adv_smart_crr。
- 当请求虚拟I帧碰上当前帧编IDR帧,不影响IDR帧编码,VI帧不生效。
- 请求虚拟I帧和gop中计算编虚拟I帧不冲突,不影响gop大小和原有VI帧编码。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_request_idr
【描述】
请求IDR帧。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,则返回失败。
- 接受IDR帧请求后,当instant =0时,则在帧率控制的下一帧编出IDR帧,当instant =1时,则立即编出IDR帧,不受帧率控制约束。
- IDR帧请求,只支持H.264/H.265/SVAC3.0编码协议。
- 由于此接口不受帧率控制影响,每调用一次即编出一个IDR,调用频繁会影响码流帧率和码率的稳定,使用时需要注意。此外,下一帧编码启动前多次接口调用只会编出一个IDR。
- 当GOP模式为smart_p、smart_crr、adv_smart_crr或B帧模式下,请求IDR帧会延时生效。
- SVAC3.0隐私保护开启时,IDR帧后立刻请求IDR帧会延迟生效,即不会产生基础层连续为IDR帧的情况。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_enable_idr
【描述】
是否使能IDR帧。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,则返回失败。
- 改变GOP MODE后需要重新进行设置。
- 若不使能IDR帧,则在下一帧之后都编不出IDR帧或I帧,直到再次使能为止。
- 若不使能IDR帧,请求IDR帧但请求不生效。
- 由不使能IDR帧到使能IDR帧切换,下一帧会编码IDR帧。
- 当GOP MODE为OT_VENC_GOP_MODE_SMART_P、OT_VENC_GOP_MODE_SMART_CRR、OT_VENC_GOP_MODE_I、OT_VENC_GOP_MODE_ADV_SMART_CRR,只支持使能IDR帧。
- 某些参数设置后需要IDR帧才生效,此时需要用户申请IDR帧。
- 本接口只支持H.264/H.265/SVAC3.0编码协议。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_fd
【描述】
获取编码通道对应的设备文件句柄。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
【返回值】
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
无。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_roi_attr
【描述】
设置H.264/H.265/SVAC3.0通道的ROI属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.264/H.265/SVAC3.0协议编码通道ROI区域的参数。
-
ROI参数主要由五个参数决定。
- idx:系统支持每个通道可设置8个ROI区域,系统内部按照0~7的索引号对ROI区域进行管理,idx表示的用户设置ROI的索引号。ROI区域之间可以互相叠加,且当发生叠加时,ROI区域之间的优先级按照索引号0~7依次提高。
- enable:指定当前的ROI区域是否使能。
- is_abs_qp:指定当前的ROI区域采用绝对QP方式或是相对QP。
- qp:当is_abs_qp 为true时,qp 表示ROI区域内部的所有宏块采用的QP值,当is_abs_qp 为false时,qp表示ROI区域内部的所有宏块采用的相对QP值。
- rect:指定当前的ROI区域的位置坐标和区域的大小。ROI区域的起始点坐标必须在图像范围内,且必须16对齐;ROI区域的长宽必须是16对齐并且大于0;ROI区域必须在图像范围内。
-
本接口属于高级接口,系统默认没有ROI区域使能,用户必须调用此接口启动ROI。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_roi_attr接口,获取当前通道的ROI配置,然后再进行设置。
- 设置该接口后,如果当前帧判断编码为p_skip帧,以p_skip帧效果优先。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_roi_attr
【描述】
获取H.264/H.265/SVAC3.0通道的Roi配置属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.264/H.265/SVAC3.0协议编码通道的idx的ROI配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_roi_attr_ex
【描述】
设置H.264/H.265/SVAC3.0通道的ROI配置高级属性。可以分开设置I帧、P/B帧、VI帧的ROI属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.264/H.265/SVAC3.0协议编码通道ROI区域的参数。
-
ROI参数主要由五个参数决定
- idx:系统支持每个通道可设置8个ROI区域,系统内部按照0~7的索引号对ROI区域进行管理,idx表示的用户设置ROI的索引号。ROI区域之间可以互相叠加,且当发生叠加时,ROI区域之间的优先级按照索引号0~7依次提高。
- enable:指定当前的ROI区域是否使能。
- is_abs_qp:指定当前的ROI区域采用绝对QP方式或是相对QP。
- qp:当is_abs_qp 为true时,qp 表示ROI区域内部的所有宏块采用的QP值,当is_abs_qp 为false时,qp表示ROI区域内部的所有宏块采用的相对QP值。
- rect:指定当前的ROI区域的位置坐标和区域的大小。ROI区域的起始点坐标必须在图像范围内,且必须16对齐;ROI区域的长宽必须是16对齐;ROI区域必须在图像范围内。计算图像范围时,图像的宽高会扩充到16像素整数倍,保证图像边界处也可以设置ROI区域。
-
本接口属于高级接口,系统默认没有ROI区域使能,用户必须调用此接口启动ROI。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_roi_attr_ex接口,获取当前通道的ROI配置,然后再进行设置。
- 设置该接口后,如果当前帧判断编码为p_skip帧,以p_skip帧效果优先。
- 此接口可以分开设置I帧和P、B帧的ROI属性,数组标号为0的代表I帧的ROI属性,数组标号为1代表P、B帧的ROI属性,数组标号为2代表VI帧的ROI属性。I帧、P/B帧、VI帧的ROI属性可以不同,例如可以I帧开启ROI,P帧不开启ROI;I帧可以和P帧设置不同的ROI区域。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_roi_attr_ex
【描述】
获取H.264/H.265/SVAC3.0通道的ROI配置高级属性。可以获取I帧、P/B帧、VI帧的ROI属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.264/H.265/SVAC3.0协议编码通道的index的ROI配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_roi_bg_frame_rate
【描述】
设置H.264/H.265/SVAC3.0通道的非ROI区域帧率属性。
【语法】
td_s32 ss_mpi_venc_set_roi_bg_frame_rate(ot_venc_chn chn, const ot_venc_roi_bg_frame_rate *roi_bg_frame_rate);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.264/H.265/SVAC3.0协议编码通道非ROI区域帧率控制的参数。
- 本接口调用之前必须首先使能ROI区域。如果是用ss_mpi_venc_set_roi_attr_ex接口设置ROI,必须使能P帧的ROI区域。
- 本接口属于高级接口,系统默认没有使能非ROI区域帧率属性,用户必须调用此接口使能。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。
- 设置非ROI区域帧率控制属性时,输入帧率src_frame_rate大于输出帧率dst_frame_rate 且 dst_frame_rate 大于等于0或同时等于-1。
- 当输入帧率src_frame_rate和输出帧率dst_frame_rate 均等于-1时,此时表示不进行帧率控制。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_roi_bg_frame_rate接口,获取当前通道的非ROI区域帧率配置,然后再进行设置。
- 设置非ROI区域的帧率低于ROI区域时,不建议使用跳帧参考或者svc-t编码。跳帧参考或svc-t编码,如果设置了非ROI区域的帧率低于ROI区域,则实际编码的非ROI区域目标帧率可能大于用户配置的目标帧率,因为base层的非ROI区域不能编码为p_skip块。
- 仅支持GOP模式为OT_VENC_GOP_MODE_NORMAL_P的编码通道。
- GOP模式切换后,该接口失效,如需继续使用需要重新设置该接口。如果GOP模式是从非NORMAL_P切向NORMAL_P,模式切换后调用该接口需等到GOP生效后该接口生效。
- 设置该接口后,如果当前帧判断编码为p_skip帧,以p_skip帧效果优先。如果有设置osd,osd更新的帧以osd效果优先。
- 当设置H.265/SVAC3.0协议通道非ROI区域的帧率低于ROI区域时,本模块内部会关闭SAO滤波,故建议客户调用ss_mpi_venc_set_h265_sao或 关闭SAO功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_roi_bg_frame_rate
【描述】
获取H.264/H.265/SVAC3.0通道的非Roi区域帧率配置属性。
【语法】
td_s32 ss_mpi_venc_get_roi_bg_frame_rate(ot_venc_chn chn, ot_venc_roi_bg_frame_rate *roi_bg_frame_rate);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 仅支持GOP模式为OT_VENC_GOP_MODE_NORMAL_P的编码通道。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 切换GOP模式时,获取的属性是已设置的最新的属性
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_h264_intra_pred
【描述】
设置H.264协议编码通道的帧内预测属性。
【语法】
td_s32 ss_mpi_venc_set_h264_intra_pred(ot_venc_chn chn, const ot_venc_h264_intra_pred *h264_intra_pred);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.264协议编码通道的帧内预测的配置
- 帧间预测的属性仅支持constrained_intra_pred_flag,具体的含义,请参见H.264协议。
- 此接口属于高级接口,用户可以选择性调用,不建议调用,系统会有默认值。系统默认constrained_intra_pred_flag为0。
- 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h264_intra_pred接口,获取当前编码通道的intra pred配置,然后再进行设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h264_intra_pred
【描述】
获取H.264协议编码通道的帧内预测属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.264协议编码通道的帧内预测方式。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_h264_trans
【描述】
设置H.264协议编码通道的变换、量化的属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.264协议编码通道的变换、量化的配置。
-
变换、量化属性主要由六个参数组成:
- intra_trans_mode:帧内预测宏块的变换属性。intra_trans_mode = 0表示支持对帧内预测宏块支持4x4变换和8x8变换;intra_trans_mode = 1表示只支持对帧内预测宏块支持4x4变换;intra_trans_mode = 2表示只支持对帧内预测宏块支持8x8变换。只有在编码通道协议为high profile和svc-t时,才能选择8x8变换,即在baseline profile和main profile下,系统只支持intra_trans_mode = 1的配置。
- inter_trans_mode:帧间预测宏块的变换属性。inter_trans_mode = 0表示支持对帧间预测宏块支持4x4变换和8x8变换;inter_trans_mode = 1表示只支持对帧间预测宏块支持4x4变换;inter_trans_mode = 2表示只支持对帧间预测宏块支持8x8变换。只有在编码通道协议为high profile和svc-t时,才能选择8x8变换,即在baseline profile和main profile下,系统只支持inter_trans_mode = 1的配置。
- scaling_list_valid:表示inter_scaling_list8x8、intra_scaling_list8x8量化表是否有效。不支持设置scaling_list_valid为true。
- inter_scaling_list8x8:对帧间预测宏块进行8x8变换时,可由用户通过此数组提供量化表,保留,暂时没有使用。
- intra_scaling_list8x8:对帧内预测宏块进行8x8变换时,可由用户通过此数组提供量化表,保留,暂时没有使用。
- chroma_qp_index_offset:具体含义请参见H.264协议。
-
此接口属于高级接口,用户可以选择性调用,不建议调用,系统会有默认值。系统会根据不同的profile设置默认参数。
表 1 不同profile下系统默认trans参数
- 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h264_trans接口,获取当前编码通道的trans配置,然后再进行设置。
- Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100不支持量化表。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h264_trans
【描述】
获取H.264协议编码通道的变换、量化属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.264协议编码通道的变换、量化配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_h264_entropy
【描述】
设置H.264协议编码通道的熵编码模式。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.264协议编码通道的熵编码的配置。
-
变换、量化属性主要由四个参数组成:
- entropy_coding_mode_i:I帧的熵编码方式,entropy_coding_mode_i = 0表示I帧使用cavlc编码, entropy_coding_mode_i = 1表示I帧使用cabac编码方式。
- entropy_coding_mode_p:P帧的熵编码方式,entropy_coding_mode_p = 0表示P帧使用cavlc编码, entropy_coding_mode_p = 1表示P帧使用cabac编码方式。
- entropy_coding_mode_b:B帧的熵编码方式,entropy_coding_mode_b = 0表示B帧使用cavlc编码, entropy_coding_mode_b = 1表示B帧使用cabac编码方式。
- cabac_init_idc:cabac初始化索引,系统默认为0。具体含义请参见H.264协议。
-
I/P/B帧的熵编码方式可以分别设置。
- Baseline profile不支持cabac编码方式,不支持B帧,支持cavlc编码方式,main profile、high profile和svc-t支持cabac编码方式和cavlc编码方式。
- Cabac编码方式相对于cavlc编码方式,需要更大的计算量,可是,会产生更少的码流。如果系统性能不够富裕,建议用户可以采取I帧cavlc编码,P/B帧cabac编码。
- 此接口属于高级接口,用户可以选择性调用,不建议调用,系统会有默认值。系统会根据不同的profile设置默认参数。
表 1 不同profile下系统默认熵编码参数
- 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h264_entropy接口,获取当前编码通道的Entropy配置,然后再进行设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h264_entropy
【描述】
获取H.264协议编码通道的熵编码属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.264协议编码通道的熵编码配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_h264_dblk
【描述】
设置H.264协议编码通道的Deblocking类型。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.264协议编码通道的Deblocking的配置
-
变换、量化属性主要由三个参数组成:
- disable_deblocking_filter_idc:具体含义请参见H.264协议。
- slice_alpha_c0_offset_div2:具体含义请参见H.264协议。
- slice_beta_offset_div2:具体含义请参见H.264协议。
-
系统默认打开deblocking功能,默认disable_deblocking_filter_idc = 0,slice_alpha_c0_offset_div2 = 0,slice_beta_offset_div2 = 0。
- 如果用户想关闭deblocking功能,可以将disable_deblocking_filter_idc置为1。
- 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h264_dblk接口,获取当前编码通道的Dblk配置,然后再进行设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h264_dblk
【描述】
获取H.264协议编码通道的dblk类型。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.264协议编码通道的dblk配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_h264_vui
【描述】
设置H.264协议编码通道的vui参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.264协议编码通道的Vui的配置
- 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h264_vui接口,获取当前编码通道的Vui配置,然后再进行设置。
- 如果前端输入图像的色域范围发生变化(如BT601切换为BT709)时,会立即编码一帧IDR帧。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h264_vui
【描述】
获取H.264协议编码通道的Vui配置。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.264协议编码通道的Vui配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_h265_vui
【描述】
设置H.265协议编码通道的VUI参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.265协议编码通道的Vui的配置
- 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h265_vui接口,获取当前编码通道的Vui配置,然后再进行设置。
- 如果前端输入图像的色域范围发生变化(如BT601切换为BT709)时,会立即编码一帧IDR帧。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h265_vui
【描述】
获取H.265协议编码通道的VUI配置。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.265协议编码通道的VUI配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_jpeg_param
【描述】
设置JPEG协议编码通道的高级参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置JPEG协议编码通道的高级参数
-
高级参数主要由以下参数组成:
- qfactor:量化表因子范围为[1, 99],qfactor越大,量化表中的量化系数越小,得到的图像质量会更好,同时,编码压缩率更低。同理qfactor越小,量化表中的量化系数越大,得到的图像质量会更差,同时,编码压缩率更高。具体的qfactor与量化表的关系请见RFC2435标准。
- y_qt[OT_VENC_JPEG_QT_COEF_NUM],cb_qt[OT_VENC_JPEG_QT_COEF_NUM],cr_qt[OT_VENC_JPEG_QT_COEF_NUM]:对应三个量化表空间,用户可以通过这三个参数设置用户的量化表。
- mcu_per_ecs:每个Ecs中包含多少Mcu。系统模式mcu_per_ecs = 0,表示当前帧的所有的MCU被编码为一个ECS。mcu_per_ecs的最小值为0,最大值不超过{(pic_width+15)>>4 * (pic_height+15)>>4 * 2, 65535}的较小值。当mcu_per_ecs配置较小时,容易引起CPU占用时间较长等现象,客户需要根据实际使用需求合理配置。
- ecs_output_en:Ecs中断输出使能标志,当为TRUE时,编码成功一个Ecs就会立刻产生中断,此时用户就可以收走该Ecs码流。
-
如果用户想使用自己的量化表,在设置量化表的同时,请将qfactor设置为50。
- 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个帧编码时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_jpeg_param接口,获取当前编码通道的jpeg_param配置,然后再进行设置。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_jpeg_param
【描述】
获取JPEG协议编码通道的高级参数配置。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取JPEG协议编码通道的高级参数配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_mjpeg_param
【描述】
设置MJPEG协议编码通道的高级参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置MJPEG协议编码通道的高级参数
-
高级参数主要由四个参数组成
- y_qt[OT_VENC_MJPEG_QT_COEF_NUM],cb_qt[OT_VENC_MJPEG_QT_COEF_NUM],cr_qt[OT_VENC_MJPEG_QT_COEF_NUM]:对应三个量化表空间,用户可以通过这三个参数设置用户的量化表。
- mcu_per_ecs:每个Ecs中包含多少Mcu。系统模式mcu_per_ecs = 0,表示当前帧的所有的MCU被编码为一个ECS。mcu_per_ecs的最小值为0,最大值不超过{(pic_width+15)>>4 * (pic_height+15)>>4 * 2,65535}的较小值。当mcu_per_ecs配置较小时,容易引起CPU占用时间较长等现象,客户需要根据实际使用需求合理配置。
- ecs_output_en:Ecs中断输出使能标志,当为TRUE时,编码成功一个Ecs中断就起来,此时码流就可以收走改Ecs码流。
-
如果用户想使用自己的量化表,在设置量化表的同时,请将qfactor设置为50。
- 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个帧编码时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_mjpeg_param接口,获取当前编码通道的mjpeg_param配置,然后再进行设置。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_mjpeg_param
【描述】
获取MJPEG协议编码通道的高级参数配置。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取MJPEG协议编码通道的高级参数配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_rc_param
【描述】
设置编码通道码率控制器的高级参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 编码通道码率控制器的高级参数都有默认值,而不是必须调用这个接口才能启动编码通道。
- 建议用户先调用ss_mpi_venc_get_rc_param接口,获取RC高级参数,然后修改相应参数,再调用本接口对高级参数进行设置。
- RC高级参数现仅支持H.264/H.265/SVAC3.0/Mjpeg的CBR/VBR码率控制模式和H.264/H.265/SVAC3.0的ABR/AVBR/QVBR/CVBR/RANGEQP码率控制模式下行级和宏块级码控的参数的设置。
-
码率控制器的高级参数由以下参数组成:
-
threshold_i[OT_VENC_TEXTURE_THRESHOLD_SIZE ],threshold_p[OT_VENC_TEXTURE_THRESHOLD_SIZE],threshold_b[OT_VENC_TEXTURE_THRESHOLD_SIZE]:分别衡量I帧,P帧,B帧的宏块复杂度的一组阈值。这组阈值按照从小到大的顺序依次排列,每个阈值的取值范围为[0, 255]。这组阈值用于在进行宏块级码率控制时,根据图像复杂度对每个宏块的Qp进行适当的调整。对于H.264/H.265/SVAC3.0协议,宏块级码率控制既有加方向(最大加16),也有减方向(最大减16),加减方向的控制取决于direction,假设direction=j,即如果当前宏块的图像复杂度小于等于threshold[j-1]阈值时,当前宏块的Qp值就在宏块行起始Qp值的基础上减去x;如果当前宏块的图像复杂度大于threshold[j-1]阈值时,当前宏块的Qp值就在宏块行起始Qp值的基础上加上y。C表示图像复杂度,x,y的取值如下:C <threshold[0]时,x=j;threshold[0]≤C<threshold[1]时,x=j-1;threshold[1]≤C<threshold[2]时,x=j-2;threshold[2]≤C<threshold[3]时,x=j-3;依次类推,threshold[j-1]≤C≤threshold[j]时,x=y=0;threshold[j] < C≤threshold[j+1]时,y=1; threshold[j+1] < C≤threshold[j+2]时,y=2;threshold[j+2] < C≤threshold[j+3]时,y=3;threshold[j+3] < C≤threshold[j+4]时,y=4;以此类推,threshold[15] < C时,y=16-j。
H.264/H.265/SVAC3.0默认值为:
threshold_i[0,0,0,0,3,3,5,5,8,8,8,15,15,20,25,25]、threshold_p[0,0,0,0,3,3,5,5,8,8,8,15,15,20,25,25]、threshold_b[0,0,0,0,3,3,5,5,8,8,8,15,15,20,25,25]。
-
row_qp_delta:在常规宏块级码率控制时,每一行宏块的起始Qp相对于帧起始Qp的波动幅度值。对于码率波动较严格的场景下,可以尝试将此参数调大,实现更加精确的码率控制,但可能会导致某些帧图像内部的图像质量有差异。在高码率时,该值推荐为0;中码率时推荐该值为0或1;低码率时推荐该值为2~5。
- max_row_qp_delta:在超大帧宏块级码率控制时,每一行宏块的起始Qp相对于帧起始Qp的波动幅度值。对于超大帧阈值较小的场景下,可以尝试将此参数调大,降低当前帧比特数超出超大帧阈值的概率,但可能会导致某些帧图像内部的图像质量有差异。max_row_qp_delta须大于等于row_qp_delta,推荐比row_qp_delta大3~5。在一帧内某行生效max_row_qp_delta后,剩余的编码行将继续使用max_row_qp_delta,同时row_qp_delta失效。
- first_frame_start_qp:第一帧的起始Qp值,ABR/CBR/VBR/AVBR/QVBR/CVBR/RANGEQP有效。first_frame_start_qp 如果为-1则第一帧的起始QP由编码器内部计算,如果为其它合法值则由用户指定该合法值为第一帧起始QP。该值默认为-1。此处第一帧的含义是:通道创建,Gop模式切换,RC模式切换,或分辨率切换后,序列的第一个IDR帧。需要注意如果第一帧编码完成后判定为重编,重编的帧不是第一帧,不受first_frame_start_qp 的约束。RANGEQP下必须设置为-1。
- direction:在宏块级码率控制时,用于控制减方向threshold的下标,例如当direction=8,C表示图像复杂度,表示从threshold[0]到threshold[7]为减方向的阈值,从threshold[8]到threshold[15]是加方向的阈值。
- scene_chg_detect:自适应检测当前编码场景是否发生变化,使能后会改善场景切换时的码率波动,VBR/AVBR/QVBR/CVBR有效。使能场景切换检测时可使能自适应插入IDR帧,在场景切换时编码IDR帧。需要注意关闭重编后检测场景切换会失效。
CBR主要参数如下:
- min_i_proportion&max_i_proportion:CBR高级参数,分别表示的是最小IP比例和最大IP比例。IP比例表示I帧和P帧的Bits数的比例。这两个值用于钳位IP比例的范围。当min_i_proportion被调整较大时,会导致I帧清晰,P帧模糊。当max_i_proportion被调整较小时,会导致I帧模糊,P帧清晰。在正常情况下不建议对IP大小比进行约束,避免带来呼吸效应和码率波动,默认min_i_proportion设为1,max_i_proportion设为100。在对I帧大小有约束的场景时,可以根据对I帧大小波动的需求来设置min_i_proportion和max_i_proportion的值。
- max_qp&min_qp:CBR高级参数,max_qp、min_qp表示的是当前帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。min_qp,max_qp内部有默认值,在对质量无特殊需求下,建议不更改此组参数。
- max_i_qp&min_i_qp:CBR高级参数,max_i_qp、min_i_qp表示的是当前序列IDR帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。min_i_qp,max_i_qp内部有默认值,在对质量无特殊需求下,建议不更改此组参数。
ABR主要参数如下:
- max_p_qp&min_p_qp:ABR高级参数,max_p_qp、min_p_qp表示的是当前P帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。min_p_qp,max_p_qp内部有默认值,在对质量无特殊需求下,建议不更改此组参数。
- max_i_qp&min_i_qp:ABR高级参数,max_i_qp、min_i_qp表示的是当前序列IDR帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。min_i_qp,max_i_qp内部有默认值,在对质量无特殊需求下,建议不更改此组参数。
VBR主要参数如下:
- chg_pos:VBR高级参数,表示的是VBR开始调整Qp时码率与最大码率的比值。系统默认为90,如果在内容变化剧烈且要求不超出最大码率的场景,建议减小此值,同时增大delta_qp,但码率控制稳定时的码率偏小和质量偏差。
- min_i_proportion&max_i_proportion:VBR高级参数,分别表示的是最小IP比例和最大IP比例。IP比例表示I帧和P帧的Bits数的比例。这两个值用于钳位IP比例的范围。当min_i_proportion被调整较大时,会导致I帧清晰,P帧模糊。当max_i_proportion被调整较小时,会导致I帧模糊,P帧清晰。在正常情况下不建议对IP大小比进行约束,避免带来呼吸效应和码率波动,默认min_i_proportion设为1,max_i_proportion设为100。在对I帧大小有约束的场景时,可以根据对I帧大小波动的需求来设置min_i_proportion和max_i_proportion的值。
- max_qp&min_qp:VBR高级参数,max_qp、min_qp表示的是当前帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。默认值min_qp为16,max_qp为63(SVAC3.0)或者51(其他协议),在对质量无特殊需求下,建议不更改此组参数。
- max_i_qp&min_i_qp:VBR高级参数,max_i_qp、min_i_qp表示的是当前序列IDR帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。默认值min_i_qp为16,max_i_qp为63(SVAC3.0)或者51(其他协议)。在对质量无特殊需求下,建议不更改此组参数。
AVBR主要参数如下:
- chg_pos:AVBR高级参数,表示的是AVBR开始调整Qp时码率与最大码率的比值。系统默认为90,如果在内容变化剧烈且要求不超出最大码率的场景,建议减小此值,同时增大delta_qp,但码率控制稳定时的码率偏小和质量偏差。
- min_i_proportion&max_i_proportion:AVBR高级参数,分别表示的是最小IP比例和最大IP比例。IP比例表示I帧和P帧的Bits数的比例。这两个值用于钳位IP比例的范围。当min_i_proportion被调整较大时,会导致I帧清晰,P帧模糊。当max_i_proportion被调整较小时,会导致I帧模糊,P帧清晰。在正常情况下不建议对IP大小比进行约束,避免带来呼吸效应和码率波动,默认min_i_proportion设为1,max_i_proportion设为100。在对I帧大小有约束的场景时,可以根据对I帧大小波动的需求来设置min_i_proportion和max_i_proportion的值。
- max_qp&min_qp:AVBR高级参数,max_qp、min_qp表示的是当前帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。min_qp和max_qp内部有默认值,在对质量无特殊需求下,建议不更改此组参数。
- max_i_qp&min_i_qp:AVBR高级参数,max_i_qp、min_i_qp表示的是当前序列IDR帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。默认值min_i_qp为16,max_i_qp为63(SVAC3.0)或者51(其他协议)。min_i_qp和max_i_qp内部有默认值,在对质量无特殊需求下,建议不更改此组参数。
- max_still_qp:静止场景QP的最大值,目标码率降低过大会带来静止场景QP升高,图像质量变差,此时可以使用这个变量限制静止场景QP的最大值。
- motion_sensitivity:运动敏感度,该值越大表示码率控制对运动的变化反应更快,但同时对噪声也更敏感。
- min_qp_delta: 帧级QP最小值和CU级QP最小值的差值,在图像内容比较简单时,码控会降低Qp值,当帧级Qp调节到最小值时,帧级码率控制就不再下调Qp,但是CU/宏块级码率控制依然生效,图像中平坦区域Qp能够下调到更小值。
QVBR主要参数如下:
- min_i_proportion&max_i_proportion:QVBR高级参数,分别表示的是最小IP比例和最大IP比例。IP比例表示I帧和P帧的Bits数的比例。这两个值用于钳位IP比例的范围。当min_i_proportion被调整较大时,会导致I帧清晰,P帧模糊。当max_i_proportion被调整较小时,会导致I帧模糊,P帧清晰。在正常情况下不建议对IP大小比进行约束,避免带来呼吸效应和码率波动,默认min_i_proportion设为1,max_i_proportion设为100。在对I帧大小有约束的场景时,可以根据对I帧大小波动的需求来设置min_i_proportion和max_i_proportion的值。
- max_qp&min_qp:QVBR高级参数,max_qp、min_qp表示的是当前帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。默认值min_qp为16,max_qp为63(SVAC3.0)或者51(其他协议),在对质量无特殊需求下,建议不更改此组参数。
- max_i_qp&min_i_qp:QVBR高级参数,max_i_qp、min_i_qp表示的是当前序列IDR帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。默认值min_i_qp为16,max_i_qp为63(SVAC3.0)或者51(其他协议)。在对质量无特殊需求下,建议不更改此组参数。
- max_bit_percent & min_bit_percent:QVBR高级参数,目标码率上浮和下浮的百分比。当场景复杂,编码质量下降时,编码器会在设定的百分比内上浮目标码率,保证图像质量;在场景简单,编码质量升高时,编码器会在设定的百分比内下浮目标码率,节省码率。
- max_psnr_fluctuate & min_psnr_fluctuate:QVBR高级参数,编码质量PSNR的区间。PSNR越高代表质量越好,PSNR越低代表质量越差。
CVBR主要参数如下:
-
min_i_proportion&max_i_proportion:CVBR高级参数,分别表示的是最小IP比例和最大IP比例。IP比例表示I帧和P帧的Bits数的比例。这两个值用于钳位IP比例的范围。
当min_i_proportion被调整较大时,会导致I帧清晰,P帧模糊。
当max_i_proportion被调整较小时,会导致I帧模糊,P帧清晰。
在正常情况下不建议对IP大小比进行约束,避免带来呼吸效应和码率波动,默认min_i_proportion设为1,max_i_proportion设为100。在对I帧大小有约束的场景时,可以根据对I帧大小波动的需求来设置min_i_proportion和max_i_proportion的值。
-
max_qp&min_qp:CVBR高级参数,max_qp、min_qp表示的是当前帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。默认值min_qp为22,max_qp为47在对质量无特殊需求下,建议不更改此组参数。
注意:当实际码率低于long_term_min_bit_rate时,算法会自动降低min_qp;待实际码率高于long_term_min_bit_rate后,恢复至用户设置的min_qp。如果需要固定min_qp,则将long_term_min_bit_rate设为0。
-
max_i_qp&min_i_qp:CVBR高级参数,max_i_qp、min_i_qp表示的是当前序列IDR帧的最大Qp和最小Qp。这个钳位效果最强烈,所有其他对图像Qp的调整,如宏块级码率控制,最终都会被约束到这个最大Qp和最小Qp。默认值min_i_qp为20,max_i_qp为47。在对质量无特殊需求下,建议不更改此组参数。
注意:当实际码率低于long_term_min_bit_rate时,算法会自动降低min_i_qp;待实际码率高于long_term_min_bit_rate后,恢复至用户设置的min_i_qp。如果需要固定min_i_qp,则将long_term_min_bit_rate设为0。
-
min_qp_delta: CVBR高级参数,帧级QP最小值和CU级QP最小值的差值,在图像内容比较简单时,码控会降低Qp值,当帧级Qp调节到最小值时,帧级码率控制就不再下调Qp,但是CU/宏块级码率控制依然生效,图像中平坦区域Qp能够下调到更小值。
- max_qp_delta: CVBR高级参数,帧级QP最大值和CU级QP最大值的差值,在图像内容比较复杂时,码控会增大Qp值,当帧级Qp调节到最大值时,帧级码率控制就不再上调Qp,但是CU/宏块级码率控制依然生效,图像中强纹理区域Qp能够上升到更大值。
-
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- VPSS-VENC处于卷绕低延时或单帧低延时模式时,不支持码率控制重编功能,请客户设置最大重编次数为0,否则会导致通道频繁丢帧。Hi3519DV500支持单帧非卷绕低延时和卷绕低延时(卷绕低延时包含FMU直通和FMU卷绕两种模式)。Hi3516CV610/Hi3516CV608支持单帧非卷绕低延时和卷绕低延时(DDR卷绕),Hi3511CV100支持非卷绕低延时。
- VEDU通道存在VPSS-VENC处于卷绕低延时,则其他通道都不开重编,否则会出现VB队列占满(VB占用多)和VPSS送帧时因为队列满丢帧等问题。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_rc_param
【描述】
获取通道码率控制高级参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.264/ H.265/SVAC3.0/MJPEG编码通道码率控制的高级参数。各参数的含义请具体请参见ot_venc_rc_param。
- 如果rc_param为空,则返回失败。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_ref_param
【描述】
设置H.264/H.265/SVAC3.0编码通道高级跳帧参考参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果ref_param为空,则返回失败。
- 创建H.264/H.265/SVAC3.0协议编码通道时,默认跳帧参考模式是1倍跳帧参考模式。如果用户需要修改编码通道的跳帧参考,建议在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 本接口在编码过程中被调用时,等到下一个I帧时生效。
- 如果H.264协议编码通道的profile为svc-t,调用该接口则返回操作不允许错误。
- 如果用户设置1倍跳帧参考模式,对应的配置为:pred_en = TD_TRUE,enhance = 0,base = 1; 如果设置2倍跳帧参考模式,对应的配置为:pred_en = TD_TRUE,enhance = 1,base = 1;如果设置4倍跳帧参考模式,对应的配置为:pred_en = TD_TRUE,enhance = 1,base = 2;
- 如果用户设置通道的Gop Mode为OT_VENC_GOP_MODE_DUAL_P时,sp_interval只支持设置为sp_interval = (enhance+1)* base;当sp_interval不为0时,pred_en只支持设置为TD_TRUE.
- 如果用户设置通道的Gop Mode为OT_VENC_GOP_MODE_SMART_P时,pred_en只支持设置为TD_TRUE。
- 如果用户设置通道的Gop Mode为OT_VENC_GOP_MODE_BIPRED_B时,enhance必须等于b_frame_num。
- 如果用户设置通道的Gop Mode为OT_VENC_GOP_MODE_I时,必须保持pred_en = TD_TRUE,enhance = 0,base = 1。
- 当编码帧存分配使用UserVB方式且打开帧节省模式时,由于高级跳帧参考参数变化,导致参考帧个数增加,内部会判断已绑定的VB池存储Picture的VB个数是否满足需求,如果不够,则接口会返回失败。
- SVAC3设置GOP模式为NormalP且pred_en = TD_TRUE,enhance = 1,base = 2时开启时域SVC功能,支持2倍和4倍速的抽取码流,且抽取之后的码流能独立解码播放。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_ref_param
【描述】
获取H.264/H.265/SVAC3.0编码通道高级跳帧参考参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
如果ref_param为空,则返回失败。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_jpeg_enc_mode
【描述】
设置JPEG抓拍通道的抓拍模式。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置JPEG抓拍通道的抓拍模式。
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
- 本接口只对JPEG类型的编码通道有效。
-
通道抓拍模式有两种:
- OT_VENC_JPEG_ENC_ALL模式:通道启动接收图像之后,编码所有接收的图像;
- OT_VENC_JPEG_ENC_SNAP 模式:通道启动接收图像之后,只编码被标记为抓拍帧的图像。
-
创建JPEG通道之后,JPEG通道默认处于OT_VENC_JPEG_ENC_ALL模式。当用户需要只抓拍被标记的图像时,可以调用本接口,设置JPEG通道为OT_VENC_JPEG_ENC_SNAP 模式。
- Hi3519DV500、Hi3516CV610、Hi3516CV608解决方案上,对应绑定的VPSS 通道支持压缩和非压缩格式输出。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_jpeg_enc_mode
【描述】
获取JPEG编码通道的抓拍模式。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取JPEG通道的抓拍模式。
- 本接口只对JPEG类型的编码通道有效。
- 本接口必须在通道创建之后,通道销毁之前调用。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_slice_split
【描述】
设置通道的slice/patch分割属性,仅支持H.264/H.265/SVAC3.0通道。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
头文件:ot_common_venc.h、ss_mpi_venc.h
库文件:libss_mpi.a
【注意】
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
- 本接口用于设置H.264/H.265/SVAC3.0协议编码通道码流的分割方式。
-
Slice分割属性主要由以下参数决定
- enable:当前帧是否进行slice/patch分割。
- split_mode:slice/patch分割模式,split_mode = 0表示按照byte数来进行分割,split_mode = 1表示按照宏块行或者LCU行进行分割。split_mode >=2不被支持。
split_mode必须在enable为真的条件下有效,否则,无效。
- slice_size:slice/patch的大小,当split_mode不同时,slice_size表示不同的意义。当split_mode = 0时,slice_size表示平均每个slice的byte数的多少,编码器从图像的左上角开始,从左至右,从上至下,按光栅顺序按宏块进行编码。每个slice大小按照slice_size进行划分。最终编码slice大小不一定与用户设置的slice_size严格相等,存在误差。当编码至图像的最后一个slice时,剩余的宏块byte数不足slice_size,剩余的所有宏块被编码成一个slice。当split_mode = 1时,slice_size表示每个slice/patch占图像宏块行数或LCU行数,slice_size的单位为宏块行或者LCU行数。且当编码至图像的最后几行,不足slice_size时,剩余的宏块行或者LCU行被划分为一个slice/patch。
- slice_output_en:slice/patch输出低延时使能,当slice_output_en为TD_TRUE时,通道属性is_by_frame必须为TD_FALSE,当slice_output_en为TD_TRUE时仅支持split_mode = 1的模式。
-
当按字节划分slice时,若客户配置的slice_size较小,会存在一帧被分割成较多slice的情况。此时会导致码流压缩率较低和CPU占用时间较长等现象,客户需要结合实际需求合理配置。
- 通道编码宽度小于256时,不支持按字节划分slice。
- 本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认enable为false。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_slice_split接口,获取当前通道的slicesplit配置,然后再进行设置。
- 此接口仅支持H.264/H.265/SVAC3.0通道。
- H.264/H.265协议表示slice划分,SVAC3.0协议表示patch划分。
- SVAC3.0不支持按字节划分。
【举例】
无
【相关主题】
无。
ss_mpi_venc_get_slice_split
【描述】
获取H.264/H.265/SVAC3.0通道的slice/patch分割属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.264/H.265/SVAC3.0通道的slice/patch分割属性。本接口必须在通道创建之后,通道销毁之前调用。
- 此接口仅支持H.264/H.265/SVAC3.0通道。
- H.264/H.265协议表示slice划分,SVAC3.0协议表示patch划分。
【举例】
无
【相关主题】
无。
ss_mpi_venc_set_search_window
【描述】
设置通道的搜索窗范围,仅支持H.264/H.265/SVAC3.0通道。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
头文件:ot_common_venc.h、ss_mpi_venc.h
库文件:libss_mpi.a
【注意】
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
- 本接口用于设置H.264/H.265/SVAC3.0协议编码通道的搜索窗范围。
- 搜索窗主要由三个参数决定:
- mode:自动模式:使用SDK内部默认值;手动模式:当用户设置的搜索窗小于内部默认值时使用用户设置的值,当用户设置的搜索窗大于等于内部默认值时使用内部默认值。
- hor:用户设置的搜索窗水平范围,当mode为手动模式时有效,最小值为32,不检查上限。
- ver:用户设置的搜索窗垂直范围,当mode为手动模式时有效,最小值为32,不检查上限。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_search_window
【描述】
获取通道的搜索窗范围,仅支持H.264/H.265/SVAC3.0通道。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
头文件:ot_common_venc.h、ss_mpi_venc.h
库文件:libss_mpi.a
【注意】
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
- 本接口用于获取H.264/H.265/SVAC3.0协议编码通道的搜索窗范围。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_h265_pu
【描述】
设置H.265通道的PU属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.265协议编码通道码流的预测单元PU的配置。
-
PU属性主要由两个参数决定:
- constrained_intra_pred_flag:具体的含义,请参见H.265协议。
- strong_intra_smoothing_enabled_flag:具体的含义,请参见H.265协议。
-
本接口属于高级接口,用户可以选择性调用,建议不调用,系统有默认值。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个I帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h265_pu接口,获取当前通道的PU的配置,然后再进行设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h265_pu
【描述】
获取H.265通道的PU属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
头文件:ot_common_venc.h、ss_mpi_venc.h
库文件:libss_mpi.a
【注意】
- 本接口用于获取H.265协议编码通道的PU的属性。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无
【相关主题】
无。
ss_mpi_venc_set_h265_trans
【描述】
设置H.265通道的变换量化属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
头文件:ot_common_venc.h、ss_mpi_venc.h
库文件:libss_mpi.a
【注意】
- 本接口用于设置H.265协议编码通道码流的变换量化的配置。
-
Trans属性主要由以下参数决定
- cb_qp_offset:具体的含义,请参见H.265协议关于pps_cb_qp_offset的解释。
- cr_qp_offset:具体的含义,请参见H.265协议关于pps_cr_qp_offset的解释。
- scaling_list_en:表示量化表是否有效,无量化表时置为0。
- scaling_list_tu4_valid:表示inter_scaling_list4x4、intra_scaling_list4x4量化表是否有效,使用协议默认量化表时置为0。
- inter_scaling_list4x4[2][16]:inter_scaling_list4x4[0][16]表示帧间亮度量化表,inter_scaling_list4x4[1][16]表示帧间色度量化表,可由用户通过此数组提供量化表。
- intra_scaling_list4x4[2][16]:intra_scaling_list4x4[0][16]表示帧内亮度量化表,intra_scaling_list4x4[1][16]表示帧内色度量化表,可由用户通过此数组提供量化表。
- scaling_list_tu8_valid:表示inter_scaling_list8x8、intra_scaling_list8x8量化表是否有效,使用协议默认量化表时置为0。
- inter_scaling_list8x8[2][64]:inter_scaling_list8x8[0][64]表示帧间亮度量化表,inter_scaling_list8x8[1][64]表示帧间色度量化表,可由用户通过此数组提供量化表。
- intra_scaling_list8x8[2][64]:intra_scaling_list8x8[0][64]表示帧内亮度量化表,intra_scaling_list8x8[1][64]表示帧内色度量化表,可由用户通过此数组提供量化表。
- scaling_list_tu16_valid:表示inter_scaling_list16x16、intra_scaling_list16x16量化表是否有效,使用协议默认量化表时置为0。
- inter_scaling_list16x16[2][64]:inter_scaling_list16x16[0][64]表示帧间亮度量化表,inter_scaling_list16x16[1][64]表示帧间色度量化表,可由用户通过此数组提供量化表。
- intra_scaling_list16x16[2][64]:intra_scaling_list16x16[0][64]表示帧内亮度量化表,intra_scaling_list16x16[1][64]表示帧内色度量化表,可由用户通过此数组提供量化表。
- scaling_list_tu32_valid:表示inter_scaling_list32x32、intra_scaling_list32x32量化表是否有效,使用协议默认量化表时置为0。
- inter_scaling_list32x32[64]:inter_scaling_list32x32[64]表示帧间亮度量化表,可由用户通过此数组提供量化表。
- intra_scaling_list32x32[64]:intra_scaling_list32x32[64]表示帧内亮度量化表,可由用户通过此数组提供量化表。
- 本接口属于高级接口,用户可以选择性调用,建议不调用,系统有默认值。
-
本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个I帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用ss_mpi_venc_get_h265_trans接口,获取当前通道的变换量化的配置,然后再进行设置。
- Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100仅支持无量化表。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h265_trans
【描述】
获取H.265通道的变换量化属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
头文件:ot_common_venc.h、ss_mpi_venc.h
库文件:libss_mpi.a
【注意】
- 本接口用于获取H.265协议编码通道的量化变换的属性。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无
【相关主题】
无
ss_mpi_venc_set_h265_entropy
【描述】
设置H.265通道的熵编码属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.265协议编码通道码流的熵编码配置。
-
熵编码属性主要由一个参数决定
cabac_init_flag:具体的含义,请参见H.265协议。
-
本接口属于高级接口,用户可以选择性调用,建议不调用,系统有默认值。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h265_entropy接口,获取当前通道的熵编码配置,然后再进行设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h265_entropy
【描述】
获取H.265通道的熵编码属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.265协议编码通道的熵编码属性。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无
【相关主题】
无。
ss_mpi_venc_set_h265_dblk
【描述】
设置H.265通道的Deblocking属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.265协议编码通道的Deblocking属性和边界滤波属性。
-
Deblocking属性主要由三个参数决定
- slice_deblocking_filter_disabled_flag:具体的含义,请参见H.265协议。
- slice_beta_offset_div2:具体的含义,请参见H.265协议。
- slice_tc_offset_div2:具体的含义,请参见H.265协议。
-
边界滤波属性主要由二个参数决定
- loop_filter_across_tiles_enabled_flag:具体的含义,请参见H.265协议。
- loop_filter_across_slices_enabled_flag:具体的含义,请参见H.265协议。
-
本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认打开deblocking功能和slice, tile边界滤波功能,默认slice_deblocking_filter_disabled_flag = 0,slice_tc_offset_div2 = 0,slice_beta_offset_div2 = 0,loop_filter_across_tiles_enabled_flag=1,loop_filter_across_slices_enabled_flag=1。
- 如果用户想关闭deblocking功能,可以将slice_deblocking_filter_disabled_flag置为1。
- 如果使能slice与tile边界滤波功能,在划分slice和tile时生效。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,Deblocking属性等到下一帧时生效,边界滤波属性等到下一个I帧生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h265_dblk接口,获取当前通道的配置,然后再进行设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h265_dblk
【描述】
获取H.265通道的Deblocking属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.265协议编码通道的Deblocking属性。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无
【相关主题】
无。
ss_mpi_venc_set_h265_sao
【描述】
设置H.265通道的Sao属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.265协议编码通道码流的Sao配置。
-
Sao属性主要由两个参数决定
- slice_sao_luma_flag:当前slice亮度分量是否作Sao滤波。
- slice_sao_chroma_flag:当前slice色度分量是否作Sao滤波。
-
本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认打开sao功能,默认slice_sao_luma_flag = 1,slice_sao_chroma_flag = 1。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h265_sao接口,获取当前通道的Sao配置,然后再进行设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h265_sao
【描述】
获取H.265通道的Sao属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.265协议编码通道的Sao属性。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无
【相关主题】
无。
ss_mpi_venc_set_frame_lost_strategy
【描述】
设置编码通道瞬时码率超过阈值时丢帧策略。
【语法】
td_s32 ss_mpi_venc_set_frame_lost_strategy(ot_venc_chn chn, const ot_venc_frame_lost_strategy *lost_param);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果lost_param为空,则返回失败。
-
lost_param主要由四个参数决定
- enable:丢帧开关
- bit_rate_threshold:丢帧阈值
- frame_gap:最大允许连续丢帧帧数。
- mode:丢帧策略模式
-
本接口属于高级接口,用户可以选择性调用,系统有默认值,默认在瞬时码率超出阈值时为丢帧。
- 本接口提供瞬时码率超过阈值时两种处理方式:丢帧和编码p_skip帧,Mjpeg只支持丢帧处理方式。
- frame_gap控制是否均匀丢帧或均匀编码p_skip帧。如图1所示。

- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。如果在gop模式切换后调用该接口,需等到GOP生效后该接口生效。
- p_skip帧仅支持GOP模式为OT_VENC_GOP_MODE_NORMAL_P的编码通道。
- 切换GOP模式后丢帧开关会默认关闭,如需继续使用该接口需要重新配置。
- 如当前帧osd使能且osd有更新,不能编码为p_skip帧。
- 编码p_skip帧与P帧刷Islice功能互斥。
- 当设置H.265/SVAC3.0协议通道编码p_skip帧时,本模块内部会关闭SAO滤波,故建议客户调用ss_mpi_venc_set_h265_sao关闭SAO功能。
- 如果frame_gap等于0时,表示瞬时码率超出阈值允许一直丢帧,直到瞬时码率不大于阈值。
- 使能跳帧参考或者svc-t编码,base层帧不能编码为p_skip帧。
- 本接口仅支持H.264/H.265/SVAC3.0/Mjpeg 的CBR/VBR码率控制模式、H.264/H.265/SVAC3.0的ABR/AVBR/QVBR/CVBR码率控制模式的参数的设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_frame_lost_strategy
【描述】
获取编码通道瞬时码率超过阈值时丢帧策略。
【语法】
td_s32 ss_mpi_venc_get_frame_lost_strategy(ot_venc_chn chn, ot_venc_frame_lost_strategy *lost_param);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果lost_param为空,则返回失败。
- 切换GOP模式时,获取的属性是已设置的最新的属性。
- 本接口仅支持H.264/H.265/SVAC3.0/Mjpeg 的CBR/VBR码率控制模式、H.264/H.265/SVAC3.0的ABR/AVBR/QVBR/CVBR码率控制模式。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_super_frame_strategy
【描述】
设置编码超大帧配置。
【语法】
td_s32 ss_mpi_venc_set_super_frame_strategy(ot_venc_chn chn, const ot_venc_super_frame_strategy *super_frame_param);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_rc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果通道未创建,则返回失败。
- 本接口属于高级接口,用户可以选择性调用。默认使能super_frame_mode为OT_VENC_SUPER_FRAME_NONE,i_frame_bits_threshold、p_frame_bits_threshold、b_frame_bits_threshold为500000,reencode_priority 为OT_VENC_REENCODE_BIT_RATE_FIRST。
- 本接口在编码通道创建之后,编码通道销毁之前设置。
- 本接口仅支持Mjpeg 的CBR/VBR码率控制模式、H.264/H.265/SVAC3.0的CBR/VBR/ABR/AVBR/QVBR/CVBR码率控制模式。
- VPSS-VENC处于卷绕低延时模式时,不支持超大帧重编,强制配置会导致通道频繁丢帧。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_super_frame_strategy
【描述】
获取编码超大帧配置。
【语法】
td_s32 ss_mpi_venc_get_super_frame_strategy(ot_venc_chn chn, ot_venc_super_frame_strategy *super_frame_param);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 如果super_frame_param为空,则返回失败。
- 本接口仅支持H.264/H.265/SVAC3.0/MJPEG的CBR/VBR码率控制模式和H.264/H.265/SVAC3.0的ABR/AVBR/QVBR/CVBR码率控制模式。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_intra_refresh
【描述】
获取P帧帧内刷新设置参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
- 切换GOP模式时,获取的属性是已设置的最新的属性。
【举例】
无
【相关主题】
无
ss_mpi_venc_set_intra_refresh
【描述】
设置P帧帧内刷新参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 仅支持H.264、H.265、SVAC3.0编码通道。
- 改变Gop后需要重新进行设置。
- 设置高级跳帧参考后需要重新进行设置,不支持高级跳帧参考pred_en为0。
- 保证设置的行数refresh_num可以在一个Gop内完成I slice刷新,注意高级跳帧参考时只会在base层中OT_VENC_BASE_P_SLICE_REF_BY_BASE帧进行刷新。refresh_num需满足表1描述计算公式:
表 1 refresh_num计算
- 需要等到下一个I帧时生效的接口在进行参数设置后会生成一个I帧,保证参数设置生效。
- 仅支持GOP模式为OT_VENC_GOP_MODE_NORMAL_P的编码通道。
- GOP切换后该接口自动失效。如果GOP模式是从非NORMAL_P切向NORMAL_P,模式切换后调用该接口需等到GOP生效后该接口生效。
- 该接口与p_skip方式丢帧,背景低帧率功能互斥。
- 使能P帧帧内刷新,不支持QPMap模式使能skip,内部会自适应关闭skip。
- 如果开启p帧帧内刷新功能,需关闭去呼吸效应功能,再使能P帧刷I slice,否则返回不允许。
- 使能P帧帧内刷新时,需等下一个GOP的IDR帧才能生效。
- 关闭P帧帧内刷新参数时会立即生效。
- 动态修改P帧帧内刷新参数时,需要等下一个GOP才能生效。
- Smart Crr 不支持帧内刷新。
- 本接口仅在enable为true时检查其他参数的合法性。
- 若先使能P帧刷I宏块功能再设置高级跳帧参考pred_en为0,则P帧刷I宏块功能失效。
【举例】
无
ss_mpi_venc_set_mod_param
【描述】
设置编码相关的模块参数。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 此接口在通道创建前调用,如果通道已经创建,则返回失败OT_ERR_VENC_NOT_PERM。
- 可以设置ssxx_venc.ko、ssxx_h264e.ko、ssxx_h265e.ko、ssxx_svac3e.ko、ssxx_jpege.ko模块参数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_mod_param
【描述】
获取编码相关的模块参数。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 可以获取ssxx_venc.ko、ssxx_h264e.ko、ssxx_h265e.ko、ssxx_svac3e.ko、ssxx_jpege.ko模块参数。
- 调用本接口模块参数时,需要先配置ot_venc_mod_param->mod_type,否则获取不到对应模块参数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_sse_rgn
【描述】
设置H.264/H.265/SVAC3.0通道的SSE区域参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置H.264/H.265/SVAC3.0 协议编码通道SSE 区域的参数。
-
SSE 参数主要由三个参数决定。
- idx:系统支持每个通道可设置8 个SSE 区域,系统内部按照0~7 的索引号对SSE 区域进行管理,idx 表示的用户设置SSE的索引号。SSE 区域之间可以互相叠加,且当发生叠加时,SSE区域之间按照自己对应区域上报SSE总和,互不影响。
- enable:指定当前的SSE区域是否使能。
-
rect:指定当前的SSE 区域的位置坐标和区域的大小。
H.264的SSE区域的起始点坐标必须在图像范围内,且必须16对齐;SSE区域的长宽必须是16对齐,且区域必须在图像范围内。
H.265、SVAC3.0的SSE区域的起始点坐标必须在图像范围内,且必须LCU对齐;SSE区域的长宽必须是LCU对齐,且区域必须在图像范围内。
-
本接口属于高级接口,系统默认八个SSE区域使能,不调用此接口时,默认均为第一个宏块区域。用户可以调用此接口改变SSE区域,从而在水印信息中得到每个区域的SSE总和。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等待下一帧时发生。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_sse_rgn接口,获取当前通道的SSE配置,然后再进行设置。
- Hi3516CV610/Hi3516CV608/Hi3511CV100不支持H.264 SSE信息统计。
- 本接口仅在enable为true时检查其他参数的合法性。
【举例】
无
【相关主题】
无。
ss_mpi_venc_get_sse_rgn
【描述】
获取H.264/H.265/SVAC3.0 通道的SSE 属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取H.264/H.265/SVAC3.0协议编码通道的index的SSE 配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- Hi3516CV610/Hi3516CV608/Hi3511CV100不支持H.264 SSE信息统计。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_chn_param
【描述】
设置通道参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置VENC通道参数。
-
VENC高级参数主要由以下参数决定。
- color_to_grey_en:开启或关闭一个通道的彩转灰功能,默认为关闭。在编码过程中被调用时,等到下一个I帧编码时生效。
- priority:设置编码通道优先级,默认为0
-
max_stream_cnt:用于设置编码通道的码流buffer中能够缓存的最大码流帧数
若缓存码流帧数已达到最大码流帧数,当前待编码图像因码流buffer满而不被编码。
最大码流帧数在创建通道时由系统内部指定默认值,默认值为200。
在创建通道之后,销毁编码通道之前均可以被设置。在下一帧开始编码之前生效。此参数允许被多次设置,建议在创建编码通道成功之后,启动编码前进行设置,不建议在编码过程中动态调整。
-
poll_wake_up_frame_cnt:编码指定的帧之后唤醒阻塞接口,只适用select-poll机制收流。
默认一帧唤醒一次。在编码过程中被设置时,等待下一帧时生效。阻塞获取码流时,建议poll_wake_up_frame_cnt应小于max_stream_cnt。
-
crop_info:用于设置通道的裁剪属性。通道会优先进行图像裁剪,然后基于裁剪之后的图像尺寸,与编码通道的尺寸进行比较,决定是否进行缩小。
-
frame_rate:设置通道帧率控制属性
通道帧率控制属性包括了输入帧率src_frame_rate和输出帧率dst_frame_rate两部分。
设置通道帧率控制属性时,输入帧率src_frame_rate和输出帧率dst_frame_rate必须同时大于0或同时等于-1。
当输入帧率src_frame_rate和输出帧率dst_frame_rate均等于-1时,此时表示不进行帧率控制。
当输入帧率src_frame_rate小于输出帧率dst_frame_rate时为增帧模式,以dst_frame_rate作为绝对输出帧率。例如,src_frame_rate<dst_frame_rate,dst_frame_rate为30时,表示编码最终会输出30帧。
增帧模式下,主要适用于稳定输出帧率的场景,当输入端断流时需要stop venc,否则断流之后会重复编最后一帧以达到目标帧率。
当输入帧率src_frame_rate大于或者等于输出帧率dst_frame_rate时为丢帧(减帧)模式,取输入的部分帧进行编码。例如,src_frame_rate = 30,dst_frame_rate = 15时,表示每输入30帧图像,只取其中的15帧进行编码。
丢帧(减帧)模式下,当前端为固定频率的源时,例如VI,通道的帧率控制则准确;当前端为不固定频率的源时,例如VDEC,通道的帧率控制则不准确。
JPEG不支持增帧模式,输入帧率src_frame_rate必须大于或者等于输出帧率dst_frame_rate。
VPSS-VENC处于卷绕低延时或单buffer低延时模式时,不支持重编增帧模式,强制配置会导致通道频繁丢帧。HI3519DV500支持单buffer低延时和卷绕低延时(卷绕低延时包含FMU直通和FMU卷绕两种模式)。Hi3516CV610/Hi3516CV608支持单帧非卷绕低延时和卷绕低延时(DDR卷绕), Hi3511CV100仅支持非卷绕低延时。
JPEGE编码通道使能OT_VENC_PIC_RECV_MULTI模式时,建议在输入源(例如vpss)的一个通道进行帧率控制,编码会自动丢弃其他通道不需要编码的图像。如果输入源进行了帧率控制,不应再在编码通道进行帧率控制,可能会导致丢帧。
编码器内部通过绑定的方式将主码流图像缩小后给小码流编码的情况,主码流减帧时小码流也会减帧,主码流增帧时小码流不会对应增帧。
-
设置未创建的通道的参数,则返回失败。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_chn_param接口,获取当前通道的参数配置,然后再进行设置。
- 本接口在编码通道创建之后,编码通道销毁之前设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_chn_param
【描述】
获取通道参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
未创建通道返回unexist。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_fg_protect
【描述】
设置通道的前景保护参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置通道图像前景保护的配置。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_fg_protect接口,获取当前编码通道的前景保护的配置,然后再进行设置。
- VENC高级参数主要由六个参数决定。
- enable:开启或关闭一个通道的前景宏块级码控,关闭后前景和背景都按照接口ss_mpi_venc_set_rc_param所设置参数进行进行宏块级码控。
- threshold_p[OT_VENC_TEXTURE_THRESHOLD_SIZE],threshold_b [OT_VENC_TEXTURE_THRESHOLD_SIZE]:分别衡量P帧,B帧前景的宏块复杂度的一组阈值,下面说明中简化为thr。这组阈值按照从小到大的顺序依次排列,每个阈值的取值范围为[0, 255]。这组阈值用于在进行前景宏块级码率控制时,根据图像复杂度对每个宏块的Qp进行适当的调整。对于H.264/H.265/SVAC3.0协议,宏块级码率控制既有加方向(最大加16),也有减方向(最大减16),加减方向的控制取决于direction ,假设direction = j,即如果当前宏块的图像复杂度小于等于thr[j-1]阈值时,当前宏块的Qp值就在宏块行起始Qp值的基础上减去x;如果当前宏块的图像复杂度大于thr[j-1]阈值时,当前宏块的Qp值就在宏块行起始Qp值的基础上加上y。C表示图像复杂度,x,y的取值如下:C <thr[0]时,x=j;thr[0]≤C<thr[1]时,x=j-1;thr[1]≤C<thr[2]时,x=j-2;thr[2]≤C<thr[3]时,x=j-3;依次类推,thr[j-1]≤C≤thr[j]时,x=y=0;thr[j] < C≤thr[j+1]时,y=1; thr[j+1] < C≤thr[j+2]时,y=2;thr[j+2] < C≤thr[j+3]时,y=3;thr[j+3] < C≤thr[j+4]时,y=4;以此类推,thr[15] < C时,y=16-j。
- gain和offset是前景检测的控制参数,用于生成前景检测的阈值。阈值计算如下:((gain * madi + 8)>>4) + offset,其中madi为当前块像素的平均绝对误差(首先计算当前块像素的均值,然后计算当前块所有像素与该均值绝对差的均值)。运动检测的方法:利用运动估计结果残差的SAD,跟这个阈值进行比较,若大于这个阈值则认为是前景部分。因此对于同一场景,阈值越小,检测出来前景区域越大,反之亦然。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_fg_protect
【描述】
获取通道的前景保护参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取通道图像前景保护的配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_scene_mode
【描述】
设置编码场景模式。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 不同的编码模式场景对图像质量有影响。
-
场景暂支持以下几种模式:
- OT_VENC_SCENE_0:摄像机不运动或周期性连续运动的场景,比如:典型的_录像机_场景。
- OT_VENC_SCENE_1:高码率下运动场景,比如手持的摄像机、运动DV、航拍场景等。
- OT_VENC_SCENE_2:中等码率下有规律的连续运动,且编码压力比较大场景,比如行车记录仪。
- OT_VENC_SCENE_3:中低码率下镜头连续转动、缩放等场景。
- OT_VENC_SCENE_4:复杂场景极低码率,加快图像收敛。副作用对码控的稳定性有冲击。目前仅支持H.265编码协议。
-
本接口属于高级接口,用户可以选择性调用,系统默认场景模式为OT_VENC_SCENE_0。
-
仅H.265/H.264/SVAC3.0编码通道支持。
- 设置场景模式为OT_VENC_SCENE_2时建议使能默认量化表,注意部分解决方案不支持量化表。
本接口在编码通道创建之后,编码通道销毁之前设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_scene_mode
【描述】
获取编码场景模式。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取通道的编码场景模式配置。
- 仅H.265/H.264/SVAC3.0编码通道支持。
- 本接口在编码通道创建之后,编码通道销毁之前设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_attach_vb_pool
【描述】
将编码通道绑定到某个视频缓存VB池中。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_common_vb.h
- 库文件:libss_mpi.a
【注意】
- 必须保证通道已创建,否则会返回通道未创建的错误码。
- 绑定VB池和创建编码通道的操作,需要在同一个进程中执行。
- 用户必须调用接口ss_mpi_vb_create_pool(请参考”系统控制”章节)创建一个视频缓存VB池,再通过调用接口ss_mpi_venc_attach_vb_pool把当前编码通道绑定到固定PoolId的VB池中。可以把多个编码通道绑定到同一个VB池中,但是不能把同一个编码通道绑定到多个VB池中。
-
当要切换当前编码通道绑定的VB池时,只需再调一次接口ss_mpi_venc_attach_vb_pool正确配置需要绑定到的VB池即可。
-
非帧节省模式下:
接口不会判断VB池 BlkSize 和 BlkCnt的合法性。编码过程中若VB池中BlkSize或BlkCnt 不满足需求,会导致编码器阻塞。
-
帧节省模式下:
接口会判断存储Picture的VB池BlkSize 和 BlkCnt的合法性,若不满足需求,返回失败,内部继续使用已绑定的VB池进行编码;若满足需求,返回成功,内部切换到新池子编码,动态切换VB池会产生一个I帧。
-
-
只有H.264/H.265/SVAC3.0编码支持用户指定VB池方式。
- pool必须是已创建VB池的有效PoolId,包含存储Picture的VB池和存储Picture信息的VB池。
- 帧节省模式下使用UserVB方式,调用接口ss_mpi_venc_attach_vb_pool时内部会判断存储Picture的VB池的BlkCnt 和 BlkSize是否符合本通道的编码需求(存储Picture信息的VB池的BlkCnt 和 BlkSize不会提前判断)。如果满足需求则接口返回成功,存储Picture的VB块即可被占用;否则接口返回失败,错误码OT_ERR_VENC_SIZE_NOT_ENOUGH表示绑定的Picture VB池BlkSize 不足,错误码OT_ERR_VENC_NO_MEM表示绑定的Picture VB池 BlkCnt 不足。
- BlkCnt的最小值在不同功能下可能会不同,具体信息请查阅各个功能的接口描述。
ss_mpi_venc_detach_vb_pool
【描述】
将编码通道从某个视频缓存VB池中解绑定。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_common_vb.h
- 库文件:libss_mpi.a
【注意】
- 必须保证通道已创建,否则会返回通道未创建的错误码。
- 如果当前编码帧存分配方式使用的不是编码用户指定VB池,则返回通道不支持的错误码。
- 调用此接口后,不保证内部已完成VB池占用的释放,如果要进行销毁VB池建议首先调用接口ss_mpi_venc_reset_chn。
- 若VB池已绑定开启帧节省模式的编码通道,在销毁VB池之前,需要调用此接口或销毁对应绑定的编码通道。否则,销毁VB池将导致该VB池进入zombie状态,直到用户执行上述操作后才能真正被销毁。
- 用户调用ss_mpi_sys_exit函数将导致编码通道被销毁,已绑定的VB池同样会被解绑并销毁。
- ss_mpi_venc_stop_chn接口已被调用情况下,此接口调用后pic_info_vb_pool中的VB仍然会被VENC占用,pic_vb_pool中的VB在未开复用情况下同样会被VENC占用。
- 编码运行时用户销毁pic_info_vb_pool将导致编码失败,销毁pic_vb_pool则只在未开复用情况下导致编码失败。
ss_mpi_venc_set_cu_pred
【描述】
设置CU模式选择的倾向性。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_common_vb.h
- 库文件:libss_mpi.a
【注意】
- 必须保证通道已创建,否则会返回通道未创建的错误码。
- 本接口用于调试通道cu/mb的模式选择的倾向性,支持调节inter和intra的倾向性配置以及编码块大小的倾向性配置。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_cu_pred接口,获取CU模式选择的倾向性的配置,然后再进行设置。
-
该功能主要由如下九个参数决定。
- pred_mode:倾向性选择模式,支持auto和manual两种模式。auto模式下由驱动内部完成倾向性的配置,manual模式允许用户根据实际场景调用该接口完成自定义的倾向性配置。
- intra32_cost/intra16_cost/intra8_cost/intra4_cost/inter64_cost/inter32_cost/inter16_cost/inter8_cost分别设置各自模式的倾向性大小。默认每个cost值为8,即不做倾向性配置,每个模式的cost设置越大意味着选择该模式的倾向性越小。
-
仅H.265/H.264/SVAC3.0编码通道支持。H.264编码通道推荐使用High profile。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_cu_pred
【描述】
获取CU模式选择的倾向性。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_common_vb.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取CU模式选择的倾向性的配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 仅H.265/H.264/SVAC3.0编码通道支持。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_skip_bias
【描述】
设置cu/mb选择Skip模式的倾向性。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_common_vb.h
- 库文件:libss_mpi.a
【注意】
- 必须保证通道已创建,否则会返回通道未创建的错误码。
- 本接口用于调试通道cu/mb选择Skip模式的倾向性,支持背景和前景的倾向性单独配置。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_skip_bias接口,获取cu/mb选择Skip模式的倾向性配置,然后再进行设置。
-
该功能主要由如下五个参数决定。
- enable:skip倾向性使能控制。
- gain和offset是前景检测的控制参数,用于生成前景检测的阈值。阈值计算如下:((gain * madi + 8) >> 4) + offset,其中madi为当前块像素的平均绝对误差(首先计算当前块像素的均值,然后计算当前块所有像素与该均值绝对差的均值)。运动检测的方法:利用运动估计结果残差的SAD,跟这个阈值进行比较,若大于这个阈值则认为是前景部分。因此对于同一场景,阈值越小,检测出来前景区域越大,反之亦然。
- bg_cost/fg_cost分别设置背景和前景的skip倾向性大小。默认不调节倾向性,即cost值为0;强制性skip,cost设置为8。
-
仅H.265/H.264/SVAC3.0编码通道支持。
- 本接口仅在enable为true时检查其他参数的合法性。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_skip_bias
【描述】
获取cu/mb选择Skip模式的倾向性。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_common_vb.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取cu/mb选择Skip模式的倾向性。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 仅H.265/H.264/SVAC3.0编码通道支持。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_debreath_effect
【描述】
设置去除呼吸效应参数。
【语法】
td_s32 ss_mpi_venc_set_debreath_effect(ot_venc_chn chn, const ot_venc_debreath_effect *debreath_effect);
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_common_vb.h
- 库文件:libss_mpi.a
【注意】
- 仅H.264/H.265/SVAC3.0支持去呼吸效应功能。
- 必须保证通道已创建,否则会返回通道未创建的错误码。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 当GOP等于1时,不允许使能去除呼吸效应功能,因此gop mode为OT_VENC_GOP_MODE_I 时也不允许设置。
- 如果开启P帧刷I slice,需关闭P帧刷I slice功能,再使能去除呼吸效应,否则返回不允许。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_debreath_effect接口,获取去除呼吸效应参数,然后再进行设置。
- 使能该接口编码器会对图像做处理,有一定的性能损失,建议用户按需开启,默认为关闭。
- VPSS-VENC处于卷绕低延时或单帧低延时模式时,不支持去呼吸效应功能(Hi3516CV610/Hi3516CV608离线DDR卷绕支持去呼吸)。如果用户同时开启了低延时和去呼吸效应功能,去呼吸效应功能无效。Hi3519DV500支持单帧非卷绕低延时和卷绕低延时(卷绕低延时包含FMU直通和FMU卷绕两种模式),Hi3516CV610/Hi3516CV608支持单帧非卷绕低延时和DDR卷绕低延时,Hi3511CV100仅支持非卷绕低延时。
- Hi3516CV610/Hi3516CV608离线DDR卷绕时会反压前级,去呼吸额外需要一帧性能。在性能接近极限情况下,离线卷绕+去呼吸会导致反压VPSS和VI,当VB轮转不够时,前级可能丢帧或者处理不及时而报错。
- 支持同时开启帧节省模式和去呼吸效应。
-
该功能主要由如下三个参数决定。
- enable:去除呼吸效应使能控制。
- strength0为设置去除呼吸效应强度调节参数0,默认值为6。strength0值越大,呼吸效应改善会越弱,值越小,呼吸效应改善越明显,但是在编码压力很大且码率很低时,会导致图像更加模糊。
- strength1为设置去除呼吸效应强度调节参数1,默认值为16。其值越大,I帧会越大,其值越小,I帧会越小。如果I帧变大对客户应用有影响,客户可以尝试把strength1调小一点,会降低I帧码流的大小, 但是可能会减弱呼吸效应的改善程度。
- Hi3516CV610/Hi3511CV100不支持strength1调节。
-
原则上,对不同的场景,呼吸效应的改善要做到最佳,需要调节不同的参数。但是考虑到多场景的适应性,建议客户使用默认值。
- 隐私保护/空域SVC等功能仅在基础层具备去除呼吸效应的效果。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_debreath_effect
【描述】
获取去除呼吸效应参数。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_common_vb.h
- 库文件:libss_mpi.a
【注意】
- 仅H.264/H.265/SVAC3.0支持去除呼吸效应功能。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_hierarchical_qp
【描述】
设置分层qp参数。
【语法】
td_s32 ss_mpi_venc_set_hierarchical_qp(ot_venc_chn chn, const ot_venc_hierarchical_qp *hierarchical_qp);
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_common_vb.h
- 库文件:libss_mpi.a
【注意】
- 必须保证通道已创建,否则会返回通道未创建的错误码。
- 本接口在编码通道创建之后,编码通道销毁之前设置。
- 本接口在编码过程中被调用时,等到下一个I帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_hierarchical_qp接口,然后再进行设置。
- 仅在GOP类型为NORMAL_P、SMART_P、ADV_SMART_P时支持该接口。
- 仅H.265/H.264/SVAC3.0编码通道支持。
- ABR分层调节QP时推荐使用2层配置,超过2层不保证效果。
- SVAC3.0协议推荐使用2层配置,配置1层时frame_num建议小于等于3,配置2层时frame_num建议2层都等于1,其他设置不保证效果。
- 建议在高帧率运动场景时使用该功能,即SceneMode设置为OT_VENC_SCENE_1。
- 建议在GOP模式为OT_VENC_GOP_MODE_NORMAL_P和OT_VENC_GOP_MODE_SMART_P时使用该功能。
- FixQp,RangeQp、外部码控模式下分层QP功能不生效。
-
该功能主要由如下参数决定。
- enable:分层qp功能使能配置。
- qp_delta:设置每一层帧相对于第0层p帧的qp_delta。由于0层p帧的qp不需要进行调整,故qp_delta[0]为第1层,qp_delta[1]为第2层,以此类推。
- frame_num:设置每一层帧的数目,其中frame_num [0]为第1层,frame_num[1]为第2层,以此类推。

图 2 smart_p/adv_smart_p分层QP示意图

【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_hierarchical_qp
【描述】
获取分层qp参数。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_common_vb.h
- 库文件:libss_mpi.a
【注意】
- 仅H.264/H.265/SVAC3.0用于获取分层qp参数。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_rc_adv_param
【描述】
设置RC模块的高级参数。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
-
本接口用于设置RC模块的高级参数ot_venc_rc_adv_param中clear_stats_after_set_attr,设置新的通道参数后:
- 0:不清除码率控制的统计信息和帧率的统计信息;
- 1(默认值):清除码率控制的统计信息。
- 2:设置通道码率后不清除RC的帧率统计信息,清除码率统计信息。
-
当设置的参数改变统计信息内存大小时,需要重新分配内存或者算法可能读取到未被赋值的内存,此时无论clear_stats_after_set_attr设置什么参数都会清除统计信息。
- 此接口仅支持H.264/H.265/SVAC3.0/MJPEG通道。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_rc_adv_param
【描述】
获取RC模块的高级参数。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取RC模块的高级参数。
- 本接口必须在通道创建之后,通道销毁之前调用。
- 此接口仅支持H.264/H.265/SVAC3.0/MJPEG通道。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_jpeg_roi_attr
【描述】
设置JPEG和MJPEG编码通道的ROI属性。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置JPEG和MJPEG编码通道ROI属性。
-
ROI参数:
- idx:支持每个通道可设置16个ROI,编码器按照0~15的索引号对ROI进行管理,idx表示的用户设置ROI的索引号。ROI之间可以互相叠加,且当发生叠加时,ROI之间的优先级按照索引号0~15依次提高。
- enable:指定当前的ROI是否使能。
- level:指定当前的ROI采用的降码率等级,0~3依次提高,等级越高降码率相对越多,图像质量损失也相对越多。
- rect:指定当前的ROI的起始坐标和区域的大小。ROI的起始点坐标必须在图像范围内,且必须16对齐;ROI区域的长宽必须是16对齐并且大于0;ROI区域必须在图像范围内。
-
本接口属于高级接口,默认不使能ROI,用户必须调用此接口使能ROI。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。
- 非ROI区域level默认为2。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_jpeg_roi_attr接口,获取当前通道的ROI配置,然后再进行设置。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_jpeg_roi_attr
【描述】
获取JPEG和MJPEG编码通道的ROI属性。
【语法】
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取JPEG和MJPEG编码通道索引为idx的ROI属性。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_jpeg_roi_adv_attr
【描述】
获取JPEG和MJPEG编码通道的ROI高级属性。
【语法】
td_s32 ss_mpi_venc_get_jpeg_roi_adv_attr(ot_venc_chn chn, td_u32 idx, ot_venc_jpeg_roi_adv_attr *roi_adv_attr);
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取JPEG和MJPEG编码通道索引为idx的ROI高级属性。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 仅Hi3516CV610/Hi3516CV608/Hi3519DV500支持。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_jpeg_roi_adv_attr
【描述】
设置JPEG和MJPEG编码通道的ROI高级属性。
【语法】
td_s32 ss_mpi_venc_set_jpeg_roi_adv_attr(ot_venc_chn chn, const ot_venc_jpeg_roi_adv_attr *roi_adv_attr);
【参数】
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置JPEG和MJPEG编码通道ROI高级属性。
-
ROI参数:
- idx:支持每个通道可设置16个ROI,编码器按照0~15的索引号对ROI进行管理,idx表示的用户设置ROI的索引号。ROI之间可以互相叠加,且当发生叠加时,ROI之间的优先级按照索引号0~15依次提高。
- enable:指定当前的ROI是否使能。
- fg_level:ROI区域的降码率等级,0~15依次提高,等级越高降码率相对越多,图像质量损失也相对越多。
- bg_level:非ROI区域的降码率等级,0~15依次提高,等级越高降码率相对越多,图像质量损失也相对越多,当存在多个ROI区域时,所有ROI的bg_level都必须是同一种。
- rect:指定当前的ROI的起始坐标和区域的大小。ROI的起始点坐标必须在图像范围内,且必须16对齐;ROI区域的长宽必须是16对齐并且大于0;ROI区域必须在图像范围内。
- Hi3519DV500仅支持4种不同的level,即最多3种不同的fg_level和1种不同的bg_level。
-
本接口属于高级接口,默认不使能ROI,用户必须调用此接口使能ROI。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 仅Hi3516CV610/Hi3516CV608/Hi3519DV500支持。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_enable_svc
【描述】
开启/关闭智能编码。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于开启/关闭H.264/H.265/SVAC3.0编码通道智能编码功能。创建通道前通过接口ss_mpi_venc_set_chn_config设置当前通道支持的智能编码版本,不配置时默认支持智能编码1.0版本。
-
支持码控模式为CBR、ABR、VBR、AVBR、QVBR、CVBR下的智能编码。
- 在CBR模式下,设置相同的目标码率时,开启智能编码可以增强前景图像质量;
- 在ABR、VBR、QVBR、CVBR模式下,开启智能编码时,可以在保证前景质量的同时降低码率;或者在不改变背景质量的情况下,提升前景的质量。
- AVBR模式下,开启后对码率的影响视场景变化。
-
智能编码与QpMap模式、FixQp模式、RangeQP、ROI、PSkip功能、MD相关接口互斥。
- 智能编码2.0与复合编码功能互斥,不能同时开启。
- 智能编码2.0生效会有延迟,延迟生效的帧数目与送目标信息的时间、打智能检测的标记的间隔相关。GOP中第一个I帧不会生效。
- 编码通路在进行帧率控制或者出现超大帧丢帧时,智能编码效果会下降。
- 智能编码2.0 与OT_VENC_GOP_MODE_I模式互斥。
- 智能编码1.0与SVAC3.0的ALF功能互斥,由于ALF功能默认开启,因此在开启智能编码1.0功能之前需用户手动关闭ALF功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_svc_param
【描述】
获取智能编码1.0相关参数。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于H.264/H.265/SVAC3.0编码通道。
- 调用本接口前需调用ss_mpi_venc_enable_svc接口开启智能编码功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_svc_param
【描述】
设置智能编码1.0相关参数。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于H.264/H.265/SVAC3.0编码通道。
- 调用本接口前需调用ss_mpi_venc_enable_svc接口开启智能编码功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_svc_param_ex
【描述】
设置智能编码相关参数。
【语法】
【参数】
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 该接口支持设置智能编码1.0或智能编码2.0参数。
- 本接口用于H.264/H.265/SVAC3.0编码通道。
- 调用本接口前需调用ss_mpi_venc_enable_svc接口开启智能编码功能。
- Hi3516CV610/Hi3516CV608/Hi3511CV100支持此接口设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_svc_param_ex
【描述】
获取智能编码相关参数。
【语法】
【参数】
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 该接口支持设置智能编码1.0或智能编码2.0参数。
- 本接口用于H.264/H.265/SVAC3.0编码通道。
- 调用本接口前需调用ss_mpi_venc_enable_svc接口开启智能编码功能。
- Hi3516CV610/Hi3516CV608/Hi3511CV100支持此接口设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_send_svc_mask
【描述】
发送智能检测目标mask信息。
【语法】
【参数】
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 使用该接口前需要通过接口ss_mpi_venc_set_svc_param_ex设置为可接受mask模式。
- 调用本接口前需调用ss_mpi_venc_enable_svc接口开启智能编码功能。
- 本接口用于H.264/H.265/SVAC3.0编码通道。
- 当前仅智能编码2.0支持此接口。
- mask pts和编码yuv pts如果出现不匹配或者mask缺失,可能会导致mask_blk被长期占用等异常。
- 帧率控制、超编码性能送帧可能导致yuv和用户送的mask无法匹配,导致效果不佳或者没有效果、mask_blk被长期占用等异常。
- mask_blk对应的vb池需要以映射虚拟地址的方式创建。
- Hi3516CV610-00G/20G支持此功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_send_svc_region
【描述】
发送智能检测目标框属性信息。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于H.264/H.265/SVAC3.0编码通道。
- 调用本接口前需调用ss_mpi_venc_enable_svc接口开启智能编码功能。
- 智能编码2.0在帧率控制、超编码性能送帧情况下可能导致yuv和用户送的mask无法匹配,导致效果不佳或者没有效果。
- Hi3511CV100不支持此接口,如用户需要送智能编码框请使用ss_mpi_venc_send_frame接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_md
【描述】
Md检测控制信息。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
本接口用于H.264/H.265/SVAC3.0编码通道。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_md
【描述】
Md检测控制信息。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于H.264/H.265/SVAC3.0编码通道。
- md_param中sad_stats_en和level_stats_en暂不支持。
- 与智能编码SVC接口互斥。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_deblur
【描述】
运动过后,背景去模糊控制信息。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
本接口用于H.264/H.265/SVAC3.0编码通道。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_deblur
【描述】
运动过后,背景去模糊控制信息。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于H.264/H.265/SVAC3.0编码通道。
- 典型应用场景说明:适用于录像机固定的视频采集场景。
- 与skip_bias、skipweight功能冲突,这两种功能生效时,去背景模糊算法失效。SVC与MD算法都有设置skipweight参数,当SVC和MD分别作用时,去背景模糊算法失效。
- 不支持SMART_P/SMART_CRR/GOP_I/ADV_SMART_P/SINGLE_SP类型。
- 去背景模糊算法副作用:该算法是用于改善运动后背景模糊的算法,本质是针对特定的区域进行QP的调节。在定码率较低的情况下,会影响码率的分配,导致I帧的QP升高,从而影响了背景的图像质量。背景清晰度和运动过后的清晰度两者需要衡量,若重点关注背景清晰度,建议将该接口关闭。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_param_set_id
【描述】
获取H.264/H.265参数集ID。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
- 此接口仅支持H.264/H.265通道。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_param_set_id
【描述】
设置H.264/H.265参数集ID。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
- 对于H.264编码通道,支持设置SPS、PPS参数集ID。如果存在两个PPS,第二个PPS的ID为设置值加1。
- 对于H.265编码通道,支持设置VPS、SPS、PPS参数集ID。
- 本接口仅支持H.264/H.265编码通道。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_h264_poc
【描述】
获取H.264协议编码通道的POC类型。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 此接口仅支持H.264通道。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_h264_poc
【描述】
设置H.264协议编码通道的POC类型。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- POC类型主要指H.264码流的POC类型,具体含义请见H.264协议。
- POC类型现提供了pic_order_cnt_type = 0/1/2共三种类型,系统默认pic_order_cnt_type为0。
- 本接口在编码通道创建之后,编码通道销毁之前调用。本接口在编码过程中被调用时,等到下一个I帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h264_poc接口,获取当前编码通道的POC配置之后再进行设置。
- 本接口仅支持H.264编码通道。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_jpeg_dering_attr
【描述】
获取JPEG编码通道的强边去Ring效应参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取JPEG编码通道的强边去Ring效应参数。
- 本接口只对JPEG类型的编码通道有效。
- 本接口必须在通道创建之后,通道销毁之前调用。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_jpeg_dering_attr
【描述】
设置JPEG编码通道的强边去Ring效应参数。
【语法】
td_s32 ss_mpi_venc_set_jpeg_dering_attr(ot_venc_chn chn, const ot_venc_jpeg_dering_attr dering_attr);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置JPEG编码通道的强边去Ring效应模式和强度等级。
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
- 本接口只对JPEG类型的编码通道有效且只在dering_en为1的情况下dering_level调节才能生效。
-
强边去RING效应强度等级有四种:
- OT_VENC_JPEG_DERING_LEVEL_0等级:默认dering_level值,当打开或者关闭全局去dering功能时需要设置,最强的去Ring能力,最差的清晰度。
- OT_VENC_JPEG_DERING_LEVEL_1等级:较低的去Ring能力,较高的清晰度。
- OT_VENC_JPEG_DERING_LEVEL_2等级:中等的去Ring能力,中等的清晰度。
- OT_VENC_JPEG_DERING_LEVEL_3等级:较强的去Ring能力,较低的清晰度。
-
创建JPEG通道之后,JPEG通道默认处于dering_en=1的情况。当用户需要设置JPEG编码通道的强边去Ring效应强度等级,可以调用本接口,设置JPEG通道为不同的强度等级,从而得到需要的效果。
- 创建JPEG通道之后,可以调用本接口,当dering_en= 0时,dering_level无效。
- dering算法副作用:开启dering的算法会在去除ring现象的同时模糊原来的纹理细节,造成清晰度的损失。尤其是一些小的文字或者边缘。若客户特别对于文字或者车牌的清晰度的关注大于ring,建议将dering接口关闭。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_quality_balance
【描述】
获取编码器以质量均衡为目标相关参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取编码器以质量均衡为目标相关参数。
- 本接口必须在通道创建之后,通道销毁之前调用。
- 本接口仅支持H.264/H.265编码通道。
- 仅Hi3519DV500支持该功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_quality_balance
【描述】
设置编码器以质量均衡为目标相关参数。
【语法】
td_s32 ss_mpi_venc_set_quality_balance(ot_venc_chn chn, const ot_venc_quality_balance *quality_balance);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置编码器以质量均衡为目标相关参数。
- 本接口必须在编码通道创建之后,编码通道销毁之前调用,在编码过程中被调用时,下一个I帧生效。
- 通过编码两次实现质量均衡,通过牺牲性能的方式提升图像质量,牺牲的性能为一个GOP编码两次的帧数个数,例如当每一帧都编码两次,性能折半。
- 质量均衡使能后,不支持VPSS-VENC卷绕低延时。
- 质量均衡使能后,不支持P帧刷Islice。
- 本接口仅支持H.264/H.265编码通道。
- 算法副作用说明:质量均衡使能后,在弱纹理的背景区域清晰度会有一定的损失。建议在极低码率的使用场景,为获得更好的图像质量尽量不要使用超大帧重编功能。
- 仅Hi3519DV500支持该功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_watermark
【描述】
获取数字水印相关参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取数字水印相关参数。
- 本接口必须在通道创建之后,通道销毁之前调用。
- 本接口仅支持H.264/H.265编码通道。
- Hi3516CV610/Hi3516CV608/Hi3511CV100不支持该功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_watermark
【描述】
设置数字水印相关参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置数字水印相关参数。
- 本接口必须在通道创建之后,通道销毁之前调用。数字水印不会立刻生效,有几帧延迟。
- 本接口在H.265编码时需要调用ss_mpi_venc_set_h265_trans的cb_qp_offset和cr_qp_offset为-6,否则水印提取率会降低
- 本接口在H.264编码时需要调用ss_mpi_venc_set_h264_trans的chroma_qp_index_offset为-6,否则水印提取率会降低
-
该功能主要由如下六个参数决定。
- enable:数字水印使能控制。
- strength:数字水印强度(0:weak, 1:middle, 2:strong, default:0),强度越大意味着抗攻击性越强,但是对图像质量影响越大。
- component:水印添加到U/V分量,0:U component, 1:V component。
- template_period:水印模板切换周期,指使用相同水印模板的连续帧数,间隔多少帧切换一个水印模板,内部共有10个模板。适当地使用不同的水印模板可提升水印提取的鲁棒性。
- info[OT_VENC_MAX_WATERMARK_INFO_NUM]:水印信息,最大64byte。
- seed[OT_VENC_MAX_WATERMARK_SEED_NUM]:水印生成种子,为水印模板提供随机性,可影响水印提取的鲁棒性,不同的随机种子将产生一系列不同的水印模板,加/解水印需使用相同的随机种子,共128bit。
-
本接口仅支持H.264/H.265编码通道。
- 本接口支持彩转灰和YUV400编码,但可能出现伪彩等不确定现象,请谨慎使用。
-
影响水印提取鲁棒性及副作用的相关参数:
- strength:该值越大,提取鲁棒性越好。强度为0时,基本看不出来伪彩现象。但值越大,伪彩现象也会越重。不建议将strength设置过大,建议默认值。
- template_period:该值越大,提取鲁棒性越好。建议在提取时,该值设置要与嵌入水印时的值一致。
- 码率:值越大,提取鲁棒性越好。
- cb_qp_offset、cr_qp_offset/chroma_qp_index_offset:建议在调用数字水印接口时,该参数设置为默认值。若设置的值过大,会影响编码的图像质量。
- 图像分辨率越小,意味着一帧图像的水印信息越少,提取水印锁需要的帧数就需要越多。
- 图像分辨率小于416*416或者图像包含16*16的块小于672个时,水印无法提取。
-
Hi3516CV610/Hi3516CV608/Hi3511CV100不支持该功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_watermark_roi
【描述】
获取数字水印保护区域相关参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取数字水印保护区域信息。
- 本接口必须在通道创建之后,通道销毁之前调用。
- 本接口仅支持H.264/H.265编码通道。
- Hi3516CV610/Hi3516CV608/Hi3511CV100不支持该功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_watermark_roi
【描述】
设置数字水印保护区域相关参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置数字水印保护区域相关参数。
-
该功能主要由如下六个参数决定。
- enable:数字水印保护使能控制。
- strength:数字水印保护区域强度(0:weak;1:middle; 2:strong;default:0)
- top:水印保护区上边界位置。
- bottom:水印保护区下边界位置。
- left:水印保护区左边界位置。
- right:水印保护区右边界位置。
-
本接口仅支持H.264/H.265编码通道。
- Hi3516CV610/Hi3516CV608/Hi3511CV100不支持该功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_enable_jpeg_dblk
【描述】
是否使能JPEG、MJPEG编码通道的去Block效应功能。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于使能JPEG、MJPEG编码通道的去Block效应功能。
- 本接口用于在较低qfactor <50的情况下,可以改善块效应。
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
- Hi3511CV100不支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_adv_deblur
【描述】
获取运动物体区域拖尾和残留区域检测参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于H.264/H.265/SVAC3.0编码通道。
- 本接口用于获取运动物体较近较远区域拖尾和残留区域检测参数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_adv_deblur
【描述】
设置运动物体区域拖尾和残留区域检测参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于H.264/H.265/SVAC3.0编码通道。
-
本接口需要在deblur使能后才生效。
-
本接口用于设置运动物体较近、较远区域拖尾和残留区域检测参数。
- 典型应用场景说明:适用于录像机固定的视频采集场景。
- 与skip_bias、skip_weight功能冲突,这两种功能生效时,去背景模糊算法失效。SVC与MD算法都有设置skip_weight参数,当SVC和MD分别作用时,去背景模糊算法失效。
- 不支持SMART_P Gop类型。
- 去背景模糊算法副作用:该算法是用于改善运动后背景模糊的算法,本质是针对待定区域进行qp的调节,在定码率较低的情况下,会影响码率的分配,导致I帧的QP升高,从而影响了背景的图像质量,背景清晰度和运动过后的清晰度两者需要衡量,若重点关注背景清晰度,建议该接口关闭。
- 与ot_venc_deblur_param中自适应deblur功能互斥,只有关闭了自适应开关,才能调用该接口设置advance deblur参数。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_svac3_trans
【描述】
设置SVAC3.0协议编码通道的变换、量化的属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
-
本接口用于设置SVAC3.0协议编码通道码流的变换量化的配置。
- chroma_quant_param_disable_flag:具体的含义,请参见SVAC3.0协议对应字段的解释。
- chroma_quant_param_delta_cb:具体的含义,请参见SVAC3.0协议对应字段的解释。
- chroma_quant_param_delta_cr:具体的含义,请参见SVAC3.0协议对应字段的解释。
-
本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个I帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_svac3_trans接口。
【举例】
无
【相关主题】
无
ss_mpi_venc_get_svac3_trans
【描述】
获取SVAC3.0协议编码通道的变换、量化的属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置SVAC3.0协议编码通道码流的变换量化的配置。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无
【相关主题】
无
ss_mpi_venc_set_svac3_dblk
【描述】
设置SVAC3.0通道的Deblocking属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置SVAC3.0协议编码通道的Deblocking属性和边界滤波属性。
-
Deblocking属性主要由下面参数决定。
- deblocking_filter_disable_flag:具体的含义,请参见SVAC3.0协议。
- deblocking_filter_parameter_flag:具体的含义,请参见SVAC3.0协议。
- alpha_c_offset:具体的含义,请参见SVAC3.0协议。
- beta_offset:具体的含义,请参见SVAC3.0协议。
-
边界滤波属性主要由二个参数决定。
cross_patch_loop_filter_enable_flag:具体的含义,请参见SVAC3.0协议。
-
本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认打开。
- 本接口在编码通道创建之后,编码通道销毁之前设置。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_svac3_dblk接口,获取当前通道的配置,然后再进行设置。
【举例】
无
【相关主题】
无
ss_mpi_venc_get_svac3_dblk
【描述】
获取SVAC3.0通道的Deblocking属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
-
本接口用于获取SVAC3.0协议编码通道的Deblocking属性。
-
接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无
【相关主题】
无
ss_mpi_venc_set_svac3_sao
【描述】
设置SVAC3.0通道的Sao属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
-
本接口用于设置SVAC3.0协议编码通道码流的Sao配置。
-
Sao属性主要由两个参数决定。
- patch_sao_luma_flag:patch亮度分量是否作Sao滤波。
- patch_sao_chroma_flag:patch色度分量是否作Sao滤波。
-
本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认打开sao功能,默认patch_sao_luma_flag = 1, patch_sao_chroma_flag = 1。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_svac3_sao接口,获取当前通道的配置,然后再进行设置。
【举例】
无
【相关主题】
无
ss_mpi_venc_get_svac3_sao
【描述】
获取SVAC3.0通道的Sao属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取SVAC3.0协议编码通道码流的Sao配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
无
【相关主题】
无
ss_mpi_venc_set_svac3_alf
【描述】
设置SVAC3.0通道的ALF属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
-
本接口用于设置SVAC3.0协议编码通道码流的ALF配置。
-
ALF属性主要由两个参数决定。
- luma_picture_alf_enable:亮度分量是否作ALF滤波。
- chroma_picture_alf_enable:色度分量是否作ALF滤波。
-
本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认打开ALF功能,亮度与色度均开启。
- 本接口在编码通道创建之后,编码通道销毁之前设置,此接口在编码过程中被调用。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_svac3_alf接口,获取当前通道的配置,然后再进行设置。
- 仅Hi3511CV100支持此功能。
【举例】
无
【相关主题】
无
ss_mpi_venc_get_svac3_alf
【描述】
获取SVAC3.0通道的ALF属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取SVAC3.0协议编码通道码流的ALF配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
仅Hi3511CV100支持此功能。
【举例】
无
【相关主题】
无
ss_mpi_venc_set_svac3_privacy
【描述】
设置SVAC3.0通道的隐私保护属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
-
本接口用于设置SVAC3.0协议编码通道码流的隐私保护配置。
-
本接口在编码通道创建之后,编码通道销毁之前设置,此接口支持在编码过程中被调用。
- 建议用户在调用此接口之前,先调用ss_mpi_venc_get_svac3_privacy接口,获取当前通道的配置,然后再进行设置。
- 只支持NormalP模式开启隐私保护功能,运行时切换到其他GOP模式时会切换失败。
- 不支持跳帧参考、智能编码、QPMAP、SKIP_BIAS、ROI背景低帧率、裁剪与缩放、输入低延时OneBuffer模式、码流拷贝增帧策略。
- ROI、去呼吸等效果类功能仅基础层生效。
- 在不开帧节省情况下需要4个PictureVB和4个PictureInfoVB、开启帧节省情况下需要2个PictureVB和4个PictureInfoVB。
- 创建通道时需设置通道属性Profile为1。
- 动态开启隐私保护功能会在下一个I帧生效,在开启参考重构帧复用情况下,会在下一帧生效。
- 动态关闭隐私保护功能会立刻生效。
- 不支持NormalP模式下设置gop长度为1,若先设置gop为1再开启隐私保护,则隐私保护设置失败。
- 语义分割图通道不支持隐私保护功能。
- 仅Hi3511CV100支持此功能。
【举例】
无
【相关主题】
无
ss_mpi_venc_get_svac3_privacy
【描述】
获取SVAC3.0通道的隐私属性。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取SVAC3.0协议编码通道码流的隐私保护配置。
- 本接口在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
仅Hi3511CV100支持此功能。
【举例】
无
【相关主题】
无
ss_mpi_venc_set_svac3_emulation
【描述】
设置SVAC3.0协议编码通道防伪起始码配置。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置SVAC3.0协议编码通道码流的去除防伪起始码功能。
- 设置去除防伪起始码功能需要和安全加密方案配合使用。
- 设置去除防伪起始码功能后输出的码流不能直接解码。
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
【举例】
无
【相关主题】
无
ss_mpi_venc_get_svac3_emulation
【描述】
获取SVAC3.0协议编码通道防伪起始码配置。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取SVAC3.0协议编码通道码流的防伪起始码配置。
- 本接口必须在编码通道创建之后,编码通道销毁之前调用。
【举例】
无
【相关主题】
无
ss_mpi_venc_enable_one_pack
【描述】
是否使能编码通道的单包模式,使能后,一帧所有的ECS在一个码流包。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于使能编码通道的单包模式,使能该接口时,一帧所有ECS码流在一个包。
- 本接口仅支持JPEG协议。MJPEG/SVAC3.0/H.264/H.265不支持,设置后不生效。
- 使能单包模式不支持DCF/MPF。
- 使能单包模式不支持ECS低延时。
- 使能单包模式不支持JPEG批量抠图。
- 本接口使能单包模式之后,模块参数的多包模式和单包模式均不生效。
- 本接口需要在创建通道之前调用。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_bitrate_strategy
【描述】
设置H.264/H.265/SVAC3.0编码通道码率策略。
【语法】
td_s32 ss_mpi_venc_set_bitrate_strategy(ot_venc_chn chn, const ot_venc_bitrate_strategy *bitrate_strategy);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 不同的码率策略场景对图像质量有影响。
-
场景暂支持以下五种策略:
- OT_VENC_BITRATE_STRATEGY_AUTO:默认自动配置码率策略,跟不调用本接口效果一致。
- OT_VENC_BITRATE_STRATEGY_HIGH_QUALITY:高质量码率策略,该配置码率最高图像质量最好,为码率策略第一档。
- OT_VENC_BITRATE_STRATEGY_BIAS_QUALITY:倾向质量码率策略,该配置码率和图像质量仅次于HIGH_QUALITY,为码率策略第二档。
- OT_VENC_BITRATE_STRATEGY_BIAS_BITRATE:倾向码率策略,该配置码率倾向降低码率,图像质量和码率低于HIGH_QUALITY和BIAS_QUALITY,为码率策略第三档。
- OT_VENC_BITRATE_STRATEGY_LOW_BITRATE:低码率策略,该配置为最低码率图像质量也是最差,为码率策略第四档。
-
本接口用于设置码率策略配置,AUTO为不做策略,内部采用自适应模式,HIGH_QUALITY到LOW_BITRATE为策略1~4共四个档位配置,模式值越大省码率越多,默认值为AUTO,推荐值为HIGH_QUALITY;
- 本接口典型应用场景说明:适用于录像机固定的视频采集场景。
- 本接口只支持VBR模式。
- 本接口的策略HIGH_QUALITY/BIAS_QUALITY/BIAS_BITRATE会开启背景模糊算法,即deblur算法使能,策略LOW_BITRATE会关闭deblur算法。
- 本接口的策略HIGH_QUALITY/BIAS_QUALITY/BIAS_BITRATE存在背景模糊算法,在ss_mpi_venc_set_md使能MD算法且设置md_skip_weight时会关闭背景模糊算法,会导致该模式效果不达预期。
- 本接口的策略HIGH_QUALITY/BIAS_QUALITY/BIAS_BITRATE存在背景模糊算法,在QPMAP的skipweight生效时会关闭背景模糊算法,会导致该模式效果不达预期。
- 本接口的策略HIGH_QUALITY/BIAS_QUALITY/BIAS_BITRATE存在背景模糊算法,在SVC和SVC2.0时会关闭背景模糊算法,会导致该模式效果不达预期。
- 本接口的策略HIGH_QUALITY/BIAS_QUALITY/BIAS_BITRATE存在背景模糊算法,在ss_mpi_venc_set_skip_bias使能skip倾向性会关闭背景模糊算法,会导致该模式效果不达预期。
- 本接口的策略HIGH_QUALITY/BIAS_QUALITY/BIAS_BITRATE存在背景模糊算法副作用:该算法是用于改善运动后背景模糊的算法,本质是针对特定的区域进行QP的调节。在码率较低的情况下,会影响码率的分配,导致I帧的QP升高,从而影响了背景的图像质量。背景清晰度和运动过后的清晰度两者需要衡量,若重点关注背景清晰度,建议将该接口关闭。
- 本接口不支持SMART_P/SMART_CRR/ADV_SMART_CRR/GOP_I/SINGLE_SP等Gop类型。
- 此接口不支持ss_mpi_venc_set_deblur中的deblur_adaptive_en使能。
- 此接口不支持ss_mpi_venc_set_adv_deblur接口使能。
- 此接口仅支持H.264/H.265/SVAC3.0通道。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_bitrate_strategy
【描述】
获取码率策略配置。
【语法】
td_s32 ss_mpi_venc_get_bitrate_strategy(ot_venc_chn chn, ot_venc_bitrate_strategy *bitrate_strategy);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取通道的码率策略配置。
- 仅H.265/H.264/SVAC3.0编码通道支持。
- 本接口在编码通道创建之后,编码通道销毁之前设置。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_chn_capability
【描述】
设置能力集配置。
【语法】
td_s32 ss_mpi_venc_set_chn_capability(ot_venc_chn chn, const ot_venc_chn_capability *chn_capability);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口需要在创建通道之前调用。
- 通道默认不使能能力集。
- 使能能力集后不能再设置模块参数。
- 使能能力集后在创建通道时预先申请通道可能用到内存,可以在不销毁通道的情况下调用接口ss_mpi_venc_set_chn_attr切换协议。切换协议的相关约束和注意事项请参考ss_mpi_venc_set_chn_attr。
- 建议先调用ss_mpi_venc_get_chn_capability接口,再调用本接口。
- 主动销毁通道后能力集恢复默认值。
- 不支持帧存回收。
- 设置能力集支持多个协议时,最大宽高受所设置的协议的最大宽高共同约束。以Hi3516CV610举例说明:设置能力集最大宽高1902*1080,协议集合H.264,JPEG,可以设置成功;设置能力集最大宽高4096*4096,协议集合H.264,JPEG,设置失败;设置能力集最大宽高4096*4096,协议集合JPEG,可以设置成功。
- Hi3519DV500暂不支持该功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_chn_capability
【描述】
获取能力集配置。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
-
本接口用于获取通道的能力集配置。
-
Hi3519DV500暂不支持该功能。
【举例】
无。
【相关主题】
无。
ot_venc_get_export_symbol
【描述】
获取驱动导出符号。
【语法】
【参数】
无。
【返回值】
失败,返回错误码。 |
【需求】
头文件:ot_venc_export.h
【注意】
该函数为内核态驱动接口,只在内核态可见。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_fast_enc_param
【描述】
设置快速编码。
【语法】
td_s32 ss_mpi_venc_set_fast_enc_param(ot_venc_chn chn, const ot_venc_fast_enc_param *fast_enc_param);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
-
只支持OT_VENC_GOP_MODE_I、OT_VENC_GOP_MODE_NORMAL_P、OT_VENC_GOP_MODE_SINGLE_SP。
-
和sao滤波、智能编码2.0功能互斥。
- 开启该功能后编码性能会有提升,但是会导致图像质量下降、编码码率偏大等问题。
- 仅Hi3516CV610支持此接口,Hi3516CV610-20S/0S的H264/H265编码协议以及Hi3516CV610-20G/00G芯片的H264/H265/SVAC3.0编码协议支持FAST编码。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_fast_enc_param
【描述】
获取快速编码。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
仅Hi3516CV610支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_bind_aiseg_chn
【描述】
绑定语义分割图编码通道与主图编码通道。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置主图编码通道与语义分割图编码通道的绑定关系。
- 仅支持SVAC3.0协议的两个编码通道之间进行绑定。
- 本接口在主通道和语义分割图编码通道分别创建完成且语义分割功能设置之后,编码开始之前调用。
- 语义分割图编码通道的创建参见ss_mpi_venc_create_chn接口的描述。
- 仅支持“一绑一”的绑定关系,不支持对一个已绑定过的通道进行绑定操作。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_unbind_aiseg_chn
【描述】
解绑语义分割图编码通道与主图编码通道。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于解除主图编码通道与语义分割图编码通道的绑定关系。
- 仅支持SVAC3.0协议的两个编码通道之间进行绑定。
- 本接口在主通道和语义分割图编码通道绑定完成之后,通道销毁之前调用。
- 通道销毁前若未调用本接口,则通道销毁时自动解绑。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_send_frame_aiseg
【描述】
向语义分割图通道送语义分割图。
【语法】
td_s32 ss_mpi_venc_send_frame_aiseg(ot_venc_chn aiseg_chn, const ot_venc_aiseg_map_info *aiseg_map, td_s32 milli_sec);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
|
详细定义参见ot_venc_aiseg_map_info。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 仅用于向语义分割图编码通道发送语义分割图。
- 如果milli_sec小于-1,返回OT_ERR_VENC_ILLEGAL_PARAM。
- 仅支持接收YUV400格式的语义分割图, 彩转灰功能无效。
- 视频输入的原始图像大小必须不小于编码通道的大小。
- 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像。
- 用户需确保分割图通道送帧速度与主图送帧速度相匹配,落后主图63帧时该分割图会被丢弃。
- 由于不同编码通道存在速度差异,分割图通道编码速度快时,出现因输入队列满而导致送帧失败的情况属于正常现象。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_fg_mode
【描述】
设置通道的前景模式。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于设置通道图像前景模式的配置。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,下一帧立即生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 此接口仅支持SVAC3.0通道。
-
场景暂支持以下两种模式:
- OT_VENC_FG_MODE_FOREGROUND:前景的质量优先模式。
- OT_VENC_FG_MODE_BALANCE:前景背景质量平衡模式。
-
本接口属于高级接口,用户可以选择性调用,系统默认场景模式为OT_VENC_FG_MODE_BALANCE。
- 仅Hi3511CV100支持此功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_fg_mode
【描述】
获取编码前景模式。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于获取通道的编码前景模式配置。
- 仅SVAC3.0编码通道支持。
- 本接口在编码通道创建之后,编码通道销毁之前设置。
- 仅Hi3511CV100支持此功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_prefilter_effect
【描述】
设置预滤波参数。
【语法】
td_s32 ss_mpi_venc_set_prefilter_effect(ot_venc_chn chn, const ot_venc_filter_effect *prefilter_effect);
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
预滤波参数,详情参见ot_venc_filter_effect。 |
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口在编码通道创建之后,编码通道销毁之前设置。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
仅支持SVAC3.0通道。
-
仅Hi3511CV100支持此功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_prefilter_effect
【描述】
获取预滤波参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
预滤波参数,详情参见ot_venc_filter_effect。 |
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口在编码通道创建之后,编码通道销毁之前调用。
- 在编码过程中被调用时,下一帧立即生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
仅支持SVAC3.0通道。
-
本接口属于高级接口,用户可以选择性调用,系统默认此功能不开启。
- 仅Hi3511CV100支持此功能。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_enable_mux_stm_syntax
【描述】
是否使能编码通道的拼接语法,使能后,支持多帧码流合并成一帧码流,实现多路码流合并成一路码流。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM)。 |
||
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口用于使能编码通道的拼接语法功能,启用该接口后,可支持多帧码流合并为一帧码流,从而实现多路码流合并为一路码流。
- 本接口仅支持SVAC3协议。JPEG、MJPEG、H.264、H.265不支持,设置后不生效。
- 使能接口后可能会影响图像质量,非必要时建议不要开启。
- 使能拼接模式,ALF功能自适应关闭。
- 使能拼接模式不支持帧率控制,其中通道级帧控将设置失败,RC帧控将内部自适应关闭。
- 使能拼接模式不支持重编
- 使能拼接模式不支持超大帧重编和丢帧。
- 使能拼接模式不支持码流增帧。
- 使能拼接模式不支持时域SVC。
- 使能拼接模式不支持空域SVC。
- 使能拼接模式不支持隐私保护。
- 使能拼接模式不支持码流单包模式。
- SVAC3.0多路拼接场景中,当前只支持竖切的方式,前X路的宽度必须相同,最后一路的宽度应大于或等于前X路的宽度,且宽度必须是LCU的倍数,该约束由用户自己保证。
- 仅Hi3511CV100支持。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_set_svac3_aiseg
【描述】
设置SVAC3.0语义分割功能参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
语义分割参数,详情参见ot_venc_svac3_aiseg。 |
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口在编码通道创建之后,编码通道销毁之前设置。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 本接口可以动态控制语义分割功能的开关,图模式下关闭功能不会解除通道直接的绑定关系,需手动解绑。
- 不支持通道不销毁情况下切换协议类型。
- 本接口属于高级接口,用户可以选择性调用,系统默认此功能不开启。
-
仅支持SVAC3.0通道。
-
仅Hi3511CV100支持此功能。
- 不支持智能编码、隐私保护、帧率控制。
- 分割图通道仅支持基础的编码功能,仅支持的功能:GOP_I模式、FIXQP码控模式、按帧收流。
- 分割图通道不支持的功能包括不限于:智能编码、隐私保护、ROI编码、QPMAP、马赛克、背景低帧率、外部码控、用户数据、输出低延时、多Patch编码、P帧帧内刷新、帧率控制。
- 分割图通道QP过小时分割图码流有被丢弃的风险,建议QP设置为38左右。
- 用户需指定语义分割的缓存buffer_size,当接到的点框数据超出缓存大小时,该帧携带的点框数据将被丢弃,当接收点数据时,buffer_size设置应比点数据大550K,图模式时,buffer_size不小于分割图的width*height。
- SMARTCRR模式的copy策略下,CRR帧位置的显示帧不附带语义分割图信息。
- 语义分割点框模式下,性能约束参见《MPP媒体处理软件V6.0 FAQ》文档“SVAC3.0 语义分割功能注意事项”章节。
- 通道生命周期内首次设置buf_size生效,动态改变buf_size不生效。
【举例】
无。
【相关主题】
无。
ss_mpi_venc_get_svac3_aiseg
【描述】
获取SVAC3.0语义分割功能参数。
【语法】
【参数】
|
取值范围:[0, OT_VENC_MAX_CHN_NUM) |
||
语义分割参数,详情参见ot_venc_svac3_aiseg。 |
【返回值】
失败,返回错误码。 |
【需求】
- 头文件:ot_common_venc.h、ss_mpi_venc.h
- 库文件:libss_mpi.a
【注意】
- 本接口在编码通道创建之后,编码通道销毁之前设置。
- 在编码过程中被调用时,下一帧立即生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
仅支持SVAC3.0通道。
-
仅Hi3511CV100支持此功能。
【举例】
无。
【相关主题】
无。
数据类型
相关数据类型、数据结构定义如下:
- OT_VENC_MAX_CHN_NUM:定义最大通道数。
- OT_VENC_TEXTURE_THRESHOLD_SIZE:定义纹理级码控的阈值个数。
- OT_VENC_MAX_TILE_NUM:定义最大支持Tile的个数。
- OT_VENC_MAX_SSE_NUM:定义SSE个数。
- OT_VENC_VEDU_IP_NUM:定义解决方案的编码逻辑个数。
- OT_VENC_MAX_REG_NUM:定义解决方案的编码逻辑的寄存器套数。
- OT_VENC_MAX_FRAME_NUM:定义用户发送多帧图像接口中图像的最大帧数
- OT_VENC_MAX_MOSAIC_RECT_NUM:定义用户发送多帧图像接口中马赛克区域的最大个数
- OT_VENC_QP_HIST_NUM:定义QP直方图数组大小。
- OT_VENC_H264_QP_HIST_NUM:定义H.264协议QP直方图数组大小。
- OT_VENC_H265_QP_HIST_NUM:定义H.265协议QP直方图数组大小。
- OT_VENC_SVAC3_QP_HIST_NUM:定义SVAC3.0协议QP直方图数组大小。
- OT_VENC_MAX_SVC_RECT_NUM:定义智能检测目标框个数。
- OT_VENC_MD_THRESHOLD_NUM:定义MD检测阈值个数。
- OT_VENC_MD_LEVEL_NUM:定义MD检测Level值个数。
- OT_VENC_MAX_PACK_INFO_NUM:定义码流包包含其他数据的最大个数。
- OT_VENC_MAX_MPF_NUM:定义MPF图像的最大个数。
- OT_VENC_PRORES_MAX_ID_CHAR_NUM:定义PRORES协议厂商名最大字符个数。
- OT_VENC_MAX_HIERARCHY_NUM:定义分层编码的最大层数。
- OT_VENC_SCALING_LIST_SIZE_16:定义量化表相关大小。
- OT_VENC_SCALING_LIST_SIZE_64:定义量化表相关大小。
- OT_VENC_JPEG_QT_COEF_NUM:定义jpeg量化表大小。
- OT_VENC_MJPEG_QT_COEF_NUM:定义mjpeg量化表大小。
- OT_VENC_MAX_ROI_NUM:定义H.264/H.265/SVAC3.0 ROI最大个数。
- OT_VENC_MAX_JPEG_ROI_NUM:定义JPEG ROI最大个数。
- OT_VENC_MAX_BITRATE:定义最大码率。
- OT_VENC_MIN_BITRATE:定义最小码率。
- OT_VENC_MAX_QUALITY_BALANCE_NUM:定义质量均衡阈值的个数。
- OT_VENC_MAX_WATERMARK_INFO_NUM:定义数字水印信息的大小。
- OT_VENC_MAX_WATERMARK_SEED_NUM:定义数字水印种子的数量。
- OT_VENC_MAX_BATCH_CROP_RECT_NUM:定义最大抠图数量。
- OT_VENC_MAX_IN_DEPTH:定义最大输入队列深度。
- OT_VENC_MAX_AISEG_CLASS_NUM:定义最大语义分割类别数量。
- ot_venc_h264_nalu_type:定义H.264码流NALU类型。
- ot_venc_ref_type:定义H.264/H.265/SVAC3.0跳帧参考码流的帧类型以及参考属性。
- ot_venc_jpege_pack_type:定义JPEG码流的PACK类型。
- ot_venc_h265_nalu_type:定义H.265码流NALU类型。
- ot_venc_svac3_nalu_type:定义SVAC3.0码流NALU类型。
- ot_venc_prores_pack_type:定义PRORES码流的PACK类型。
- ot_venc_data_type:定义码流类型的联合体。
- ot_venc_pack_info:定义当前码流包数据中包含的其他类型码流包数据的结构体。
- ot_venc_pack:定义帧码流包结构体。
- ot_venc_h264_stream_info:定义H.264协议码流特征信息。
- ot_venc_jpeg_stream_info:定义JPEG/MJPEG协议码流特征信息。
- ot_venc_h265_stream_info:定义H.265协议码流特征信息。
- ot_venc_svac3_stream_info:定义SVAC3.0协议码流特征信息。
- ot_venc_prores_stream_info:定义PRORES协议码流特征信息。
- ot_venc_h264_adv_stream_info:定义H.264协议高级码流特征信息。
- ot_venc_sse_info:定义H.264/H.265/SVAC3.0协议SSE信息。
- ot_venc_h265_adv_stream_info:定义H.265协议高级码流特征信息。
- ot_venc_svac3_adv_stream_info:定义SVAC3.0协议码流高级特征信息。
- ot_venc_stream:定义帧码流类型结构体。
- ot_venc_stream_buf_info:定义码流buffer信息的结构体。
- ot_venc_h265_attr:定义H.265编码器属性结构体。
- ot_venc_h264_attr:定义H.264编码器属性结构体。
- ot_venc_mpf_cfg:定义JPEG MPF结构体。
- ot_venc_pic_recv_mode:定义RECEIVE MODE结构体。
- ot_venc_recv_src:定义JPEG收帧方式在OT_VENC_PIC_RECV_MULTI情况下的绑定源类型。
- ot_venc_jpeg_attr:定义JPEG/MJPEG编码器属性结构体。
- ot_venc_prores_frame_rate:定义PRORES协议帧率。
- ot_venc_prores_aspect_ratio:定义PRORES协议幅型比。
- ot_venc_prores_attr:定义PRORES编码器属性结构体。
- ot_venc_attr:定义编码器属性结构体。
- ot_venc_gop_mode:定义H.264/H.265/SVAC3.0 GOP类型。
- ot_venc_gop_normal_p:定义单参考帧的P帧Gop属性结构体;
- ot_venc_gop_dual_p:定义双参考帧的P帧Gop属性结构体;
- ot_venc_gop_smart_p:定义编码智能P帧Gop属性结构体;
- ot_venc_gop_adv_smart_p:定义编码高级智能P帧Gop属性结构体;
- ot_venc_gop_bipred_b:定义编码B帧GOP属性结构体。
- ot_venc_gop_single_sp:定义编码单参考帧SP帧GOP属性结构体。
- ot_venc_gop_single_sp:定义编码单参考帧SP帧GOP属性结构体。
- ot_venc_gop_lowdelay_b:定义编码低延迟B帧GOP属性结构体。
- ot_venc_gop_adv_smart_crr:定义SVAC3.0编码通道adv_smart_crr属性结构。
- ot_venc_bgm_mode:定义背景建模的模式。
- ot_venc_gop_attr:定义Gop Mode类型的结构体。
- ot_venc_chn_attr:定义编码通道属性结构体。
- ot_venc_start_param:定义编码通道连续接收并编码的帧数结构体。
- ot_venc_stream_info:定义编码器码流特征信息,供外部查询使用。
- ot_venc_chn_status:定义编码通道的状态结构体。
- ot_venc_slice_split:定义H.264/H.265/SVAC3.0编码通道slice或patch分割属性。
- ot_venc_search_window:定义H.264/H.265/SVAC3.0通道的搜索窗范围。
- ot_venc_h264_intra_pred:定义H.264编码通道帧内预测属性。
- ot_venc_h264_trans:定义H.264编码通道变换、量化属性。
- ot_venc_h264_entropy:定义H.264编码通道熵编码属性。
- ot_venc_h264_dblk:定义H.264编码通道Deblocking属性。
- ot_venc_h264_vui:定义H.264编码通道VUI属性。
- ot_venc_h265_vui:定义H.265协议编码通道Vui结构体。
- ot_venc_vui_aspect_ratio:定义H.264/H.265协议编码通道Vui中AspectRatio信息的结构体。
- ot_venc_h264_vui_time_info:定义H.264协议编码通道Vui中Time_Info信息的结构体。
- ot_venc_h265_vui_time_info:定义H.265协议编码通道Vui中Time_Info信息的结构体。
- ot_venc_vui_video_signal:定义H.264/H.265协议编码通道Vui中信息的Video_Signal结构体。
- ot_venc_vui_bitstream_restric:定义H.264/H.265协议编码通道Vui中信息的Bitstream_Restriction结构体。
- ot_venc_jpeg_param:定义JPEG编码参数集合。
- ot_venc_mjpeg_param:定义MJPEG协议编码通道高级参数结构体。
- ot_venc_roi_attr:定义编码通道感兴趣区域编码属性。
- ot_venc_roi_for_frame:定义感兴趣区域应用类型。
- ot_venc_roi_attr_ex:定义编码通道感兴趣区域编码高级属性。
- ot_venc_jpeg_roi_attr:JPEG和MJPEG定义编码感兴趣区域信息。
- ot_venc_jpeg_roi_adv_attr:JPEG和MJPEG定义编码感兴趣区域高级属性信息。
- ot_venc_roi_bg_frame_rate:定义非Roi区域的帧率属性。
- ot_venc_ref_param:定义H.264/H.265/SVAC3.0编码的高级跳帧参考参数
- ot_venc_rc_attr:定义编码通道码率控制器属性。
- ot_venc_rc_mode:定义编码通道码率控制器模式。
- ot_venc_rc_qpmap_mode:定义编码通道QPMAP模式下CU32、CU64 QP值的取值方式。
- ot_venc_h264_abr:定义H.264编码通道ABR属性结构。
- ot_venc_h264_cbr:定义H.264编码通道CBR属性结构。
- ot_venc_h264_vbr:定义H.264编码通道VBR属性结构。
- ot_venc_h264_avbr:定义H.264编码通道AVBR属性结构。
- ot_venc_h264_qvbr:定义H.264编码通道QVBR属性结构。
- ot_venc_h264_cvbr:定义H.264编码通道CVBR属性结构。
- ot_venc_h264_fixqp:定义H.264编码通道Fixqp属性结构。
- ot_venc_h264_qpmap:定义H.264编码通道QPMAP属性结构。
- ot_venc_h264_rangeqp:定义H.264编码通道rangeqp属性结构。
- ot_venc_mjpeg_fixqp:定义MJPEG编码通道Fixqp属性结构。
- ot_venc_mjpeg_cbr:定义MJPEG编码通道CBR属性结构。
- ot_venc_mjpeg_vbr:定义MJPEG编码通道VBR属性结构。
- ot_venc_h265_abr:定义H.265编码通道ABR属性结构。
- ot_venc_h265_cbr:定义H.265编码通道CBR属性结构。
- ot_venc_h265_vbr:定义H.265编码通道VBR属性结构。
- ot_venc_h265_avbr:定义H.265编码通道AVBR属性结构。
- ot_venc_h265_qvbr:定义H.265编码通道QVBR属性结构。
- ot_venc_h265_cvbr:定义H.265编码通道CVBR属性结构。
- ot_venc_h265_fixqp:定义H.265编码通道Fixqp属性结构。
- ot_venc_h265_qpmap:定义H.265编码通道QPMAP属性结构。
- ot_venc_h265_rangeqp:定义H.265编码通道rangeqp属性结构。
- ot_venc_super_frame_mode:定义码率控制中超大帧处理模式。
- ot_venc_h264_vbr_param:定义H.264协议编码通道VBR码率控制模式高级参数配置。
- ot_venc_h264_avbr_param:定义H.264协议编码通道AVBR码率控制模式高级参数配置。
- ot_venc_h264_qvbr_param:定义H.264协议编码通道QVBR码率控制模式高级参数配置。
- ot_venc_h264_cvbr_param:定义H.264协议编码通道CVBR码率控制模式高级参数配置。
- ot_venc_h264_cbr_param:定义H.264协议编码通道CBR新版码率控制模式高级参数配置。
- ot_venc_h264_abr_param:定义H.264协议编码通道ABR新版码率控制模式高级参数配置。
- ot_venc_mjpeg_cbr_param:定义MJPEG协议编码通道CBR码率控制模式高级参数配置。
- ot_venc_mjpeg_vbr_param:定义MJPEG协议编码通道VBR码率控制模式高级参数配置。
- ot_venc_h265_vbr_param:定义H.265协议编码通道VBR码率控制模式高级参数配置。
- ot_venc_h265_avbr_param:定义H.265协议编码通道AVBR码率控制模式高级参数配置。
- ot_venc_h265_qvbr_param:定义H.265协议编码通道QVBR码率控制模式高级参数配置。
- ot_venc_h265_cvbr_param:定义H.265协议编码通道CVBR码率控制模式高级参数配置。
- ot_venc_h265_cbr_param:定义H.265协议编码通道CBR新版码率控制模式高级参数配置。
- ot_venc_h265_abr_param:定义H.265协议编码通道ABR新版码率控制模式高级参数配置。
- ot_venc_rc_param:定义编码通道的码率控制高级参数。
- ot_venc_jpeg_enc_mode:定义JPEG编码通道的抓拍模式。
- ot_venc_h265_pu:定义H.265编码通道PU的属性。
- ot_venc_h265_trans:定义H.265编码通道的变换量化属性。
- ot_venc_h265_entropy:定义H.265编码通道的熵编码属性。
- ot_venc_h265_dblk:定义H.265编码通道Deblocking属性。
- ot_venc_h265_sao:定义H.265编码通道Sao属性。
- ot_venc_frame_lost_mode:定义编码通道瞬时码率超过阈值时的丢帧模式。
- ot_venc_frame_lost_strategy:定义编码通道瞬时码率超过阈值时的丢帧策略。
- ot_venc_reencode_priority:超大帧重编优先级枚举。
- ot_venc_discard_param:超大帧丢帧调节参数。
- ot_venc_super_frame_strategy:超大帧处理策略参数。
- ot_venc_intra_refresh_mode:P帧刷Islice模式。
- ot_venc_intra_refresh:P帧帧内刷新控制参数。
- ot_venc_mod_param:编码相关模块参数。
- ot_venc_mod_type:编码相关模块参数类型。
- ot_venc_venc_mod_param:ssxx_venc.ko模块参数。
- ot_venc_h264_mod_param:ssxx_h264e.ko模块参数。
- ot_venc_h265_mod_param:ssxx_h265.ko模块参数。
- ot_venc_svac3_mod_param:ssxx_svac3e.ko模块参数。
- ot_venc_jpeg_mod_param:ssxx_jpeg.ko模块中参数。
- ot_venc_frame_type:编码相关模块参数类型。
- ot_venc_user_rc_info:用户码控信息结构体。
- ot_venc_user_qpmap:用户qpmap信息结构体。
- ot_venc_user_roimap:用户ROI信息结构体。
- ot_venc_user_frame_info:用户发送图像信息结构体。
- ot_omx_user_rc_info:用户码控信息结构体。
- ot_omx_user_frame_info:用户发送图像信息和外部码率控制信息结构体。
- ot_venc_mosaic_mode:马赛克模式。
- ot_venc_mosaic_pixel_yuv:马赛克填充颜色。
- ot_venc_mosaic_rect:马赛克rect模式参数结构体。
- ot_venc_mosaic_map:马赛克map模式参数结构体。
- ot_venc_mosaic_info:马赛克信息结构体。
- ot_venc_multi_frame_info:用户发送多帧图像及马赛克信息结构体。
- ot_venc_batch_crop_info:批量抠图信息结构体。
- ot_venc_frame_batch_crop_info:用户发送原始帧和批量抠图信息结构体。
- ot_venc_duplicate_frame_strategy:定义编码增帧类型。
- ot_venc_chn_config:编码通道复合编码配置。
- ot_venc_sse_rgn:SSERegion模块中参数。
- ot_venc_chn_param:定义venc通道参数结构体。
- ot_venc_fg_protect:前景保护参数结构体。
- ot_venc_scene_mode:编码模式场景。
- ot_venc_scene_chg_detect:编码场景检测控制参数。
- ot_venc_chn_pool:定义编码通道绑定的VB池结构体。
- ot_venc_cu_pred:CU模式选择倾向性配置结构体。
- ot_venc_skip_bias:SKIP倾向性选择配置结构体。
- ot_venc_debreath_effect:去除呼吸效应参数结构体。
- ot_venc_hierarchical_qp:QP分层参数结构体。
- ot_venc_rc_adv_param:定义RC模块的高级参数。
- ot_venc_svc_rect_type:定义智能检测目标框type类型信息。
- ot_venc_svc_map_param:定义智能编码QpMap,SkipMap值。
- ot_venc_svc_version:定义智能编码版本号。
- ot_venc_svc_param:定义智能编码的控制参数。
- ot_venc_svc_param_v1:定义智能编码调节参数。
- ot_venc_svc_param_v2:定义智能编码2.0调节参数。
- ot_venc_svc_param_ex:定义智能编码调节扩展参数。
- ot_venc_svc_roi_type:定义智能编码接收检测信息的类型。
- ot_venc_svc_mask_info:定义智能检测目标mask信息。
- ot_venc_svc_rect_info:定义检测目标框属性信息。
- ot_venc_md_sad_mode:定义sad计算结果所用方式控制信息。
- ot_venc_md_param:定义md检测结果信息。
- ot_venc_deblur_param:定义背景去模糊控制参数。
- ot_venc_param_set_id:定义参数集ID。
- ot_venc_h264_poc:定义H.264编码通道POC类型。
- ot_venc_jpeg_dering_level:定义JPEG编码通道的强边去Ring效应强度等级。
- ot_venc_jpeg_dering_attr:定义JPEG编码通道的强边去Ring效应参数。
- ot_venc_quality_balance:定义编码器以质量均衡为目标相关参数。
- ot_venc_watermark:定义数字水印相关参数。
- ot_venc_watermark_roi:定义数字水印保护信息。
- ot_venc_deblur_far_bg:定义运动物体远区域的拖尾和残留区域检测参数结构体。
- ot_venc_deblur_near_bg:定义运动物体近区域拖尾和残留区域检测参数结构体。
- ot_venc_adv_deblur:定义运动物体拖尾和残留区域检测信息结构体。
- ot_venc_svac3_attr:定义SVAC3.0编码属性结构体。
- ot_venc_svac3_abr:定义SVAC3.0编码通道ABR属性结构。
- ot_venc_svac3_cbr:定义SVAC3.0编码通道CBR属性结构。
- ot_venc_svac3_vbr:定义SVAC3.0编码通道VBR属性结构。
- ot_venc_svac3_avbr:定义SVAC3.0编码通道AVBR属性结构。
- ot_venc_svac3_qvbr:定义SVAC3.0编码通道QVBR属性结构。
- ot_venc_svac3_cvbr:定义SVAC3.0编码通道CVBR属性结构。
- ot_venc_svac3_fixqp:定义SVAC3.0编码通道Fixqp属性结构。
- ot_venc_svac3_qpmap:定义SVAC3.0编码通道QPMAP属性结构。
- ot_venc_svac3_rangeqp:定义SVAC3.0编码通道rangeqp属性结构。
- ot_venc_gop_smart_crr:定义SVAC3.0编码通道smart_crr属性结构。
- ot_venc_svac3_vbr_param:定义SVAC3.0协议编码通道VBR码率控制模式高级参数配置。
- ot_venc_svac3_avbr_param:定义SVAC3.0协议编码通道AVBR码率控制模式高级参数配置。
- ot_venc_svac3_qvbr_param:定义SVAC3.0协议编码通道QVBR码率控制模式高级参数配置。
- ot_venc_svac3_cvbr_param:定义SVAC3.0协议编码通道CVBR码率控制模式高级参数配置。
- ot_venc_svac3_cbr_param:定义SVAC3.0协议编码通道CBR新版码率控制模式高级参数配置。
- ot_venc_svac3_abr_param:定义SVAC3.0协议编码通道ABR新版码率控制模式高级参数配置。
- ot_venc_svac3_trans:定义SVAC3.0协议编码通道变换量化的结构体。
- ot_venc_svac3_dblk:定义SVAC3.0协议编码通道Deblocking的结构体。
- ot_venc_svac3_sao:定义SVAC3.0协议编码通道Sao的结构体。
- ot_venc_svac3_alf:定义SVAC3.0协议编码通道ALF的结构体。
- ot_venc_svac3_privacy:定义SVAC3.0协议编码通道隐私保护的结构体。
- ot_venc_svac3_emulation:定义SVAC3.0协议编码通道是否插入防竞争码的结构体。
- ot_venc_crr_recode_strategy:定义SVAC3.0协议GOP模式为smart_crr时,crr帧对应位置正常显示帧的编码策略。
- ot_venc_bitrate_strategy:定义H.264/H.265/SVAC3.0协议通道码率策略。
- ot_venc_payload_support:定义编码通道能力集协议控制位。
- ot_venc_rc_mode_support:定义编码通道能力集码控控制位。
- ot_venc_gop_support:定义编码通道能力集GOP类型控制位。
- ot_venc_crr_recode_strategy_support:定义编码通道能力集SMART_CRR重编策略控制位。
- ot_venc_bitrate_strategy_support:定义编码通道能力集低码率策略控制位。
- ot_venc_svc_version_support:定义编码通道能力集智能编码控制位。
- ot_venc_attr_capability:定义编码器属性能力集结构体。
- ot_venc_rc_capability:定义编码器码率控制能力集结构体。
- ot_venc_gop_capability:定义编码器码GOP属性能力集结构体。
- ot_venc_feature_capability:定义编码器码算法特性能力集。
- ot_venc_chn_capability:定义编码器码通道能力集。
- ot_venc_export_frame_type:定义驱动外部码控帧类型。
- ot_venc_export_frame_status:编码驱动中帧的工作状态。
- ot_venc_export_rc_attr:定义驱动外部码控属性。
- ot_venc_export_rc_frame_info:定义驱动外部码控帧状态信息。
- ot_venc_export_rc_enc_info:定义驱动外部码控决策结果。
- ot_venc_export_callback:定义驱动外部码控回调函数类型。
- ot_venc_register_export_callback:定义外部驱动的接口注册函数类型。
- ot_venc_export_symbol:定义驱动外部码控回调接口。
- ot_venc_fast_enc_param:定义快速编码参数。
- ot_venc_aiseg_map_info:定义语义分割图信息的结构体。
- ot_venc_fg_mode:定义编码前景模式枚举。
- ot_venc_filter_effect:定义编码预滤波参数结构体。
- ot_venc_prefilter_mode:定义预滤波模式枚举。
- ot_venc_prefilter_range:定义前处理滤波区域范围枚举。
- ot_venc_prefilter_strength:定义预滤波强度枚举。
- ot_venc_svac3_aiseg:定义语义分割参数结构体。
OT_VENC_MAX_CHN_NUM
【说明】
定义最大通道个数。
【定义】
Hi3519DV500:
Hi3516CV610/Hi3516CV608/Hi3511CV100:
【注意事项】
最大通道数:不同解决方案默认值不同。由于最大通道个数涉及到内存的分配,允许用户根据实际需要重新指定最大通道个数,具体方式为:对于linux,在加载ssxx_venc.ko时设置模块参数g_venc_max_chn_num来指定实际的最大通道个数,其作用优先级比OT_VENC_MAX_CHN_NUM高,g_venc_max_chn_num允许设置的范围为(0, OT_VENC_MAX_CHN_NUM)。
参数模块使用方式如下:
【相关数据类型及接口】
无。
OT_VENC_TEXTURE_THRESHOLD_SIZE
【说明】
定义RC宏块复杂度的阈值的个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_TILE_NUM
【说明】
定义最大支持Tile的个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_SSE_NUM
【说明】
定义SSE个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_VEDU_IP_NUM
【说明】
定义解决方案的编码逻辑的个数。
【定义】
Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_REG_NUM
【说明】
定义解决方案的编码逻辑的寄存器套数。
【定义】
Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_FRAME_NUM
【说明】
定义用户发送多帧图像接口中图像的最大帧数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_VENC_MAX_MOSAIC_RECT_NUM
【说明】
定义用户发送多帧图像接口中马赛克区域的最大个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_VENC_QP_HIST_NUM
【说明】
定义QP直方图数组大小。
【定义】
【注意事项】
无
【相关数据类型及接口】
无
OT_VENC_H264_QP_HIST_NUM
【说明】
定义H.264协议QP直方图数组大小。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_VENC_H265_QP_HIST_NUM
【说明】
定义H.265协议QP直方图数组大小。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_VENC_SVAC3_QP_HIST_NUM
【说明】
定义SVAC3.0协议QP直方图数组大小。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_VENC_MAX_SVC_RECT_NUM
【说明】
定义智能检测目标框个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MD_THRESHOLD_NUM
【说明】
定义MD检测阈值个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MD_LEVEL_NUM
【说明】
定义MD检测Level级别个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_PACK_INFO_NUM
【说明】
定义码流包包含其他数据的最大个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_MPF_NUM
【说明】
定义MPF图像的最大个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_PRORES_MAX_ID_CHAR_NUM
【说明】
定义PRORES协议厂商名最大字符个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_HIERARCHY_NUM
【说明】
定义分层编码的最大层数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_SCALING_LIST_SIZE_16
【说明】
定义量化表相关大小。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_SCALING_LIST_SIZE_64
【说明】
定义量化表相关大小。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_JPEG_QT_COEF_NUM
【说明】
定义jpeg量化表大小。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MJPEG_QT_COEF_NUM
【说明】
定义mjpeg量化表大小。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_ROI_NUM
【说明】
定义H.264/H.265/SVAC3.0 ROI最大个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_JPEG_ROI_NUM
【说明】
定义JPEG ROI最大个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_BITRATE
【说明】
定义最大码率,以Kbps为单位。
【定义】
Hi3511CV100:
其他芯片:
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MIN_BITRATE
【说明】
定义最小码率,以Kbps为单位。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_QUALITY_BALANCE_NUM
【说明】
定义质量均衡阈值的个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_WATERMARK_INFO_NUM
【说明】
定义数字水印信息的大小。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_WATERMARK_SEED_NUM
【说明】
定义数字水印种子的数量。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VENC_MAX_BATCH_CROP_RECT_NUM
【说明】
定义最大抠图数量。
【定义】
【注意事项】
无。
【相关数据类型及接口】
ss_mpi_venc_send_frame_batch_crop
OT_VENC_MAX_IN_DEPTH
【说明】
定义最大输入队列深度。
【定义】
Hi3516CV610/Hi3516CV608:
其他芯片:
【注意事项】
无。
【相关数据类型及接口】
OT_VENC_MAX_AISEG_CLASS_NUM
【说明】
定义最大语义分割类别数量。
【定义】
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_h264_nalu_type
【说明】
定义H.264码流NALU类型。
【定义】
typedef enum {
OT_VENC_H264_NALU_B_SLICE = 0,
OT_VENC_H264_NALU_P_SLICE = 1,
OT_VENC_H264_NALU_I_SLICE = 2,
OT_VENC_H264_NALU_IDR_SLICE = 5,
OT_VENC_H264_NALU_SEI = 6,
OT_VENC_H264_NALU_SPS = 7,
OT_VENC_H264_NALU_PPS = 8,
OT_VENC_H264_NALU_BUTT
} ot_venc_h264_nalu_type;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_ref_type
【说明】
定义H.264/H.265/SVAC3.0跳帧参考码流的帧类型以及参考属性。
【定义】
typedef enum {
OT_VENC_BASE_IDR_SLICE = 0,
OT_VENC_BASE_P_SLICE_REF_TO_IDR,
OT_VENC_BASE_P_SLICE_REF_BY_BASE,
OT_VENC_BASE_P_SLICE_REF_BY_ENHANCE,
OT_VENC_ENHANCE_P_SLICE_REF_BY_ENHANCE,
OT_VENC_ENHANCE_P_SLICE_NOT_FOR_REF,
OT_VENC_P_SLICE_BUTT
} ot_venc_ref_type;
【成员】
【注意事项】
单独开启复合编码时,复合编码增强层的参考类型为OT_VENC_BASE_P_SLICE_REF_BY_BASE。同时开启高级跳帧参考的enhance参考时候,复合编码增强层和高级跳帧增强层帧的参考类型都OT_VENC_ENHANCE_P_SLICE_REF_BY_ENHANCE,且高级跳帧增强层最后一帧原本的参考类型为OT_VENC_ENHANCE_P_SLICE_NOT_FOR_REF也会变为OT_VENC_ENHANCE_P_SLICE_REF_BY_ENHANCE。
【相关数据类型及接口】
无。
ot_venc_jpege_pack_type
【说明】
定义JPEG码流的PACK类型。
【定义】
typedef enum {
OT_VENC_JPEG_PACK_ECS = 5,
OT_VENC_JPEG_PACK_APP = 6,
OT_VENC_JPEG_PACK_VDO = 7,
OT_VENC_JPEG_PACK_PIC = 8,
OT_VENC_JPEG_PACK_DCF = 9,
OT_VENC_JPEG_PACK_DCF_PIC = 10,
OT_VENC_JPEG_PACK_BUTT
} ot_venc_jpege_pack_type;
【成员】
【注意事项】
只有JPEG属性的模式配置为多通道接收模式才会启用OT_VENC_JPEG_PACK_DCF和OT_VENC_JPEG_PACK_DCF_PIC。单通道接收模式的OT_VENC_JPEG_PACK_ECS包为多通道接收模式OT_VENC_JPEG_PACK_DCF和OT_VENC_JPEG_PACK_DCF_PIC数据包之和。
【相关数据类型及接口】
无。
ot_venc_h265_nalu_type
【说明】
定义H.265码流NALU类型。
【定义】
typedef enum {
OT_VENC_H265_NALU_B_SLICE = 0,
OT_VENC_H265_NALU_P_SLICE = 1,
OT_VENC_H265_NALU_I_SLICE = 2,
OT_VENC_H265_NALU_IDR_SLICE = 19,
OT_VENC_H265_NALU_VPS = 32,
OT_VENC_H265_NALU_SPS = 33,
OT_VENC_H265_NALU_PPS = 34,
OT_VENC_H265_NALU_SEI = 39,
OT_VENC_H265_NALU_ENHANCE = 64,
OT_VENC_H265_NALU_BUTT
} ot_venc_h265_nalu_type;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_svac3_nalu_type
【说明】
定义SVAC3.0码流NALU类型。
【定义】
typedef enum {
OT_VENC_SVAC3_NALU_FORBIDDEN = 0,
OT_VENC_SVAC3_NALU_NRAP_PATCH = 1,
OT_VENC_SVAC3_NALU_RAPI_PATCH = 2,
OT_VENC_SVAC3_NALU_PIC_HEAD = 3,
OT_VENC_SVAC3_NALU_IDR_PATCH = 4,
OT_VENC_SVAC3_NALU_EXTENSION = 5,
OT_VENC_SVAC3_NALU_SEI = 6,
OT_VENC_SVAC3_NALU_SPS = 7,
OT_VENC_SVAC3_NALU_PPS = 8,
OT_VENC_SVAC3_NALU_SEC_PS = 9,
OT_VENC_SVAC3_NALU_AUTH_DATA = 10,
OT_VENC_SVAC3_NALU_EOS = 11,
OT_VENC_SVAC3_NALU_CRR_NDP_PATCH = 12,
/* RESERVED 13 */
OT_VENC_SVAC3_NALU_RL_PATCH = 14,
OT_VENC_SVAC3_NALU_PIC_DL = 15,
OT_VENC_SVAC3_NALU_EOCVS = 16,
OT_VENC_SVAC3_NALU_CRR_DP_PATCH = 17,
OT_VENC_SVAC3_NALU_CRR_DL_PATCH = 18,
OT_VENC_SVAC3_NALU_CRR_PRIVACY = 19,
OT_VENC_SVAC3_NALU_BUTT
} ot_venc_svac3_nalu_type;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_prores_pack_type
【说明】
定义PRORES码流的PACK类型。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_data_type
【说明】
定义码流结果类型。
【定义】
typedef union {
ot_venc_h264_nalu_type h264_type;
ot_venc_jpege_pack_type jpeg_type;
ot_venc_h265_nalu_type h265_type;
ot_venc_svac3_nalu_type svac3_type;
ot_venc_prores_pack_type prores_type;
} ot_venc_data_type;
【成员】
【注意事项】
无。
【相关数据类型及接口】
- ot_venc_h264_nalu_type
- ot_venc_h265_nalu_type
- ot_venc_jpege_pack_type
- ot_venc_svac3_nalu_type
- ot_venc_prores_pack_type
ot_venc_pack_info
【说明】
定义当前码流包数据中包含的其他类型码流包数据的结构体。
【定义】
typedef struct {
ot_venc_data_type pack_type;
td_u32 pack_offset;
td_u32 pack_len;
} ot_venc_pack_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_pack
【说明】
定义帧码流包结构体。
【定义】
typedef struct {
td_phys_addr_t phys_addr;
td_u8 ATTRIBUTE *addr;
td_u32 ATTRIBUTE len;
td_u64 pts;
td_bool is_frame_end;
td_bool stuff03_disable;
ot_venc_data_type data_type;
td_u32 layer_id;
td_bool is_lu_begin;
td_u32 offset;
td_u32 data_num;
ot_venc_pack_info pack_info[OT_VENC_MAX_PACK_INFO_NUM];
} ot_venc_pack;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_stream_info
【说明】
定义H.264协议码流特征信息。
【定义】
typedef struct {
td_u32 pic_bytes;
td_u32 inter16x16_mb_num;
td_u32 inter8x8_mb_num;
td_u32 intra16_mb_num;
td_u32 intra8_mb_num;
td_u32 intra4_mb_num;
ot_venc_ref_type ref_type;
td_u32 update_attr_cnt;
td_u32 start_qp;
td_u32 mean_qp;
td_bool is_p_skip;
} ot_venc_h264_stream_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_jpeg_stream_info
【说明】
定义JPEG/MJPEG协议码流特征信息。
【定义】
typedef struct {
td_u32 pic_bytes;
td_u32 update_attr_cnt;
td_u32 qfactor;
} ot_venc_jpeg_stream_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_h265_stream_info
【说明】
定义H.265协议码流特征信息。
【定义】
typedef struct {
td_u32 pic_bytes;
td_u32 inter64x64_cu_num;
td_u32 inter32x32_cu_num;
td_u32 inter16x16_cu_num;
td_u32 inter8x8_cu_num;
td_u32 intra32x32_cu_num;
td_u32 intra16x16_cu_num;
td_u32 intra8x8_cu_num;
td_u32 intra4x4_cu_num;
ot_venc_ref_type ref_type;
td_u32 update_attr_cnt;
td_u32 start_qp;
td_u32 mean_qp;
td_bool is_p_skip;
} ot_venc_h265_stream_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_svac3_stream_info
【说明】
定义SVAC3.0协议码流特征信息。
【定义】
typedef struct {
td_u32 pic_bytes;
td_u32 inter64x64_cu_num;
td_u32 inter32x32_cu_num;
td_u32 inter16x16_cu_num;
td_u32 inter8x8_cu_num;
td_u32 intra32x32_cu_num;
td_u32 intra16x16_cu_num;
td_u32 intra8x8_cu_num;
td_u32 intra4x4_cu_num;
ot_venc_ref_type ref_type;
td_u32 update_attr_cnt;
td_u32 start_qp;
td_u32 mean_qp;
td_bool is_p_skip;
td_bool is_library;
td_u32 library_picture_index;
td_bool is_ras_begin;
} ot_venc_svac3_stream_info;
【成员】
【注意事项】
对于CRR切片图像,上述表格中pic_bytes表示当前AU(CRR切片)的标志信息,其他字段仍表示非显示图像整帧的信息。对于其他图像,上述信息表示一帧的信息。
【相关数据类型及接口】
ot_venc_prores_stream_info
【说明】
定义PRORES协议码流特征信息。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_h264_adv_stream_info
【说明】
定义H.264协议码流高级特征信息。
【定义】
typedef struct {
td_u32 residual_bits;
td_u32 head_bits;
td_u32 madi_val;
td_u32 madp_val;
td_double psnr_val;
td_u32 sse_lcu_cnt;
td_u64 sse_sum;
ot_venc_sse_info sse_info[OT_VENC_MAX_SSE_NUM];
td_u32 qp_hist[OT_VENC_H264_QP_HIST_NUM];
td_u32 move_scene16x16_num;
td_u32 move_scene_bits;
td_u32 deblur_near_bg_num;
td_u32 deblur_far_bg_num;
} ot_venc_h264_adv_stream_info;
【成员】
sse_info[OT_VENC_MAX_SSE_NUM] |
|
qp_hist[OT_VENC_H264_QP_HIST_NUM] |
|
【注意事项】
- move_scene16x16_num和move_scene_bits统计使能需要调用接口 ss_mpi_venc_set_fg_protect开启前景宏块级码率控制。
- sse_lcu_cnt只统计完整宏块个数,当编码分辨率宽高不是16对齐时,最底部或最右侧不完整的宏块不进行统计。
- qp_hist需要在模块参数接口ss_mpi_venc_set_mod_param设置qp_hist_en为1,才能生效使用。
- Hi3519DV500支持PSNR、帧SSE和SSE信息统计。
- Hi3516CV610/Hi3516CV608/Hi3511CV100不支持H.264 SSE信息统计。
【相关数据类型及接口】
ot_venc_sse_info
【说明】
定义H.264/H.265/SVAC3.0协议SSE信息。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
- ot_venc_h264_adv_stream_info
- ot_venc_h265_adv_stream_info
- ot_venc_svac3_adv_stream_info
- ss_mpi_venc_get_stream
ot_venc_h265_adv_stream_info
【说明】
定义H.265协议码流高级特征信息。
【定义】
typedef struct {
td_u32 residual_bits;
td_u32 head_bits;
td_u32 madi_val;
td_u32 madp_val;
td_double psnr_val;
td_u32 sse_lcu_cnt;
td_u64 sse_sum;
ot_venc_sse_info sse_info[OT_VENC_MAX_SSE_NUM];
td_u32 qp_hist[OT_VENC_H265_QP_HIST_NUM];
td_u32 move_scene32x32_num;
td_u32 move_scene_bits;
td_u32 deblur_near_bg_num;
td_u32 deblur_far_bg_num;
} ot_venc_h265_adv_stream_info;
【成员】
sse_info[OT_VENC_MAX_SSE_NUM] |
|
qp_hist[OT_VENC_H265_QP_HIST_NUM] |
|
【注意事项】
- move_scene32x32_num和move_scene_bits统计使能需要调用接口ss_mpi_venc_set_fg_protect开启前景宏块级码率控制。
- qp_hist需要在模块参数接口ss_mpi_venc_set_mod_param设置qp_hist_en为1,才能生效使用。
- sse_lcu_cnt只统计完整LCU个数,当编码分辨率宽高不是LCU对齐时,最底部或最右侧不完整的LCU块不进行统计。
- sse的统计值有误差。计算sse_sum, sse_val时,未统计每一个LCU*LCU块底部4行,右边5列的像素;
-
psnr的计算过程如下:
lcu_hor = (H265E_LCU_SIZE - 5);
lcu_ver = (H265E_LCU_SIZE - 4);
dl_data = (td_double)(((td_u64)255 * 255 * lcu_hor * lcu_ver * mse_lcu_cnt + 64) >> 7) / sse_sum;
psnr = 10.0 * log10(dl_data);
-
上述公式中的sse_sum, sse_val值,是对其统计值S进行(S + 64)/ 128的运算后的值。
- sse的统计值有误差。
- 当sse_sum为0时,返回psnr值为99.00。
【相关数据类型及接口】
ot_venc_svac3_adv_stream_info
【说明】
定义SVAC3.0协议码流高级特征信息。
【定义】
typedef struct {
td_u32 residual_bits;
td_u32 head_bits;
td_u32 madi_val;
td_u32 madp_val;
td_double psnr_val;
td_u32 sse_lcu_cnt;
td_u64 sse_sum;
ot_venc_sse_info sse_info[OT_VENC_MAX_SSE_NUM];
td_u32 qp_hist[OT_VENC_SVAC3_QP_HIST_NUM];
td_u32 move_scene32x32_num;
td_u32 move_scene_bits;
td_u32 deblur_near_bg_num;
td_u32 deblur_far_bg_num;
} ot_venc_svac3_adv_stream_info;
【成员】
sse_info[OT_VENC_MAX_SSE_NUM] |
|
qp_hist[OT_VENC_SVAC3_QP_HIST_NUM] |
|
【注意事项】
- move_scene32x32_num和move_scene_bits统计使能需要调用接口ss_mpi_venc_set_fg_protect开启前景宏块级码率控制。
- qp_hist需要在模块参数接口ss_mpi_venc_set_mod_param设置qp_hist_en为1,才能生效使用。
- sse_lcu_cnt只统计完整LCU个数,当编码分辨率宽高不是LCU对齐时,最底部或最右侧不完整的LCU块不进行统计。
- sse的统计值有误差。计算sse_sum, sse_val时,未统计每一个LCU*LCU块底部4行,右边5列的像素;
-
psnr的计算过程如下:
lcu_hor = (SVAC3E_LCU_SIZE - 5);
lcu_ver = (SVAC3E_LCU_SIZE - 4);
dl_data = (td_double)(((td_u64)255 * 255 * lcu_hor * lcu_ver * mse_lcu_cnt + 64) >> 7) / sse_sum;
psnr = 10.0 * log10(dl_data);
-
上述公式中的sse_sum, sse_val值,是对其统计值S进行(S + 64)/ 128的运算后的值。
- sse的统计值有误差。
- 当sse_sum为0时,返回psnr值为99.00。
【相关数据类型及接口】
ot_venc_stream
【说明】
定义帧码流类型结构体。
【定义】
typedef struct {
ot_venc_pack ATTRIBUTE *pack;
td_u32 ATTRIBUTE pack_cnt;
td_u32 seq;
union {
ot_venc_h264_stream_info h264_info;
ot_venc_jpeg_stream_info jpeg_info;
ot_venc_h265_stream_info h265_info;
ot_venc_svac3_stream_info svac3_info;
ot_venc_prores_stream_info prores_info;
};
union {
ot_venc_h264_adv_stream_info h264_adv_info;
ot_venc_h265_adv_stream_info h265_adv_info;
ot_venc_svac3_adv_stream_info svac3_adv_info;
};
} ot_venc_stream;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_stream_buf_info
【说明】
定义码流buffer信息的结构体。
【定义】
typedef struct {
td_phys_addr_t phys_addr[OT_VENC_MAX_TILE_NUM];
td_void ATTRIBUTE *user_addr[OT_VENC_MAX_TILE_NUM];
td_u64 ATTRIBUTE buf_size[OT_VENC_MAX_TILE_NUM];
} ot_venc_stream_buf_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ss_mpi_venc_get_stream_buf_info
ot_venc_h265_attr
【说明】
定义H.265编码属性结构体。
【定义】
【成员】
【注意事项】
frame_buf_ratio用来设置节省帧buffer比例,比如设置为80,则表示帧buffer为原始大小的80%;设置frame_buf_ratio不为100时,可能会对以下功能有影响, 且该值越小理论上出现的概率越高:
- P帧刷I slice可能会出现整帧刷成I块且提前结束刷I slice,涉及接口:ss_mpi_venc_set_intra_refresh;
- 去呼吸效应在某些帧上可能会失效,涉及接口:ss_mpi_venc_set_debreath_effect;
- QPMAP表不能强制指定skip块,SkipWeight表不能强制指定skip块,强制指定skip块可能会导致系统异常,驱动内部不做检查,用户自行保证;
- ROI背景低帧率编码可能会出现部分帧的非ROI区域不能编码为p_skip块,涉及接口:ss_mpi_venc_set_roi_bg_frame_rate;
- 某些场景指定为p_skip帧的情况下可能会失效,如编码瞬时码率超过阈值时丢帧策略,涉及接口:ss_mpi_venc_set_frame_lost_strategy;
- skip倾向性可能会失效,涉及接口:ss_mpi_venc_set_skip_bias。
- 视频低部被强制编码I块,导致画面闪烁。
【相关数据类型及接口】
无。
ot_venc_h264_attr
【说明】
定义H.264编码属性结构体。
【定义】
【成员】
【注意事项】
frame_buf_ratio用来设置节省帧buffer比例,比如设置为80,则表示帧buffer为原始大小的80%;设置frame_buf_ratio不为100时,可能会对以下功能有影响, 且该值越小理论上出现的概率越高:
- P帧刷I slice可能会出现整帧刷成I块且提前结束刷I slice,涉及接口:ss_mpi_venc_set_intra_refresh;
- 去呼吸效应在某些帧上可能会失效,涉及接口:ss_mpi_venc_set_debreath_effect;
- QPMAP表不能强制指定skip块,SkipWeight表不能强制指定skip块,强制指定skip块可能会导致系统异常,驱动内部不做检查,用户自行保证;
- ROI背景低帧率编码可能会出现部分帧的非ROI区域不能编码为p_skip块,涉及接口:ss_mpi_venc_set_roi_bg_frame_rate;
- 某些场景指定为p_skip帧的情况下可能会失效,如编码瞬时码率超过阈值时丢帧策略,涉及接口:ss_mpi_venc_set_frame_lost_strategy;
- skip倾向性可能会失效,涉及接口:ss_mpi_venc_set_skip_bias。
- 视频低部被强制编码I块,导致画面闪烁。
【相关数据类型及接口】
无。
ot_venc_mpf_cfg
【说明】
定义JPEG MPF结构体。
【定义】
typedef struct {
td_u8 large_thumbnail_num;
ot_size large_thumbnail_size[OT_VENC_MAX_MPF_NUM];
} ot_venc_mpf_cfg;
【成员】
large_thumbnail_size[OT_VENC_MAX_MPF_NUM] |
【注意事项】
- 使能Mpf后获取码流仅支持多包模式,建议调用接口ss_mpi_venc_set_mod_param设置 one_stream_buffer为多包模式。
- Mpf的宽的范围为(160,PicWidth),高的范围为(120,PicHeight),PicWidth和PicHeight为通道属性宽高。Mpf的宽高必须按4对齐。
- 当Mpf个数配置为2时,第2个Mpf的宽高属性必须小于第1个Mpf的宽高属性。
- mpf图像大小受vgs缩放能力限制,通道宽高和第1个Mpf的宽高比例要小于vgs缩放能力,第1个Mpf的宽高和第2个Mpf的宽高比例要小于vgs缩放能力。
【相关数据类型及接口】
无。
ot_venc_pic_recv_mode
【说明】
定义RECEIVE MODE结构体。
【定义】
typedef enum {
OT_VENC_PIC_RECV_SINGLE = 0,
OT_VENC_PIC_RECV_MULTI,
OT_VENC_PIC_RECV_BUTT
} ot_venc_pic_recv_mode;
【成员】
【注意事项】
Hi3516CV610支持在卷绕模式下使用MULTI模式。在卷绕模式下,主图和缩略图将采用更严格的匹配策略。需要注意以下情况:
-
JPEG的主图和缩略图源来自不同VPSS grp,可能导致VENC内部无法匹配,从而导致编码失败。
-
前端VPSS通道进行减帧处理,可能导致VENC内部无法匹配,导致编码失败。
-
VENC进行帧率控制,可能导致VENC内部无法匹配,从而导致编码失败。
-
卷绕时,若连续抓拍多张(ot_venc_start_param 中参数recv_pic_num大于1),小图送帧不及时可能导致会抓拍失败。
建议抓拍时设置recv_pic_num=1,抓拍成功后启动下一次抓拍。
【相关数据类型及接口】
ot_venc_recv_src
【说明】
定义JPEG收帧方式在OT_VENC_PIC_RECV_MULTI情况下的绑定源类型。
【定义】
typedef enum {
OT_VENC_RECV_SRC0 = 0,
OT_VENC_RECV_SRC1,
OT_VENC_RECV_SRC2,
OT_VENC_RECV_SRC3,
OT_VENC_RECV_BUTT
} ot_venc_recv_src;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_jpeg_attr
【说明】
定义JPEG抓拍属性结构体。
【定义】
typedef struct
{
td_bool dcf_en;
ot_venc_mpf_cfg mpf_cfg;
ot_venc_pic_recv_mode recv_mode;
} ot_venc_jpeg_attr;
【成员】
【注意事项】
- 缩略图默认大小为160x120,不支持设置。
- dcf不支持叠加osd。
- JPEGE编码通道使用overlay方式实现osd时,osd可叠加到原图上,也可叠加到mpf图上。
- JPEGE编码通道设置recv_mode为OT_VENC_PIC_RECV_MULTI模式时允许从多个源接收图像,须配合DCF/MPF使用。JPEGE编码通道根据接收到图像的分辨率判断该图像编码为SRC或者DCF或者MPF0或者MPF1,因此要求从多个源接收到图像的分辨率分别和通道宽高、DCF、MPF0及MPF1相等,若不满足以上条件,DCF或SRC未接收图像时,会导致因为缺少小图无法启动正常编码。
- Hi3516CV610/Hi3516CV608 不支持MPF。
【相关数据类型及接口】
无。
ot_venc_prores_frame_rate
【说明】
定义PRORES帧率枚举。
【定义】
typedef enum {
OT_VENC_PRORES_FRAME_RATE_UNKNOWN = 0,
OT_VENC_PRORES_FRAME_RATE_23_976,
OT_VENC_PRORES_FRAME_RATE_24,
OT_VENC_PRORES_FRAME_RATE_25,
OT_VENC_PRORES_FRAME_RATE_29_97,
OT_VENC_PRORES_FRAME_RATE_30,
OT_VENC_PRORES_FRAME_RATE_50,
OT_VENC_PRORES_FRAME_RATE_59_94,
OT_VENC_PRORES_FRAME_RATE_60,
OT_VENC_PRORES_FRAME_RATE_100,
OT_VENC_PRORES_FRAME_RATE_119_88,
OT_VENC_PRORES_FRAME_RATE_120,
OT_VENC_PRORES_FRAME_RATE_BUTT
} ot_venc_prores_frame_rate;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_prores_aspect_ratio
【说明】
定义PRORES幅型比枚举。
【定义】
typedef enum {
OT_VENC_PRORES_ASPECT_RATIO_UNKNOWN = 0,
OT_VENC_PRORES_ASPECT_RATIO_SQUARE,
OT_VENC_PRORES_ASPECT_RATIO_4_3,
OT_VENC_PRORES_ASPECT_RATIO_16_9,
OT_VENC_PRORES_ASPECT_RATIO_BUTT
} ot_venc_prores_aspect_ratio;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_prores_attr
【说明】
定义PRORES属性结构体。
【定义】
typedef struct {
td_char identifier[OT_VENC_PRORES_MAX_ID_CHAR_NUM];
ot_venc_prores_frame_rate frame_rate_code;
ot_venc_prores_aspect_ratio aspect_ratio;
} ot_venc_prores_attr;
【成员】
identifier[OT_VENC_PRORES_MAX_ID_CHAR_NUM] |
|
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_attr
【说明】
定义编码器属性结构体。
【定义】
typedef struct {
ot_payload_type type;
td_u32 max_pic_width;
td_u32 max_pic_height;
td_u32 buf_size;
td_u32 profile;
td_bool is_by_frame;
td_u32 pic_width;
td_u32 pic_height;
union {
ot_venc_h264_attr h264_attr;
ot_venc_h265_attr h265_attr;
ot_venc_jpeg_attr jpeg_attr;
ot_venc_prores_attr prores_attr;
ot_venc_svac3_attr svac3_attr;
};
} ot_venc_attr;
【成员】
|
推荐值:一幅最大编码图像大小。推荐值为MaxPicWidth * MaxPicHeight * 1.5 byte。 调用接口ss_mpi_venc_set_mod_param设置模块参数min_buf_mode可以选择取值范围限制方式。 2、min_buf_mode = 1,用户保证buffer大小合理性: |
|
|
|
【注意事项】
SVAC3.0协议GOP模式设置为smart_crr/adv_smart_crr且分片时,按帧获取码流时表示获取的一个AU(访问单元,access unit),一个或者多个AU组成一个完整的知识图像帧。普通帧一个帧对应一个AU。
【相关数据类型及接口】
ot_venc_gop_mode
【说明】
定义H.264/H.265/SVAC3.0 GOP类型。
【定义】
typedef enum {
OT_VENC_GOP_MODE_NORMAL_P = 0,
OT_VENC_GOP_MODE_DUAL_P = 1,
OT_VENC_GOP_MODE_SMART_P = 2,
OT_VENC_GOP_MODE_ADV_SMART_P = 3,
OT_VENC_GOP_MODE_BIPRED_B = 4,
OT_VENC_GOP_MODE_LOW_DELAY_B = 5,
OT_VENC_GOP_MODE_SMART_CRR = 6,
OT_VENC_GOP_MODE_SINGLE_SP = 7,
OT_VENC_GOP_MODE_I = 8,
OT_VENC_GOP_MODE_ADV_SMART_CRR = 9,
OT_VENC_GOP_MODE_BUTT,
} ot_venc_gop_mode;
【成员】
【注意事项】
- SVAC3.0 CRR 不适用场景:摄像头转动场景、光线变换场景、背景有闪动场景。
- SVAC3.0 CRR 图像副作用:在编码压力较大,RL帧参考Lib帧时,由于码率较低RL帧在背景遮挡处无法得到较好的参考图像质量,因此会在该区域长时间滞留劣化的图像质量,无法更好的刷新回来,本质上跟CRR的参考结构策略有关,Hi3516CV610/Hi3516CV608版本暂无优化方法。
- OT_VENC_GOP_MODE_SINGLE_SP 仅H.264&H.265协议支持。
【相关数据类型及接口】
无。
ot_venc_gop_normal_p
【说明】
定义编码单参考帧P帧GOP属性结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_gop_dual_p
【说明】
定义编码双参考帧P帧GOP属性结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_gop_smart_p
【说明】
定义编码智能P帧GOP属性结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_gop_adv_smart_p
【说明】
定义编码高级智能P帧GOP属性结构体。
【定义】
typedef struct {
td_u32 bg_interval;
td_s32 bg_qp_delta;
td_s32 vi_qp_delta;
} ot_venc_gop_adv_smart_p;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_gop_bipred_b
【说明】
定义编码B帧GOP属性结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_gop_single_sp
【说明】
定义编码单参考帧SP帧GOP属性结构体。
【定义】
typedef struct {
td_u32 sp_interval;
td_s32 sp_qp_delta;
td_s32 ip_qp_delta;
} ot_venc_gop_single_sp;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_venc_gop_lowdelay_b
【说明】
定义编码低延迟B帧GOP属性结构体。
【定义】
【成员】
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
无。
ot_venc_gop_adv_smart_crr
【说明】
定义SVAC3.0编码通道adv_smart_crr属性结构。
【定义】
typedef struct {
td_u32 bg_interval;
td_s32 bg_qp_delta;
td_s32 vi_qp_delta;
td_s32 crr_split_num;
td_s32 crr_delay_num;
ot_venc_bgm_mode bgm_mode;
} ot_venc_gop_adv_smart_crr;
【成员】
【注意事项】
- crr_split_num取值必须满足crr_split_num ≤ [pic_height / lcu_height],lcu_height在Hi3516CV610上等于32,在Hi3511CV100上等于64。
- 配置crr帧时,crr帧以lcu为单位均匀分片,仅在[pic_height / lcu_height]能被crr_split_num整除时,实际分片等于用户设置的crr_split_num,否则实际分片数量小于crr_split_num
-
非显示的crr帧以及RL帧不支持去呼吸效应接口配置,显示crr帧不受影响。
-
当GOP大小与bg_interval相同时,(crr_split_num-1)*(crr_delay_num+1)+ 3小于GOP大小。
- 仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_bgm_mode
【说明】
定义背景建模的模式。
【定义】
typedef enum {
OT_VENC_BGM_BASELINE = 0,
OT_VENC_BGM_ADVANCED,
OT_VENC_BGM_BUTT,
} ot_venc_bgm_mode;
【成员】
【注意事项】
- 默认为背景建模基础档次。
- 背景建模基础档次较普通SMART_CRR模式会新增一帧重建图像内存。
- 当设置背景建模为高级档次时,较基础档次会额外新增一帧重建图像内存,暂不支持设置此模式。
- 仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_gop_attr
【说明】
定义编码器GOP属性结构体。
【定义】
typedef struct {
ot_venc_gop_mode gop_mode;
union {
ot_venc_gop_normal_p normal_p;
ot_venc_gop_dual_p dual_p;
ot_venc_gop_smart_p smart_p;
ot_venc_gop_adv_smart_p adv_smart_p;
ot_venc_gop_bipred_b bipred_b;
ot_venc_gop_smart_crr smart_crr;
ot_venc_gop_single_sp single_sp;
ot_venc_gop_lowdelay_b lowdelay_b;
ot_venc_gop_adv_smart_crr adv_smart_crr;
};
} ot_venc_gop_attr;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_chn_attr
【说明】
定义编码通道属性结构体。
【定义】
typedef struct {
ot_venc_attr venc_attr;
ot_venc_rc_attr rc_attr;
ot_venc_gop_attr gop_attr;
} ot_venc_chn_attr;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_start_param
【说明】
定义编码通道连续接收并编码的帧数结构体。
【定义】
【成员】
【注意事项】
在帧率控制时,该帧数会不准,建议不在帧率控制时使用。
【相关数据类型及接口】
ot_venc_stream_info
【说明】
定义编码器码流特征信息,供外部查询使用。
【定义】
td_u32 pic_bytes;
td_u32 pic_cnt;
td_u32 start_qp;
td_u32 mean_qp;
td_bool is_p_skip;
td_u32 residual_bits;
td_u32 head_bits;
td_u32 madi_val;
td_u32 madp_val;
td_u64 sse_sum;
td_u32 sse_lcu_cnt;
td_double psnr_val;
} ot_venc_stream_info;
【成员】
【注意事项】
- 此结构体定义是为了ss_mpi_venc_query_status接口中使用。编码特征信息的内容与ss_mpi_venc_get_stream获取到的编码特征信息一致,请参考结构体ot_venc_stream。与ss_mpi_venc_get_stream获取信息不同的是,ss_mpi_venc_query_status不必读取实际编码出来的码流,可以在不同的进程中使用。
- 此结构体数据仅对H.264、H.265、SVAC3.0通道有效,其他协议获取到的信息为全部为0。
- 此结构体数据与最近一次调用ss_mpi_venc_get_stream获取到的编码信息一致,在用户还未获取到任一帧码流前,此结构体中数据为全部为0。
- Hi3516CV610/Hi3516CV608/Hi3511CV100不支持H.264 SSE信息统计。
【相关数据类型及接口】
ot_venc_chn_status
【说明】
定义编码通道的状态结构体。
【定义】
typedef struct {
td_u32 left_pics;
td_u32 left_stream_bytes;
td_u32 left_stream_frames;
td_u32 cur_packs;
td_u32 left_recv_pics;
td_u32 left_enc_pics;
td_bool is_jpeg_snap_end;
ot_venc_stream_info stream_info;
td_u32 discard_pics;
td_u32 stream_buf_full_cnt;
td_s64 cvbr_bytes_saving;
td_u64 last_pts;
td_u64 cur_pts;
} ot_venc_chn_status;
【成员】
剩余待接收的帧数,在用户调用接口ss_mpi_venc_start_chn设置接收帧数后有效。 |
|
剩余待编码的帧数,在用户调用接口ss_mpi_venc_start_chn设置接收帧数后有效。 |
|
【注意事项】
如果venc接收的抓拍帧有丢帧出现,is_jpeg_snap_end会存在不能正确标记抓拍结束的情况。
启动后可能由于各种原因可能丢帧(超大帧丢帧、复用时buf满,复用时触发重编,卷绕丢帧等),最终输出的码流中可能不存在已经查询到的cur_pts对应的那一帧码流。
【相关数据类型及接口】
ot_venc_slice_split
【说明】
定义H.264,H.265,SVAC3.0协议编码通道SLICE或PATCH分割结构体。
【定义】
typedef struct {
td_bool enable;
td_u32 split_mode;
td_u32 split_size;
td_bool slice_output_en;
} ot_venc_slice_split;
【成员】
【注意事项】
- 对于H.264/H.265协议表示slice划分,对于SVAC3.0协议表示patch划分。
- 当split_mode=1时,对H.265协议需要关注当前解决方案的LCU大小,Hi3519DV500/HI3516CV610/Hi3516CV608解决方案的LCU大小为32,Hi3511CV100 LCU大小为64。
- SVAC3.0协议只支持按行划分patch。
【相关数据类型及接口】
ot_venc_search_window
【说明】
定义H.264/H.265/SVAC3.0协议编码通道搜索窗范围。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_intra_pred
【说明】
定义H.264协议编码通道帧内预测结构体。
【定义】
【成员】
【注意事项】
以上参数具体含义请参见H.264协议。
【相关数据类型及接口】
ot_venc_h264_trans
【说明】
定义H.264协议编码通道变换、量化结构体。
【定义】
typedef struct {
td_u32 intra_trans_mode;
td_u32 inter_trans_mode;
td_bool scaling_list_valid;
td_u8 inter_scaling_list8x8[OT_VENC_SCALING_LIST_SIZE_64];
td_u8 intra_scaling_list8x8[OT_VENC_SCALING_LIST_SIZE_64];
td_s32 chroma_qp_index_offset;
} ot_venc_h264_trans;
【成员】
【注意事项】
- 以上参数具体含义请参见H.264协议。
- 不支持量化表,因此不支持设置scaling_list_valid、inter_scaling_list8x8、intra_scaling_list8x8。
- chroma_qp_index_offset:在FIXQP模式下,驱动使用默认值0。
【相关数据类型及接口】
ot_venc_h264_entropy
【说明】
定义H.264协议编码通道熵编码结构体。
【定义】
typedef struct {
td_u32 entropy_coding_mode_i;
td_u32 entropy_coding_mode_p;
td_u32 entropy_coding_mode_b;
td_u32 cabac_init_idc;
} ot_venc_h264_entropy;
【成员】
|
|
|
|
|
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_dblk
【说明】
定义H.264协议编码通道Dblk结构体。
【定义】
typedef struct {
td_u32 disable_deblocking_filter_idc;
td_s32 slice_alpha_c0_offset_div2;
td_s32 slice_beta_offset_div2;
} ot_venc_h264_dblk;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_vui
【说明】
定义H.264协议编码通道Vui结构体。
【定义】
typedef struct {
ot_venc_vui_aspect_ratio vui_aspect_ratio;
ot_venc_h264_vui_time_info vui_time_info;
ot_venc_vui_video_signal vui_video_signal;
ot_venc_vui_bitstream_restric vui_bitstream_restric;
} ot_venc_h264_vui;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_vui
【说明】
定义H.265协议编码通道Vui结构体。
【定义】
typedef struct {
ot_venc_vui_aspect_ratio vui_aspect_ratio;
ot_venc_h265_vui_time_info vui_time_info;
ot_venc_vui_video_signal vui_video_signal;
ot_venc_vui_bitstream_restric vui_bitstream_restric;
} ot_venc_h265_vui;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_vui_aspect_ratio
【说明】
定义H.264/H.265协议编码通道Vui中AspectRatio信息的结构体。
【定义】
typedef struct
{
td_u8 aspect_ratio_info_present_flag;
td_u8 aspect_ratio_idc;
td_u8 overscan_info_present_flag;
td_u8 overscan_appropriate_flag;
td_u16 sar_width;
td_u16 sar_height;
} ot_venc_vui_aspect_ratio;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_vui_time_info
【说明】
定义H.264协议编码通道Vui中Time_Info信息的结构体。
【定义】
typedef struct {
td_u8 timing_info_present_flag;
td_u8 fixed_frame_rate_flag;
td_u32 num_units_in_tick;
td_u32 time_scale;
} ot_venc_h264_vui_time_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_vui_time_info
【说明】
定义H.265协议编码通道Vui中Time_Info信息的结构体。
【定义】
typedef struct {
td_u32 timing_info_present_flag;
td_u32 num_units_in_tick;
td_u32 time_scale;
td_u32 num_ticks_poc_diff_one_minus1;
} ot_venc_h265_vui_time_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_vui_video_signal
【说明】
定义H.264/H.265协议编码通道Vui中信息的Video_Signal结构体。
【定义】
typedef struct {
td_u8 video_signal_type_present_flag;
td_u8 video_format;
td_u8 video_full_range_flag;
td_u8 colour_description_present_flag;
td_u8 colour_primaries;
td_u8 transfer_characteristics;
td_u8 matrix_coefficients;
} ot_venc_vui_video_signal;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_vui_bitstream_restric
【说明】
定义H.264/H.265协议编码通道Vui中信息的Bitstream_Restriction结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_jpeg_param
【说明】
定义JPEG协议编码通道高级参数结构体。
【定义】
typedef struct {
td_u32 qfactor;
td_u8 y_qt[OT_VENC_JPEG_QT_COEF_NUM];
td_u8 cb_qt[OT_VENC_JPEG_QT_COEF_NUM];
td_u8 cr_qt[OT_VENC_JPEG_QT_COEF_NUM];
td_u32 mcu_per_ecs;
td_bool ecs_output_en;
} ot_venc_jpeg_param;
【成员】
每个ECS中包含多少个MCU,系统默认为0,表示不划分Ecs。 mcu_per_ecs:[0, min{(pic_width+15)>>4 x (pic_height+15)>>4 x 2, 65535}] |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_mjpeg_param
【说明】
定义MJPEG协议编码通道高级参数结构体。
【定义】
typedef struct {
td_u8 y_qt[OT_VENC_MJPEG_QT_COEF_NUM];
td_u8 cb_qt[OT_VENC_MJPEG_QT_COEF_NUM];
td_u8 cr_qt[OT_VENC_MJPEG_QT_COEF_NUM];
td_u32 mcu_per_ecs;
td_bool ecs_output_en;
} ot_venc_mjpeg_param;
【成员】
每个ECS中包含多少个MCU,系统默认为0,表示不划分Ecs。 mcu_per_ecs:[0,min{(pic_width+15)>>4 x (pic_height+15)>>4 x 2, 65535}] |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_roi_attr
【说明】
定义编码感兴趣区域信息。
【定义】
typedef struct {
td_u32 idx;
td_bool enable;
td_bool is_abs_qp;
td_s32 qp;
ot_rect rect;
} ot_venc_roi_attr;
【成员】
|
|
|
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_roi_for_frame
【说明】
定义感兴趣区域应用类型。
【定义】
typedef enum {
OT_VENC_ROI_FOR_I = 0,
OT_VENC_ROI_FOR_P_B,
OT_VENC_ROI_FOR_VI,
OT_VENC_ROI_FOR_BUTT,
} ot_venc_roi_for_frame;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_roi_attr_ex
【说明】
定义编码通道感兴趣区域编码高级属性。
【定义】
typedef struct {
td_u32 idx;
td_bool enable[OT_VENC_ROI_FOR_BUTT];
td_bool is_abs_qp[OT_VENC_ROI_FOR_BUTT];
td_s32 qp[OT_VENC_ROI_FOR_BUTT];
ot_rect rect[OT_VENC_ROI_FOR_BUTT];
} ot_venc_roi_attr_ex;
【成员】
|
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_jpeg_roi_attr
【说明】
JPEG和MJPEG定义编码感兴趣区域信息。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_jpeg_roi_adv_attr
【说明】
JPEG和MJPEG定义编码感兴趣区域高级属性信息。
【定义】
typedef struct {
td_u32 idx;
td_bool enable;
td_u32 fg_level;
td_u32 bg_level;
ot_rect rect;
} ot_venc_jpeg_roi_adv_attr;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_roi_bg_frame_rate
【说明】
定义非编码感兴趣区域帧率。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_ref_param
【说明】
定义H.264/H.265/SVAC3.0编码的高级跳帧参考参数。
【定义】
typedef struct {
td_u32 base;
td_u32 enhance;
td_bool pred_en;
td_bool base_qp_delta_en;
td_s32 base_qp_delta;
} ot_venc_ref_param;
【成员】
|
当pred_en 设置为TD_FALSE时,等同于base设置为无限大,base层的所有帧都参考IDR帧,不被其他帧用作参考。 |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_rc_attr
【说明】
定义编码通道码率控制器属性。
【定义】
typedef struct {
ot_venc_rc_mode rc_mode;
union {
ot_venc_h264_abr h264_abr;
ot_venc_h264_cbr h264_cbr;
ot_venc_h264_vbr h264_vbr;
ot_venc_h264_avbr h264_avbr;
ot_venc_h264_qvbr h264_qvbr;
ot_venc_h264_cvbr h264_cvbr;
ot_venc_h264_fixqp h264_fixqp;
ot_venc_h264_qpmap h264_qpmap;
ot_venc_h264_rangeqp h264_rangeqp;
ot_venc_mjpeg_cbr mjpeg_cbr;
ot_venc_mjpeg_vbr mjpeg_vbr;
ot_venc_mjpeg_fixqp mjpeg_fixqp;
ot_venc_h265_abr h265_abr;
ot_venc_h265_cbr h265_cbr;
ot_venc_h265_vbr h265_vbr;
ot_venc_h265_avbr h265_avbr;
ot_venc_h265_qvbr h265_qvbr;
ot_venc_h265_cvbr h265_cvbr;
ot_venc_h265_fixqp h265_fixqp;
ot_venc_h265_qpmap h265_qpmap;
ot_venc_h265_rangeqp h265_rangeqp;
ot_venc_svac3_abr svac3_abr;
ot_venc_svac3_cbr svac3_cbr;
ot_venc_svac3_vbr svac3_vbr;
ot_venc_svac3_avbr svac3_avbr;
ot_venc_svac3_qvbr svac3_qvbr;
ot_venc_svac3_cvbr svac3_cvbr;
ot_venc_svac3_fixqp svac3_fixqp;
ot_venc_svac3_qpmap svac3_qpmap;
ot_venc_svac3_rangeqp svac3_rangeqp;
};
} ot_venc_rc_attr;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_rc_mode
【说明】
定义编码通道码率控制器模式。
【定义】
typedef enum {
OT_VENC_RC_MODE_H264_ABR = 1,
OT_VENC_RC_MODE_H264_CBR,
OT_VENC_RC_MODE_H264_VBR,
OT_VENC_RC_MODE_H264_AVBR,
OT_VENC_RC_MODE_H264_QVBR,
OT_VENC_RC_MODE_H264_CVBR,
OT_VENC_RC_MODE_H264_FIXQP,
OT_VENC_RC_MODE_H264_QPMAP,
OT_VENC_RC_MODE_H264_RANGEQP,
OT_VENC_RC_MODE_MJPEG_CBR,
OT_VENC_RC_MODE_MJPEG_VBR,
OT_VENC_RC_MODE_MJPEG_FIXQP,
OT_VENC_RC_MODE_H265_ABR,
OT_VENC_RC_MODE_H265_CBR,
OT_VENC_RC_MODE_H265_VBR,
OT_VENC_RC_MODE_H265_AVBR,
OT_VENC_RC_MODE_H265_QVBR,
OT_VENC_RC_MODE_H265_CVBR,
OT_VENC_RC_MODE_H265_FIXQP,
OT_VENC_RC_MODE_H265_QPMAP,
OT_VENC_RC_MODE_H265_RANGEQP,
OT_VENC_RC_MODE_SVAC3_ABR,
OT_VENC_RC_MODE_SVAC3_CBR,
OT_VENC_RC_MODE_SVAC3_VBR,
OT_VENC_RC_MODE_SVAC3_AVBR,
OT_VENC_RC_MODE_SVAC3_QVBR,
OT_VENC_RC_MODE_SVAC3_CVBR,
OT_VENC_RC_MODE_SVAC3_FIXQP,
OT_VENC_RC_MODE_SVAC3_QPMAP,
OT_VENC_RC_MODE_SVAC3_RANGEQP,
OT_VENC_RC_MODE_BUTT,
} ot_venc_rc_mode;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_rc_qpmap_mode
【说明】
定义编码通道QPMAP模式下CU32、CU64 QP值的取值方式。
【定义】
typedef enum {
OT_VENC_RC_QPMAP_MODE_MEAN_QP = 0,
OT_VENC_RC_QPMAP_MODE_MIN_QP,
OT_VENC_RC_QPMAP_MODE_MAX_QP,
OT_VENC_RC_QPMAP_MODE_BUTT,
} ot_venc_rc_qpmap_mode;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_abr
【说明】
定义H.264编码通道ABR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 bit_rate;
td_u32 vbv_buf_delay;
} ot_venc_h264_abr;
【成员】
用以控制vbv虚拟缓存的容量(vbv_buf_size),vbv_buf_size等于为bit_rate乘以vbv_buf_delay,vbv_buf_delay单位为秒。码率控制算法使得vbv_buf_delay时间窗内的平均码率达到目标码率。vbv_buf_delay越大,编码质量越稳定。 |
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h264_cbr
【说明】
定义H.264编码通道CBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 bit_rate;
} ot_venc_h264_cbr;
【成员】
【注意事项】
-
设置源帧率src_frame_rate时:
- VENC帧率控制为增帧模式,则src_frame_rate应设置为VENC的输出帧率。
- VENC帧率控制为减帧模式或不进行帧率控制,src_frame_rate应该设置为产生time_ref的实际帧率,RC需要根据src_frame_rate统计实际的帧率以及进行码率控制。
- 如果编码图像的源是VI时,则src_frame_rate设置为VI的输入时序帧率,因为time_ref是在VI时序采集的时候产生;
- 如果VI和VPSS在线时,则src_frame_rate设置为VPSS的实际输出帧率,因为time_ref是在VPSS输出的时候产生;
- 如果VI和VPSS离线时,由于VPSS只有组的帧率控制,VPSS组的源帧率设置应该和编码的src_frame_rate设置相同,src_frame_rate设置为VI的输入时序帧率,因为time_ref是在VI时序采集的时候产生。
假设产生time_ref的实际帧率是30:
- 如果VENC不进行帧率控制,src_frame_rate应该设置为30。
- 如果VENC进行帧率控制,VENC帧率控制如果为增帧模式,dst_frame_rate设置需要大于30,VENC帧率控制如果为减帧模式,dst_frame_rate应该设置为小于30。
- 如果VENC帧率控制为减帧模式,同时RC进行了帧率控制,那么最终的帧率将以两者的较小值为准。比如VENC设置为源帧率30帧,目标帧率6帧,而RC设置为源帧率30,目标帧率为10帧,那么最终的目标帧率为6帧。
-
设置目标帧率dst_frame_rate时,高16位用于表示分母,低16位表示分子。
- 如果用户设置目标帧率为整数,设置分母高16位为0即可表示整数。例如设置src_frame_rate等于25,dst_frame_rate等于12,则表示将从25帧输入图像中取出12帧进行编码,其余13帧将丢掉。
- 如果设置ViFrmRate等于25,dst_frame_rate等于15/2,则表示要求编码器2秒钟编码15帧。
-
dst_frame_rate的设置方式如下:如果要设置为整数帧率25,则可采用以下方式dst_frame_rate= 25;如果要设置为分数帧率15/2,则采用以下方式:dst_frame_rate= 15+(2<<16)。
- src_frame_rate的设置方式和dst_frame_rate的设置方式相同。
- 当使用VENC和RC两级帧率控制时,VENC的目标帧率小于RC的目标帧率,比如VENC设置为源帧率30帧,目标帧率6帧,而RC设置为源帧率30,目标帧率为10帧,这种情况可能会引起码率控制不准确;建议用户设置VENC的目标帧率大于等于RC的目标帧率,以此来达到用户的目标帧率。
- 当VPSS只绑定编码且使用AUTO模式时,使用VENC的帧率控制可以节省VPSS的性能。
- 如果设置的码率超过芯片手册中规定的最大实时码率,则不能保证实时编码。
- gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
【相关数据类型及接口】
ot_venc_h264_vbr
【说明】
定义H.264编码通道VBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
} ot_venc_h264_vbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h264_avbr
【说明】
定义H.264编码通道AVBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
} ot_venc_h264_avbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h264_qvbr
【说明】
定义H.264编码通道QVBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 target_bit_rate;
} ot_venc_h264_qvbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h264_cvbr
【说明】
定义H.264编码通道CVBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
td_u32 short_term_stats_time;
td_u32 long_term_stats_time;
td_u32 long_term_max_bit_rate;
td_u32 long_term_min_bit_rate;
} ot_venc_h264_cvbr;
【成员】
|
取值范围:[OT_VENC_MIN_BITRATE, max_bit_rate] |
|
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h264_fixqp
【说明】
定义H.264编码通道Fixqp属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 i_qp;
td_u32 p_qp;
td_u32 b_qp;
td_u32 vi_qp;
} ot_venc_h264_fixqp;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h264_qpmap
【说明】
定义H.264编码通道QPMAP属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
} ot_venc_h264_qpmap;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h264_rangeqp
【说明】
定义H.264编码通道的rangeqp属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 i_qp;
td_u32 p_qp;
td_u32 b_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_p_qp;
td_u32 min_p_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_u32 max_b_qp;
td_u32 min_b_qp;
} ot_venc_h264_rangeqp;
【成员】
【注意事项】
在OT_VENC_GOP_MODE_I模式下,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_mjpeg_fixqp
【说明】
定义MJPEG编码通道Fixqp属性结构。
【定义】
typedef struct {
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 qfactor;
} ot_venc_mjpeg_fixqp;
【成员】
【注意事项】
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_mjpeg_cbr
【说明】
定义MJPEG编码通道CBR属性结构。
【定义】
typedef struct {
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 bit_rate;
} ot_venc_mjpeg_cbr;
【成员】
【注意事项】
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_mjpeg_vbr
【说明】
定义MJPEG编码通道VBR属性结构。
【定义】
typedef struct {
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
} ot_venc_mjpeg_vbr;
【成员】
【注意事项】
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h265_abr
【说明】
定义H.265编码通道ABR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 bit_rate;
td_u32 vbv_buf_delay;
} ot_venc_h265_abr;
【成员】
用以控制vbv虚拟缓存的容量(vbv_buf_size),vbv_buf_size等于bit_rate乘以vbv_buf_delay,vbv_buf_delay单位为秒。码率控制算法使得vbv_buf_delay时间窗内的平均码率达到目标码率。vbv_buf_delay越大,编码质量越稳定。 |
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h265_cbr
【说明】
定义H.265编码通道CBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 bit_rate;
} ot_venc_h265_cbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h265_vbr
【说明】
定义 H.265编码通道VBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
} ot_venc_h265_vbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h265_avbr
【说明】
定义 H.265编码通道AVBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
} ot_venc_h265_avbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h265_qvbr
【说明】
定义H.265编码通道QVBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 target_bit_rate;
} ot_venc_h265_qvbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h265_cvbr
【说明】
定义H.265编码通道CVBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
td_u32 short_term_stats_time;
td_u32 long_term_stats_time;
td_u32 long_term_max_bit_rate;
td_u32 long_term_min_bit_rate;
} ot_venc_h265_cvbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h265_fixqp
【说明】
定义H.265编码通道Fixqp属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 i_qp;
td_u32 p_qp;
td_u32 b_qp;
td_u32 vi_qp;
} ot_venc_h265_fixqp;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h265_qpmap
【说明】
定义H.265编码通道QPMAP属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_h265_qpmap;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_h265_rangeqp
【说明】
定义H.265编码通道rangeqp属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 i_qp;
td_u32 p_qp;
td_u32 b_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_p_qp;
td_u32 min_p_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_u32 max_b_qp;
td_u32 min_b_qp;
} ot_venc_h265_rangeqp;
【成员】
【注意事项】
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_super_frame_mode
【说明】
定义码率控制中超大帧处理模式。
【定义】
typedef enum {
OT_VENC_SUPER_FRAME_NONE = 0,
OT_VENC_SUPER_FRAME_DISCARD,
OT_VENC_SUPER_FRAME_REENCODE,
OT_VENC_SUPER_FRAME_BUTT
} ot_venc_super_frame_mode;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ss_mpi_venc_get_super_frame_strategy
ot_venc_h264_vbr_param
【说明】
定义H.264协议编码通道VBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_s32 chg_pos;
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
} ot_venc_h264_vbr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_avbr_param
【说明】
定义H.264协议编码通道AVBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_s32 chg_pos;
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
td_s32 min_still_percent;
td_u32 max_still_qp;
td_u32 min_still_psnr;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_u32 min_qp_delta;
td_u32 motion_sensitivity;
td_bool save_bitrate_en;
} ot_venc_h264_avbr_param;
【成员】
|
I帧:FrameLevelMinQp = min_qp_delta +min_i_qp |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_qvbr_param
【说明】
定义H.264协议编码通道QVBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_s32 max_bit_percent;
td_s32 min_bit_percent;
td_s32 max_psnr_fluctuate;
td_s32 min_psnr_fluctuate;
} ot_venc_h264_qvbr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_cvbr_param
【说明】
定义H.264协议编码通道CVBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_u32 min_qp_delta;
td_u32 max_qp_delta;
td_u32 extra_bit_percent;
td_u32 long_term_stats_time_unit;
td_bool save_bitrate_en;
} ot_venc_h264_cvbr_param;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_venc_h264_cbr_param
【说明】
定义H.264协议编码通道CBR新版码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_s32 max_reencode_times;
td_bool qpmap_en;
} ot_venc_h264_cbr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_abr_param
【说明】
定义H.264协议编码通道ABR新版码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_p_qp;
td_u32 min_p_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_s32 max_reencode_times;
td_bool qpmap_en;
} ot_venc_h264_abr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_mjpeg_cbr_param
【说明】
定义MJPEG协议编码通道CBR码率控制模式高级参数配置。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_mjpeg_vbr_param
【说明】
定义MJPEG协议编码通道VBR码率控制模式高级参数配置。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_vbr_param
【说明】
定义H.265协议编码通道VBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_s32 chg_pos;
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_h265_vbr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_avbr_param
【说明】
定义H.265协议编码通道AVBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_s32 chg_pos;
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_s32 min_still_percent;
td_u32 max_still_qp;
td_u32 min_still_psnr;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_u32 min_qp_delta;
td_u32 motion_sensitivity;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_h265_avbr_param;
【成员】
|
I帧:FrameLevelMinQp = min_qp_delta+ min_i_qp |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_qvbr_param
【说明】
定义H.265协议编码通道QVBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_s32 max_bit_percent;
td_s32 min_bit_percent;
td_s32 max_psnr_fluctuate;
td_s32 min_psnr_fluctuate;
} ot_venc_h265_qvbr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_cvbr_param
【说明】
定义H.265协议编码通道CVBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_u32 min_qp_delta;
td_u32 max_qp_delta;
td_u32 extra_bit_percent;
td_u32 long_term_stats_time_unit;
} ot_venc_h265_cvbr_param;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_venc_h265_cbr_param
【说明】
定义H.265协议编码通道CBR新版码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_h265_cbr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_abr_param
【说明】
定义H.265协议编码通道ABR新版码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_p_qp;
td_u32 min_p_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_h265_abr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_rc_param
【说明】
定义编码通道的码率控制高级参数。
【定义】
typedef struct {
td_u32 threshold_i[OT_VENC_TEXTURE_THRESHOLD_SIZE];
td_u32 threshold_p[OT_VENC_TEXTURE_THRESHOLD_SIZE];
td_u32 threshold_b[OT_VENC_TEXTURE_THRESHOLD_SIZE];
td_u32 direction;
td_u32 row_qp_delta;
td_u32 max_row_qp_delta;
td_s32 first_frame_start_qp;
ot_venc_scene_chg_detect scene_chg_detect;
union {
ot_venc_h264_abr_param h264_abr_param;
ot_venc_h264_cbr_param h264_cbr_param;
ot_venc_h264_vbr_param h264_vbr_param;
ot_venc_h264_avbr_param h264_avbr_param;
ot_venc_h264_qvbr_param h264_qvbr_param;
ot_venc_h264_cvbr_param h264_cvbr_param;
ot_venc_h265_abr_param h265_abr_param;
ot_venc_h265_cbr_param h265_cbr_param;
ot_venc_h265_vbr_param h265_vbr_param;
ot_venc_h265_avbr_param h265_avbr_param;
ot_venc_h265_qvbr_param h265_qvbr_param;
ot_venc_h265_cvbr_param h265_cvbr_param;
ot_venc_mjpeg_cbr_param mjpeg_cbr_param;
ot_venc_mjpeg_vbr_param mjpeg_vbr_param;
ot_venc_svac3_abr_param svac3_abr_param;
ot_venc_svac3_cbr_param svac3_cbr_param;
ot_venc_svac3_vbr_param svac3_vbr_param;
ot_venc_svac3_avbr_param svac3_avbr_param;
ot_venc_svac3_qvbr_param svac3_qvbr_param;
ot_venc_svac3_cvbr_param svac3_cvbr_param;
};
} ot_venc_rc_param;
【成员】
|
取值范围:[0, 255],默认值:参见ss_mpi_venc_set_rc_param的【注意】。 |
|
|
取值范围:[0, 255],默认值:参见ss_mpi_venc_set_rc_param的【注意】。 |
|
|
取值范围:[0, 255],默认值:参见ss_mpi_venc_set_rc_param的【注意】。 |
|
设置第一帧的起始Qp值,ABR/CBR/VBR/AVBR/QVBR/CVBR有效。 first_frame_start_qp如果为-1则第一帧的起始QP由编码器内部计算,如果为其它合法值则由用户指定该值为第一帧起始QP。 |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_jpeg_enc_mode
【说明】
定义JPEG编码通道的抓拍模式。
【定义】
typedef enum {
OT_VENC_JPEG_ENC_ALL = 0,
OT_VENC_JPEG_ENC_SNAP = 1,
OT_VENC_JPEG_ENC_BUTT,
} ot_venc_jpeg_enc_mode;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_pu
【说明】
定义H.265协议编码通道PU参数结构体。
【定义】
typedef struct {
td_u32 constrained_intra_pred_flag;
td_u32 strong_intra_smoothing_enabled_flag;
} ot_venc_h265_pu;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_trans
【说明】
定义H.265协议编码通道变换量化的结构体。
【定义】
typedef struct {
td_s32 cb_qp_offset;
td_s32 cr_qp_offset;
td_bool scaling_list_en;
td_bool scaling_list_tu4_valid;
td_u8 inter_scaling_list4x4[2][OT_VENC_SCALING_LIST_SIZE_16];
td_u8 intra_scaling_list4x4[2][OT_VENC_SCALING_LIST_SIZE_16];
td_bool scaling_list_tu8_valid;
td_u8 inter_scaling_list8x8[2][OT_VENC_SCALING_LIST_SIZE_64];
td_u8 intra_scaling_list8x8[2][OT_VENC_SCALING_LIST_SIZE_64];
td_bool scaling_list_tu16_valid;
td_u8 inter_scaling_list16x16[2][OT_VENC_SCALING_LIST_SIZE_64];
td_u8 intra_scaling_list16x16[2][OT_VENC_SCALING_LIST_SIZE_64];
td_bool scaling_list_tu32_valid;
td_u8 inter_scaling_list32x32[OT_VENC_SCALING_LIST_SIZE_64];
td_u8 intra_scaling_list32x32[OT_VENC_SCALING_LIST_SIZE_64];
} ot_venc_h265_trans;
【成员】
inter_scaling_list4x4[2][OT_VENC_SCALING_LIST_SIZE_16] |
|
intra_scaling_list4x4[2][OT_VENC_SCALING_LIST_SIZE_16] |
|
inter_scaling_list8x8[2][OT_VENC_SCALING_LIST_SIZE_64] |
|
intra_scaling_list8x8[2][OT_VENC_SCALING_LIST_SIZE_64] |
|
inter_scaling_list16x16[2][OT_VENC_SCALING_LIST_SIZE_64] |
|
intra_scaling_list16x16[2][OT_VENC_SCALING_LIST_SIZE_64] |
|
inter_scaling_list32x32[OT_VENC_SCALING_LIST_SIZE_64] |
|
intra_scaling_list32x32[OT_VENC_SCALING_LIST_SIZE_64] |
【注意事项】
- 在场景配置为OT_VENC_SCENE_0、OT_VENC_SCENE_1、OT_VENC_SCENE_2、OT_VENC_SCENE_3 时,为平衡图像质量,cb_qp_offset、cr_qp_offset默认配置为-3。
- scaling_list_en为0时为无量化表。
- scaling_list_en为1,scaling_list_tu4_valid/scaling_list_tu8_valid/ scaling_list_tu16_valid/ scaling_list_tu32_valid为0时,为协议默认量化表。
- scaling_list_en/scaling_list_tu4_valid/scaling_list_tu8_valid/ scaling_list_tu16_valid/ scaling_list_tu32_valid为1时,为用户自定义量化表。
- scaling_list_tu4_valid/scaling_list_tu8_valid/ scaling_list_tu16_valid/ scaling_list_tu32_valid仅支持同时为0或1。
- Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100仅支持无量化表。
- cb_qp_offset/cr_qp_offset:在FIXQP模式下,驱动使用默认值0,不支持设置其他参数。
【相关数据类型及接口】
ot_venc_h265_entropy
【说明】
定义H.265协议编码通道熵编码的结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_dblk
【说明】
定义H.265协议编码通道Deblocking的结构体。
【定义】
typedef struct {
td_u32 slice_deblocking_filter_disabled_flag;
td_s32 slice_beta_offset_div2;
td_s32 slice_tc_offset_div2;
td_u32 loop_filter_across_tiles_enabled_flag;
td_u32 loop_filter_across_slices_enabled_flag;
} ot_venc_h265_dblk;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_sao
【说明】
定义H.265协议编码通道Sao的结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_frame_lost_mode
【说明】
瞬时码率超过阈值时的丢帧模式。
【定义】
typedef enum {
OT_VENC_FRAME_LOST_NORMAL = 0,
OT_VENC_FRAME_LOST_P_SKIP,
OT_VENC_FRAME_LOST_BUTT,
} ot_venc_frame_lost_mode;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_frame_lost_strategy
【说明】
瞬时码率超过阈值时的丢帧策略参数。
【定义】
typedef struct {
td_bool enable;
td_u32 bit_rate_threshold;
ot_venc_frame_lost_mode mode;
td_u32 frame_gap;
} ot_venc_frame_lost_strategy;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ss_mpi_venc_set_frame_lost_strategy
ot_venc_reencode_priority
【说明】
超大帧重编优先级枚举。
【定义】
typedef enum {
OT_VENC_REENCODE_BIT_RATE_FIRST = 1,
OT_VENC_REENCODE_FRAME_BITS_FIRST,
OT_VENC_REENCODE_BUTT,
} ot_venc_reencode_priority;
【成员】
【注意事项】
此优先级只在超大帧重编时有效。
【相关数据类型及接口】
无。
ot_venc_discard_param
【说明】
超大帧丢帧调节参数。
【定义】
【成员】
|
|
【注意事项】
- qp_delta,对于H.264,H.265,SVAC3.0协议,发生超大帧丢帧时下一帧起始QP在前一帧基础上加上qp_delta,对于mjpeg协议,发生超大帧丢帧时下一帧起始QP在前一帧基础上减去qp_delta,最终生效的起始qp受内部算法约束,当qp_delta较小时调节力度不明显,或者经过多帧才能收敛稳定。
- max_lost_times取值0时表示不约束连续丢帧次数。
【相关数据类型及接口】
无。
ot_venc_super_frame_strategy
【说明】
超大帧处理策略参数。
【定义】
typedef struct {
ot_venc_super_frame_mode super_frame_mode;
td_u32 i_frame_bits_threshold;
td_u32 p_frame_bits_threshold;
td_u32 b_frame_bits_threshold;
ot_venc_reencode_priority reencode_priority;
ot_venc_discard_param discard_param;
} ot_venc_super_frame_strategy;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ss_mpi_venc_set_super_frame_strategy
ot_venc_intra_refresh_mode
【说明】
P帧刷Islice模式定义。
【定义】
typedef enum {
OT_VENC_INTRA_REFRESH_ROW = 0,
OT_VENC_INTRA_REFRESH_COLUMN,
OT_VENC_INTRA_REFRESH_BUTT
} ot_venc_intra_refresh_mode;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_venc_intra_refresh
【说明】
P帧帧内刷新控制参数。
【定义】
typedef struct {
td_bool enable;
ot_venc_intra_refresh_mode mode;
td_u32 refresh_num;
td_u32 request_i_qp;
} ot_venc_intra_refresh;
【成员】
每次I宏块刷新行数或者列数,可以通过这个变量控制刷新的速度及码流的平稳程度。刷新行数或者列数越多,刷新的速度越快,但是码流平稳度越差;刷新的行数或者列数越少,刷新的速度越慢,但是码流平稳度越好。 |
|
I帧QP值,在帧内刷新模式,可能方案还需要插入IDR帧,设置I帧QP用于控制插入的IDR帧的质量,质量越好IDR帧大小越大;质量越差IDR帧大小越小。 |
【注意事项】
无
【相关数据类型及接口】
ot_venc_mod_param
【说明】
编码相关模块参数。
【定义】
typedef struct {
ot_venc_mod_type mod_type;
union {
ot_venc_venc_mod_param venc_mod_param;
ot_venc_h264_mod_param h264_mod_param;
ot_venc_h265_mod_param h265_mod_param;
ot_venc_svac3_mod_param svac3_mod_param;
ot_venc_jpeg_mod_param jpeg_mod_param;
};
} ot_venc_mod_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_mod_type
【说明】
编码相关模块参数类型。
【定义】
typedef enum {
OT_VENC_MOD_VENC = 1,
OT_VENC_MOD_H264,
OT_VENC_MOD_H265,
OT_VENC_MOD_JPEG,
OT_VENC_MOD_RC,
OT_VENC_MOD_SVAC3,
OT_VENC_MOD_BUTT
} ot_venc_mod_type;
【成员】
【注意事项】
OT_VENC_MOD_RC为预留成员,当前暂不支持RC模块参数配置。
【相关数据类型及接口】
ot_venc_venc_mod_param
【说明】
ssxx_venc.ko模块参数。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h264_mod_param
【说明】
ssxx_h264e.ko模块参数。
【定义】
typedef struct {
td_u32 one_stream_buf;
td_u32 mini_buf_mode;
td_u32 low_power_mode;
ot_vb_src vb_src;
td_bool qp_hist_en;
td_u32 max_user_data_len;
} ot_venc_h264_mod_param;
【成员】
|
注意:低功耗或者极低功耗使能后会导致图像质量损失。若开启极低功耗模式,低码率场景会导致运动过后模糊面积增加,人脸肤色表现有划痕或缺块等现象。噪声大场景可能导致画面不均匀。 |
|
|
0:Qp直方图不输出,即ot_venc_h264_adv_stream_info中的成员变量 qp_hist[]为全0。 1:Qp直方图输出,即ot_venc_h264_adv_stream_info中的成员变量 qp_hist[]为实际的当前帧的QP直方图 |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_h265_mod_param
【说明】
ssxx_h265.ko模块参数。
【定义】
typedef struct {
td_u32 one_stream_buf;
td_u32 mini_buf_mode;
td_u32 low_power_mode;
ot_vb_src vb_src;
td_bool qp_hist_en;
td_u32 max_user_data_len;
} ot_venc_h265_mod_param;
【成员】
|
注意:低功耗或者极低功耗使能后会导致图像质量损失。若开启极低功耗模式,低码率场景会导致运动过后模糊面积增加,人脸肤色表现有划痕或缺块等现象。 |
|
|
0:Qp直方图不输出,即ot_venc_h265_adv_stream_info中的成员变量 qp_hist[]为全0。 1:Qp直方图输出,即ot_venc_h265_adv_stream_info中的成员变量 qp_hist[]为实际的当前帧的QP直方图。 |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_svac3_mod_param
【说明】
ssxx_svac3e.ko模块参数。
【定义】
typedef struct {
td_u32 one_stream_buf;
td_u32 mini_buf_mode;
td_u32 low_power_mode;
ot_vb_src vb_src;
td_bool qp_hist_en;
td_u32 max_user_data_len;
} ot_venc_svac3_mod_param;
【成员】
|
注意:低功耗或者极低功耗使能后会导致图像质量损失。若开启极低功耗模式,低码率场景会导致运动过后模糊面积增加,人脸肤色表现有划痕或缺块等现象。 |
|
|
0:Qp直方图不输出,即ot_venc_svac3_adv_stream_info中的成员变量 qp_hist[]为全0。 1:Qp直方图输出,即ot_venc_svac3_adv_stream_info中的成员变量 qp_hist[]为实际的当前帧的QP直方图。 |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_jpeg_mod_param
【说明】
ssxx_jpeg.ko模块中参数。
【定义】
typedef struct {
td_u32 one_stream_buf;
td_u32 mini_buf_mode;
td_u32 clear_stream_buf;
} ot_venc_jpeg_mod_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_frame_type
【说明】
定义编码帧类型枚举。
【定义】
typedef enum {
OT_VENC_FRAME_TYPE_NONE = 1,
OT_VENC_FRAME_TYPE_IDR,
OT_VENC_FRAME_TYPE_P_SKIP,
OT_VENC_FRAME_TYPE_BUTT
} ot_venc_frame_type;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_user_rc_info
【说明】
用户码控信息结构体。
【定义】
typedef struct {
td_bool qpmap_valid;
td_bool skip_weight_valid;
td_u32 blk_start_qp;
td_phys_addr_t qpmap_phys_addr;
td_phys_addr_t skip_weight_phys_addr;
ot_venc_frame_type frame_type;
} ot_venc_user_rc_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_user_qpmap
【说明】
用户qpmap信息结构体。
【定义】
typedef struct {
td_u32 width;
td_u32 height;
td_u64 pts;
ot_venc_user_rc_info user_rc_info;
} ot_venc_user_qpmap;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_user_roimap
【说明】
用户ROI信息结构体。
【定义】
【成员】
【注意事项】
ROIMap仅支持JPEG和MJPEG协议。
【相关数据类型及接口】
说明:
- 对于Hi3519DV500图像中每16x16的块由2个bit表示,2个bit可以表示0~3共4个档位,用以表示该块的降码率等级,对于Hi3516CV610图像中每16x16的块由4个bit表示,4个bit可以表示0~15共16个档位,用以表示该块的降码率等级,等级越高降码率相对越多,图像质量损失也相对越多,与设置JPEG ROI属性接口ss_mpi_venc_set_jpeg_roi_attr参数ot_venc_jpeg_roi_attr中的level意义相同。
- JPEG ROIMap表需要内存计算如下: Hi3519DV500: roimap_stride = (width + 1023) / 1024 * 1024 / 64 Hi3516CV610: roimap_stride = (width + 513) / 512 * 512 / 32 Hi3519DV500/Hi3516CV610: roimap_size = stride * ((height + 15) / 16 * 16 / 16)
ot_venc_user_frame_info
【说明】
用户发送图像信息结构体。
【定义】
typedef struct {
ot_video_frame_info user_frame;
ot_venc_user_rc_info user_rc_info;
ot_venc_user_roimap user_roimap;
ot_venc_mosaic_info user_mosaic;
} ot_venc_user_frame_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_omx_user_rc_info
【说明】
用户码控信息结构体。
【定义】
typedef struct {
td_bool rc_info_valid;
td_u32 target_bits;
td_u32 max_qp;
td_u32 min_qp;
td_u32 start_qp;
ot_venc_frame_type frame_type;
} ot_venc_user_rc_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_omx_user_frame_info
【说明】
用户发送图像信息和外部码率控制信息结构体。
【定义】
typedef struct {
ot_video_frame_info user_frame;
ot_omx_user_rc_info user_rc_info;
} ot_omx_user_frame_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_mosaic_mode
【说明】
定义马赛克模式。
【定义】
typedef enum
{
OT_VENC_MOSAIC_MODE_RECT = 0,
OT_VENC_MOSAIC_MODE_MAP,
OT_VENC_MOSAIC_MODE_BUTT
} ot_venc_mosaic_mode;
【成员】
【注意事项】
Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100仅支持OT_VENC_MOSAIC_MODE_MAP模式。
【相关数据类型及接口】
ot_venc_mosaic_pixel_yuv
【说明】
定义纯色填充的颜色。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_mosaic_rect
【说明】
马赛克rect模式的参数结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_mosaic_map
【说明】
马赛克map模式的参数结构体。
【定义】
typedef struct {
td_bool valid;
td_phys_addr_t phys_addr;
td_bool specified_yuv_en;
ot_venc_mosaic_pixel_yuv pixel_yuv;
} ot_venc_mosaic_map;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_mosaic_info
【说明】
马赛克信息结构体。
【定义】
typedef struct {
ot_venc_mosaic_mode mode;
ot_mosaic_blk_size blk_size;
union {
ot_venc_mosaic_rect rect_param;
ot_venc_mosaic_map map_param;
};
} ot_venc_mosaic_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_multi_frame_info
【说明】
用户发送多帧图像及马赛克信息结构体。
【定义】
typedef struct {
td_u32 frame_num;
ot_video_frame_info frame[OT_VENC_MAX_FRAME_NUM];
ot_venc_mosaic_info mosaic_info;
} ot_venc_multi_frame_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_batch_crop_info
【说明】
批量抠图信息结构体。
【定义】
typedef struct {
td_bool valid;
td_u32 crop_num;
ot_rect crop_rect[OT_VENC_MAX_BATCH_CROP_RECT_NUM];
} ot_venc_batch_crop_info;
【成员】
【注意事项】
无
【相关数据类型及接口】
ss_mpi_venc_send_frame_batch_crop
ot_venc_frame_batch_crop_info
【说明】
用户发送原始帧和批量抠图信息结构体。
【定义】
typedef struct {
ot_video_frame_info frame;
ot_venc_batch_crop_info batch_crop_info;
} ot_venc_frame_batch_crop_info;
【成员】
【注意事项】
无
【相关数据类型及接口】
ss_mpi_venc_send_frame_batch_crop
ot_venc_duplicate_frame_strategy
【说明】
定义编码增帧类型。
【定义】
typedef enum {
OT_VENC_DUPLICATE_FRAME_STRATEGE_RECODE = 0,
OT_VENC_DUPLICATE_FRAME_STRATEGE_COPY,
OT_VENC_DUPLICATE_FRAME_STRATEGE_BUTT
} ot_venc_duplicate_frame_strategy;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_chn_config
【说明】
编码通道配置。
【定义】
typedef struct {
td_bool mosaic_en;
td_bool composite_enc_en;
td_u32 quality_level;
ot_venc_duplicate_frame_strategy duplicate_frame_strategy;
ot_venc_svc_version svc_version;
td_bool ssvc_en;
} ot_venc_chn_config;
【成员】
|
启动复合编码后需要调用接口ss_mpi_venc_send_multi_frame发送图像,一次送2个图像到编码队列。ot_venc_multi_frame_info:frame[0]为基础层图像,ot_venc_multi_frame_info:frame[1]为增强层图像。 |
|
|
质量等级为1时编码器提升编码质量,需要的参考帧增加一倍,重构帧数量增加一个。 质量等级为0时编码质量会降低,需要的参考帧数量不变,重构帧数量增加一个。 请参考接口ss_mpi_venc_set_chn_config描述。 |
|
编码增帧策略,支持OT_VENC_DUPLICATE_FRAME_STRATEGE_RECODE和OT_VENC_DUPLICATE_FRAME_STRATEGE_COPY。 默认值 OT_VENC_DUPLICATE_FRAME_STRATEGE_RECODE。 请参考接口ss_mpi_venc_set_chn_config描述。 |
|
【注意事项】
通道创建失败情况下已设置的config无法复位成默认值,用户需要重新调用此接口复位config。
【相关数据类型及接口】
ot_venc_sse_rgn
【说明】
SSERegion模块中参数。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_chn_param
【说明】
定义Venc通道参数结构体。
【定义】
typedef struct {
td_bool color_to_grey_en;
td_u32 priority;
td_u32 max_stream_cnt;
td_u32 poll_wake_up_frame_cnt;
ot_crop_info crop_info;
ot_frame_rate_ctrl frame_rate;
td_u32 in_depth;
} ot_venc_chn_param;
【成员】
|
取值范围:[1,OT_VENC_MAX_IN_DEPTH] |
【注意事项】
-
crop_info结构体的成员:
- rect.x Hi3519DV500必须16像素对齐,Hi3516CV610/Hi3516CV608/Hi3511CV100必须8像素对齐;
- rect.y必须2像素对齐;
- rect.width,rect.height满足对应编码通道的宽高约束。
-
frame_rate结构体的成员:
-
src_frame_rate:表示进入通道的帧率,以fps为单位。
取值范围:-1或[1, 240]。
-
dst_frame_rate:表示通道输出的帧率,以fps为单位。
取值范围:Jpeg:-1或[1, src_frame_rate];H.264/H.265/SVAC3.0/Mjpeg:-1或[1, 240]。
-
【相关数据类型及接口】
ot_venc_fg_protect
【说明】
前景保护参数结构体。
【定义】
typedef struct {
td_bool enable;
td_u32 direction;
td_u32 gain;
td_u32 offset;
td_u32 threshold_p[OT_VENC_TEXTURE_THRESHOLD_SIZE];
td_u32 threshold_b[OT_VENC_TEXTURE_THRESHOLD_SIZE];
} ot_venc_fg_protect;
【成员】
【注意事项】
H.265/SVAC3.0前景宏块级QP的调节幅度受内部逻辑的约束限制,当前配置下QPdelta调节范围为[-8,12]。
【相关数据类型及接口】
ot_venc_scene_mode
【说明】
定义编码场景枚举。
【定义】
typedef enum {
OT_VENC_SCENE_0 = 0,
OT_VENC_SCENE_1 = 1,
OT_VENC_SCENE_2 = 2,
OT_VENC_SCENE_3 = 3,
OT_VENC_SCENE_4 = 4,
OT_VENC_SCENE_BUTT
} ot_venc_scene_mode;
【成员】
【注意事项】
OT_VENC_SCENE_3:重点优化云台转动场景收敛速度的问题,副作用会引起ring、pattern、拖尾等问题。
【相关数据类型及接口】
ot_venc_scene_chg_detect
【说明】
编码场景检测控制参数。
【定义】
typedef struct {
td_bool detect_scene_chg_en;
td_bool adapt_insert_idr_frame_en;
} ot_venc_scene_chg_detect;
【成员】
|
使能场景切换检测后,编码器会自动检测场景切换,并且在检测到场景切换后主动调整QP,提升质量;但是如果频繁的出现场景切换,会导致码率升高。云台、车载产品在镜头运动时有较大概率判断为场景切换。默认为TD_TRUE,建议在运动时设置为TD_FALSE。 |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_chn_pool
【说明】
定义编码通道绑定的VB池结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_cu_pred
【说明】
CU模式选择的倾向性配置结构体
【定义】
typedef struct {
ot_op_mode pred_mode;
td_u32 intra32_cost;
td_u32 intra16_cost;
td_u32 intra8_cost;
td_u32 intra4_cost;
td_u32 inter64_cost;
td_u32 inter32_cost;
td_u32 inter16_cost;
td_u32 inter8_cost;
} ot_venc_cu_pred;
【成员】
|
|
Inter64倾向性调节,该值增大表示选择该模式的倾向性越小。 |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_skip_bias
【说明】
SKIP倾向性配置结构体。
【定义】
typedef struct {
td_bool enable;
td_u32 gain;
td_u32 offset;
td_u32 bg_cost;
td_u32 fg_cost;
td_u8 bg_lambda_factor;
td_u8 fg_lambda_factor;
} ot_venc_skip_bias;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_venc_debreath_effect
【说明】
去除呼吸效应参数结构体。
【定义】
【成员】
【注意事项】
strength1:Hi3516CV610、Hi3511CV100不支持
【相关数据类型及接口】
ot_venc_hierarchical_qp
【说明】
QP分层参数结构体。
【定义】
typedef struct {
td_bool enable;
td_s32 qp_delta[OT_VENC_MAX_HIERARCHY_NUM];
td_s32 frame_num[OT_VENC_MAX_HIERARCHY_NUM];
} ot_venc_hierarchical_qp;
【成员】
qp_delta[OT_VENC_MAX_HIERARCHY_NUM] |
|
frame_num[OT_VENC_MAX_HIERARCHY_NUM] |
【注意事项】
各层级帧类型的起始帧级QP,是由码控加参数设置的层间qp_delta的共同影响,而非各层级的qp_delta的简单叠加。
【相关数据类型及接口】
ot_venc_rc_adv_param
【说明】
定义RC模块的高级参数,此接口会包含与码流控制算法无关的功能,并且未来版本还有可能扩展。
【定义】
【成员】
设置新的通道码率后,是否清除码率控制的统计信息,默认值为1。 2:设置通道码率后不清除RC的帧率统计信息,清除码率统计信息。 注意:当设置的参数改变统计buffer内存大小时,此时需要重新分配内存或者算法可能读取到未被赋值的内存,此时算法必须清除统计信息。 |
【注意事项】
无。
【相关数据类型及接口】
ot_venc_svc_rect_type
【说明】
定义智能检测目标框type类型信息。
【定义】
typedef enum {
SVC_RECT_TYPE0 = 0,
SVC_RECT_TYPE1,
SVC_RECT_TYPE2,
SVC_RECT_TYPE3,
SVC_RECT_TYPE4,
SVC_RECT_TYPE5,
SVC_RECT_TYPE6,
SVC_RECT_TYPE7,
SVC_RECT_TYPE8,
SVC_RECT_TYPE9,
SVC_RECT_TYPE10,
SVC_RECT_TYPE11,
SVC_RECT_TYPE12,
SVC_RECT_TYPE13,
SVC_RECT_TYPE14,
SVC_RECT_TYPE15,
SVC_RECT_TYPE_BUTT
} ot_venc_svc_rect_type;
【成员】
【注意事项】
- 智能编码1.0类型最大支持到TYPE4。
- 智能编码2.0支持类型TYPE0-TYPE15,其中TYPE15表示背景。
【相关数据类型及接口】
ot_venc_svc_map_param
【说明】
定义智能编码QpMap,SkipMap值。
【定义】
typedef struct {
td_u8 qpmap_value_i; /* RW;Range: [0, 255] */
td_u8 qpmap_value_p; /* RW;Range: [0, 255] */
td_u8 skipmap_value; /* RW;Range: [0, 255] */
} ot_venc_svc_map_param;
【成员】
【注意事项】
qpmap_value_i,qpmap_value_p取值的意义:
- 当取值为0,1,2,…,31:对应deltaQP:0,1,2,…,31
- 当取值为32,33,34,…,63:对应deltaQP:-32,-31,…,-1
- 当取值为64,65,…,115:H.264 H.265对应绝对QP:0,1,2,…,51
- 当取值为64,65,...,127:SVAC3.0 对应绝对QP:0~63
- 当取值为[115, 127]:H.264 H.265对应绝对QP为51
- 当取值为[128,255]:对应强制skip模式
skipmap_value取值的意义:
- skipmap_value对应左右两个LCU的Skipweight值;
- 低4bit代表左LCU的Skipweight值;
- 高4bit代表右LCU的Skipweight值;
- 建议高4bit与低4bit设定的skipweight一致,且为避免图像出现缺块现象,skipweight设定值不宜过强。
- I帧时,背景与Activity区域的skipweight为0。
- H.265\SVAC3.0在CVBR码控下,skipweight倾向性失效;
【相关数据类型及接口】
ot_venc_svc_version
【说明】
定义智能编码版本。
【定义】
【成员】
【注意事项】
仅Hi3516CV610/Hi3516CV608/Hi3511CV100支持智能编码2.0。
【相关数据类型及接口】
ot_venc_svc_param
【说明】
定义智能编码调节参数。
【定义】
typedef struct {
ot_venc_svc_map_param fg_region[SVC_RECT_TYPE_BUTT];
ot_venc_svc_map_param activity_region;
ot_venc_svc_map_param bg_region;
td_bool fg_protect_adaptive_en; /* RW;Range: [0, 1] */
} ot_venc_svc_param;
【成员】
【注意事项】
- activity_region:智能检测结果不稳定时内部自动生成的保护区域,区域设置为前一次智能检测覆盖的区域,整体区域的QpMapValue的值一致。若智能检测结果连续稳定,建议将对应的activity_region区域对应QpMap Value设置为0。
- fg_protect_adaptive_en:仅在qpmap_value_i及qpmap_value_p为相对负QP下起作用,若要设定绝对QP,请根据码率、目标框大小的实际情况设定绝对QP值,以免设置不合理带来的码率剧烈波动。
【相关数据类型及接口】
ot_venc_svc_param_v1
【说明】
定义智能编码调节参数。
【定义】
【成员】
【注意事项】
ot_venc_svc_param_v2
【说明】
定义智能编码2.0调节参数。
【定义】
typedef struct {
td_u32 max_ref_num;
td_u32 refresh_interval;
td_s32 qp_delta[SVC_RECT_TYPE_BUTT];
ot_venc_svc_roi_type roi_type;
} ot_venc_svc_param_v2;
【成员】
【注意事项】
qp_delta数组下标的意义参见ot_venc_svc_rect_type。
【相关数据类型及接口】
ot_venc_svc_param_ex
【说明】
定义智能编码调节扩展参数。
【定义】
typedef struct {
ot_venc_svc_version svc_version;
union {
ot_venc_svc_param_v1 svc_param_v1;
ot_venc_svc_param_v2 svc_param_v2;
}
} ot_venc_svc_param_ex;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_venc_svc_roi_type
【说明】
定义智能编码接收检测信息的类型。
【定义】
typedef enum {
OT_VENC_SVC_ROI_TYPE_RECT = 0,
OT_VENC_SVC_ROI_TYPE_MASK,
OT_VENC_SVC_ROI_TYPE_BUTT
} ot_venc_svc_roi_type;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_venc_svc_mask_info
【说明】
定义智能检测目标mask信息。
【定义】
【成员】
【注意事项】
- base_resolution要小于或等于开启智能编码功能通道的分辨率,要求宽高2对齐。
- mask数据格式,每个像素用4bit表示当前像素的类型,[0,14]表示前景,15表示背景。
- mask建议初始化为背景值(15),然后更新前景区域。
- 送目标mask由于需要单独vb记录整个基础分辨率,因此相比目标框的方式占用更多内存。
【相关数据类型及接口】
ot_venc_svc_rect_info
【说明】
定义智能检测目标框属性信息。
【定义】
typedef struct {
td_u32 rect_num;
ot_size base_resolution;
ot_rect rect_attr[OT_VENC_MAX_SVC_RECT_NUM];
ot_venc_svc_rect_type detect_type[OT_VENC_MAX_SVC_RECT_NUM];
td_u64 pts;
} ot_venc_svc_rect_info;
【成员】
智能检测目标个数,取值范围[0, OT_VENC_MAX_SVC_RECT_NUM]。 |
|
【注意事项】
- base_resolution要小于或等于开启智能编码功能通道的分辨率。
- 为保证目标框的图像质量,请自行根据目标的大小及基础分辨率的大小进行合理的扩边处理,保证目标框完全涵盖住目标。
- rect_attr:x,y表示框左上角的坐标;width, height表示框的宽,高。需要满足:
- x取值范围:[0, base_resolution.width )
- y 取值范围:[0, base_resolution.height)
- x + width <= base_resolution.width
- y + height <= base_resolution.height
【相关数据类型及接口】
ot_venc_md_sad_mode
【说明】
定义sad计算结果所用方式控制信息。
【定义】
typedef enum {
OT_VENC_MD_SAD_MODE_ZERO = 0,
OT_VENC_MD_SAD_MODE_SEARCH = 1,
OT_VENC_MD_SAD_MODE_BUTT
} ot_venc_md_sad_mode;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_md_param
【说明】
定义md检测控制信息。
【定义】
typedef struct {
td_bool online_en;
td_bool sad_stats_en;
td_bool level_stats_en;
ot_venc_md_sad_mode sad_mode;
td_s32 threshold_gain[OT_VENC_MD_THRESHOLD_NUM];
td_s32 threshold_offset[OT_VENC_MD_THRESHOLD_NUM];
td_s32 qp_delta[OT_VENC_MD_LEVEL_NUM];
td_s32 md_skip_weight[OT_VENC_MD_LEVEL_NUM];
} ot_venc_md_param;
【成员】
【注意事项】
-
online_en:在线模式,目前作为md检测算法的使能开关。是利用编码器内部计算的相关信息对编码模式参数进行调整。
-
sad_stats_en和level_stats_en暂不支持。
- md检测算法在I帧下不调节QP,只在P帧调节QP。为保证图像效果,不建议与智能编码(SVC)共同使用。
-
qp_delta取值的意义:
- 当取值为0,1,2,…,31:对应qp_delta:0,1,2,…,31
- 当取值为32,33,34,…,63:对应qp_delta:-32,-31,…,-1
-
MD算法的qp_delta会与ROI_OSD QP叠加作用,设置ROI_OSD QP时,请考虑到MD qp_delta的影响。
【相关数据类型及接口】
ot_venc_deblur_param
【说明】
定义去背景模糊控制信息。
【定义】
【成员】
【注意事项】
详见请参考ss_mpi_venc_set_deblur接口描述【注意】。
【相关数据类型及接口】
ot_venc_param_set_id
【说明】
定义H.264/H.265参数集ID。
【定义】
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_venc_h264_poc
【说明】
定义H.264协议编码通道POC类型。
【定义】
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_venc_jpeg_dering_level
【说明】
定义JPEG编码通道的强边去Ring效应强度等级。
【定义】
typedef enum {
OT_VENC_JPEG_DERING_LEVEL_0 = 0,
OT_VENC_JPEG_DERING_LEVEL_1 = 1,
OT_VENC_JPEG_DERING_LEVEL_2 = 2,
OT_VENC_JPEG_DERING_LEVEL_3 = 3,
OT_VENC_JPEG_DERING_LEVEL_BUTT,
} ot_venc_jpeg_dering_level;
【成员】
不调用ss_mpi_venc_set_jpeg_dering_attr接口对去Ring效应强度等级设置下的默认值 |
|
相比dering_en=0增加较弱的去Ring效应,相比OT_VENC_JPEG_DERING_LEVEL_0增加清晰度较多 |
|
相比dering_en=0增加中等的去Ring效应,相比OT_VENC_JPEG_DERING_LEVEL_0增加清晰度中等 |
|
相比dering_en=0增加较强的去Ring效应,相比OT_VENC_JPEG_DERING_LEVEL_0增加清晰度较少 |
【注意事项】
无。
【相关数据类型及接口】
ot_venc_jpeg_dering_attr
【说明】
定义JPEG编码通道的强边去Ring效应参数。
【定义】
typedef struct {
td_u32 dering_en;
ot_venc_jpeg_dering_level dering_level;
} ot_venc_jpeg_dering_attr;
【成员】
|
1:使能去Ring算法,在相同量化表和qfactor的情况下能减少Ring现象并且减小图片文件大小,但也会损失一些图片清晰度和细节。 |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_quality_balance
【说明】
定义编码器以质量均衡为目标相关参数。
【定义】
typedef struct {
td_bool enable;
td_bool level_adaptive_en;
td_u32 interval;
td_u32 target_ratio;
td_s32 ratio_offset_i;
td_s32 ratio_offset_p;
td_u32 quality_switch;
td_u8 threshold[OT_VENC_MAX_QUALITY_BALANCE_NUM];
td_u8 level[OT_VENC_MAX_QUALITY_BALANCE_NUM];
} ot_venc_quality_balance;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_watermark
【说明】
定义数字水印相关参数。
【定义】
typedef struct {
td_bool enable;
td_u8 strength;
td_u8 component;
td_u8 template_period;
td_u8 info[OT_VENC_MAX_WATERMARK_INFO_NUM];
td_u32 seed[OT_VENC_MAX_WATERMARK_SEED_NUM];
} ot_venc_watermark;
【成员】
数字水印强度(0:weak, 1:middle, 2:strong, default:0),强度越大意味着打到UV分量的幅度越大,抗攻击性越强。 |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_watermark_roi
【说明】
定义数字水印保护信息。
【定义】
typedef struct {
td_bool enable;
td_u8 strength;
td_u32 top;
td_u32 bottom;
td_u32 left;
td_u32 right;
} ot_venc_watermark_roi;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_deblur_far_bg
【说明】
定义运动物体远区域的拖尾和残留区域检测参数结构体。
【定义】
【成员】
检测为离运动物体较远的拖尾与残留区域的块级QP的最终最小值(当前区域具有最高优先级,包括其它块级QP调整)。 |
|
检测为离运动物体较远的拖尾与残留区域的块级QP的最终最大值(当前区域具有最高优先级,包括其它块级QP调整)。 |
【注意事项】
qp_delta的调节建议范围为【0,3】之间,调节过大对帧级码控的平稳性产生影响,产生主观图像质量的副作用。
【相关数据类型及接口】
ot_venc_deblur_near_bg
【说明】
定义运动物体近区域拖尾和残留区域检测参数结构体。
【定义】
typedef struct {
td_u8 gain;
td_u8 offset;
td_u8 qp_delta;
td_u8 min_qp;
td_u8 max_qp;
} ot_venc_deblur_near_bg;
【成员】
【注意事项】
qp_delta的调节建议范围为【0,2】之间,调节过大对帧级码控的平稳性产生影响,产生主观图像质量的副作用。
【相关数据类型及接口】
ot_venc_adv_deblur
【说明】
定义运动物体拖尾和残留区域检测信息结构体
【定义】
typedef struct {
td_bool near_bg_en;
td_bool far_bg_en;
ot_venc_deblur_near_bg near_bg;
ot_venc_deblur_far_bg far_bg;
} ot_venc_adv_deblur;
【成员】
【注意事项】
- near_bg_en使能需要打开ot_venc_deblur_param中的deblur_en和关闭deblur_adaptive_en.
- far_bg_en使能需要打开ot_venc_deblur_param中的deblur_en和关闭deblur_adaptive_en.
【相关数据类型及接口】
ot_venc_svac3_attr
【说明】
定义SVAC3.0编码属性结构体。
【定义】
typedef struct {
td_bool rcn_ref_share_buf_en;
td_u32 frame_buf_ratio;
td_bool is_aiseg_chn;
} ot_venc_svac3_attr;
【成员】
【注意事项】
frame_buf_ratio用来设置节省帧buffer比例,比如设置为80,则表示帧buffer为原始大小的80%;设置frame_buf_ratio不为100时,可能会对以下功能有影响, 且该值越小理论上出现的概率越高:
- 去呼吸效应在某些帧上可能会失效,涉及接口ss_mpi_venc_set_debreath_effect;
- QPMAP表不能强制指定skip块,SkipWeight表不能强制指定skip块,强制指定skip块可能会导致系统异常,驱动内部不做检查,用户自行保证;
- ROI背景低帧率编码可能会出现部分帧的非ROI区域不能编码为p_skip块,涉及接口ss_mpi_venc_set_roi_bg_frame_rate;
- 某些场景指定为p_skip帧的情况下可能会失效,如编码瞬时码率超过阈值时丢帧策略,涉及接口ss_mpi_venc_set_frame_lost_strategy;
- skip倾向性可能会失效,涉及接口ss_mpi_venc_set_skip_bias。
- 视频低部被强制编码I块,导致画面闪烁。
【相关数据类型及接口】
无。
ot_venc_svac3_abr
【说明】
定义SVAC3.0编码通道ABR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 bit_rate;
td_u32 vbv_buf_delay;
} ot_venc_svac3_abr;
【成员】
用以控制vbv虚拟缓存的容量(vbv_buf_size),vbv_buf_size等于为bit_rate乘以vbv_buf_delay,vbv_buf_delay单位为秒。码率控制算法使得vbv_buf_delay时间窗内的平均码率达到目标码率。vbv_buf_delay越大,编码质量越稳定。 |
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_svac3_cbr
【说明】
定义SVAC3.0编码通道CBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 bit_rate;
} ot_venc_svac3_cbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_svac3_vbr
【说明】
定义 SVAC3.0编码通道VBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
} ot_venc_svac3_vbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_svac3_avbr
【说明】
定义SVAC3.0编码通道AVBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
} ot_venc_svac3_avbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_svac3_qvbr
【说明】
定义SVAC3.0编码通道QVBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 target_bit_rate;
} ot_venc_svac3_qvbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_svac3_cvbr
【说明】
定义SVAC3.0编码通道CVBR属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 max_bit_rate;
td_u32 short_term_stats_time;
td_u32 long_term_stats_time;
td_u32 long_term_max_bit_rate;
td_u32 long_term_min_bit_rate;
} ot_venc_svac3_cvbr;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_svac3_fixqp
【说明】
定义SVAC3.0编码通道Fixqp属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 i_qp;
td_u32 p_qp;
td_u32 b_qp;
td_u32 vi_qp;
} ot_venc_svac3_fixqp;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
当GOP模式设置为SMART_CRR时,i_qp设置过小会导致编码器无法继续编码,用户需要设置合适的i_qp保证编码器正常运行,推荐值为24。
【相关数据类型及接口】
ot_venc_svac3_qpmap
【说明】
定义SVAC3.0编码通道QPMAP属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 stats_time;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_svac3_qpmap;
【成员】
【注意事项】
gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_svac3_rangeqp
【说明】
定义SVAC3.0编码通道rangeqp属性结构。
【定义】
typedef struct {
td_u32 gop;
td_u32 src_frame_rate;
td_u32 dst_frame_rate;
td_u32 i_qp;
td_u32 p_qp;
td_u32 b_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_p_qp;
td_u32 min_p_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_u32 max_b_qp;
td_u32 min_b_qp;
} ot_venc_svac3_rangeqp;
【成员】
【注意事项】
请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
【相关数据类型及接口】
ot_venc_gop_smart_crr
【说明】
定义SVAC3.0编码通道smart_crr属性结构。
【定义】
typedef struct {
td_u32 bg_interval;
td_s32 bg_qp_delta;
td_s32 vi_qp_delta;
td_s32 crr_split_num;
td_s32 crr_delay_num;
ot_venc_crr_recode_strategy strategy;
} ot_venc_gop_smart_crr;
【成员】
【注意事项】
- 请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。
- 参见ot_venc_gop_adv_smart_crr中关于crr_split_num以及去呼吸功能的相关描述。
【相关数据类型及接口】
ot_venc_svac3_vbr_param
【说明】
定义SVAC3.0协议编码通道VBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_s32 chg_pos;
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_svac3_vbr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_svac3_avbr_param
【说明】
定义SVAC3.0协议编码通道AVBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_s32 chg_pos;
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_s32 min_still_percent;
td_u32 max_still_qp;
td_u32 min_still_psnr;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_u32 min_qp_delta;
td_u32 motion_sensitivity;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_svac3_avbr_param;
【成员】
|
I帧:FrameLevelMinQp = min_qp_delta+ min_i_qp |
|
【注意事项】
无。
【相关数据类型及接口】
ot_venc_svac3_qvbr_param
【说明】
定义SVAC3.0协议编码通道QVBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_s32 max_bit_percent;
td_s32 min_bit_percent;
td_s32 max_psnr_fluctuate;
td_s32 min_psnr_fluctuate;
} ot_venc_svac3_qvbr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_svac3_cvbr_param
【说明】
定义SVAC3.0协议编码通道CVBR码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_u32 min_qp_delta;
td_u32 max_qp_delta;
td_u32 extra_bit_percent;
td_u32 long_term_stats_time_unit;
} ot_venc_svac3_cvbr_param;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_venc_svac3_cbr_param
【说明】
定义SVAC3.0协议编码通道CBR新版码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_i_proportion;
td_u32 min_i_proportion;
td_u32 max_qp;
td_u32 min_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_svac3_cbr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_svac3_abr_param
【说明】
定义SVAC3.0协议编码通道ABR新版码率控制模式高级参数配置。
【定义】
typedef struct {
td_u32 max_p_qp;
td_u32 min_p_qp;
td_u32 max_i_qp;
td_u32 min_i_qp;
td_u32 max_vi_qp;
td_u32 min_vi_qp;
td_s32 max_reencode_times;
td_bool qpmap_en;
ot_venc_rc_qpmap_mode qpmap_mode;
} ot_venc_svac3_abr_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_svac3_trans
【说明】
定义SVAC3.0协议编码通道变换量化的结构体。
【定义】
typedef struct {
td_u32 chroma_quant_param_disable_flag;
td_s32 chroma_quant_param_delta_cb;
td_s32 chroma_quant_param_delta_cr;
} ot_venc_svac3_trans;
【成员】
【注意事项】
- 在场景配置为OT_VENC_SCENE_0、 OT_VENC_SCENE_1、OT_VENC_SCENE_2、 OT_VENC_SCENE_3时,为平衡图像质量,chroma_quant_param_delta_cb、chroma_quant_param_delta_cr默认配置在不同芯片上的值:Hi3511CV100为0,Hi3516CV610为-5。
- chroma_quant_param_delta_cb/chroma_quant_param_delta_cr:在FIXQP模式下,驱动使用默认值-4,设置其他参数时画面将存在不同程度的偏色。
【相关数据类型及接口】
ot_venc_svac3_dblk
【说明】
定义SVAC3.0协议编码通道Deblocking的结构体。
【定义】
typedef struct {
td_u32 deblocking_filter_disable_flag;
td_u32 deblocking_filter_parameter_flag;
td_s32 alpha_c_offset;
td_s32 beta_offset;
td_u32 cross_patch_loop_filter_enable_flag;
} ot_venc_svac3_dblk;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_svac3_sao
【说明】
定义SVAC3.0协议编码通道Sao的结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_svac3_alf
【说明】
定义SVAC3.0协议编码通道ALF的结构体。
【定义】
typedef struct {
td_u32 luma_picture_alf_enable;
td_u32 chroma_picture_alf_enable;
td_u32 sharpness_strength;
} ot_venc_svac3_alf;
【成员】
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_svac3_privacy
【说明】
定义SVAC3.0协议编码通道隐私保护的结构体。
【定义】
【成员】
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_svac3_emulation
【说明】
定义SVAC3.0协议编码通道是否插入防竞争码的结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_venc_crr_recode_strategy
【说明】
定义SVAC3.0协议GOP模式为smart_crr时,crr帧对应位置正常显示帧的编码策略。
【定义】
typedef enum {
OT_VENC_CRR_RECODE_DISABLE = 0,
OT_VENC_CRR_RECODE_NORMAL = 1,
OT_VENC_CRR_RECODE_COPY = 2,
OT_VENC_CRR_RECODE_WRITE_BACK = 3,
OT_VENC_CRR_RECODE_BUTT,
} ot_venc_crr_recode_strategy;
【成员】
【注意事项】
- 如果存在多路设置OT_VENC_CRR_RECODE_WRITE_BACK模式,这些编码通道重编时分时复用同一个VB,要求这些通道的最大宽高设置相同。
- OT_VENC_CRR_RECODE_WRITE_BACK只推荐离线卷绕时大码流通道使用,不支持在线卷绕。此模式内部会多申请一个VB,因此非卷绕模式下建议使用正常重编OT_VENC_CRR_RECODE_NORMAL模式。
- 系统中存在卷绕通路时,非卷绕通路不能开重编功能,否则可能造成前级VB被占用,丢帧等情况。
- 卷绕模式下不支持OT_VENC_CRR_RECODE_NORMAL。
- Hi3511CV100的SMART_CRR模式不支持OT_VENC_CRR_RECODE_WRITE_BACK策略。
【相关数据类型及接口】
ot_venc_bitrate_strategy
【说明】
定义H.264/H.265/SVAC3.0编码码率策略。
【定义】
typedef enum {
OT_VENC_BITRATE_STRATEGY_AUTO = 0,
OT_VENC_BITRATE_STRATEGY_HIGH_QUALITY,
OT_VENC_BITRATE_STRATEGY_BIAS_QUALITY,
OT_VENC_BITRATE_STRATEGY_BIAS_BITRATE,
OT_VENC_BITRATE_STRATEGY_LOW_BITRATE,
OT_VENC_BITRATE_STRATEGY_BUTT
} ot_venc_bitrate_strategy;
【成员】
倾向码率策略,该配置码率倾向降低码率,图像质量和码率低于HIGH_QUALITY和BIAS_QUALITY,为码率策略第三档。 |
|
【注意事项】
- 无。
【相关数据类型及接口】
ot_venc_payload_support
【说明】
定义编码通道能力集协议控制位。
【定义】
typedef enum {
OT_VENC_PAYLOAD_SUPPORT_H264 = (1 << 0),
OT_VENC_PAYLOAD_SUPPORT_H265 = (1 << 1),
OT_VENC_PAYLOAD_SUPPORT_SVAC3 = (1 << 2),
OT_VENC_PAYLOAD_SUPPORT_JPEG = (1 << 3),
OT_VENC_PAYLOAD_SUPPORT_MJPEG = (1 << 4),
OT_VENC_PAYLOAD_SUPPORT_BUTT = ~((1 << 5) - 1),
} ot_venc_payload_support;
【成员】
【注意事项】
对于通道可以支持的协议类型,使用按位或的方式进行设置,比如OT_VENC_PAYLOAD_SUPPORT_H264|OT_VENC_PAYLOAD_SUPPORT_H265。
【相关数据类型及接口】
ot_venc_rc_mode_support
【说明】
定义编码通道能力集码控控制位。
【定义】
typedef enum {
OT_VENC_RC_SUPPORT_ABR = (1 << 0),
OT_VENC_RC_SUPPORT_CBR = (1 << 1),
OT_VENC_RC_SUPPORT_VBR = (1 << 2),
OT_VENC_RC_SUPPORT_AVBR = (1 << 3),
OT_VENC_RC_SUPPORT_QVBR = (1 << 4),
OT_VENC_RC_SUPPORT_CVBR = (1 << 5),
OT_VENC_RC_SUPPORT_FIXQP = (1 << 6),
OT_VENC_RC_SUPPORT_QPMAP = (1 << 7),
OT_VENC_RC_SUPPORT_RANGEQP = (1 << 8),
OT_VENC_RC_SUPPORT_BUTT = ~((1 << 9) - 1),
} ot_venc_rc_mode_support;
【成员】
【注意事项】
对于通道可以支持的码控类型,使用按位或的方式进行设置,比如OT_VENC_RC_SUPPORT_ABR|OT_VENC_RC_SUPPORT_CBR。
【相关数据类型及接口】
ot_venc_gop_support
【说明】
定义编码通道能力集GOP类型控制位。
【定义】
typedef enum {
OT_VENC_GOP_SUPPORT_NORMAL_P = (1 << OT_VENC_GOP_MODE_NORMAL_P),
OT_VENC_GOP_SUPPORT_DUAL_P = (1 << OT_VENC_GOP_MODE_DUAL_P),
OT_VENC_GOP_SUPPORT_SMART_P = (1 << OT_VENC_GOP_MODE_SMART_P),
OT_VENC_GOP_SUPPORT_ADV_SMART_P = (1 << OT_VENC_GOP_MODE_ADV_SMART_P),
OT_VENC_GOP_SUPPORT_BIPRED_B = (1 << OT_VENC_GOP_MODE_BIPRED_B),
OT_VENC_GOP_SUPPORT_LOW_DELAY_B = (1 << OT_VENC_GOP_MODE_LOW_DELAY_B),
OT_VENC_GOP_SUPPORT_SMART_CRR = (1 << OT_VENC_GOP_MODE_SMART_CRR),
OT_VENC_GOP_SUPPORT_SINGLE_SP = (1 << OT_VENC_GOP_MODE_SINGLE_SP),
OT_VENC_GOP_SUPPORT_I = (1 << OT_VENC_GOP_MODE_I),
OT_VENC_GOP_SUPPORT_ADV_SMART_CRR = (1 << OT_VENC_GOP_MODE_ADV_SMART_CRR),
OT_VENC_GOP_SUPPORT_BUTT = ~((1 << OT_VENC_GOP_MODE_BUTT) - 1),
} ot_venc_gop_support;
【成员】
【注意事项】
对于通道可以支持的GOP类型,使用按位或的方式进行设置,比如OT_VENC_GOP_SUPPORT_NORMAL_P|OT_VENC_GOP_SUPPORT_DUAL_P。
【相关数据类型及接口】
ot_venc_crr_recode_strategy_support
【说明】
定义编码通道能力集SMART_CRR重编策略控制位。
【定义】
typedef enum {
OT_VENC_CRR_SUPPORT_RECODE_DISABLE = (1 << OT_VENC_CRR_RECODE_DISABLE),
OT_VENC_CRR_SUPPORT_RECODE_NORMAL = (1 << OT_VENC_CRR_RECODE_NORMAL),
OT_VENC_CRR_SUPPORT_RECODE_COPY = (1 << OT_VENC_CRR_RECODE_COPY),
OT_VENC_CRR_SUPPORT_RECODE_WRITE_BACK = (1 << OT_VENC_CRR_RECODE_WRITE_BACK),
OT_VENC_CRR_SUPPORT_RECODE_BUTT = ~((1 << OT_VENC_CRR_RECODE_BUTT) - 1),
} ot_venc_crr_recode_strategy_support;
【成员】
【注意事项】
对于通道可以支持的重编策略,使用按位或的方式进行设置,比如OT_VENC_CRR_SUPPORT_RECODE_DISABLE|OT_VENC_CRR_SUPPORT_RECODE_NORMAL。
【相关数据类型及接口】
ot_venc_bitrate_strategy_support
【说明】
定义编码通道能力集低码率策略控制位。
【定义】
typedef enum {
OT_VENC_BITRATE_STRATEGY_SUPPORT_AUTO = (1 << OT_VENC_BITRATE_STRATEGY_AUTO),
OT_VENC_BITRATE_STRATEGY_SUPPORT_HIGH_QUALITY = (1 << OT_VENC_BITRATE_STRATEGY_HIGH_QUALITY),
OT_VENC_BITRATE_STRATEGY_SUPPORT_BIAS_QUALITY = (1 << OT_VENC_BITRATE_STRATEGY_BIAS_QUALITY),
OT_VENC_BITRATE_STRATEGY_SUPPORT_BIAS_BITRATE = (1 << OT_VENC_BITRATE_STRATEGY_BIAS_BITRATE),
OT_VENC_BITRATE_STRATEGY_SUPPORT_LOW_BITRATE = (1 << OT_VENC_BITRATE_STRATEGY_LOW_BITRATE),
OT_VENC_BITRATE_STRATEGY_SUPPORT_BUTT = ~((1 << OT_VENC_BITRATE_STRATEGY_BUTT) - 1),
} ot_venc_bitrate_strategy_support;
【成员】
【注意事项】
对于通道可以支持的低码率策略,使用按位或的方式进行设置,比如OT_VENC_BITRATE_STRATEGY_SUPPORT_AUTO|OT_VENC_BITRATE_STRATEGY_SUPPORT_HIGH_QUALITY。
【相关数据类型及接口】
ot_venc_svc_version_support
【说明】
定义编码通道能力集智能编码控制位。
【定义】
typedef enum {
OT_VENC_SVC_SUPPORT_NONE = 0,
OT_VENC_SVC_SUPPORT_V1 = (1 << OT_VENC_SVC_V1),
OT_VENC_SVC_SUPPORT_V2 = (1 << OT_VENC_SVC_V2),
OT_VENC_SVC_SUPPORT_BUTT = ~((1 << OT_VENC_SVC_BUTT) - 1),
} ot_venc_svc_version_support;
【成员】
【注意事项】
对于通道可以支持的智能编码版本,使用按位或的方式进行设置,比如OT_VENC_SVC_SUPPORT_V1|OT_VENC_SVC_SUPPORT_V2。
【相关数据类型及接口】
ot_venc_attr_capability
【说明】
定义编码器属性能力集结构体。
【定义】
typedef struct {
td_u32 payload_support;
td_u32 max_pic_width;
td_u32 max_pic_height;
td_u32 buf_size;
td_bool rcn_ref_share_buf_en;
td_u32 frame_buf_ratio;
} ot_venc_attr_capability;
【成员】
|
可配置范围参考定义ot_venc_payload_support,Hi3511CV100不支持JPEG/MJPEG类型。 |
|
|
推荐值:一幅最大编码图像大小。推荐值为MaxPicWidth x MaxPicHeight x 1.5byte。 调用接口ss_mpi_venc_set_mod_param设置模块参数min_buf_mode可以选择取值范围限制方式。 2、min_buf_mode = 1,用户保证buffer大小合理性: |
|
【注意事项】
能力集使能时,创建通道的参数ot_venc_attr中max_pic_width、max_pic_height、buf_size、rcn_ref_share_buf_en、frame_buf_ratio要和能力集设置保持一致,否则通道会创建失败。
【相关数据类型及接口】
ot_venc_rc_capability
【说明】
定义编码器码率控制能力集结构体。
【定义】
typedef struct {
td_u32 rc_mode_support; /* RW; range:[0, ~OT_VENC_RC_SUPPORT_BUTT]; */
td_u32 min_gop; /* RW; range:[1, min_bg_interval]; */
td_u32 max_gop; /* RW; range:[1, max_bg_interval]; */
td_u32 max_stats_time; /* RW; range:[1, 60]; */
td_u32 max_src_frame_rate; /* RW; range:[1, 240]; */
td_u32 max_short_term_stats_time; /* RW; range:[1, 120]; */
td_u32 max_long_term_stats_time; /* RW; range:[1, 1440]; */
} ot_venc_rc_capability;
【成员】
【注意事项】
max_stats_time\max_src_frame_rate\max_short_term_stats_time\max_long_term_stats_time具体含义参考各个协议码控属性结构体对应的stats_time\src_frame_rate\short_term_stats_time\long_term_stats_time参数说明,比如ot_venc_h264_abr。
【相关数据类型及接口】
ot_venc_gop_capability
【说明】
定义编码器码GOP属性能力集结构体。
【定义】
typedef struct {
td_u32 gop_mode_support;
td_u32 crr_recode_strategy_support;
td_u32 min_bg_interval;
td_u32 max_bg_interval;
td_bool skip_ref_support;
td_u32 max_frame_num;
} ot_venc_gop_capability;
【成员】
【注意事项】
- skip_ref_support参数,在Hi3516CV610\Hi3516CV608以下情况下需要使能:使能低质量模式复合编码时;参考重构复用使能时设置ot_venc_ref_param enhance != 0; h264 svc-t profile。其他情况或芯片不需要设置。
- max_frame_num设置最大帧存个数,具体可以参考GOP结构进行计算。NORMAL_P、SINGLE_SP(sp_interval==0)需要2个帧存;SINGLE_SP(sp_interval!=0)、DUAL_P、SMART_P、SMART_CRR需要3个帧存。使用4倍跳帧参考、svc-t需要相应通道增加1个帧存。使能参考帧重构帧复用,可以减少1个帧存。
【相关数据类型及接口】
ot_venc_feature_capability
【说明】
定义编码器码算法特性能力集。
【定义】
typedef struct {
td_bool user_data_support;
td_bool watermark_support;
td_bool deblur_support;
td_bool quality_balance_support;
td_bool md_support;
td_bool jpeg_roi_support;
td_u32 bitrate_strategy_support; /* RW; range:[1, ~OT_VENC_CRR_SUPPORT_RECODE_BUTT]; */
td_u32 svc_support; /* RW; range:[0, ~OT_VENC_SVC_SUPPORT_BUTT]; */
td_u32 svc_v2_max_ref_num;
} ot_venc_feature_capability;
【成员】
【注意事项】
-
md_support 仅在ot_venc_md_param 参数需要使能sad_stats_en或者level_stats_en才需要设置。由于当前版本不支持sad_stats_en、level_stats_en,因此保持默认值即可。
-
能力集暂不支持设置watermark_support,保持默认值0即可,不影响原来水印功能使用。内部仍然保持原来动态申请的方式申请需要的MMZ内存。
【相关数据类型及接口】
ot_venc_chn_capability
【说明】
定义编码器码通道能力集。
【定义】
typedef struct {
td_bool enable;
ot_venc_attr_capability attr_capability;
ot_venc_rc_capability rc_capability;
ot_venc_gop_capability gop_capability;
ot_venc_feature_capability feature_capability;
} ot_venc_chn_capability;
【成员】
【注意事项】
使能能力集后在创建通道时将根据能力集设置预先申请后续可能使用到的通道OS和MMZ内存。
【相关数据类型及接口】
ot_venc_export_frame_type
【说明】
定义驱动外部码控帧类型。
【定义】
typedef enum {
VENC_EXPORT_FRAME_TYPE_I = 0, /* i frame */
VENC_EXPORT_FRAME_TYPE_P, /* p frame */
VENC_EXPORT_FRAME_TYPE_B, /* b frame */
VENC_EXPORT_FRAME_TYPE_SP, /* special p frame in dual p and singlesp */
VENC_EXPORT_FRAME_TYPE_VI, /* virtual i in smartp and smartcrr */
VENC_EXPORT_FRAME_TYPE_BUTT,
} ot_venc_export_frame_type;
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_venc_export_frame_status
【说明】
编码驱动中帧的工作状态。
【定义】
typedef enum {
VENC_EXPORT_FRAME_STATUS_INIT = 0,
VENC_EXPORT_FRAME_STATUS_NORMAL,
VENC_EXPORT_FRAME_STATUS_LOST,
VENC_EXPORT_FRAME_STATUS_REENCODE,
VENC_EXPORT_FRAME_STATUS_BUTT
} ot_venc_export_frame_status;
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_venc_export_rc_attr
【说明】
定义驱动外部码控属性。
【定义】
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_venc_export_rc_frame_info
【说明】
定义驱动外部码控帧状态信息。
【定义】
typedef struct {
ot_venc_export_frame_type cur_frame_type;
ot_venc_export_frame_status last_frame_status;
td_u32 last_frm_bits;
td_u32 last_madi_val;
td_u32 last_madp_val;
td_u32 last_move_scene_sum;
} ot_venc_export_rc_frame_info;
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_venc_export_rc_enc_info
【说明】
定义驱动外部码控决策结果。
【定义】
typedef struct {
td_u32 target_bits;
td_u32 max_qp;
td_u32 min_qp;
td_u32 start_qp;
} ot_venc_export_rc_enc_info;
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_venc_export_callback
【说明】
定义驱动外部码控回调函数类型。
【定义】
typedef struct {
td_s32 (*venc_export_rc_init)(td_s32 chn, const ot_venc_export_rc_attr *user_rc_attr);
td_s32 (*venc_export_rc_deinit)(td_s32 chn);
td_s32 (*venc_export_rc_reset)(td_s32 chn);
td_s32 (*venc_export_rc_change)(td_s32 chn, const ot_venc_export_rc_attr *user_rc_attr);
td_s32 (*venc_export_rc_calc)(td_s32 chn, const ot_venc_export_rc_frame_info *rc_frame_info,
ot_venc_export_rc_enc_info *rc_enc_info);
} ot_venc_export_callback;
【成员】
码控计算函数,每一帧编码前被调用。外部码控算法需要根据提供的信息(rc_frame_info)计算出当前帧的码控信息(rc_enc_info)。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_venc_register_export_callback
【说明】
定义外部驱动的接口注册函数类型。
【定义】
typedef td_s32 ot_venc_register_export_callback(td_s32 chn, const ot_venc_export_callback *export_callback);
【成员】
无
【注意事项】
无
【相关数据类型及接口】
无
ot_venc_export_symbol
【说明】
定义驱动外部码控回调接口。
【定义】
typedef struct {
ot_venc_register_export_callback *register_export_callback;
} ot_venc_export_symbol;
【成员】
【注意事项】
- register_export_callback在驱动内部被赋值,使用者调用该函数。成功返回0,失败返回对应的错误码。
- 只能在通道未创建的情况下注册外部码控。
- 注册回调函数全部为0表示不使用外部码控。
- 如果使用外部码控,需要保证所有回调函数非空。
【相关数据类型及接口】
无
ot_venc_fast_enc_param
【说明】
定义快速编码参数。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ss_mpi_venc_set_fast_enc_param
ot_venc_aiseg_map_info
【说明】
定义语义分割图信息的结构体。
【定义】
typedef struct {
td_u8 map_class_num;
td_u8 map_label[OT_VENC_MAX_AISEG_CLASS_NUM];
td_u8 map_value[OT_VENC_MAX_AISEG_CLASS_NUM];
ot_video_frame_info user_frame;
} ot_venc_aiseg_map_info;
【成员】
|
取值范围:[0, OT_VENC_MAX_AISEG_CLASS_NUM] |
|
【注意事项】
- 本结构仅用于语义分割图编码通道送帧,仅SVAC3.0协议支持语义分割图编码。
- 语义分割图像素标签与像素标准映射值需要用户指定,即需要用户完成像素映射动作。
- user_frame存储的是用户经过像素映射后的语义分割图,格式为YUV400。
- 仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_fg_mode
【说明】
定义编码前景模式枚举。
【定义】
typedef enum {
OT_VENC_FG_MODE_FOREGROUND = 0,
OT_VENC_FG_MODE_BALANCE,
OT_VENC_FG_MODE_BUTT,
} ot_venc_fg_mode;
【成员】
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_filter_effect
【说明】
定义编码预滤波参数结构体。
【定义】
typedef struct {
td_bool enable;
ot_venc_prefilter_mode filter_mode;
ot_venc_prefilter_range filter_range;
ot_venc_prefilter_strength filter_strength;
} ot_venc_filter_effect;
【成员】
|
具体定义见ot_venc_prefilter_mode,默认值:1。 |
|
|
具体定义见ot_venc_prefilter_range,默认值:1。 |
|
|
具体定义见ot_venc_prefilter_strength,默认值:2。 |
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_prefilter_mode
【说明】
定义预滤波模式枚举。
【定义】
typedef enum {
OT_VENC_PREFILTER_MODE_0 = 0,
OT_VENC_PREFILTER_MODE_1,
OT_VENC_PREFILTER_MODE_BUTT
} ot_venc_prefilter_mode;
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_prefilter_range
【说明】
定义前处理滤波区域范围枚举。
【定义】
typedef enum {
OT_VENC_PREFILTER_RANGE_0 = 0,
OT_VENC_PREFILTER_RANGE_1,
OT_VENC_PREFILTER_RANGE_2,
OT_VENC_PREFILTER_RANGE_BUTT
} ot_venc_prefilter_range;
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_prefilter_strength
【说明】
定义预滤波强度枚举。
【定义】
typedef enum {
OT_VENC_PREFILTER_STRENGTH_1 = 1,
OT_VENC_PREFILTER_STRENGTH_2,
OT_VENC_PREFILTER_STRENGTH_3,
OT_VENC_PREFILTER_STRENGTH_4,
OT_VENC_PREFILTER_STRENGTH_BUTT
} ot_venc_prefilter_strength;
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
ot_venc_svac3_aiseg
【说明】
定义SVAC3.0语义分割功能参数结构体。
【定义】
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
错误码
视频编码API错误码如表1所示。
表 1 视频编码API错误码

