跳转至

视频编码

概述

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

不同型号的解决方案支持不同的编码规格,解决方案支持的编码规格如表1所示。

表 1 解决方案编码规格

解决方案

H.264

JPEG

MOTION JPEG

H.265

SVAC3.0

BP

MP

HP

MP

Main 10

MP

High 8

Hi3519DV500

支持

支持

支持

支持

支持

支持

不支持

不支持

不支持

Hi3516CV610

支持

支持

支持

支持

支持

支持

不支持

支持

不支持

Hi3516CV608

支持

支持

支持

支持

支持

支持

不支持

支持

不支持

Hi3511CV100

支持

支持

支持

不支持

不支持

支持

不支持

支持

支持

功能描述

编码数据流程图

图 1 VENC的数据流程图

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

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直接接收源图像,进行编码。

说明:

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

REGION模块支持提供对图像内容的遮挡/叠加信息,编码前先完成遮挡/叠加,再进行编码,输出码流。

编码通道

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

图 1 编码通道功能模块划分

码率控制

  • 码率控制器实现对编码码率进行控制。
  • 从信息学的角度分析,图像的压缩比越低,压缩图像的质量越高;图像压缩比例越高,压缩图像的质量越低。在场景变化的情况下,追求图像质量稳定,则编码码率会波动较大;如追求编码码率稳定,则图像质量会波动较大。以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

CBR(Constant Bit Rate)固定比特率。即在码率统计时间内保证编码码率平稳。码率稳定主要由两个量来评估。

  • 码率统计时间stats_time

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

  • 行级码率控制调节幅度row_qp_delta

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

ABR

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

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

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

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

CVBR (Constrained Variable Bit Rate) 是以VBR为基础,旨在提供平稳的图像质量的码控算法,同时对VBR的码率进行限制,以满足传输带宽以及存储空间的要求。具体而言,CVBR设置了短期与长期码率的限制。

  • 短期码率限制确保网络带宽对传输的要求;
  • 长期码率限制确保长时间视频录制时,存储设备有足够的空间储存数据。

编码时,短期码率依据长期码率的设置和码率的实际使用情况调整:当实际的平均码率低于长期目标码率时,CVBR会提供更高的短期码率上限;反之则降低短期码率上限。由此,可以将在场景简单时节省码率用于场景复杂的情况,以提供更加平稳的图像质量,并保证长期码率在限制范围以内。

FIXQP

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

RANGEQP

指定QP区间值。在码率统计时间内,编码图像所有宏块QP值都在用户指定范围内波动,I帧和P帧的QP值可以分别设置。

QPMAP

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)排放位置

图 2 H.264 QPMAP MB排放位置

图 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结构类型

GOP 模式

参考帧个数

Hi3519DV500

Hi3516CV610

Hi3516CV608

Hi3511CV100

H.264/H.265

H.264/H.265/SVAC3.0

H.264/H.265/SVAC3.0

H.264/H.265/SVAC3.0

OT_VENC_GOP_MODE_I

0

支持

支持

支持

支持

OT_VENC_GOP_MODE_NORMAL_P

1

支持

支持

支持

支持

OT_VENC_GOP_MODE_DUAL_P

2

支持

支持

支持

支持

OT_VENC_GOP_MODE_SMART_P

2

支持

支持

支持

支持

OT_VENC_GOP_MODE_ADV_SMART_P

2

不支持

不支持

不支持

不支持

OT_VENC_GOP_MODE_BIPRED_B

2

不支持

不支持

不支持

不支持

OT_VENC_GOP_MODE_LOW_DELAY_B

2

不支持

不支持

不支持

SVAC3.0支持

OT_VENC_GOP_MODE_SMART_CRR

2

不支持

SVAC3.0支持

不支持

SVAC3.0支持

OT_VENC_GOP_MODE_ADV_SMART_CRR

2

不支持

不支持

不支持

SVAC3.0支持

OT_VENC_GOP_MODE_SINGLE_SP

1/2

支持

支持(SVAC3.0不支持)

支持(SVAC3.0不支持)

支持(SVAC3.0不支持)

  • 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所示。

须知:

  1. dual_p模式且sp_interval不等于0下配置高级跳帧参考需要满足如下条件:base*(enhance+1)= sp_interval,例如:4倍高级跳帧参考(base=2,enhance=1),那么dual_p的sp_interval =2*(1+1)=4。
  2. single_sp模式的高级跳帧参考需要满足如下条件:base固定为1,pred_en固定为TRUE,sp_interval不等于0时,需要满足如下条件:sp_interval % (enhance + 1) = 0,例如:4倍高级跳帧参考(enhance = 3),那么single_sp的sp_interval要是4的倍数。
  3. 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时,不支持高级跳帧参考。
  4. smart_crr/adv_smart_crr/lowdelay_b 不支持高级跳帧参考。

图 1 normal_p高级跳帧参考示意图

图 2 smart_p高级跳帧参考示意图

图 3 adv_smart_p高级跳帧参考示意图

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

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

图 6 bipred_b高级跳帧参考示意图

图 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等。

图 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。

图 1 ROI示意图

非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帧过大带来的网络冲击,降低网传延时,降低网络传输出错的概率。

使用方式

  1. 通过接口ss_mpi_venc_set_intra_refresh设置刷新使能enable;
  2. 设置刷新使能后SDK会自动根据设置的刷新行数或列数refresh_num从每个GOP的第一帧开始按行(从上至下)或按列(从左至右)完成Intra宏块刷新;刷新间隔为GOP;
  3. H.264/H.265协议时SDK会自动把每次按行刷新第一帧的帧内预测宏块转换为一个I Slice,SVAC3.0协议内部刷新I宏块;
  4. 设置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个包,且包类型为数据包。

图 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层不同效果的图像,其中基础层具备马赛克效果从而实现隐私保护的特性。以下两个核心接口必需调用:

须知:

  • 由于隐私保护功能使用的送帧接口与普通功能的送帧接口不同,在动态开关隐私保护功能时请及时切换送帧方式。
  • 当前仅Hi3511CV100支持此功能。

语义分割编码

语义分割编码功能可使编码器输出的SVAC3.0标准码流携带语义分割信息。语义分割信息的定义参见SVAC3.0标准协议文档第7.1.15.5章节《视频结构化信息扩展语法》和第I.1.13章节《智能分割信息语法》。此功能可使具备语义分割能力的前端设备向后端设备传输语义分割数据,从而减少后端设备的算力资源消耗。VENC支持点、框、图三种模式,其中图模式需要用户启动一个专用编码通道用于编码语义分割图,将此通道的属性is_aiseg_chn设置为true,并通过接口绑定至主图通道。主图通道将从语义分割图通道提取出码流并编码进主码流中,用户无需从语义分割通道获取码流。核心接口如下:

须知:

  • 语义分割图通道不建议开启VENC的其他功能,以确保语义分割通道的内存和性能达到最优。
  • 目前仅Hi3511CV100支持此功能。
  • 点/框模式下,用户需按照如下内存排布方式填充点框信息: 图 1 框模式数据结构内存排布

图 2 点模式数据结构内存排布

API参考

视频编码模块主要提供视频编码通道的创建和销毁、视频编码通道的复位、开启和停止接收图像、设置和获取编码通道属性、获取和释放码流等功能。

注意:Hi3519DV500/Hi3516CV610/Hi3516CV608不支持PRORES相关接口。Hi3511CV100不支持JPEG/MJPEG相关接口。

该功能模块提供以下MPI:

ss_mpi_venc_create_chn

【描述】

创建编码通道。

【语法】

td_s32 ss_mpi_venc_create_chn(ot_venc_chn chn, const ot_venc_chn_attr *attr);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

attr

编码通道属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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.264/H.265/SVAC3.0

JPEG/MJPEG

WIDTH

HEIGHT

MAX_AREA

MIN_ALIGN

WIDTH

HEIGHT

MIN_ALIGN

MAX

MIN

MAX

MIN

MAX

MIN

MAX

MIN

Hi3519DV500

6144

114

6144

114

6144*6144

2

16384

32

16384

32

2

Hi3516CV608

2304

114

2304

114

2304*1296

2

16384

32

16384

32

2

Hi3516CV610-10B

2880

114

2880

114

2880*1620

2

16384

32

16384

32

2

Hi3516CV610-20S

Hi3516CV610-20G

Hi3516CV610-00S

Hi3516CV610-00G

3840

114

3840

114

3840*2160

2

16384

32

16384

32

2

Hi3511CV100

8192

114

8192

114

8192*8192

2

NA

NA

NA

NA

NA

  • 部分解决方案支持多编码器并行编码,H.265编码支持垂直划分Tile,根据通道宽高和码率控制器输出帧率决定tile划分数目;H.264编码支持水平划分Tile(实际是划分slice),根据通道宽高和帧率决定Tile划分数目。Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100不支持。
  • 编码器属性必须设置编码码流buffer大小、获取码流方式、编码profile等,表2详细描述了各种协议的各项属性的特性。

表 2 编码器属性的约束

编码协议

编码方式

码流buffer大小

获取码流模式

编码profile

H.264

Frame

  • 当H.264 mini_buf_mode=0时,Buffer≥ MaxPicwidth x MaxPicheight x 3/4;
  • 当H.264 mini_buf_mode=1时,Buffer≥32*1024 byte;

Frame/Slice

Baseline

Mainprofile

Highprofile

svc-t

MJPEG

Frame

  • Jpeg mini_buf_mode=0时,Buffer≥ MaxPicwidth * MaxPicheight;
  • Jpeg mini_buf_mode=1时,Buffer≥32*1024 byte;

Frame/Ecs

Baseline

JPEG

Frame

  • Jpeg mini_buf_mode=0时,Buffer≥ MaxPicwidth * MaxPicheight;
  • Jpeg mini_buf_mode=1时,Buffer≥32*1024 byte;

Frame/Ecs

Baseline

H.265

Frame

  • H.265 mini_buf_mode=0时,Buffer≥ MaxPicwidth * MaxPicheight x 3/4;
  • H.265 mini_buf_mode=1时,Buffer≥32*1024 byte

Frame/Slice

Main profile

Main 10 profile

  • H.265 mini_buf_mode=0时,Buffer≥ MaxPicwidth * MaxPicheight *(3/4)*(5/4);
  • H.265 mini_buf_mode=1时,Buffer≥32*1024 byte

Frame/Slice

Main 10 profile

Prores

Frame

Buffer≥ MaxPicwidth x MaxPicheight x 2;

Frame

Proxy

422(LT)

422

422(HQ)

SVAC3.0

Frame

  • SVAC3.0 mini_buf_mode=0时,Buffer≥ MaxPicwidth * MaxPicheight x 3/4;
  • SVAC3.0 mini_buf_mode=1时,Buffer≥32*1024 byte

Frame/Patch

Main profile

High 8 profile

  • 为了保证本芯片自编自解的解码性能也能达到最优,当只划分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

【描述】

销毁编码通道。

【语法】

td_s32 ss_mpi_venc_destroy_chn(ot_venc_chn chn);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

复位通道。

【语法】

td_s32 ss_mpi_venc_reset_chn(ot_venc_chn chn);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

开启编码通道接收输入图像,允许指定接收帧数,超出指定的帧数后自动停止接收图像。

【语法】

td_s32 ss_mpi_venc_start_chn(ot_venc_chn chn, const ot_venc_start_param *recv_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

recv_param

接收图像参数结构体,用于指定需要接收的图像帧数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 如果通道未创建,则返回失败OT_ERR_VENC_UNEXIST。
  • 需要接收的图像帧数设置为-1时表示不指定帧数。
  • 如果通道已经开始接收图像,没有停止接收图像前再一次调用此接口指定接收帧数,返回操作不允许。
  • 如果通道指定接收帧数接收图像,没有停止接收图像前允许再一次调用此接口不指定帧数接收图像。
  • 只有开启接收之后编码器才开始接收图像编码。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_stop_chn

【描述】

停止编码通道接收输入图像。

【语法】

td_s32 ss_mpi_venc_stop_chn(ot_venc_chn chn);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 如果通道未创建,则返回失败。
  • 此接口并不判断当前是否停止接收,即允许重复停止接收不返回错误。
  • 此接口用于编码通道停止接收图像来编码,在编码通道销毁或复位前必须停止接收图像。
  • 调用此接口仅停止接收原始数据编码,码流buffer并不会被清除。
  • 此接口在部分场景(如缩小裁剪等需要VGS模块的场景)下耗时较长。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_query_status

【描述】

查询编码通道状态。

【语法】

td_s32 ss_mpi_venc_query_status(ot_venc_chn chn, ot_venc_chn_status *status);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

status

编码通道的状态。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

设置编码通道属性。

【语法】

td_s32 ss_mpi_venc_set_chn_attr(ot_venc_chn chn, const ot_venc_chn_attr *chn_attr);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

chn_attr

编码通道属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取编码通道属性。

【语法】

td_s32 ss_mpi_venc_get_chn_attr(ot_venc_chn chn, ot_venc_chn_attr *chn_attr);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

chn_attr

编码通道属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 获取未创建的通道的属性,返回失败OT_ERR_VENC_UNEXIST。
  • 如果chn_attr为空,则返回失败。
  • 在切换GOP模式时,获取的通道属性是已设置的最新的属性。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_stream

【描述】

获取编码的码流。

【语法】

td_s32 ss_mpi_venc_get_stream(ot_venc_chn chn, ot_venc_stream *stream, td_s32 milli_sec);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

stream

码流结构体。

输出

milli_sec

获取码流超时时间。

取值范围:[-1, +∞)

  • -1:阻塞。
  • 0:非阻塞。
  • 大于0:超时时间。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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只在单包模式才有意义。

    图 1 码流包结构图

    • 两种模式可通过调用接口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

【描述】

释放码流缓存。

【语法】

td_s32 ss_mpi_venc_release_stream(ot_venc_chn chn, const ot_venc_stream *stream);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

stream

码流结构体。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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的物理地址和大小。

【语法】

td_s32 ss_mpi_venc_get_stream_buf_info(ot_venc_chn chn, ot_venc_stream_buf_info *stream_buf_info);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

stream_buf_info

码流buffer信息结构体。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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所示。

图 1 码流包结构图

【相关主题】

无。

ss_mpi_venc_insert_user_data

【描述】

插入用户数据。

【语法】

td_s32 ss_mpi_venc_insert_user_data(ot_venc_chn chn, td_u8 *data, td_u32 len);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

data

用户数据。

输入

len

用户数据长度。

H.264/H.265/SVAC3.0取值范围:(0, max_user_data_len],以byte为单位。

Mjpege/Jpege取值范围:(0, 1024],以byte为单位

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

支持用户发送原始图像进行编码。

【语法】

td_s32 ss_mpi_venc_send_frame(ot_venc_chn chn, const ot_video_frame_info *frame, td_s32 milli_sec);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

frame

原始图像信息结构。

ot_video_frame_info参考“系统控制”章节。

输入

milli_sec

发送图像超时时间。

取值范围:[-1,+∞)

  • -1:阻塞。
  • 0:非阻塞。
  • > 0:超时时间。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

frame

原始图像信息结构。

输入

milli_sec

发送图像超时时间。

取值范围:[-1,+∞)

  • -1:阻塞。
  • 0:非阻塞。
  • >0:超时时间。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

frame

原始图像码率控制信息结构体。

输入

milli_sec

发送图像超时时间。

取值范围:[-1,+∞)

  • -1:阻塞。
  • 0:非阻塞。
  • >0:超时时间。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

frame

图像及信息结构体。

输入

milli_sec

发送图像超时时间。

取值范围:[-1,+∞)

-1:阻塞。

0:非阻塞。

大于0:超时时间。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

frame

图像及抠图信息结构体。

输入

milli_sec

发送图像超时时间。

取值范围:[-1,+∞)

-1:阻塞。

0:非阻塞。

大于0:超时时间。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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。

【语法】

td_s32 ss_mpi_venc_send_qpmap(ot_venc_chn chn, const ot_venc_user_qpmap *qpmap)

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

qpmap

qpmap。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

设置编码通道配置。

【语法】

td_s32 ss_mpi_venc_set_chn_config(ot_venc_chn chn, const ot_venc_chn_config *chn_config);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

chn_config

编码通道配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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

【描述】

获取编码通道配置。

【语法】

td_s32 ss_mpi_venc_get_chn_config(ot_venc_chn chn, ot_venc_chn_config *chn_config);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

chn_config

编码通道配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_request_vi

【描述】

请求VI(虚拟I帧)帧。

【语法】

td_s32 ss_mpi_venc_request_vi(ot_venc_chn chn);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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帧。

【语法】

td_s32 ss_mpi_venc_request_idr(ot_venc_chn chn, td_bool instant);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

instant

是否使能立即编码IDR帧。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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帧。

【语法】

td_s32 ss_mpi_venc_enable_idr(ot_venc_chn chn, td_bool enable_idr);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

enable_idr

是否使能的标志。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取编码通道对应的设备文件句柄。

【语法】

td_s32 ss_mpi_venc_get_fd(ot_venc_chn chn);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[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属性。

【语法】

td_s32 ss_mpi_venc_set_roi_attr(ot_venc_chn chn, const ot_venc_roi_attr *roi_attr);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

roi_attr

ROI区域参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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配置属性。

【语法】

td_s32 ss_mpi_venc_get_roi_attr(ot_venc_chn chn, td_u32 idx,ot_venc_roi_attr *roi_attr);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

idx

H.264/H.265/SVAC3.0协议编码通道ROI区域索引。

输入

roi_attr

对应ROI区域的配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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属性。

【语法】

td_s32 ss_mpi_venc_set_roi_attr_ex(ot_venc_chn chn, const ot_venc_roi_attr_ex *roi_attr_ex);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

roi_attr_ex

ROI区域参数。

除index参数外,其他参数都为数组,数组下标:

0:代表I帧的ROI参数;

1:代表P/B帧的ROI参数;

2:代表VI帧的ROI参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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属性。

【语法】

td_s32 ss_mpi_venc_get_roi_attr_ex(ot_venc_chn chn, td_u32 idx, ot_venc_roi_attr_ex *roi_attr_ex);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

idx

H.264/H.265/SVAC3.0协议编码通道ROI区域索引。

输入

roi_attr_ex

对应ROI区域的配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

roi_bg_frame_rate

非ROI区域帧率控制参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

roi_bg_frame_rate

非ROI区域帧率的配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h264_intra_pred

H.264协议编码通道的帧内预测配置。

输入

【返回值】

返回值

描述

0

成功

非0

失败,返回错误码。

【需求】

  • 头文件: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协议编码通道的帧内预测属性。

【语法】

td_s32 ss_mpi_venc_get_h264_intra_pred(ot_venc_chn chn, ot_venc_h264_intra_pred *h264_intra_pred);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h264_intra_pred

H.264协议编码通道的帧内预测参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.264协议编码通道的帧内预测方式。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_h264_trans

【描述】

设置H.264协议编码通道的变换、量化的属性。

【语法】

td_s32 ss_mpi_venc_set_h264_trans(ot_venc_chn chn, const ot_venc_h264_trans *h264_trans);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h264_trans

H.264协议编码通道的变换、量化属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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参数

Profile

intra_trans_mode

inter_trans_mode

scaling_list_valid

Baseline /main profile

1

1

false

High profile/svc-t

0

0

false

  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h264_trans接口,获取当前编码通道的trans配置,然后再进行设置。
  • Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100不支持量化表。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_h264_trans

【描述】

获取H.264协议编码通道的变换、量化属性。

【语法】

td_s32 ss_mpi_venc_get_h264_trans(ot_venc_chn chn, ot_venc_h264_trans *h264_trans);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h264_trans

H.264协议编码通道的变换、量化参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.264协议编码通道的变换、量化配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_h264_entropy

【描述】

设置H.264协议编码通道的熵编码模式。

【语法】

td_s32 ss_mpi_venc_set_h264_entropy(ot_venc_chn chn, const ot_venc_h264_entropy *h264_entropy);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h264_entropy

H.264协议编码通道的熵编码模式。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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下系统默认熵编码参数

Profile

entropy_coding_mode_i

entropy_coding_mode_p

entropy_coding_mode_b

Baseline

0

0

0

Main profile/High profile

1

1

1

svc-t

1

1

1

  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 建议用户在调用此接口之前,先调用ss_mpi_venc_get_h264_entropy接口,获取当前编码通道的Entropy配置,然后再进行设置。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_h264_entropy

【描述】

获取H.264协议编码通道的熵编码属性。

【语法】

td_s32 ss_mpi_venc_get_h264_entropy(ot_venc_chn chn, ot_venc_h264_entropy *h264_entropy);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h264_entropy

H.264协议编码通道的熵编码属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.264协议编码通道的熵编码配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_h264_dblk

【描述】

设置H.264协议编码通道的Deblocking类型。

【语法】

td_s32 ss_mpi_venc_set_h264_dblk(ot_venc_chn chn, const ot_venc_h264_dblk *h264_dblk);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h264_dblk

H.264协议编码通道的Deblocking参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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类型。

【语法】

td_s32 ss_mpi_venc_get_h264_dblk(ot_venc_chn chn, ot_venc_h264_dblk *h264_dblk);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h264_dblk

H.264协议编码通道的dblk属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.264协议编码通道的dblk配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_h264_vui

【描述】

设置H.264协议编码通道的vui参数。

【语法】

td_s32 ss_mpi_venc_set_h264_vui(ot_venc_chn chn, const ot_venc_h264_vui *h264_vui);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h264_vui

H.264协议编码通道的Vui参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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配置。

【语法】

td_s32 ss_mpi_venc_get_h264_vui(ot_venc_chn chn, ot_venc_h264_vui *h264_vui);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h264_vui

H.264协议编码通道的Vui属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.264协议编码通道的Vui配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_h265_vui

【描述】

设置H.265协议编码通道的VUI参数。

【语法】

td_s32 ss_mpi_venc_set_h265_vui(ot_venc_chn chn, const ot_venc_h265_vui *h265_vui);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h265_vui

H.265协议编码通道的Vui参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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配置。

【语法】

td_s32 ss_mpi_venc_get_h265_vui(ot_venc_chn chn, ot_venc_h265_vui *h265_vui);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h265_vui

H.265协议编码通道的Vui属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.265协议编码通道的VUI配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_jpeg_param

【描述】

设置JPEG协议编码通道的高级参数。

【语法】

td_s32 ss_mpi_venc_set_jpeg_param(ot_venc_chn chn, const ot_venc_jpeg_param *jpeg_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

jpeg_param

JPEG协议编码通道的高级参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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协议编码通道的高级参数配置。

【语法】

td_s32 ss_mpi_venc_get_jpeg_param(ot_venc_chn chn, ot_venc_jpeg_param *jpeg_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

jpeg_param

JPEG协议编码通道的高级参数配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取JPEG协议编码通道的高级参数配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • Hi3511CV100不支持此接口。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_mjpeg_param

【描述】

设置MJPEG协议编码通道的高级参数。

【语法】

td_s32 ss_mpi_venc_set_mjpeg_param(ot_venc_chn chn, const ot_venc_mjpeg_param *mjpeg_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

mjpeg_param

MJPEG协议编码通道的高级参数集合

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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协议编码通道的高级参数配置。

【语法】

td_s32 ss_mpi_venc_get_mjpeg_param(ot_venc_chn chn, ot_venc_mjpeg_param *mjpeg_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

mjpeg_param

MJPEG协议编码通道的高级参数配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取MJPEG协议编码通道的高级参数配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • Hi3511CV100不支持此接口。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_rc_param

【描述】

设置编码通道码率控制器的高级参数。

【语法】

td_s32 ss_mpi_venc_set_rc_param(ot_venc_chn chn, const ot_venc_rc_param *rc_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

rc_param

编码通道码率控制器的高级参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取通道码率控制高级参数。

【语法】

td_s32 ss_mpi_venc_get_rc_param(ot_venc_chn chn, ot_venc_rc_param *rc_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

rc_param

通道码率控制参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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编码通道高级跳帧参考参数。

【语法】

td_s32 ss_mpi_venc_set_ref_param(ot_venc_chn chn, const ot_venc_ref_param *ref_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

ref_param

H.264/H.265/SVAC3.0编码通道高级跳帧参考参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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编码通道高级跳帧参考参数。

【语法】

td_s32 ss_mpi_venc_get_ref_param(ot_venc_chn chn,ot_venc_ref_param *ref_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

ref_param

H.264/H.265/SVAC3.0编码通道高级跳帧参考参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

如果ref_param为空,则返回失败。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_jpeg_enc_mode

【描述】

设置JPEG抓拍通道的抓拍模式。

【语法】

td_s32 ss_mpi_venc_set_jpeg_enc_mode(ot_venc_chn chn, const ot_venc_jpeg_enc_mode enc_mode);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

enc_mode

通道抓拍模式。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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编码通道的抓拍模式。

【语法】

td_s32 ss_mpi_venc_get_jpeg_enc_mode(ot_venc_chn chn, ot_venc_jpeg_enc_mode *enc_mode);

【参数】

参数名称

描述

输入/输出

chn

通道号

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

enc_mode

抓拍模式

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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通道。

【语法】

td_s32 ss_mpi_venc_set_slice_split(ot_venc_chn chn, const ot_venc_slice_split *slice_split);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

slice_split

H.264/H.265/SVAC3.0码流slice/patch分割参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

头文件: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分割属性。

【语法】

td_s32 ss_mpi_venc_get_slice_split(ot_venc_chn chn, ot_venc_slice_split *slice_split);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

slice_split

H.264/H.265/SVAC3.0码流slice分割参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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通道。

【语法】

td_s32 ss_mpi_venc_set_search_window(ot_venc_chn chn, const ot_venc_search_window *search_window);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

search_window

搜索窗范围。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

头文件: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通道。

【语法】

td_s32 ss_mpi_venc_get_search_window(ot_venc_chn chn, ot_venc_search_window *search_window);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

search_window

搜索窗范围。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

头文件: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属性。

【语法】

td_s32 ss_mpi_venc_set_h265_pu(ot_venc_chn chn, const ot_venc_h265_pu *pu);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

pu

H.265协议编码通道的PU配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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属性。

【语法】

td_s32 ss_mpi_venc_get_h265_pu(ot_venc_chn chn, ot_venc_h265_pu *pu);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

pu

H.265协议编码通道的PU配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

头文件:ot_common_venc.h、ss_mpi_venc.h

库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.265协议编码通道的PU的属性。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无

【相关主题】

无。

ss_mpi_venc_set_h265_trans

【描述】

设置H.265通道的变换量化属性。

【语法】

td_s32 ss_mpi_venc_set_h265_trans(ot_venc_chn chn, const ot_venc_h265_trans *h265_trans);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h265_trans

H.265协议编码通道的变换量化配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

头文件: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通道的变换量化属性。

【语法】

td_s32 ss_mpi_venc_get_h265_trans(ot_venc_chn chn, ot_venc_h265_trans *h265_trans);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h265_trans

H.265协议编码通道的变换量化配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

头文件:ot_common_venc.h、ss_mpi_venc.h

库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.265协议编码通道的量化变换的属性。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无

【相关主题】

无

ss_mpi_venc_set_h265_entropy

【描述】

设置H.265通道的熵编码属性。

【语法】

td_s32 ss_mpi_venc_set_h265_entropy(ot_venc_chn chn, const ot_venc_h265_entropy *h265_entropy);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h265_entropy

H.265协议编码通道的熵编码配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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通道的熵编码属性。

【语法】

td_s32 ss_mpi_venc_get_h265_entropy(ot_venc_chn chn, ot_venc_h265_entropy *h265_entropy);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h265_entropy

H.265协议编码通道的熵编码配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.265协议编码通道的熵编码属性。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无

【相关主题】

无。

ss_mpi_venc_set_h265_dblk

【描述】

设置H.265通道的Deblocking属性。

【语法】

td_s32 ss_mpi_venc_set_h265_dblk(ot_venc_chn chn, const ot_venc_h265_dblk *h265_dblk);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h265_dblk

H.265协议编码通道的Deblocking配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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属性。

【语法】

td_s32 ss_mpi_venc_get_h265_dblk(ot_venc_chn chn, ot_venc_h265_dblk *h265_dblk);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h265_dblk

H.265协议编码通道的Deblocking配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.265协议编码通道的Deblocking属性。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无

【相关主题】

无。

ss_mpi_venc_set_h265_sao

【描述】

设置H.265通道的Sao属性。

【语法】

td_s32 ss_mpi_venc_set_h265_sao(ot_venc_chn chn, const ot_venc_h265_sao *h265_sao);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h265_sao

H.265协议编码通道的Sao配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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属性。

【语法】

td_s32 ss_mpi_venc_get_h265_sao(ot_venc_chn chn, ot_venc_h265_sao *h265_sao);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

h265_sao

H.265协议编码通道的Sao配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

lost_param

编码通道丢帧策略的参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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所示。

图 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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

lost_param

编码通道丢帧策略的参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

super_frame_param

编码超大帧配置参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

super_frame_param

编码超大帧配置参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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帧帧内刷新设置参数。

【语法】

td_s32 ss_mpi_venc_get_intra_refresh(ot_venc_chn chn, ot_venc_intra_refresh *intra_refresh);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

intra_refresh

刷I slice参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口必须在编码通道创建之后,编码通道销毁之前调用。
  • 切换GOP模式时,获取的属性是已设置的最新的属性。

【举例】

无

【相关主题】

无

ss_mpi_venc_set_intra_refresh

【描述】

设置P帧帧内刷新参数。

【语法】

td_s32 ss_mpi_venc_set_intra_refresh(ot_venc_chn chn, const ot_venc_intra_refresh *intra_refresh);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

intra_refresh

刷I slice参数。

输入

【需求】

  • 头文件: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计算

-

计算公式

备注

H.264

行:

refresh_num*max_refresh_frame_in_gop >= (pic_height + 15) / 16

无高级跳帧参考时:max_refresh_frame_in_gop = gop;

高级跳帧参考时:

max_refresh_frame_in_gop = (gop + (base*(enhance+1) -1))/(base*(enhance+1))

Hi3519DV500、Hi3516CV610、Hi3516CV608的lcu_size为32;

Hi3511CV100的lcu_size为64;

列:

refresh_num*max_refresh_frame_in_gop >= (pic_width + 15) / 16

H.265/SVAC3.0

行:refresh_num*max_refresh_frame_in_gop >= (pic_height + lcu_size - 1) / lcu_size

列:

refresh_num*Max_refresh_frame_in_gop >= (pic_width + lcu_size - 1) / lcu_size

  • 需要等到下一个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

【描述】

设置编码相关的模块参数。

【语法】

td_s32 ss_mpi_venc_set_mod_param(const ot_venc_mod_param *mod_param);

【参数】

参数名称

描述

输入/输出

mod_param

编码模块参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取编码相关的模块参数。

【语法】

td_s32 ss_mpi_venc_get_mod_param(ot_venc_mod_param *mod_param);

【参数】

参数名称

描述

输入/输出

mod_param

编码模块参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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区域参数。

【语法】

td_s32 ss_mpi_venc_set_sse_rgn(ot_venc_chn chn, const ot_venc_sse_rgn *sse_cfg);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

sse_cfg

SSE区域参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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 属性。

【语法】

td_s32 ss_mpi_venc_get_sse_rgn(ot_venc_chn chn, td_u32 idx, ot_venc_sse_rgn *sse_cfg);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

idx

H.264/H.265/SVAC3.0协议编码通道SSE 区域索引。

输入

sse_cfg

对应SSE参数设置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

设置通道参数。

【语法】

td_s32 ss_mpi_venc_set_chn_param(ot_venc_chn chn, const ot_venc_chn_param *chn_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

chn_param

VENC的通道参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取通道参数。

【语法】

td_s32 ss_mpi_venc_get_chn_param(ot_venc_chn chn, ot_venc_chn_param *chn_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

chn_param

Venc的通道参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

未创建通道返回unexist。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_fg_protect

【描述】

设置通道的前景保护参数。

【语法】

td_s32 ss_mpi_venc_set_fg_protect(ot_venc_chn chn, const ot_venc_fg_protect *fg_protect);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

fg_protect

图像前景保护参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取通道的前景保护参数。

【语法】

td_s32 ss_mpi_venc_get_fg_protect(ot_venc_chn chn, ot_venc_fg_protect *fg_protect);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

fg_protect

图像前景保护参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取通道图像前景保护的配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_scene_mode

【描述】

设置编码场景模式。

【语法】

td_s32 ss_mpi_venc_set_scene_mode(ot_venc_chn chn, const ot_venc_scene_mode scene_mode);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

scene_mode

场景模式。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取编码场景模式。

【语法】

td_s32 ss_mpi_venc_get_scene_mode(ot_venc_chn chn, ot_venc_scene_mode *scene_mode);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

scene_mode

场景模式。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取通道的编码场景模式配置。
  • 仅H.265/H.264/SVAC3.0编码通道支持。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_attach_vb_pool

【描述】

将编码通道绑定到某个视频缓存VB池中。

【语法】

td_s32 ss_mpi_venc_attach_vb_pool(ot_venc_chn chn, const ot_venc_chn_pool *pool);

【参数】

参数名称

描述

输入/输出

chn

通道号。

输入

pool

视频缓存VB池的Id号。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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池即可。

    1. 非帧节省模式下:

      接口不会判断VB池 BlkSize 和 BlkCnt的合法性。编码过程中若VB池中BlkSize或BlkCnt 不满足需求,会导致编码器阻塞。

    2. 帧节省模式下:

      接口会判断存储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池中解绑定。

【语法】

td_s32 ss_mpi_venc_detach_vb_pool(ot_venc_chn chn);

【参数】

参数名称

描述

输入/输出

chn

通道号。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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模式选择的倾向性。

【语法】

td_s32 ss_mpi_venc_set_cu_pred(ot_venc_chn chn, const ot_venc_cu_pred *cu_pred);

【参数】

参数名称

描述

输入/输出

chn

通道号。

输入

cu_pred

CU模式选择的倾向性参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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模式选择的倾向性。

【语法】

td_s32 ss_mpi_venc_get_cu_pred(ot_venc_chn chn, ot_venc_cu_pred *cu_pred);

【参数】

参数名称

描述

输入/输出

chn

通道号。

输入

cu_pred

CU模式选择的倾向性参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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模式的倾向性。

【语法】

td_s32 ss_mpi_venc_set_skip_bias(ot_venc_chn chn, const ot_venc_skip_bias *skip_bias);

【参数】

参数名称

描述

输入/输出

chn

通道号。

输入

skip_bias

cu/mb选择Skip模式的倾向性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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模式的倾向性。

【语法】

td_s32 ss_mpi_venc_get_skip_bias(ot_venc_chn chn, ot_venc_skip_bias *skip_bias);

【参数】

参数名称

描述

输入/输出

chn

通道号。

输入

skip_bias

cu/mb选择Skip模式的倾向性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

通道号。

输入

debreath_effect

去除呼吸效应参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取去除呼吸效应参数。

【语法】

td_s32 ss_mpi_venc_get_debreath_effect(ot_venc_chn chn, ot_venc_debreath_effect *debreath_effect);

【参数】

参数名称

描述

输入/输出

chn

通道号。

输入

debreath_effect

去除呼吸效应参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

通道号。

输入

hierarchical_qp

分层qp参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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层,以此类推。
  • 分层QP示意图如图1和图2所示。

图 1 normal_p分层QP示意图

图 2 smart_p/adv_smart_p分层QP示意图

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_hierarchical_qp

【描述】

获取分层qp参数。

【语法】

td_s32 ss_mpi_venc_get_hierarchical_qp(ot_venc_chn chn, ot_venc_hierarchical_qp *hierarchical_qp);

【参数】

参数名称

描述

输入/输出

chn

通道号。

输入

hierarchical_qp

分层qp参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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模块的高级参数。

【语法】

td_s32 ss_mpi_venc_set_rc_adv_param(ot_venc_chn chn, const ot_venc_rc_adv_param *rc_adv_param);

【参数】

参数名称

描述

输入/输出

chn

通道号

输入

rc_adv_param

RC高级参数,此接口会包含一些与码率控制算法相关性较小的高级参数,并且未来可能会扩展。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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模块的高级参数。

【语法】

td_s32 ss_mpi_venc_get_rc_adv_param(ot_venc_chn chn, ot_venc_rc_adv_param *rc_adv_param);

【参数】

参数名称

描述

输入/输出

chn

通道号

输入

rc_adv_param

RC模块高级参数

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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属性。

【语法】

td_s32 ss_mpi_venc_set_jpeg_roi_attr(ot_venc_chn chn, const ot_venc_jpeg_roi_attr *roi_attr);

【参数】

参数名称

描述

输入/输出

chn

通道号

输入

roi_attr

ROI参数

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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属性。

【语法】

td_s32 ss_mpi_venc_get_jpeg_roi_attr(ot_venc_chn chn, td_u32 idx, ot_venc_jpeg_roi_attr *roi_attr);

【参数】

参数名称

描述

输入/输出

chn

通道号

输入

idx

JPEG/MJPEG编码通道ROI索引

输入

roi_attr

对应ROI的属性

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

通道号

输入

idx

JPEG/MJPEG编码通道ROI索引

输入

roi_adv_attr

对应ROI的高级属性

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

通道号

输入

roi_adv_attr

ROI高级参数

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

开启/关闭智能编码。

【语法】

td_s32 ss_mpi_venc_enable_svc(ot_venc_chn chn, td_bool enable);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

enable

0:关闭智能编码

1:开启智能编码

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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相关参数。

【语法】

td_s32 ss_mpi_venc_get_svc_param(ot_venc_chn chn,ot_venc_svc_param *svc_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

svc_param

智能编码参数

输出

【返回值】

返回值

描述

0

成功。

非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相关参数。

【语法】

td_s32 ss_mpi_venc_set_svc_param(ot_venc_chn chn, const ot_venc_svc_param *svc_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

svc_param

智能编码参数。

输入

【返回值】

返回值

描述

0

成功。

非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

【描述】

设置智能编码相关参数。

【语法】

td_s32 ss_mpi_venc_set_svc_param_ex(ot_venc_chn chn, const ot_venc_svc_param_ex *svc_param_ex);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

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

【描述】

获取智能编码相关参数。

【语法】

td_s32 ss_mpi_venc_get_svc_param_ex(ot_venc_chn chn, ot_venc_svc_param_ex *svc_param_ex);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

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信息。

【语法】

td_s32 ot_mpi_venc_send_svc_mask(ot_venc_chn chn, const ot_venc_svc_mask_info *svc_mask);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

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

【描述】

发送智能检测目标框属性信息。

【语法】

td_s32 ss_mpi_venc_send_svc_region(ot_venc_chn chn, const ot_venc_svc_rect_info *svc_region);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

svc_region

检测目标框属性信息。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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检测控制信息。

【语法】

td_s32 ss_mpi_venc_get_md(ot_venc_chn chn, ot_venc_md_param *md_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

md_param

Md检测相关信息。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

本接口用于H.264/H.265/SVAC3.0编码通道。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_md

【描述】

Md检测控制信息。

【语法】

td_s32 ss_mpi_venc_set_md(ot_venc_chn chn, const ot_venc_md_param *md_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

md_param

Md检测相关信息。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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

【描述】

运动过后,背景去模糊控制信息。

【语法】

td_s32 ss_mpi_venc_get_deblur(ot_venc_chn chn, ot_venc_deblur_param *deblur_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

deblur_param

背景去模糊控制信息。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

本接口用于H.264/H.265/SVAC3.0编码通道。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_deblur

【描述】

运动过后,背景去模糊控制信息。

【语法】

td_s32 ss_mpi_venc_set_deblur(ot_venc_chn chn, const ot_venc_deblur_param *deblur_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

deblur_param

背景去模糊控制信息。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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。

【语法】

td_s32 ss_mpi_venc_get_param_set_id(ot_venc_chn chn, ot_venc_param_set_id *param_set_id);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

param_set_id

参数集ID。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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。

【语法】

td_s32 ss_mpi_venc_set_param_set_id(ot_venc_chn chn, const ot_venc_param_set_id *param_set_id);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

param_set_id

参数集ID。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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类型。

【语法】

td_s32 ss_mpi_venc_get_h264_poc(ot_venc_chn chn, ot_venc_h264_poc *h264_poc);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

h264_poc

H.264协议编码通道的POC类型。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口必须在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 此接口仅支持H.264通道。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_h264_poc

【描述】

设置H.264协议编码通道的POC类型。

【语法】

td_s32 ss_mpi_venc_set_h264_poc(ot_venc_chn chn, const ot_venc_h264_poc *h264_poc);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

h264_poc

H.264协议编码通道的POC类型。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件: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效应参数。

【语法】

td_s32 ss_mpi_venc_get_jpeg_dering_attr(ot_venc_chn chn, ot_venc_jpeg_dering_attr *dering_attr);

【参数】

参数名称

描述

输入/输出

chn

通道号

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

dering_attr

去Ring效应参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

dering_attr

去Ring效应参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取编码器以质量均衡为目标相关参数。

【语法】

td_s32 ss_mpi_venc_get_quality_balance(ot_venc_chn chn, ot_venc_quality_balance *quality_balance);

【参数】

参数名称

描述

输入/输出

chn

通道号

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

quality_balance

质量均衡参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

quality_balance

质量均衡相关参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取数字水印相关参数。

【语法】

td_s32 ss_mpi_venc_get_watermark(ot_venc_chn chn, ot_venc_watermark *watermark);

【参数】

参数名称

描述

输入/输出

chn

通道号

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

watermark

数字水印相关参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取数字水印相关参数。
  • 本接口必须在通道创建之后,通道销毁之前调用。
  • 本接口仅支持H.264/H.265编码通道。
  • Hi3516CV610/Hi3516CV608/Hi3511CV100不支持该功能。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_watermark

【描述】

设置数字水印相关参数。

【语法】

td_s32 ss_mpi_venc_set_watermark(ot_venc_chn chn, const ot_venc_watermark *watermark);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

watermark

数字水印相关参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取数字水印保护区域相关参数。

【语法】

td_s32 ss_mpi_venc_get_watermark_roi(ot_venc_chn chn, ot_venc_watermark_roi *watermark_roi);

【参数】

参数名称

描述

输入/输出

chn

通道号

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

watermark_roi

数字水印保护区域相关参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取数字水印保护区域信息。
  • 本接口必须在通道创建之后,通道销毁之前调用。
  • 本接口仅支持H.264/H.265编码通道。
  • Hi3516CV610/Hi3516CV608/Hi3511CV100不支持该功能。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_watermark_roi

【描述】

设置数字水印保护区域相关参数。

【语法】

td_s32 ss_mpi_venc_set_watermark_roi(ot_venc_chn chn, const ot_venc_watermark_roi *watermark_roi);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

watermark_roi

数字水印保护区域相关参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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效应功能。

【语法】

td_s32 ss_mpi_venc_enable_jpeg_dblk(ot_venc_chn chn, td_bool enable);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

enable

是否使能的标志。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于使能JPEG、MJPEG编码通道的去Block效应功能。
  • 本接口用于在较低qfactor <50的情况下,可以改善块效应。
  • 本接口必须在编码通道创建之后,编码通道销毁之前调用。
  • Hi3511CV100不支持此接口。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_adv_deblur

【描述】

获取运动物体区域拖尾和残留区域检测参数。

【语法】

td_s32 ss_mpi_venc_get_adv_deblur(ot_venc_chn chn, ot_venc_adv_deblur *adv_deblur);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

adv_deblur

运动物体区域拖尾和残留区域检测参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于H.264/H.265/SVAC3.0编码通道。
  • 本接口用于获取运动物体较近较远区域拖尾和残留区域检测参数。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_adv_deblur

【描述】

设置运动物体区域拖尾和残留区域检测参数。

【语法】

td_s32 ss_mpi_venc_set_adv_deblur(ot_venc_chn chn, const ot_venc_adv_deblur *adv_deblur);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

adv_deblur

运动物体区域拖尾和残留区域检测参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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协议编码通道的变换、量化的属性。

【语法】

td_s32 ss_mpi_venc_set_svac3_trans(ot_venc_chn chn, const ot_venc_svac3_trans *svac3_trans);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_trans

SVAC3.0协议编码通道的变换、量化属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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协议编码通道的变换、量化的属性。

【语法】

td_s32 ss_mpi_venc_get_svac3_trans(ot_venc_chn chn, ot_venc_svac3_trans *svac3_trans);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_trans

SVAC3.0协议编码通道的变换、量化属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于设置SVAC3.0协议编码通道码流的变换量化的配置。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无

【相关主题】

无

ss_mpi_venc_set_svac3_dblk

【描述】

设置SVAC3.0通道的Deblocking属性。

【语法】

td_s32 ss_mpi_venc_set_svac3_dblk(ot_venc_chn chn, const ot_venc_svac3_dblk *svac3_dblk);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_dblk

SVAC3.0协议编码通道的Deblocking配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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属性。

【语法】

td_s32 ss_mpi_venc_get_svac3_dblk(ot_venc_chn chn, ot_venc_svac3_dblk *svac3_dblk);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_dblk

SVAC3.0协议编码通道的Deblocking配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取SVAC3.0协议编码通道的Deblocking属性。

  • 接口在编码通道创建之后,编码通道销毁之前调用。

  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无

【相关主题】

无

ss_mpi_venc_set_svac3_sao

【描述】

设置SVAC3.0通道的Sao属性。

【语法】

td_s32 ss_mpi_venc_set_svac3_sao(ot_venc_chn chn, const ot_venc_svac3_sao *svac3_sao);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_sao

SVAC3.0协议编码通道的Sao配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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属性。

【语法】

td_s32 ss_mpi_venc_get_svac3_sao(ot_venc_chn chn,ot_venc_svac3_sao *svac3_sao);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_sao

SVAC3.0协议编码通道的Sao配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取SVAC3.0协议编码通道码流的Sao配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

无

【相关主题】

无

ss_mpi_venc_set_svac3_alf

【描述】

设置SVAC3.0通道的ALF属性。

【语法】

td_s32 ss_mpi_venc_set_svac3_alf(ot_venc_chn chn, const ot_venc_svac3_alf *svac3_alf);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_alf

SVAC3.0协议编码通道的ALF配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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属性。

【语法】

td_s32 ss_mpi_venc_get_svac3_alf(ot_venc_chn chn, ot_venc_svac3_alf *svac3_alf);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_alf

SVAC3.0协议编码通道的ALF配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取SVAC3.0协议编码通道码流的ALF配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

  • 仅Hi3511CV100支持此功能。

【举例】

无

【相关主题】

无

ss_mpi_venc_set_svac3_privacy

【描述】

设置SVAC3.0通道的隐私保护属性。

【语法】

td_s32 ss_mpi_venc_set_svac3_privacy(ot_venc_chn chn, const ot_venc_svac3_privacy *svac3_privacy);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_privacy

SVAC3.0协议编码通道的隐私保护配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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通道的隐私属性。

【语法】

td_s32 ss_mpi_venc_get_svac3_privacy(ot_venc_chn chn, ot_venc_svac3_privacy *svac3_privacy);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_privacy

SVAC3.0协议编码通道的隐私保护配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取SVAC3.0协议编码通道码流的隐私保护配置。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

  • 仅Hi3511CV100支持此功能。

【举例】

无

【相关主题】

无

ss_mpi_venc_set_svac3_emulation

【描述】

设置SVAC3.0协议编码通道防伪起始码配置。

【语法】

td_s32 ss_mpi_venc_set_svac3_emulation(ot_venc_chn chn, const ot_venc_svac3_emulation *emulation);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

emulation

SVAC3.0协议编码防伪起始码配置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于设置SVAC3.0协议编码通道码流的去除防伪起始码功能。
  • 设置去除防伪起始码功能需要和安全加密方案配合使用。
  • 设置去除防伪起始码功能后输出的码流不能直接解码。
  • 本接口必须在编码通道创建之后,编码通道销毁之前调用。

【举例】

无

【相关主题】

无

ss_mpi_venc_get_svac3_emulation

【描述】

获取SVAC3.0协议编码通道防伪起始码配置。

【语法】

td_s32 ss_mpi_venc_get_svac3_emulation(ot_venc_chn chn, ot_venc_svac3_emulation *emulation);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

emulation

SVAC3.0协议编码防伪起始码配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取SVAC3.0协议编码通道码流的防伪起始码配置。
  • 本接口必须在编码通道创建之后,编码通道销毁之前调用。

【举例】

无

【相关主题】

无

ss_mpi_venc_enable_one_pack

【描述】

是否使能编码通道的单包模式,使能后,一帧所有的ECS在一个码流包。

【语法】

td_s32 ss_mpi_venc_enable_one_pack(ot_venc_chn chn, td_bool enable);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

enable

是否使能的标志。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

bitrate_strategy

H.264/H.265/SVAC3.0编码通道码率策略。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

bitrate_strategy

码率策略。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

chn_capability

能力集。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取能力集配置。

【语法】

td_s32 ss_mpi_venc_get_chn_capability(ot_venc_chn chn, ot_venc_chn_capability *chn_capability);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

chn_capability

能力集。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取通道的能力集配置。

  • Hi3519DV500暂不支持该功能。

【举例】

无。

【相关主题】

无。

ot_venc_get_export_symbol

【描述】

获取驱动导出符号。

【语法】

ot_venc_export_symbol *ot_venc_get_export_symbol(td_void);

【参数】

无。

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

fast_enc_param

快速编码参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取快速编码。

【语法】

td_s32 ss_mpi_venc_get_fast_enc_param(ot_venc_chn chn, ot_venc_fast_enc_param *fast_enc_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

fast_enc_param

快速编码参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

仅Hi3516CV610支持此接口。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_bind_aiseg_chn

【描述】

绑定语义分割图编码通道与主图编码通道。

【语法】

td_s32 ss_mpi_venc_bind_aiseg_chn(ot_venc_chn chn, ot_venc_chn aiseg_chn);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

aiseg_chn

语义分割图编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口用于设置主图编码通道与语义分割图编码通道的绑定关系。
  • 仅支持SVAC3.0协议的两个编码通道之间进行绑定。
  • 本接口在主通道和语义分割图编码通道分别创建完成且语义分割功能设置之后,编码开始之前调用。
  • 语义分割图编码通道的创建参见ss_mpi_venc_create_chn接口的描述。
  • 仅支持“一绑一”的绑定关系,不支持对一个已绑定过的通道进行绑定操作。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_unbind_aiseg_chn

【描述】

解绑语义分割图编码通道与主图编码通道。

【语法】

td_s32 ss_mpi_venc_unbind_aiseg_chn(ot_venc_chn chn, ot_venc_chn aiseg_chn);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

aiseg_chn

语义分割图编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

aiseg_chn

语义分割图编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

aiseg_map

语义分割图信息结构体,用于传输语义分割图及其像素映射表。

详细定义参见ot_venc_aiseg_map_info。

输入

milli_sec

发送图像超时时间。

取值范围:[-1,+∞)

  • -1:阻塞。
  • 0:非阻塞。
  • > 0:超时时间。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

设置通道的前景模式。

【语法】

td_s32 ss_mpi_venc_set_fg_mode(ot_venc_chn chn, const ot_venc_fg_mode *fg_mode);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

fg_mode

图像前景模式选择参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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

【描述】

获取编码前景模式。

【语法】

td_s32 ss_mpi_venc_get_fg_mode(ot_venc_chn chn, ot_venc_fg_mode *fg_mode);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

fg_mode

前景模式。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

prefilter_effect

预滤波参数,详情参见ot_venc_filter_effect。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口在编码通道创建之后,编码通道销毁之前设置。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 仅支持SVAC3.0通道。

  • 仅Hi3511CV100支持此功能。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_prefilter_effect

【描述】

获取预滤波参数。

【语法】

td_s32 ss_mpi_venc_get_prefilter_effect(ot_venc_chn chn, ot_venc_filter_effect *prefilter_effect);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

prefilter_effect

预滤波参数,详情参见ot_venc_filter_effect。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 在编码过程中被调用时,下一帧立即生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 仅支持SVAC3.0通道。

  • 本接口属于高级接口,用户可以选择性调用,系统默认此功能不开启。

  • 仅Hi3511CV100支持此功能。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_enable_mux_stm_syntax

【描述】

是否使能编码通道的拼接语法,使能后,支持多帧码流合并成一帧码流,实现多路码流合并成一路码流。

【语法】

td_s32 ss_mpi_venc_enable_mux_stm_syntax(ot_venc_chn chn, td_bool enable);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

enable

是否使能的标志。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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语义分割功能参数。

【语法】

td_s32 ss_mpi_venc_set_svac3_aiseg(ot_venc_chn chn, const ot_venc_svac3_aiseg *svac3_aiseg);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_aiseg

语义分割参数,详情参见ot_venc_svac3_aiseg。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件: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语义分割功能参数。

【语法】

td_s32 ss_mpi_venc_get_svac3_aiseg(ot_venc_chn chn, ot_venc_svac3_aiseg *svac3_aiseg);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)

输入

svac3_aiseg

语义分割参数,详情参见ot_venc_svac3_aiseg。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h
  • 库文件:libss_mpi.a

【注意】

  • 本接口在编码通道创建之后,编码通道销毁之前设置。
  • 在编码过程中被调用时,下一帧立即生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 仅支持SVAC3.0通道。

  • 仅Hi3511CV100支持此功能。

【举例】

无。

【相关主题】

无。

数据类型

相关数据类型、数据结构定义如下:

OT_VENC_MAX_CHN_NUM

【说明】

定义最大通道个数。

【定义】

Hi3519DV500:

#define  OT_VENC_MAX_CHN_NUM    32

Hi3516CV610/Hi3516CV608/Hi3511CV100:

#define  OT_VENC_MAX_CHN_NUM    16

【注意事项】

最大通道数:不同解决方案默认值不同。由于最大通道个数涉及到内存的分配,允许用户根据实际需要重新指定最大通道个数,具体方式为:对于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)。

参数模块使用方式如下:

insmod ot_venc.ko   g_venc_max_chn_num=8

【相关数据类型及接口】

无。

OT_VENC_TEXTURE_THRESHOLD_SIZE

【说明】

定义RC宏块复杂度的阈值的个数。

【定义】

#define  OT_VENC_TEXTURE_THRESHOLD_SIZE  16

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_TILE_NUM

【说明】

定义最大支持Tile的个数。

【定义】

#define  OT_VENC_MAX_TILE_NUM    1

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_SSE_NUM

【说明】

定义SSE个数。

【定义】

#define OT_VENC_MAX_SSE_NUM   8

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_VEDU_IP_NUM

【说明】

定义解决方案的编码逻辑的个数。

【定义】

Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100

#define  OT_VENC_VEDU_IP_NUM    1

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_REG_NUM

【说明】

定义解决方案的编码逻辑的寄存器套数。

【定义】

Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100

#define  OT_VENC_MAX_REG_NUM    2

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_FRAME_NUM

【说明】

定义用户发送多帧图像接口中图像的最大帧数。

【定义】

#define  OT_VENC_MAX_FRAME_NUM   2

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_send_multi_frame

OT_VENC_MAX_MOSAIC_RECT_NUM

【说明】

定义用户发送多帧图像接口中马赛克区域的最大个数。

【定义】

#define  OT_VENC_MAX_MOSAIC_RECT_NUM  200

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_send_multi_frame

OT_VENC_QP_HIST_NUM

【说明】

定义QP直方图数组大小。

【定义】

#define  OT_VENC_QP_HIST_NUM   52

【注意事项】

无

【相关数据类型及接口】

无

OT_VENC_H264_QP_HIST_NUM

【说明】

定义H.264协议QP直方图数组大小。

【定义】

#define  OT_VENC_H264_QP_HIST_NUM       52

【注意事项】

无。

【相关数据类型及接口】

ot_venc_h264_adv_stream_info

OT_VENC_H265_QP_HIST_NUM

【说明】

定义H.265协议QP直方图数组大小。

【定义】

#define  OT_VENC_H265_QP_HIST_NUM         52

【注意事项】

无。

【相关数据类型及接口】

ot_venc_h265_adv_stream_info

OT_VENC_SVAC3_QP_HIST_NUM

【说明】

定义SVAC3.0协议QP直方图数组大小。

【定义】

#define  OT_VENC_SVAC3_QP_HIST_NUM        64

【注意事项】

无。

【相关数据类型及接口】

ot_venc_svac3_adv_stream_info

OT_VENC_MAX_SVC_RECT_NUM

【说明】

定义智能检测目标框个数。

【定义】

#define OT_VENC_MAX_SVC_RECT_NUM   32

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MD_THRESHOLD_NUM

【说明】

定义MD检测阈值个数。

【定义】

#define OT_VENC_MD_THRESHOLD_NUM   3

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MD_LEVEL_NUM

【说明】

定义MD检测Level级别个数。

【定义】

#define OT_VENC_MD_LEVEL_NUM    4

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_PACK_INFO_NUM

【说明】

定义码流包包含其他数据的最大个数。

【定义】

#define OT_VENC_MAX_PACK_INFO_NUM    10

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_MPF_NUM

【说明】

定义MPF图像的最大个数。

【定义】

#define OT_VENC_MAX_MPF_NUM    2

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_PRORES_MAX_ID_CHAR_NUM

【说明】

定义PRORES协议厂商名最大字符个数。

【定义】

#define OT_VENC_PRORES_MAX_ID_CHAR_NUM    4

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_HIERARCHY_NUM

【说明】

定义分层编码的最大层数。

【定义】

#define OT_VENC_MAX_HIERARCHY_NUM    4

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_SCALING_LIST_SIZE_16

【说明】

定义量化表相关大小。

【定义】

#define OT_VENC_SCALING_LIST_SIZE_16   16

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_SCALING_LIST_SIZE_64

【说明】

定义量化表相关大小。

【定义】

#define OT_VENC_SCALING_LIST_SIZE_64    64

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_JPEG_QT_COEF_NUM

【说明】

定义jpeg量化表大小。

【定义】

#define OT_VENC_JPEG_QT_COEF_NUM    64

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MJPEG_QT_COEF_NUM

【说明】

定义mjpeg量化表大小。

【定义】

#define OT_VENC_MJPEG_QT_COEF_NUM   64

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_ROI_NUM

【说明】

定义H.264/H.265/SVAC3.0 ROI最大个数。

【定义】

#define OT_VENC_MAX_ROI_NUM    8

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_JPEG_ROI_NUM

【说明】

定义JPEG ROI最大个数。

【定义】

#define OT_VENC_MAX_JPEG_ROI_NUM    16

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_BITRATE

【说明】

定义最大码率,以Kbps为单位。

【定义】

Hi3511CV100:

#define  OT_VENC_MAX_BITRATE (120 * 1024)

其他芯片:

#define  OT_VENC_MAX_BITRATE (160 * 1024)

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MIN_BITRATE

【说明】

定义最小码率,以Kbps为单位。

【定义】

#define OT_VENC_MIN_BITRATE    2

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_QUALITY_BALANCE_NUM

【说明】

定义质量均衡阈值的个数。

【定义】

#define OT_VENC_MAX_QUALITY_BALANCE_NUM   8

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_WATERMARK_INFO_NUM

【说明】

定义数字水印信息的大小。

【定义】

#define OT_VENC_MAX_WATERMARK_INFO_NUM    64

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_WATERMARK_SEED_NUM

【说明】

定义数字水印种子的数量。

【定义】

#define OT_VENC_MAX_WATERMARK_SEED_NUM   4

【注意事项】

无。

【相关数据类型及接口】

无。

OT_VENC_MAX_BATCH_CROP_RECT_NUM

【说明】

定义最大抠图数量。

【定义】

#define OT_VENC_MAX_BATCH_CROP_RECT_NUM      60

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_send_frame_batch_crop

OT_VENC_MAX_IN_DEPTH

【说明】

定义最大输入队列深度。

【定义】

Hi3516CV610/Hi3516CV608:

#define OT_VENC_MAX_IN_DEPTH              3

其他芯片:

#define OT_VENC_MAX_IN_DEPTH              6

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_set_chn_param

ss_mpi_venc_get_chn_param

OT_VENC_MAX_AISEG_CLASS_NUM

【说明】

定义最大语义分割类别数量。

【定义】

#define OT_VENC_MAX_AISEG_CLASS_NUM    255

【注意事项】

仅Hi3511CV100支持。

【相关数据类型及接口】

ss_mpi_venc_send_frame_aiseg

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_H264_NALU_B_SLICE

BSLICE类型。

OT_VENC_H264_NALU_P_SLICE

PSLICE类型。

OT_VENC_H264_NALU_I_SLICE

ISLICE类型,帧类型为I帧。

OT_VENC_H264_NALU_IDR_SLICE

ISLICE类型,帧类型为IDR帧。

OT_VENC_H264_NALU_SEI

SEI类型。

OT_VENC_H264_NALU_SPS

SPS类型。

OT_VENC_H264_NALU_PPS

PPS类型。

【注意事项】

无。

【相关数据类型及接口】

无。

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_IDR_SLICE

base层中的IDR帧。

OT_VENC_BASE_P_SLICE_REF_TO_IDR

base层中的P帧,用于base层中其他帧的参考且只参考IDR帧。

OT_VENC_BASE_P_SLICE_REF_BY_BASE

base层中的P帧,用于base层中其他帧的参考。

OT_VENC_BASE_P_SLICE_REF_BY_ENHANCE

base层中的P帧,用于enhance层中的帧的参考。

OT_VENC_ENHANCE_P_SLICE_REF_BY_ENHANCE

enhance层中的P帧,用于enhance层中其他帧的参考。

OT_VENC_ENHANCE_P_SLICE_NOT_FOR_REF

enhance层中的P帧,不用于参考。

【注意事项】

单独开启复合编码时,复合编码增强层的参考类型为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;

【成员】

成员名称

描述

OT_VENC_JPEG_PACK_ECS

ECS类型。

OT_VENC_JPEG_PACK_APP

APP类型。

OT_VENC_JPEG_PACK_VDO

VDO类型。

OT_VENC_JPEG_PACK_PIC

PIC类型。

OT_VENC_JPEG_PACK_DCF

DCF类型。

OT_VENC_JPEG_PACK_DCF_PIC

DCF_PIC类型。

【注意事项】

只有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_H265_NALU_B_SLICE

BSLICE类型。

OT_VENC_H265_NALU_P_SLICE

PSLICE类型。

OT_VENC_H265_NALU_I_SLICE

ISLICE类型,帧类型为I帧。

OT_VENC_H265_NALU_IDR_SLICE

ISLICE类型,帧类型为IDR帧。

OT_VENC_H265_NALU_VPS

VPS类型。

OT_VENC_H265_NALU_SPS

SPS类型。

OT_VENC_H265_NALU_PPS

PPS类型。

OT_VENC_H265_NALU_SEI

SEI类型。

OT_VENC_H265_NALU_ENHANCE

ENHANCE类型。

【注意事项】

无。

【相关数据类型及接口】

无。

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_SVAC3_NALU_FORBIDDEN

禁止

OT_VENC_SVAC3_NALU_NRAP_PATCH

NRAP图像的编码片

OT_VENC_SVAC3_NALU_RAPI_PATCH

RAPI图像的编码片

OT_VENC_SVAC3_NALU_PIC_HEAD

图像头

OT_VENC_SVAC3_NALU_IDR_PATCH

IDR图像的编码片

OT_VENC_SVAC3_NALU_EXTENSION

扩展数据单元

OT_VENC_SVAC3_NALU_SEI

补充增强信息

OT_VENC_SVAC3_NALU_SPS

序列参数集

OT_VENC_SVAC3_NALU_PPS

图像参数集

OT_VENC_SVAC3_NALU_SEC_PS

安全参数集

OT_VENC_SVAC3_NALU_AUTH_DATA

认证数据

OT_VENC_SVAC3_NALU_EOS

流结尾

OT_VENC_SVAC3_NALU_CRR_NDP_PATCH

非显示知识图像的编码片

OT_VENC_SVAC3_NALU_RL_PATCH

RL图像的编码片

OT_VENC_SVAC3_NALU_PIC_DL

访问单元分界

OT_VENC_SVAC3_NALU_EOCVS

编码视频序列结尾

OT_VENC_SVAC3_NALU_CRR_DP_PATCH

显示知识图像的编码片

OT_VENC_SVAC3_NALU_CRR_DL_PATCH

非显示知识图像分界编码片

OT_VENC_SVAC3_NALU_CRR_PRIVACY

隐私图像的编码片

【注意事项】

无。

【相关数据类型及接口】

无。

ot_venc_prores_pack_type

【说明】

定义PRORES码流的PACK类型。

【定义】

typedef enum {
    OT_VENC_PRORES_PACK_PIC = 1,
    OT_VENC_PRORES_PACK_BUTT
} ot_venc_prores_pack_type;

【成员】

成员名称

描述

OT_VENC_PRORES_PACK_PIC

PRORES数据包。

【注意事项】

无。

【相关数据类型及接口】

无。

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;

【成员】

成员名称

描述

h264_type

H.264码流包类型。

jpeg_type

JPEG码流包类型。

h265_type

H.265码流包类型。

svac3_type

SVAC3.0码流包类型。

prores_type

PRORES码流包类型。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_pack_info

【说明】

定义当前码流包数据中包含的其他类型码流包数据的结构体。

【定义】

typedef struct {
    ot_venc_data_type pack_type;
    td_u32 pack_offset;
    td_u32 pack_len;
} ot_venc_pack_info;

【成员】

成员名称

描述

pack_type

当前码流包数据包含其他码流包的类型。

pack_offset

当前码流包数据包含其他码流包数据的偏移。

pack_len

当前码流包数据包含其他码流包数据的大小。

【注意事项】

无。

【相关数据类型及接口】

无。

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;

【成员】

成员名称

描述

phys_addr

码流包物理地址。

addr

码流包首地址。

len

码流包长度。

pts

时间戳。单位:us。

is_frame_end

帧结束标识。

取值范围:

TD_TRUE:该码流包是该帧的最后一个包。

TD_FALSE:该码流包不是该帧的最后一个包。

stuff03_disable

标识码流是否去除防竞争码。

TD_TRUE:码流去除了防竞争码。

TD_FALSE:码流没有去除防竞争码。

data_type

码流类型,支持H.264/JPEG/H.265/SVAC3.0协议类型的数据包。

layer_id

当前码流包的层级,仅SVAC3.0协议该数据有效。

is_lu_begin

当前码流包是否是所属层级的第一个包。

TD_TRUE:当前码流包是所属层级的第一个包。

TD_FALSE:当前码流包不是所属层级的第一个包。

offset

码流包中有效数据与码流包首地址pu8Addr的偏移。

data_num

当前码流包(当前包的类型由data_type指定)数据中包含其他类型码流包的个数。

pack_info[]

当前码流包数据中包含其他类型码流包数据信息。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_data_type

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;

【成员】

成员名称

描述

pic_bytes

编码当前帧的字节(BYTE)数

inter16x16_mb_num

编码当前帧中采用Inter16x16预测模式的宏块数

inter8x8_mb_num

编码当前帧中采用Inter8x8预测模式的宏块数

intra16_mb_num

编码当前帧中采用Intra16预测模式的宏块数

intra8_mb_num

编码当前帧中采用Intra8预测模式的宏块数

intra4_mb_num

编码当前帧中采用Intra4预测模式的宏块数

ref_type

高级跳帧参考下的编码帧类型

update_attr_cnt

通道属性或参数(包含RC参数)被设置的次数

start_qp

编码当前帧的startqp值

mean_qp

编码当前帧的平均QP值

is_p_skip

标识当前帧是否为p_skip帧

【注意事项】

无。

【相关数据类型及接口】

ot_venc_ref_type

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;

【成员】

成员名称

描述

pic_bytes

一帧JPEG码流大小,以字节(byte)为单位。

update_attr_cnt

通道属性或参数(包含RC参数)被设置的次数。

qfactor

编码当前帧的qfactor。

【注意事项】

无。

【相关数据类型及接口】

无。

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;

【成员】

成员名称

描述

pic_bytes

编码当前帧的字节(BYTE)数

inter64x64_cu_num

编码当前帧中采用Inter64x64预测模式的CU块数

inter32x32_cu_num

编码当前帧中采用Inter32x32预测模式的CU块数

inter16x16_cu_num

编码当前帧中采用Inter16x16预测模式的CU块数

inter8x8_cu_num

编码当前帧中采用Inter8x8预测模式的CU块数

intra32x32_cu_num

编码当前帧中采用Intra32x32预测模式的CU块数

intra16x16_cu_num

编码当前帧中采用Intra16x16预测模式的CU块数

intra8x8_cu_num

编码当前帧中采用Intra8x8预测模式的CU块数

intra4x4_cu_num

编码当前帧中采用Intra4x4预测模式的CU块数

ref_type

高级跳帧参考下的编码帧类型

update_attr_cnt

通道属性或参数(包含RC参数)被设置的次数

start_qp

编码当前帧的startqp值

mean_qp

编码当前帧的平均QP值

is_p_skip

标识当前帧是否为pskip帧。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_ref_type

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;

【成员】

成员名称

描述

pic_bytes

编码当前帧的字节(BYTE)数

inter64x64_cu_num

编码当前帧中采用Inter64x64预测模式的CU块数

inter32x32_cu_num

编码当前帧中采用Inter32x32预测模式的CU块数

inter16x16_cu_num

编码当前帧中采用Inter16x16预测模式的CU块数

inter8x8_cu_num

编码当前帧中采用Inter8x8预测模式的CU块数

intra32x32_cu_num

编码当前帧中采用Intra32x32预测模式的CU块数

intra16x16_cu_num

编码当前帧中采用Intra16x16预测模式的CU块数

intra8x8_cu_num

编码当前帧中采用Intra8x8预测模式的CU块数

intra4x4_cu_num

编码当前帧中采用Intra4x4预测模式的CU块数

ref_type

高级跳帧参考下的编码帧类型

update_attr_cnt

通道属性或参数(包含RC参数)被设置的次数

start_qp

编码当前帧的startqp值

mean_qp

编码当前帧的平均QP值

is_p_skip

标识当前帧是否为pskip帧。

is_library

编码当前帧中是否是知识图像。

library_picture_index

编码当前帧是知识图像时,其对应的知识图像索引。

is_ras_begin

编码当前帧是否是随机访问片段的开始。

【注意事项】

对于CRR切片图像,上述表格中pic_bytes表示当前AU(CRR切片)的标志信息,其他字段仍表示非显示图像整帧的信息。对于其他图像,上述信息表示一帧的信息。

【相关数据类型及接口】

ot_venc_ref_type

ot_venc_prores_stream_info

【说明】

定义PRORES协议码流特征信息。

【定义】

typedef struct {
    td_u32 pic_bytes;
    td_u32 update_attr_cnt;
} ot_venc_prores_stream_info;

【成员】

成员名称

描述

pic_bytes

编码当前帧的字节(Byte)数。

update_attr_cnt

通道属性或参数被设置的次数。

【注意事项】

无。

【相关数据类型及接口】

无。

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;

【成员】

成员名称

描述

residual_bits

编码当前帧残差(bit)数

head_bits

编码当前帧头信息的(bit)数

madi_val

编码当前帧空域纹理复杂度Madi值

madp_val

编码当前帧时域运动复杂度Madp值

psnr_val

编码当前帧的PSNR(峰值信噪比)值

sse_lcu_cnt

编码当前帧中宏块行个数

sse_sum

编码当前帧中SSE(和方差)值

sse_info[OT_VENC_MAX_SSE_NUM]

编码当前帧中8个区域的SSE(和方差)值。

qp_hist[OT_VENC_H264_QP_HIST_NUM]

编码当前帧Qp直方图。

move_scene16x16_num

判断为图像前景的16x16块的数目,需要开启前景宏块级码率控制。

move_scene_bits

判断为图像前景区域编码bit数,需要开启前景宏块级码控制。

deblur_near_bg_num

离运动物体较近的拖尾与残留区域的(MB(AVC)的数量。

deblur_far_bg_num

离运动物体较远的拖尾与残留区域的MB(AVC)的数量。

【注意事项】

  • 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信息。

【定义】

typedef struct {
    td_bool enable;
    td_u64 sse_val;
} ot_venc_sse_info;

【成员】

成员名称

描述

enable

区域SSE使能。

sse_val

区域SSE值。

【注意事项】

无。

【相关数据类型及接口】

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; 

【成员】

成员名称

描述

residual_bits

编码当前帧残差(bit)数

head_bits

编码当前帧头信息的(bit)数

madi_val

编码当前帧空域纹理复杂度Madi值

madp_val

编码当前帧时域运动复杂度Madp值

psnr_val

编码当前帧的PSNR(峰值信噪比)值

sse_lcu_cnt

编码当前帧中LCU个数

sse_sum

编码当前帧中SSE(和方差)值

sse_info[OT_VENC_MAX_SSE_NUM]

编码当前帧中8个区域的SSE(和方差)值

qp_hist[OT_VENC_H265_QP_HIST_NUM]

编码当前帧Qp直方图

move_scene32x32_num

判断为图像前景的32x32块的数目,需要开启前景宏块级码率控制。

move_scene_bits

判断为图像前景区域编码bit数,需要开启前景宏块级码率控制。

deblur_near_bg_num

离运动物体较近的拖尾与残留区域的LCU(HEVC)的数量

deblur_far_bg_num

离运动物体较远的拖尾与残留区域的LCU(HEVC)的数量

【注意事项】

  • 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;

【成员】

成员名称

描述

residual_bits

编码当前帧残差(bit)数

head_bits

编码当前帧头信息的(bit)数

madi_val

编码当前帧空域纹理复杂度Madi值

madp_val

编码当前帧时域运动复杂度Madp值

psnr_val

编码当前帧的PSNR(峰值信噪比)值

sse_lcu_cnt

编码当前帧中LCU个数

sse_sum

编码当前帧中SSE(和方差)值

sse_info[OT_VENC_MAX_SSE_NUM]

编码当前帧中8个区域的SSE(和方差)值

qp_hist[OT_VENC_SVAC3_QP_HIST_NUM]

编码当前帧Qp直方图

move_scene32x32_num

判断为图像前景的32x32块的数目,需要开启前景宏块级码率控制。

move_scene_bits

判断为图像前景区域编码bit数,需要开启前景宏块级码率控制。

deblur_near_bg_num

离运动物体较近的拖尾与残留区域的LCU(HEVC)的数量

deblur_far_bg_num

离运动物体较远的拖尾与残留区域的LCU(HEVC)的数量

【注意事项】

  • 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;

【成员】

成员名称

描述

pack

帧码流包结构。

pack_cnt

一帧码流的所有包的个数。

seq

码流序列号。

按帧获取帧序号;按包获取包序号。

h264_info/jpeg_info /h265_info/svac3_info/prores_info

码流特征信息。

h264_adv_info/ h265_adv_info/svac3_adv_info

码流高级特征信息。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

phys_addr

码流buffer的起始物理地址。

td_phys_addr_t请参考”系统控制”章节。

user_addr

码流buffer的虚拟地址。

buf_size

码流buffer的大小。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_get_stream_buf_info

ot_venc_h265_attr

【说明】

定义H.265编码属性结构体。

【定义】

typedef struct {
    td_bool rcn_ref_share_buf_en;
    td_u32 frame_buf_ratio;
} ot_venc_h265_attr;

【成员】

成员名称

描述

rcn_ref_share_buf_en

是否使能帧节省模式。

取值范围:[0,1]。

静态属性。

frame_buf_ratio

帧buffer比例。

取值范围:[70,100]。

静态属性。

【注意事项】

frame_buf_ratio用来设置节省帧buffer比例,比如设置为80,则表示帧buffer为原始大小的80%;设置frame_buf_ratio不为100时,可能会对以下功能有影响, 且该值越小理论上出现的概率越高:

  1. P帧刷I slice可能会出现整帧刷成I块且提前结束刷I slice,涉及接口:ss_mpi_venc_set_intra_refresh;
  2. 去呼吸效应在某些帧上可能会失效,涉及接口:ss_mpi_venc_set_debreath_effect;
  3. QPMAP表不能强制指定skip块,SkipWeight表不能强制指定skip块,强制指定skip块可能会导致系统异常,驱动内部不做检查,用户自行保证;
  4. ROI背景低帧率编码可能会出现部分帧的非ROI区域不能编码为p_skip块,涉及接口:ss_mpi_venc_set_roi_bg_frame_rate;
  5. 某些场景指定为p_skip帧的情况下可能会失效,如编码瞬时码率超过阈值时丢帧策略,涉及接口:ss_mpi_venc_set_frame_lost_strategy;
  6. skip倾向性可能会失效,涉及接口:ss_mpi_venc_set_skip_bias。
  7. 视频低部被强制编码I块,导致画面闪烁。

【相关数据类型及接口】

无。

ot_venc_h264_attr

【说明】

定义H.264编码属性结构体。

【定义】

typedef struct {
    td_bool rcn_ref_share_buf_en;
    td_u32 frame_buf_ratio;
} ot_venc_h264_attr;

【成员】

成员名称

描述

rcn_ref_share_buf_en

是否使能帧节省模式。

取值范围:[0,1]。

静态属性。

frame_buf_ratio

帧buffer比例。

取值范围:[70,100]。

静态属性

【注意事项】

frame_buf_ratio用来设置节省帧buffer比例,比如设置为80,则表示帧buffer为原始大小的80%;设置frame_buf_ratio不为100时,可能会对以下功能有影响, 且该值越小理论上出现的概率越高:

  1. P帧刷I slice可能会出现整帧刷成I块且提前结束刷I slice,涉及接口:ss_mpi_venc_set_intra_refresh;
  2. 去呼吸效应在某些帧上可能会失效,涉及接口:ss_mpi_venc_set_debreath_effect;
  3. QPMAP表不能强制指定skip块,SkipWeight表不能强制指定skip块,强制指定skip块可能会导致系统异常,驱动内部不做检查,用户自行保证;
  4. ROI背景低帧率编码可能会出现部分帧的非ROI区域不能编码为p_skip块,涉及接口:ss_mpi_venc_set_roi_bg_frame_rate;
  5. 某些场景指定为p_skip帧的情况下可能会失效,如编码瞬时码率超过阈值时丢帧策略,涉及接口:ss_mpi_venc_set_frame_lost_strategy;
  6. skip倾向性可能会失效,涉及接口:ss_mpi_venc_set_skip_bias。
  7. 视频低部被强制编码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_num

编码mpf缩略图的个数。

取值范围:[0,2]。

0代表不编码mpf。

静态属性。

large_thumbnail_size[OT_VENC_MAX_MPF_NUM]

mpf缩略图的大小。

静态属性。

【注意事项】

  • 使能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;

【成员】

成员名称

描述

OT_VENC_PIC_RECV_SINGLE

当前编码通道只允许从一个源接收图像。

静态属性。

OT_VENC_PIC_RECV_MULTI

当前编码通道允许从多个源接收图像。

静态属性。

【注意事项】

Hi3516CV610支持在卷绕模式下使用MULTI模式。在卷绕模式下,主图和缩略图将采用更严格的匹配策略。需要注意以下情况:

  • JPEG的主图和缩略图源来自不同VPSS grp,可能导致VENC内部无法匹配,从而导致编码失败。

  • 前端VPSS通道进行减帧处理,可能导致VENC内部无法匹配,导致编码失败。

  • VENC进行帧率控制,可能导致VENC内部无法匹配,从而导致编码失败。

  • 卷绕时,若连续抓拍多张(ot_venc_start_param 中参数recv_pic_num大于1),小图送帧不及时可能导致会抓拍失败。

建议抓拍时设置recv_pic_num=1,抓拍成功后启动下一次抓拍。

【相关数据类型及接口】

ot_venc_jpeg_attr

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_RECV_SRC0

用于指定JPEG编码通道OT_VENC_PIC_RECV_MULTI模式从源0接收图像。

OT_VENC_RECV_SRC1

用于指定JPEG编码通道OT_VENC_PIC_RECV_MULTI模式从源1接收图像。

OT_VENC_RECV_SRC2

用于指定JPEG编码通道OT_VENC_PIC_RECV_MULTI模式从源2接收图像。

OT_VENC_RECV_SRC3

用于指定JPEG编码通道OT_VENC_PIC_RECV_MULTI模式从源3接收图像。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_pic_recv_mode

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;

【成员】

成员名称

描述

dcf_en

是否使能DCF(Design rule for Camera File system)。

DCF信息包含拍照基本信息和缩略图。

静态属性。

mpf_cfg

编码JPEG Mpf配置。

静态属性。

recv_mode

JPEG通道的图像接收模式。

静态属性。

【注意事项】

  • 缩略图默认大小为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_FRAME_RATE_UNKNOWN

未知/未声明

OT_VENC_PRORES_FRAME_RATE_23_976

24/1.001 (23.976…)

OT_VENC_PRORES_FRAME_RATE_24

24

OT_VENC_PRORES_FRAME_RATE_25

25

OT_VENC_PRORES_FRAME_RATE_29_97

30/1.001 (29.97…)

OT_VENC_PRORES_FRAME_RATE_30

30

OT_VENC_PRORES_FRAME_RATE_50

50

OT_VENC_PRORES_FRAME_RATE_59_94

60/1.001 (59.94…)

OT_VENC_PRORES_FRAME_RATE_60

60

OT_VENC_PRORES_FRAME_RATE_100

100

OT_VENC_PRORES_FRAME_RATE_119_88

120/1.001 (119.88…)

OT_VENC_PRORES_FRAME_RATE_120

120

【注意事项】

无。

【相关数据类型及接口】

无。

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_ASPECT_RATIO_UNKNOWN

未知/未声明

OT_VENC_PRORES_ASPECT_RATIO_SQUARE

方形

OT_VENC_PRORES_ASPECT_RATIO_4_3

4:3图像幅型比

OT_VENC_PRORES_ASPECT_RATIO_16_9

16:9图像幅型比

【注意事项】

无。

【相关数据类型及接口】

无。

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]

厂商名称。

frame_rate_code

帧率。

aspect_ratio

幅型比。

【注意事项】

无。

【相关数据类型及接口】

无。

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;

【成员】

成员名称

描述

type

编码协议类型。

静态属性。

max_pic_width

编码图像最大宽度。

取值范围:[MIN_WIDTH, MAX_WIDTH],以像素为单位。

必须是MIN_ALIGN的整数倍。

静态属性。

max_pic_height

编码图像最大高度。

取值范围:[MIN_HEIGHT, MAX_HEIGHT],以像素为单位。

必须是MIN_ALIGN的整数倍

静态属性。

buf_size

码流buffer大小。

取值范围:[Min, Max],以byte为单位。

必须是64的整数倍。

推荐值:一幅最大编码图像大小。推荐值为MaxPicWidth * MaxPicHeight * 1.5 byte。

静态属性。

调用接口ss_mpi_venc_set_mod_param设置模块参数min_buf_mode可以选择取值范围限制方式。

对于H.264/H.265/SVAC3.0:

1、min_buf_mode = 0:

Min:一幅最大编码图像大小的1/2。

Max:无限制,但是会消耗更多的内存。

2、min_buf_mode = 1,用户保证buffer大小合理性:

Min:32x1024 byte

Max:无限制,但是会消耗更多的内存。

对于Jpeg/Mjpeg:

1、min_buf_mode = 0:

Min:图像最大宽高16对齐后的乘积。

Max:无限制,但是会消耗更多的内存。

2、min_buf_mode = 1,用户保证buffer大小合理性:

Min:不小于32x1024 byte

Max:无限制,但是会消耗更多的内存。

对于Prores:

Min:一幅最大编码图像大小。

Max:无限制,但是会消耗更多的内存。

静态属性。

profile

编码的等级。

H.264取值范围:[0, 3]。

0:Baseline。

1:Main Profile。

2:High Profile。

3:svc-t。

H.265取值范围:[0, 1]。

0:Main Profile。

1:Main 10 Profile。

SVAC3.0取值范围:[0, 1]。

0:Main Profile。

1:High 8 Profile。

Jpeg/Mjpeg取值范围:0

0:Baseline

静态属性。

is_by_frame

帧/包模式获取码流。

取值范围:{TD_TRUE, TD_FALSE}。

  • TD_TRUE:按帧获取。
  • TD_FALSE:按包获取。

静态属性。

pic_width

编码图像宽度。

取值范围:[MIN_WIDTH, MAX_WIDTH],以像素为单位。

必须是MIN_ALIGN的整数倍。

pic_height

编码图像高度。

取值范围:[MIN_HEIGHT, MAX_HEIGHT],以像素为单位。

必须是MIN_ALIGN的整数倍

h264_attr/jpeg_attr/h265_attr/prores_attr/svac3_attr

某种协议的编码器属性。

暂不支持prores。

【注意事项】

SVAC3.0协议GOP模式设置为smart_crr/adv_smart_crr且分片时,按帧获取码流时表示获取的一个AU(访问单元,access unit),一个或者多个AU组成一个完整的知识图像帧。普通帧一个帧对应一个AU。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

OT_VENC_GOP_MODE_NORMAL_P

编码单参考帧P帧GOP类型。

OT_VENC_GOP_MODE_DUAL_P

编码双参考帧P帧GOP类型。

OT_VENC_GOP_MODE_SMART_P

编码智能P帧GOP类型。

OT_VENC_GOP_MODE_ADV_SMART_P

编码高级智能P帧GOP类型。

OT_VENC_GOP_MODE_BIPRED_B

编码B帧GOP类型。

OT_VENC_GOP_MODE_LOW_DELAY_B

编码B帧GOP类型,其中B帧只有前向参考帧。

OT_VENC_GOP_MODE_SMART_CRR

编码智能CRR帧GOP类型,CRR帧切片传输。

OT_VENC_GOP_MODE_SINGLE_SP

编码单参考帧SP帧GOP类型。

OT_VENC_GOP_MODE_I

只编码I帧的GOP类型。

OT_VENC_GOP_MODE_ADV_SMART_CRR

编码智能CRR帧GOP类型,CRR帧使用背景建模。

【注意事项】

  • 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属性结构体。

【定义】

typedef struct {
    td_s32 ip_qp_delta;
} ot_venc_gop_normal_p;

【成员】

成员名称

描述

ip_qp_delta

P帧相对I帧的QP差值。

取值范围:[-10, 30]

【注意事项】

无。

【相关数据类型及接口】

无。

ot_venc_gop_dual_p

【说明】

定义编码双参考帧P帧GOP属性结构体。

【定义】

typedef struct {
    td_u32 sp_interval;
    td_s32 sp_qp_delta;
    td_s32 ip_qp_delta;
} ot_venc_gop_dual_p;

【成员】

成员名称

描述

sp_interval

Special P帧的间隔。

取值范围:[0, 1)∪(1, gop-1],gop是I帧间隔。

sp_qp_delta

Special P帧相对普通P帧的QP差值。

取值范围:[-10, 30]

ip_qp_delta

I帧相对普通P帧的QP差值。

取值范围:[-10, 30]

【注意事项】

无。

【相关数据类型及接口】

无。

ot_venc_gop_smart_p

【说明】

定义编码智能P帧GOP属性结构体。

【定义】

typedef struct {
    td_u32 bg_interval;
    td_s32 bg_qp_delta;
    td_s32 vi_qp_delta;
} ot_venc_gop_smart_p;

【成员】

成员名称

描述

bg_interval

长期参考帧的间隔。

取值范围:[gop, 65536],且必须是gop的整数倍。

bg_qp_delta

长期参考帧和P帧的QP差值。

取值范围:[-10, 30]。

备注:在调试信息中,该参数等同其他码控模式的ip_qp_delta。

vi_qp_delta

虚拟I帧相对于普通P帧的QP差值。

取值范围:[-10, 30]。

【注意事项】

无。

【相关数据类型及接口】

无。

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;

【成员】

成员名称

描述

bg_interval

长期参考帧的间隔。

取值范围:[gop, 65536],且必须是gop的整数倍。

bg_qp_delta

长期参考帧和P帧的QP差值。

取值范围:[-10, 30]。

备注:在调试信息中,该参数等同其他码控模式的ip_qp_delta。

vi_qp_delta

虚拟I帧相对于普通P帧的QP差值。

取值范围:[-10, 30]。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_venc_gop_bipred_b

【说明】

定义编码B帧GOP属性结构体。

【定义】

typedef struct {
    td_u32 b_frame_num;
    td_s32 b_qp_delta;
    td_s32 ip_qp_delta;
} ot_venc_gop_bipred_b;

【成员】

成员名称

描述

b_frame_num

编码B帧的个数。

取值范围:[1, 3]。

b_qp_delta

B帧相对P帧的QP差值。

取值范围:[-10, 30]。

ip_qp_delta

I帧相对普通P帧的QP差值。

取值范围:[-10, 30]。

【注意事项】

无。

【相关数据类型及接口】

无。

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;

【成员】

成员名称

描述

sp_interval

Special P帧的间隔。

取值范围:[0, 1)∪(1, gop-1],gop是I帧间隔。

sp_qp_delta

Special P帧相对普通P帧的QP差值。

取值范围:[-10, 30]

ip_qp_delta

I帧相对普通P帧的QP差值。

取值范围:[-10, 30]

【注意事项】

无。

【相关数据类型及接口】

无。

ot_venc_gop_lowdelay_b

【说明】

定义编码低延迟B帧GOP属性结构体。

【定义】

typedef struct {
    td_s32 ib_qp_delta;
} ot_venc_gop_lowdelay_b;

【成员】

成员名称

描述

ib_qp_delta

I帧相对B帧的QP差值。

取值范围:[-10, 30]

【注意事项】

仅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;

【成员】

成员名称

描述

bg_interval

长期参考帧的间隔。

取值范围:[gop, 65536],且必须是gop的整数倍。

bg_qp_delta

长期参考帧和P帧的QP差值。

取值范围:[-10, 30]

备注:在调试信息中,该参数等同其他码控模式的ip_qp_delta。

vi_qp_delta

虚拟I帧相对于普通P帧的QP差值。

取值范围:[-10, 30]

crr_split_num

非显示知识图像切片个数。

取值范围:[1, gop)

crr_delay_num

CRR切片传输延迟个数。

(crr_split_num-1)*(crr_delay_num+1)+ 2 小于GOP大小

bgm_mode

背景建模模式

【注意事项】

  • 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支持。

【相关数据类型及接口】

ss_mpi_venc_create_chn

ot_venc_bgm_mode

【说明】

定义背景建模的模式。

【定义】

typedef enum {
    OT_VENC_BGM_BASELINE = 0,
    OT_VENC_BGM_ADVANCED,
    OT_VENC_BGM_BUTT,
} ot_venc_bgm_mode;

【成员】

成员名称

描述

OT_VENC_BGM_BASELINE

背景建模基础档次

OT_VENC_BGM_ADVANCED

背景建模高级档次

【注意事项】

  • 默认为背景建模基础档次。
  • 背景建模基础档次较普通SMART_CRR模式会新增一帧重建图像内存。
  • 当设置背景建模为高级档次时,较基础档次会额外新增一帧重建图像内存,暂不支持设置此模式。
  • 仅Hi3511CV100支持。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

gop_mode

编码GOP类型。

normal_p

编码单参考帧P帧GOP属性结构体。

dual_p

编码双参考帧P帧GOP属性结构体。

smart_p

编码智能P帧GOP属性结构体。

adv_smart_p

编码高级智能P帧GOP属性结构体。

bipred_b

编码B帧GOP属性结构体。

smart_crr

编码智能CRR帧的GOP属性结构体。

single_sp

编码单参考帧SP帧GOP属性结构体。

lowdelay_b

编码低延时B帧GOP属性结构体,仅Hi3511CV100支持。

adv_smart_crr

编码高级智能CRR帧的GOP属性结构体,仅Hi3511CV100支持。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

venc_attr

编码器属性。

rc_attr

码率控制器属性。

gop_attr

Gop Mode类型的结构体。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_create_chn

ot_venc_start_param

【说明】

定义编码通道连续接收并编码的帧数结构体。

【定义】

typedef struct {
    td_s32 recv_pic_num;
} ot_venc_start_param;

【成员】

成员名称

描述

recv_pic_num

编码通道连续接收并编码的帧数。

范围:[-1,0)∪(0 ∞]

【注意事项】

在帧率控制时,该帧数会不准,建议不在帧率控制时使用。

【相关数据类型及接口】

ss_mpi_venc_start_chn

ot_venc_stream_info

【说明】

定义编码器码流特征信息,供外部查询使用。

【定义】

typedef struct {
    ot_venc_ref_type ref_type;
    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;

【成员】

成员名称

描述

ref_type

高级跳帧参考下的编码帧类型。

pic_bytes

编码当前帧的字节(BYTE)数

pic_cnt

按帧获取码流时,表示编码帧计数;

按包获取码流时,表示编码包计数。

start_qp

编码当前帧的startqp值

mean_qp

编码当前帧的平均QP值

is_p_skip

当前帧是否为p_skip帧

residual_bits

编码当前帧残差(bit)数

head_bits

编码当前帧头信息的(bit)数

madi_val

编码当前帧空域纹理复杂度Madi值

madp_val

编码当前帧时域运动复杂度Madp值

sse_sum

编码当前帧中SSE(和方差)值

sse_lcu_cnt

编码当前帧中LCU个数

psnr_val

编码当前帧的PSNR(峰值信噪比)值

【注意事项】

  • 此结构体定义是为了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

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;
    td_u64 release_pic_pts;
    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;

【成员】

成员名称

描述

left_pics

待编码的图像数。

left_stream_bytes

码流buffer剩余的byte数。

left_stream_frames

码流buffer剩余的帧数。

cur_packs

当前帧的码流包个数。

left_recv_pics

剩余待接收的帧数,在用户调用接口ss_mpi_venc_start_chn设置接收帧数后有效。

left_enc_pics

剩余待编码的帧数,在用户调用接口ss_mpi_venc_start_chn设置接收帧数后有效。

is_jpeg_snap_end

JPEG抓拍模式下指示抓拍过程是否结束。

release_pic_pts

释放码流对应图像的PTS

stream_info

编码器码流特征信息。

discard_pics

编码前丢帧计数。

stream_buf_full_cnt

编码时因为码流buf满丢帧计数。

cvbr_bytes_saving

cvbr节省的byte数。

last_pts

已编码完成的最新帧pts。首帧编码完成前数值为(td_u64(-1))。

cur_pts

正在编码(编码未完成)的当前帧pts。未启动编码时为(td_u64(-1))。

【注意事项】

如果venc接收的抓拍帧有丢帧出现,is_jpeg_snap_end会存在不能正确标记抓拍结束的情况。

启动后可能由于各种原因可能丢帧(超大帧丢帧、复用时buf满,复用时触发重编,卷绕丢帧等),最终输出的码流中可能不存在已经查询到的cur_pts对应的那一帧码流。

【相关数据类型及接口】

ss_mpi_venc_query_status

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;

【成员】

成员名称

描述

enable

Slice/Patch分割是否使能。

split_mode

Slice/Patch分割模式。

0:按byte数分割。

1:按宏块行或者LCU行分割。

split_size

split_mode =0,表示每个slice的byte数。

最小值为:128;

最大值为:min((0xFFFF), pic_size/2),其中pic_size=pic_width * pic_height * 3/2

split_mode=1,H.264表示为每个slice占的宏块行数,H.265/SVAC3.0表示每个slice占的LCU行数。

最小值为:1;

最大值为:H.264为(图像高+15)/16,H.265/SVAC3.0为(图像高+LCU - 1)/LCU。

slice_output_en

默认值为TD_FALSE,当slice_output_en为TD_TRUE时,通道属性is_by_frame必须为TD_FALSE。

【注意事项】

  • 对于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协议编码通道搜索窗范围。

【定义】

typedef struct {
    ot_op_mode mode;
    td_u32 hor;
    td_u32 ver;
} ot_venc_search_window;

【成员】

成员名称

描述

mode

搜索窗模式。

OT_OP_MODE_AUTO:自动模式;

OT_OP_MODE_MANUAL:手动模式。

ot_op_mode请参考“系统控制”章节。

hor

搜索窗水平范围,当mode为手动模式时有效。

最小值为32,不检查上限。

ver

搜索窗垂直范围,当mode为手动模式时有效。

最小值为32,不检查上限。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_h264_intra_pred

【说明】

定义H.264协议编码通道帧内预测结构体。

【定义】

typedef struct {
    td_u32 constrained_intra_pred_flag;
} ot_venc_h264_intra_pred;

【成员】

成员名称

描述

constrained_intra_pred_flag

默认为0。

取值范围:0或1。

【注意事项】

以上参数具体含义请参见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;

【成员】

成员名称

描述

intra_trans_mode

帧内预测的变换模式:

  • 0:支持4x4,8x8变换,high profile,svc-t支持。
  • 1:4x4变换,baseline, main, high profile, svc-t均支持。
  • 2:8x8变换,high profile支持。

系统根据通道协议类型默认TransMode的选择。

inter_trans_mode

帧间预测的变换模式:

  • 0:支持4x4,8x8变换,high profile,svc-t支持。
  • 1:4x4变换,baseline, main, high profile,svc-t均支持。
  • 2:8x8变换,high profile支持。

系统根据通道协议类型默认TransMode的选择。

scaling_list_valid

inter_scaling_list8x8、intra_scaling_list8x8是否有效标识,只在high profile,svc-t下才有意义。

取值范围:0或1。

0:无效;

1:有效。

只支持配置0。

inter_scaling_list8x8

帧间预测8x8的量化表,在high profile,svc-t下,用户可以使用自己的量化表,保留,暂不使用。

取值范围:[1, 255]。

intra_scaling_list8x8

帧内预测8x8的量化表,在high profile,svc-t下,用户可以使用自己的量化表,保留,暂不使用。

取值范围:[1, 255]。

chroma_qp_index_offset

具体含义请参见H.264协议。

系统默认值为-6。

取值范围:[-12, 12]。

【注意事项】

  • 以上参数具体含义请参见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;

【成员】

成员名称

描述

entropy_coding_mode_i

I帧熵编码模式。

  • 0:cavlc
  • 1:cabac

>=2没有意义。

Baseline不支持cabac。

entropy_coding_mode_p

P帧熵编码模式。

  • 0:cavlc
  • 1:cabac

>=2没有意义。

Baseline不支持cabac。

entropy_coding_mode_b

B帧熵编码模式。

  • 0:cavlc
  • 1:cabac

>=2没有意义。

Baseline不支持cabac,不支持B帧。

cabac_init_idc

取值范围:[0, 2], 默认值0,具体含义请参见H.264协议。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

disable_deblocking_filter_idc

取值范围:[0, 2], 默认值0,具体含义请参见H.264协议。

slice_alpha_c0_offset_div2

取值范围:[-6, 6], 默认值0,具体含义请参见H.264协议。

slice_beta_offset_div2

取值范围:[-6, 6], 默认值0,具体含义请参见H.264协议。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

vui_aspect_ratio

具体含义请参见H.264协议。

vui_time_info

具体含义请参见H.264协议。

vui_video_signal

具体含义请参见H.264协议。

vui_bitstream_restric

具体含义请参见H.264协议。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

vui_aspect_ratio

具体含义请参见H.265协议。

vui_time_info

具体含义请参见H.265协议。

vui_video_signal

具体含义请参见H.265协议。

vui_bitstream_restric

具体含义请参见H.265协议。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

aspect_ratio_info_present_flag

具体含义请参见H.264/H.265协议,系统默认为0。

取值范围:0或1。以下参数只有在该标志为1时才生效。

aspect_ratio_idc

具体含义请参见H.264/H.265协议,系统默认为1。

取值范围:[0,255],17~254 保留。

overscan_info_present_flag

具体含义请参见H.264/H.265协议,系统默认为0。

取值范围:0或1。

overscan_appropriate_flag

具体含义请参见H.264/H.265协议,系统默认为0。

取值范围:0或1。

sar_width

具体含义请参见H.264/H.265协议,系统默认为1。

取值范围:(0, 65535],并且与sar_height互质。

sar_height

具体含义请参见H.264/H.265协议,系统默认为1。

取值范围:(0, 65535],并且与sar_width互质。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

timing_info_present_flag

具体含义请参见H.264协议,系统默认为0。

取值范围:0或1。以下参数只有在该标志为1时才有生效。

fixed_frame_rate_flag

具体含义请参见H.264协议,系统默认为1。

取值范围:0或1。

num_units_in_tick

具体含义请参见H.264协议,系统默认为1。

取值范围:大于0。

time_scale

具体含义请参见H.264协议,系统默认为60。

取值范围:大于0。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_h264_vui

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;

【成员】

成员名称

描述

timing_info_present_flag

具体含义请参见H.265协议,系统默认为0。

取值范围:0或1。以下参数只有在该标志为1时才有生效。

num_units_in_tick

具体含义请参见H.265协议,系统默认为1。

取值范围:大于0。

time_scale

具体含义请参见H.265协议,系统默认为60。

取值范围:大于0。

num_ticks_poc_diff_one_minus1

具体含义请参见H.265协议,系统默认为1。

取值范围:[0, 2^32-2]。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_h265_vui

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;

【成员】

成员名称

描述

video_signal_type_present_flag

具体含义请参见H.264/H.265协议,系统默认为1。

取值范围:0或1。以下参数只有在该标志为1时才生效。

video_format

具体含义请参见H.264/H.265协议,系统默认为5。

取值范围:H.264:[0, 7],H.265: [0, 5]。

video_full_range_flag

具体含义请参见H.264/H.265协议,系统默认为1。

取值范围:0或1。

colour_description_present_flag

具体含义请参见H.264/H.265协议,系统默认为1。

该值为只读信息。

取值范围:0或1。

colour_primaries

具体含义请参见H.264/H.265协议,系统默认为1。

该值为只读信息,内部根据当前图像实际信息填写。

取值范围:[0, 255]。

transfer_characteristics

具体含义请参见H.264/H.265协议,系统默认为1。

该值为只读信息,内部根据当前图像实际信息填写。

取值范围:[0, 255]。

matrix_coefficients

具体含义请参见H.264/H.265协议,系统默认为1。

该值为只读信息,内部根据当前图像实际信息填写。

取值范围:[0, 255]。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_vui_bitstream_restric

【说明】

定义H.264/H.265协议编码通道Vui中信息的Bitstream_Restriction结构体。

【定义】

typedef struct {
    td_u8 bitstream_restriction_flag;
} ot_venc_vui_bitstream_restric;

【成员】

成员名称

描述

bitstream_restriction_flag

具体含义请参见H.264/H.265协议,系统默认为0。

取值范围:0或1。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

qfactor

具体含义请参见RFC2435协议,系统默认为90。

取值范围:[1, 99]。

y_qt

Y量化表。

取值范围:[1, 255]。

cb_qt

Cb量化表。

取值范围:[1, 255]。

cr_qt

Cr量化表。

取值范围:[1, 255]。

mcu_per_ecs

每个ECS中包含多少个MCU,系统默认为0,表示不划分Ecs。

mcu_per_ecs:[0, min{(pic_width+15)>>4 x (pic_height+15)>>4 x 2, 65535}]

ecs_output_en

当ecs_output_en为TD_TRUE时,通道属性is_by_frame必须为TD_FALSE。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

y_qt

Y量化表。

取值范围:[1, 255]。

cb_qt

Cb量化表。

取值范围:[1, 255]。

cr_qt

Cr量化表。

取值范围:[1, 255]。

mcu_per_ecs

每个ECS中包含多少个MCU,系统默认为0,表示不划分Ecs。

mcu_per_ecs:[0,min{(pic_width+15)>>4 x (pic_height+15)>>4 x 2, 65535}]

ecs_output_en

当ecs_output_en为TD_TRUE时,通道属性is_by_frame必须为TD_FALSE。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

idx

ROI区域的索引,系统支持的索引范围为[0,7],不支持超出这个范围的索引。

enable

是否使能这个ROI区域。

is_abs_qp

ROI区域QP模式。

  • TD_FALSE:相对QP
  • TD_TRUE:绝对QP

qp

QP值:

  • 当QP模式为TD_FALSE时,qp为QP偏移,qp范围SVAC3.0协议[-63,63],其他协议[-51,51]。
  • 当QP模式为TD_TRUE时,qp为宏块QP值,qp范围SVAC3.0协议[0,63],其他协议[0,51]。

rect

ROI区域。

x、y、width、height必须是16对齐。

ot_rect请参考”系统控制”章节。

【注意事项】

无。

【相关数据类型及接口】

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_FOR_I

应用于I帧的ROI。

OT_VENC_ROI_FOR_P_B

应用于P帧或B帧的ROI。

OT_VENC_ROI_FOR_VI

应用于VI(虚拟I)帧的ROI。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_roi_attr_ex

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;

【成员】

成员名称

描述

idx

ROI区域的索引,系统支持的索引范围为[0,7],不支持超出这个范围的索引。

enable[OT_VENC_ROI_FOR_BUTT]

是否使能这个ROI区域。

其中数值下标匹配ot_venc_roi_for_frame枚举值定义。下面的参数类同。

is_abs_qp[OT_VENC_ROI_FOR_BUTT]

ROI区域QP模式。

  • TD_FALSE:相对QP
  • TD_TRUE:绝对QP

qp[OT_VENC_ROI_FOR_BUTT]

QP值。

当QP模式为TD_FALSE时,qp为QP偏移,qp范围svac3协议[-63,63],其他协议[-51,51];

当QP模式为TD_TRUE时,qp为宏块QP值,qp范围svac3协议[0,63],其他协议[0,51]。

rect[OT_VENC_ROI_FOR_BUTT]

ROI区域。

x、y、width、height必须是16对齐。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_jpeg_roi_attr

【说明】

JPEG和MJPEG定义编码感兴趣区域信息。

【定义】

typedef struct {
    td_u32 idx;
    td_bool enable;
    td_u32 level;
    ot_rect rect;
} ot_venc_jpeg_roi_attr;

【成员】

成员名称

描述

idx

ROI的索引,系统支持的索引范围为[0,15],不支持超出这个范围的索引。

enable

是否使能这个ROI。

level

ROI降码率等级,0~3依次提高,数值越大码率降低相对越多,图像质量损失也相对越多。

rect

ROI区域。x、y、width、height必须是16对齐。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

idx

ROI的索引,系统支持的索引范围为[0,15],不支持超出这个范围的索引。

enable

是否使能这个ROI。

fg_level

ROI区域降码率等级,0~15依次提高,数值越大码率降低相对越多,图像质量损失也相对越多。

推荐值:0

bg_level

非ROI区域降码率等级,0~15依次提高,数值越大码率降低相对越多,图像质量损失也相对越多。

推荐值:8

rect

ROI区域。x、y、width、height必须是16对齐。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_roi_bg_frame_rate

【说明】

定义非编码感兴趣区域帧率。

【定义】

typedef struct {
    td_s32 src_frame_rate;
    td_s32 dst_frame_rate;
} ot_venc_roi_bg_frame_rate;

【成员】

成员名称

描述

src_frame_rate

非Roi区域的源帧率,-1或[1, 65536)

dst_frame_rate

非Roi区域的目标帧率,-1或[0, src_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;

【成员】

成员名称

描述

base

base层的周期。

取值范围:(0,2^32-1]

enhance

enhance层的周期。

取值范围:[0, 255]。

pred_en

代表base层的帧是否被base层其他帧用作参考。

当pred_en 设置为TD_FALSE时,等同于base设置为无限大,base层的所有帧都参考IDR帧,不被其他帧用作参考。

base_qp_delta_en

base层qp_delta相对当前GOP的I帧调节使能。

base_qp_delta

base层qp_delta相对当前GOP的I帧调节值。

取值范围:[-10, 10]

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

rc_mode

RC模式。

h264_abr

H.264协议编码通道Abr模式属性。

h264_cbr

H.264协议编码通道Cbr模式属性。

h264_vbr

H.264协议编码通道Vbr模式属性。

h264_avbr

H.264协议编码通道AVbr模式属性。

h264_qvbr

H.264协议编码通道QVbr模式属性。

h264_cvbr

H.264协议编码通道CVbr模式属性。

h264_fixqp

H.264协议编码通道Fixqp模式属性。

h264_qpmap

H.264协议编码通道QPMAP模式属性。

h264_rangeqp

H.264协议编码通道RANGEQP模式属性。

mjpeg_cbr

Mjpeg协议编码通道Cbr模式属性。

mjpeg_vbr

Mjpeg协议编码通道Vbr模式属性。

mjpeg_fixqp

Mjpeg协议编码通道Fixqp模式属性。

h265_abr

H.265协议编码通道Abr模式属性。

h265_cbr

H.265协议编码通道Cbr模式属性。

h265_vbr

H.265协议编码通道Vbr模式属性。

h265_avbr

H.265协议编码通道AVbr模式属性。

h265_qvbr

H.265协议编码通道QVbr模式属性。

h265_cvbr

H.265协议编码通道CVbr模式属性。

h265_fixqp

H.265协议编码通道Fixqp模式属性。

h265_qpmap

H.265协议编码通道QPMAP模式属性。

h265_rangeqp

H.265协议编码通道RANGEQP模式属性。

svac3_abr

SVAC3.0协议编码通道Abr模式属性。

svac3_cbr

SVAC3.0协议编码通道Cbr模式属性。

svac3_vbr

SVAC3.0协议编码通道Vbr模式属性。

svac3_avbr

SVAC3.0协议编码通道AVbr模式属性。

svac3_qvbr

SVAC3.0协议编码通道QVbr模式属性。

svac3_cvbr

SVAC3.0协议编码通道CVbr模式属性。

svac3_fixqp

SVAC3.0协议编码通道Fixqp模式属性。

svac3_qpmap

SVAC3.0协议编码通道QPMAP模式属性。

svac3_rangeqp

SVAC3.0协议编码通道RANGEQP模式属性。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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_MODE_H264_ABR

H.264 ABR模式。

OT_VENC_RC_MODE_H264_CBR

H.264 CBR模式。

OT_VENC_RC_MODE_H264_VBR

H.264 VBR模式。

OT_VENC_RC_MODE_H264_AVBR

H.264 AVBR模式。

OT_VENC_RC_MODE_H264_QVBR

H.264 QVBR模式。

OT_VENC_RC_MODE_H264_CVBR

H.264 CVBR模式。

OT_VENC_RC_MODE_H264_FIXQP

H.264 Fixqp模式。

OT_VENC_RC_MODE_H264_QPMAP

H.264 QPMAP模式。

OT_VENC_RC_MODE_H264_RANGEQP

H.264 RANGEQP模式。

OT_VENC_RC_MODE_MJPEG_CBR

MJPEG CBR模式。

OT_VENC_RC_MODE_MJPEG_VBR

MJPEG VBR模式。

OT_VENC_RC_MODE_MJPEG_FIXQP

MJPEG Fixqp模式。

OT_VENC_RC_MODE_H265_ABR

H.265 ABR模式。

OT_VENC_RC_MODE_H265_CBR

H.265 CBR模式。

OT_VENC_RC_MODE_H265_VBR

H.265 VBR模式。

OT_VENC_RC_MODE_H265_AVBR

H.265 AVBR模式。

OT_VENC_RC_MODE_H265_QVBR

H.265 QVBR模式。

OT_VENC_RC_MODE_H265_CVBR

H.265 CVBR模式。

OT_VENC_RC_MODE_H265_FIXQP

H.265 Fixqp模式。

OT_VENC_RC_MODE_H265_QPMAP

H.265 QPMAP模式。

OT_VENC_RC_MODE_H265_RANGEQP

H.265 RANGEQP模式。

OT_VENC_RC_MODE_SVAC3_ABR

SVAC3.0 ABR模式。

OT_VENC_RC_MODE_SVAC3_CBR

SVAC3.0 CBR模式。

OT_VENC_RC_MODE_SVAC3_VBR

SVAC3.0 VBR模式。

OT_VENC_RC_MODE_SVAC3_AVBR

SVAC3.0 AVBR模式。

OT_VENC_RC_MODE_SVAC3_QVBR

SVAC3.0 QVBR模式。

OT_VENC_RC_MODE_SVAC3_CVBR

SVAC3.0 CVBR模式。

OT_VENC_RC_MODE_SVAC3_FIXQP

SVAC3.0 Fixqp模式。

OT_VENC_RC_MODE_SVAC3_QPMAP

SVAC3.0 QPMAP模式。

OT_VENC_RC_MODE_SVAC3_RANGEQP

SVAC3.0 RANGEQP模式。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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_RC_QPMAP_MODE_MEAN_QP

CU32 QP值取4个16*16块Qp值的平均值;

CU64 QP值取16个16*16块Qp值的平均值。

OT_VENC_RC_QPMAP_MODE_MIN_QP

CU32 QP值取4个16*16块Qp值的最小值;

CU64 QP值取16个16*16块Qp值的最小值。

OT_VENC_RC_QPMAP_MODE_MAX_QP

CU32 QP值取4个16*16块Qp值的最大值;

CU64 QP值取16个16*16块Qp值的最大值。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_h265_qpmap

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;

【成员】

成员名称

描述

gop

H.264 gop值。

取值范围:[1, 65536]

stats_time

ABR码率统计时间,以秒为单位。

取值范围:[1, 60]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

bit_rate

编码器输出最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

vbv_buf_delay

用以控制vbv虚拟缓存的容量(vbv_buf_size),vbv_buf_size等于为bit_rate乘以vbv_buf_delay,vbv_buf_delay单位为秒。码率控制算法使得vbv_buf_delay时间窗内的平均码率达到目标码率。vbv_buf_delay越大,编码质量越稳定。

取值范围:[1, 100]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

gop

H.264 gop值。

取值范围:[1, 65536]。

stats_time

CBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

bit_rate

平均bitrate,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

【注意事项】

  • 设置源帧率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。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.264 gop值。

取值范围:[1, 65536]。

stats_time

VBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

max_bit_rate

编码器输出最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.264 gop值。

取值范围:[1, 65536]。

stats_time

AVBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

max_bit_rate

编码器输出最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.264 gop值。

取值范围:[1, 65536]。

stats_time

QVBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

target_bit_rate

编码器输出最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

gop

H.264 gop值。

取值范围:[1, 65536]。

stats_time

CVBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

max_bit_rate

编码器输出短期最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]。

short_term_stats_time

码率短期统计时间,以秒为单位。

取值范围:[1, 120]。

long_term_stats_time

码率长期统计时间,单位由高级参数long_term_stats_time_unit决定,默认为分钟。

取值范围:[1, 1440]。

long_term_max_bit_rate

编码器输出长期最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE, max_bit_rate]

long_term_min_bit_rate

编码器输出长期最小码率,以kbps为单位。

取值范围:[0, long_term_max_bit_rate]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.264 gop值。

取值范围:[1, 65536]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

i_qp

I帧所有宏块Qp值。

取值范围:[0, 51]。

p_qp

P帧所有宏块Qp值。

取值范围:[0, 51]。

b_qp

B帧所有宏块Qp值。

取值范围:[0, 51]。

vi_qp

VI帧所有宏块Qp值。

取值范围:[0, 51]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.264 gop值。

取值范围:[1, 65536]。

stats_time

QPMAP码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

gop

H.264 gop值。

取值范围:[1, 65536]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

i_qp

I帧所有宏块Qp值。

取值范围:[0, 51]

p_qp

P帧所有宏块Qp值。

取值范围:[0, 51]

b_qp

B帧所有宏块Qp值。

取值范围:[0, 51]

max_i_qp

I帧的最大QP。

取值范围:[i_qp, 51]

min_i_qp

I帧的最小QP。

取值范围:[0, i_qp]

max_p_qp

P帧的最大QP。

取值范围:[p_qp, 51]

min_p_qp

P帧的最小QP。

取值范围:[0, p_qp]

max_vi_qp

VI帧的最大QP。

取值范围:[p_qp, 51]

min_vi_qp

VI帧的最小QP。

取值范围:[0, p_qp]

max_b_qp

B帧的最大QP。

取值范围:[b_qp, 51]

min_b_qp

B帧的最小QP。

取值范围:[0, b_qp]

【注意事项】

在OT_VENC_GOP_MODE_I模式下,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

qfactor

MJPEG编码的Qfactor。

取值范围:[1, 99]。

【注意事项】

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

stats_time

CBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

编码器输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

bit_rate

平均bit_rate,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

【注意事项】

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

stats_time

VBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

编码器输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

max_bit_rate

最大bitrate,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

【注意事项】

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

gop

H.265 gop值。

取值范围:[1, 65536]。

stats_time

ABR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

bit_rate

最大bitrate,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

vbv_buf_delay

用以控制vbv虚拟缓存的容量(vbv_buf_size),vbv_buf_size等于bit_rate乘以vbv_buf_delay,vbv_buf_delay单位为秒。码率控制算法使得vbv_buf_delay时间窗内的平均码率达到目标码率。vbv_buf_delay越大,编码质量越稳定。

取值范围:[1, 100]。

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.265 gop值。

取值范围:[1, 65536]。

stats_time

CBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

bit_rate

最大bitrate,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.265 gop值。

取值范围:[1, 65536]。

stats_time

VBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

max_bit_rate

编码器输出最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.265 gop值。

取值范围:[1, 65536]。

stats_time

AVBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

max_bit_rate

编码器输出最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.265 gop值。

取值范围:[1, 65536]。

stats_time

QVBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

target_bit_rate

编码器输出最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

gop值。

取值范围:[1, 65536]。

stats_time

CVBR码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

max_bit_rate

编码器输出短期最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE,OT_VENC_MAX_BITRATE]。

short_term_stats_time

码率短期统计时间,以秒为单位。

取值范围:[1, 120]。

long_term_stats_time

码率长期统计时间,单位由高级参数long_term_stats_time_unit决定,默认为分钟。

取值范围:[1, 1440]。

long_term_max_bit_rate

编码器输出长期最大码率,以kbps为单位。

取值范围:[2, max_bit_rate]。

long_term_min_bit_rate

编码器输出长期最小码率,以kbps为单位。

取值范围:

[0, long_term_max_bit_rate]。

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.265 gop值。

取值范围:[1, 65536]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

i_qp

I帧所有宏块Qp值。

取值范围:[0, 51]。

p_qp

P帧所有宏块Qp值。

取值范围:[0, 51]。

b_qp

B帧所有宏块Qp值。

取值范围:[0, 51]。

vi_qp

VI帧所有宏块Qp值。

取值范围:[0, 51]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

H.265 gop值。

取值范围:[1, 65536]。

stats_time

QPMAP码率统计时间,以秒为单位。

取值范围:[1, 60]。

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]。

分数帧率时分母不大于64。

qpmap_mode

CU32或CU64的QP值的取值方式。

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

gop

H.265 gop值。

取值范围:[1, 65536]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

i_qp

I帧所有宏块Qp值。

取值范围:[0, 51]

p_qp

P帧所有宏块Qp值。

取值范围:[0, 51]

b_qp

B帧所有宏块Qp值。

取值范围:[0, 51]

max_i_qp

I帧的最大QP。

取值范围:[i_qp, 51]

min_i_qp

I帧的最小QP。

取值范围:[0, i_qp]

max_p_qp

P帧的最大QP。

取值范围:[p_qp, 51]

min_p_qp

P帧的最小QP。

取值范围:[0, p_qp]

max_vi_qp

VI帧的最大QP。

取值范围:[p_qp, 51]

min_vi_qp

VI帧的最小QP。

取值范围:[0, p_qp]

max_b_qp

B帧的最大QP。

取值范围:[b_qp, 51]

min_b_qp

B帧的最小QP。

取值范围:[0, b_qp]

【注意事项】

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

OT_VENC_SUPER_FRAME_NONE

无特殊策略。

OT_VENC_SUPER_FRAME_DISCARD

丢弃超大帧。

OT_VENC_SUPER_FRAME_REENCODE

重编超大帧。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

chg_pos

VBR开始调整Qp时的码率相对于最大码率的比例。

取值范围:[50, 100]。

默认值:90。

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]。

默认值:20。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1,100]。

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

qpmap_en

VBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

max_qp

P、B帧的最大QP。

取值范围:[0, 51]。

默认值:51。

min_qp

P、B帧的最小QP。

取值范围:[0, max_qp]。

默认值:24。

max_i_qp

I帧的最大QP。

取值范围:[0, 51]。

默认值:51。

min_i_qp

I帧的最小QP。

取值范围:[0, max_i_qp]。

默认值:24。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:51。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:24。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

chg_pos

AVBR开始调整Qp时的码率相对于最大码率的比例。

取值范围:[50, 100]。

默认值:90。

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]。

默认值:100。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1,100]。

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

qpmap_en

AVBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

min_still_percent

静止状态下目标码率的最小百分比。此变量设置为100,AVBR将不会在判别为静止时主动调低目标码率。

取值范围:[5, 100]

默认值:25。

max_still_qp

静止状态最大QP。

取值范围:[min_i_qp, max_i_qp]。

默认值:35。

min_still_psnr

暂时无效,只能设置为0.

max_qp

P、B帧的最大QP。

取值范围:[0, 51]。

默认值:51。

min_qp

P、B帧的最小QP。

取值范围:[0, max_qp]。

默认值:24。

max_i_qp

I帧的最大QP。

取值范围:[0, 51]。

默认值:51。

min_i_qp

I帧的最小QP。

取值范围:[0, max_i_qp]。

默认值:24。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:51。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:24。

min_qp_delta

帧级QP最小值和CU级QP最小值的差值。

I帧:FrameLevelMinQp = min_qp_delta +min_i_qp

P、B帧:FrameLevelMinQp= min_qp_delta+min_qp

取值范围:[0, 4];

默认值:0。

motion_sensitivity

运动敏感度。

取值范围:[0, 100]。

默认值:100。

save_bitrate_en

节省码率控制开关,使能后自适应节省背景区域的码率。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]。

默认值:100。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1,100]。

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

qpmap_en

QVBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

max_qp

P、B帧的最大QP。

取值范围:[min_qp, 51]。

默认值:51。

min_qp

P、B帧的最小QP。

取值范围:[0, 51]。

默认值:16。

max_i_qp

I帧的最大QP。

取值范围:[min_i_qp, 51]。

默认值:51。

min_i_qp

I帧的最小QP。

取值范围:[0, 51]。

默认值:16。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:51。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:16。

max_bit_percent

码率百分比上限。

取值范围:[min_bit_percent, 180]。

默认值:125。

min_bit_percent

码率百分比下限。

取值范围:[30, 180]。

默认值:45。

max_psnr_fluctuate

Psnr上限。

取值范围:[min_psnr_fluctuate, 40]。

默认值:30。

min_psnr_fluctuate

Psnr下限。

取值范围:[18, 40]。

默认值:23。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]。

默认值:100。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1,100]。

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

qpmap_en

CVBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

max_qp

P、B帧的最大QP。

取值范围:[min_qp, 51]。

默认值:47。

min_qp

P、B帧的最小QP。

取值范围:[0, 51]。

默认值:22。

max_i_qp

I帧的最大QP。

取值范围:[min_i_qp, 51]。

默认值:47。

min_i_qp

I帧的最小QP。

取值范围:[0, 51]。

默认值:20。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:47。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:22。

min_qp_delta

帧级QP最小值和CU级QP最小值的差值。

I帧:FrameLevelMinQp = min_qp_delta+ min_i_qp

P、B帧:FrameLevelMinQp= min_qp_delta+min_qp

取值范围:[0, 4];

默认值:0。

max_qp_delta

帧级QP最大值和CU级QP最大值的差值。

I帧:FrameLevelMaxQp = max_i_qp- max_qp_delta

P、B帧:FrameLevelMaxQp= max_qp-max_qp_delta

取值范围:[0, 4];

默认值:0。

extra_bit_percent

编码器输出码流最大透支bit数百分比。(当前不生效)

在码率不足时,为保证图像质量,编码器会通过透支一定数量的bit数以提升图像质量,这部分透支的码率来源于前期节省的码率,若前期无节省码率,则当前参数不生效。

取值范围:[0, 1000]

默认值:5。

long_term_stats_time_unit

码率长期统计时间参数(long_term_stats_time)的单位,本变量单位是秒(s),如配置long_term_stats_time_unit= 60,long_term_stats_time=3,代表长期统计时间为3分钟。

取值范围:[1, 1800];

默认值:60。

save_bitrate_en

节省码率控制开关,使能后自适应节省背景区域的码率。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

【注意事项】

无

【相关数据类型及接口】

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;

【成员】

成员名称

描述

max_i_proportion

最大IP帧比例。

取值范围:[min_i_proportion, 100]。

默认值:20。

min_i_proportion

最小IP帧比例。

取值范围:[1, 100]。

默认值:1。

max_qp

帧最大QP,用于钳位质量。

取值范围:[0, 51]。

默认值:51。

min_qp

帧最小QP,用于钳位码率波动。

取值范围:[0, max_qp]。

默认值:10。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

min_i_qp

I帧的最小QP。用于控制I帧的最大bits数。

取值范围:[0, max_i_qp]。

默认值:10。

max_i_qp

I帧的最大QP。用于控制I帧的最小bits数。

取值范围:[0, 51]。

默认值:51。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:51。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:10。

qpmap_en

CBR码控模式下,使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

max_p_qp

P帧的最大QP。用于控制P帧的最小bits数。

取值范围:[0, 51]。

默认值:51。

min_p_qp

P帧的最小QP。用于控制P帧的最大bits数。

取值范围:[0, max_p_qp]。

默认值:10。

max_i_qp

I帧的最大QP。用于控制I帧的最小bits数。

取值范围:[0, 51]。

默认值:51。

min_i_qp

I帧的最小QP。用于控制I帧的最大bits数。

取值范围:[0, max_i_qp]。

默认值:10。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:51。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:10。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

qpmap_en

ABR码控模式下,使能/关闭QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_mjpeg_cbr_param

【说明】

定义MJPEG协议编码通道CBR码率控制模式高级参数配置。

【定义】

typedef struct {
    td_u32 max_qfactor;
    td_u32 min_qfactor;
} ot_venc_mjpeg_cbr_param;

【成员】

成员名称

描述

max_qfactor

帧最大Qfactor,用于钳位质量。

取值范围:[1, 99]。

默认值:99。

min_qfactor

帧最小Qfactor,用于钳位质量。

取值范围:[1, max_qfactor]。

默认值:20。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_mjpeg_vbr_param

【说明】

定义MJPEG协议编码通道VBR码率控制模式高级参数配置。

【定义】

typedef struct {
    td_s32 chg_pos;
    td_u32 max_qfactor;
    td_u32 min_qfactor;
} ot_venc_mjpeg_vbr_param;

【成员】

成员名称

描述

chg_pos

VBR开始调整Qfactor时的码率相对于最大码率的比例。

取值范围:[50, 100]。

默认值:90。

max_qfactor

最大量化因子,取值范围:[1, 99]。

默认值:99。

min_qfactor

最小量化因子,取值范围:[1, max_qfactor]

默认值:20。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

chg_pos

开始调整Qp时的码率相对于最大码率的比例。

取值范围:[50, 100]。

默认值:90。

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]。

默认值:20。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1,100]。

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

max_qp

P帧的最大QP。

取值范围:[0, 51]。

默认值:51。

min_qp

P帧的最小QP。

取值范围:[0, max_qp]。

默认值:24。

max_i_qp

I帧的最大QP。

取值范围:[0, 51]。

默认值:51。

min_i_qp

I帧的最小QP。

取值范围:[0, max_i_qp]。

默认值:24。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:51。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:24。

qpmap_en

VBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

QPMAP模式下CU32、CU64 QP值的取值方式。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

chg_pos

开始调整Qp时的码率相对于最大码率的比例。

取值范围:[50, 100]。

默认值:90。

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]。

默认值:100。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1,100]。

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

min_still_percent

静止状态下目标码率的最小百分比。此变量设置为100,AVBR将不会在判别为静止时主动调低目标码率。

取值范围:[5, 100]。

默认值:25。

max_still_qp

静止状态最大QP。

取值范围:[min_i_qp, max_i_qp]。

默认值:35。

min_still_psnr

暂时无效,只能设置为0.

max_qp

P帧的最大QP。

取值范围:[0, 51]。

默认值:51。

min_qp

P帧的最小QP。

取值范围:[0, max_qp]。

默认值:24。

max_i_qp

I帧的最大QP。

取值范围:[0, 51]。

默认值:51。

min_i_qp

I帧的最小QP。

取值范围:[0, max_i_qp]。

默认值:24。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:51。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:24。

min_qp_delta

帧级QP最小值和CU级QP最小值的差值。

I帧:FrameLevelMinQp = min_qp_delta+ min_i_qp

P、B帧:FrameLevelMinQp= min_qp_delta+min_qp

取值范围:[0, 4];

默认值:0。

motion_sensitivity

运动敏感度。

取值范围:[0, 100]。

默认值:100。

qpmap_en

AVBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

QPMAP模式下CU32、CU64 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;

【成员】

成员名称

描述

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]。

默认值:100。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1,100]。

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

qpmap_en

QVBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

QpMap模式。

取值范围:[0, 2]。

默认值:0。

max_qp

P、B帧的最大QP。

取值范围:[min_qp, 51]。

默认值:51。

min_qp

P、B帧的最小QP。

取值范围:[0, 51]。

默认值:16。

max_i_qp

I帧的最大QP。

取值范围:[min_i_qp, 51]。

默认值:51。

min_i_qp

I帧的最小QP。

取值范围:[0, 51]。

默认值:16。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:51。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:16。

max_bit_percent

码率百分比上限。

取值范围:[min_bit_percent, 180]。

默认值:125。

min_bit_percent

码率百分比下限。

取值范围:[30, 180]。

默认值:45。

max_psnr_fluctuate

Psnr上限。

取值范围:[min_psnr_fluctuate, 40]。

默认值:30。

min_psnr_fluctuate

Psnr下限。

取值范围:[18, 40]。

默认值:23。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]。

默认值:100。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1,100]。

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

qpmap_en

CVBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

QpMap模式。

取值范围:[0, 2]。

默认值:0。

max_qp

P、B帧的最大QP。

取值范围:[min_qp, 51]。

默认值:47。

min_qp

P、B帧的最小QP。

取值范围:[0, 51]。

默认值:22。

max_i_qp

I帧的最大QP。

取值范围:[min_i_qp, 51]。

默认值:47。

min_i_qp

I帧的最小QP。

取值范围:[0, 51]。

默认值:20。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:47。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:22。

min_qp_delta

帧级QP最小值和CU级QP最小值的差值。

I帧:FrameLevelMinQp = min_qp_delta+ min_i_qp

P、B帧:FrameLevelMinQp= min_qp_delta+min_qp

取值范围:[0, 4];

默认值:0。

max_qp_delta

帧级QP最大值和CU级QP最大值的差值。

I帧:FrameLevelMaxQp = max_i_qp- max_qp_delta

P、B帧:FrameLevelMaxQp= max_qp-max_qp_delta

取值范围:[0, 4];

默认值:0。

extra_bit_percent

编码器输出码流最大透支bit数百分比。(当前不生效)

在码率不足时,为保证图像质量,编码器会通过透支一定的bit数以提升图像质量,这部分透支的码率来源于前期节省的码率,若前期无节省码率,则当前参数不生效。

取值范围[0, 1000]

默认值:5。

long_term_stats_time_unit

码率长期统计时间参数(long_term_stats_time)的单位,本变量单位是秒(s),如配置long_term_stats_time_unit = 60,long_term_stats_time=3,代表长期统计时间为3分钟。

取值范围:[1, 1800];

默认值:60。

【注意事项】

无

【相关数据类型及接口】

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;

【成员】

成员名称

描述

max_i_proportion

最大IP帧比例。

取值范围:[min_i_proportion, 100]。

默认值:20。

min_i_proportion

最小IP帧比例。

取值范围:[1, 100]。

默认值:1。

max_qp

帧最大QP,用于钳位质量。

取值范围:[0, 51]。

默认值:51。

min_qp

帧最小QP,用于钳位码率波动。

取值范围:[0, max_qp]。

默认值:10。

max_i_qp

I帧的最大QP。用于控制I帧的最小bits数。

取值范围:[0, 51]。

默认值:51。

min_i_qp

I帧的最小QP。用于控制I帧的最大bits数。

取值范围:[0, max_i_qp]。

默认值:10。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:51。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:10。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

qpmap_en

CBR码控模式下,使能/关闭QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

使能QpMap表的情况,CU32和CU64的Qp值的取值方式。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

max_p_qp

P帧的最大QP。用于控制P帧的最小bits数。

取值范围:[0, 51]。

默认值:51。

min_p_qp

P帧的最小QP。用于控制P帧的最大bits数。

取值范围:[0, max_p_qp]。

默认值:10。

max_i_qp

I帧的最大QP。用于控制I帧的最小bits数。

取值范围:[0, 51]。

默认值:51。

min_i_qp

I帧的最小QP。用于控制I帧的最大bits数。

取值范围:[0, max_i_qp]。

默认值:10。

max_vi_qp

VI帧的最大QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:51。

min_vi_qp

VI帧的最小QP, 仅用于SMART_P。

取值范围:[0, 51]。

默认值:10。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]。

默认值:2。

qpmap_en

ABR码控模式下,使能/关闭QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

使能QpMap表的情况,CU32和CU64的Qp值的取值方式。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

threshold_i

I帧宏块级码率控制的mad门限。

取值范围:[0, 255],默认值:参见ss_mpi_venc_set_rc_param的【注意】。

threshold_p

P帧宏块级码率控制的mad门限。

取值范围:[0, 255],默认值:参见ss_mpi_venc_set_rc_param的【注意】。

threshold_b

B帧宏块级码率控制的mad门限。

取值范围:[0, 255],默认值:参见ss_mpi_venc_set_rc_param的【注意】。

direction

在宏块级码率控制时,用于控制减方向Thr的下标。

取值范围:[0, 16],默认值:8。

row_qp_delta

常规宏块级码率控制,每一行宏块的起始Qp相对于帧起始Qp的波动幅度值。

取值范围:[0, 10],默认值:1,FIXQP和QPMAP模式下默认值为0。

max_row_qp_delta

超大帧宏块级码率控制,每一行宏块的起始Qp相对于帧起始Qp的波动最大幅度值。

取值范围:[0, 16],默认值:5,FIXQP和QPMAP模式下默认值为0。

first_frame_start_qp

设置第一帧的起始Qp值,ABR/CBR/VBR/AVBR/QVBR/CVBR有效。

取值范围:[min_i_qp, max_i_qp]和-1

first_frame_start_qp如果为-1则第一帧的起始QP由编码器内部计算,如果为其它合法值则由用户指定该值为第一帧起始QP。

scene_chg_detect

场景检测相关的控制参数。

h264_abr_param

H.264通道ABR(Average Bit Rate)码率控制模式高级参数。

h264_cbr_param

H.264通道CBR(Constant Bit Rate)码率控制模式高级参数。

h264_vbr_param

H.264通道VBR(Variable Bit Rate)码率控制模式高级参数。

h264_avbr_param

H.264通道AVBR(Adaptive Variable Bit Rate)码率控制模式高级参数。

h264_qvbr_param

H.264通道QVBR (Quality Variable Bit Rate)码率控制模式高级参数。

h264_cvbr_param

H.264通道CVBR (Constrained Variable Bit Rate)码率控制模式高级参数。

h265_abr_param

H.265通道ABR(Average Bit Rate)码率控制模式高级参数。

h265_cbr_param

H.265通道CBR(Constant Bit Rate)码率控制模式高级参数。

h265_vbr_param

H.265通道VBR(Variable Bit Rate)码率控制模式高级参数。

h265_avbr_param

H.265通道AVBR(Adaptive Variable Bit Rate)码率控制模式高级参数。

h265_qvbr_param

H.265通道QVBR (Quality Variable Bit Rate)码率控制模式高级参数。

h265_cvbr_param

H.265通道CVBR (Constrained Variable Bit Rate)码率控制模式高级参数。

mjpeg_cbr_param

MJPEG通道CBR(Constant Bit Rate)码率控制模式高级参数。

mjpeg_vbr_param

MJPEG通道VBR(Variable Bit Rate)码率控制模式高级参数。

svac3_abr_param

SVAC3.0通道ABR(Average Bit Rate)码率控制模式高级参数。

svac3_cbr_param

SVAC3.0通道CBR(Constant Bit Rate)码率控制模式高级参数。

svac3_vbr_param

SVAC3.0通道VBR(Variable Bit Rate)码率控制模式高级参数。

svac3_avbr_param

SVAC3.0通道AVBR(Adaptive Variable Bit Rate)码率控制模式高级参数。

svac3_qvbr_param

SVAC3.0通道QVBR (Quality Variable Bit Rate)码率控制模式高级参数。

svac3_cvbr_param

SVAC3.0通道CVBR (Constrained Variable Bit Rate)码率控制模式高级参数。

【注意事项】

无。

【相关数据类型及接口】

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_JPEG_ENC_ALL

全部抓拍模式,JPEG通道的默认抓拍模式。

OT_VENC_JPEG_ENC_SNAP

抓拍模式,JPEG通道仅编码已标记为抓拍帧的图像。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

constrained_intra_pred_flag

默认为0。

取值范围:0或1。

strong_intra_smoothing_enabled_flag

默认为1。

取值范围:0或1。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_set_h265_pu

ss_mpi_venc_get_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;

【成员】

成员名称

描述

cb_qp_offset

默认值根据不同的解决方案有差异。

取值范围:[-12, 12]。

cr_qp_offset

默认值根据不同的解决方案有差异。

取值范围:[-12, 12]。

scaling_list_en

默认为0,默认值根据不同的解决方案有差异。

取值范围:[0, 1]。

scaling_list_tu4_valid

默认为0,默认值根据不同的解决方案有差异。

取值范围:[0, 1]。

inter_scaling_list4x4[2][OT_VENC_SCALING_LIST_SIZE_16]

默认值根据不同的解决方案有差异。

仅支持配置为16。

intra_scaling_list4x4[2][OT_VENC_SCALING_LIST_SIZE_16]

默认值根据不同的解决方案有差异。

仅支持配置为16。

scaling_list_tu8_valid

默认为0,默认值根据不同的解决方案有差异。

取值范围:[0, 1]。

inter_scaling_list8x8[2][OT_VENC_SCALING_LIST_SIZE_64]

默认值根据不同的解决方案有差异。

取值范围:[1, 255]。

intra_scaling_list8x8[2][OT_VENC_SCALING_LIST_SIZE_64]

默认值根据不同的解决方案有差异。

取值范围:[1, 255]。

scaling_list_tu16_valid

默认为0,默认值根据不同的解决方案有差异。

取值范围:[0, 1]。

inter_scaling_list16x16[2][OT_VENC_SCALING_LIST_SIZE_64]

默认值根据不同的解决方案有差异。

取值范围:[1, 255]。

intra_scaling_list16x16[2][OT_VENC_SCALING_LIST_SIZE_64]

默认值根据不同的解决方案有差异。

取值范围:[1, 255]。

scaling_list_tu32_valid

默认为0,默认值根据不同的解决方案有差异。

取值范围:[0, 1]。

inter_scaling_list32x32[OT_VENC_SCALING_LIST_SIZE_64]

默认值根据不同的解决方案有差异。

取值范围:[1, 255]。

intra_scaling_list32x32[OT_VENC_SCALING_LIST_SIZE_64]

默认值根据不同的解决方案有差异。

取值范围:[1, 255]。

【注意事项】

  • 在场景配置为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协议编码通道熵编码的结构体。

【定义】

typedef struct {
    td_u32 cabac_init_flag;
} ot_venc_h265_entropy;

【成员】

成员名称

描述

cabac_init_flag

默认为0。

取值范围:0或1。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

slice_deblocking_filter_disabled_flag

默认为0。

取值范围:0或1。

slice_beta_offset_div2

默认为0。

取值范围:[-6, 6]。

slice_tc_offset_div2

默认为0。

取值范围:[-6, 6]。

loop_filter_across_tiles_enabled_flag

默认为1。

取值范围:0或1。

loop_filter_across_slices_enabled_flag

默认为1。

取值范围:0或1。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_h265_sao

【说明】

定义H.265协议编码通道Sao的结构体。

【定义】

typedef struct {
    td_u32 slice_sao_luma_flag;
    td_u32 slice_sao_chroma_flag;
} ot_venc_h265_sao;

【成员】

成员名称

描述

slice_sao_luma_flag

默认为1。

取值范围:0或1。

slice_sao_chroma_flag

默认为1。

取值范围:0或1。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_set_h265_sao

ss_mpi_venc_get_h265_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_NORMAL

瞬时码率超过阈值时正常丢帧。

OT_VENC_FRAME_LOST_P_SKIP

瞬时码率超过阈值时编码p_skip帧。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

enable

瞬时码率超过阈值时丢帧开关。

bit_rate_threshold

丢帧阈值(单位为bit/s)。

取值范围:≥ 64k

mode

瞬时码率超过阈值时丢帧模式。

frame_gap

最大允许连续丢帧帧数,默认为0。

取值范围:[0, 65535]

【注意事项】

无。

【相关数据类型及接口】

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_REENCODE_BIT_RATE_FIRST

目标码率优先。

OT_VENC_REENCODE_FRAME_BITS_FIRST

超大帧阈值优先。

【注意事项】

此优先级只在超大帧重编时有效。

【相关数据类型及接口】

无。

ot_venc_discard_param

【说明】

超大帧丢帧调节参数。

【定义】

typedef struct {
    td_u32 qp_delta; 
    td_s32 max_lost_times;
} ot_venc_discard_param;

【成员】

成员名称

描述

qp_delta

超大帧丢帧后下一帧起始qp调节阈值,默认1。

取值范围:

  • H.264/H.265: [1, 51]
  • SVAC3.0: [1, 63]
  • MJPEG: [1, 99]

max_lost_times

最大连续丢帧次数。默认0。

取值范围:[0, 1000]

【注意事项】

  • 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;

【成员】

成员名称

描述

super_frame_mode

超大帧处理模式,默认为OT_VENC_SUPER_FRAME_NONE。

i_frame_bits_threshold

I帧超大阈值,默认为8388608。

取值范围:大于等于0

p_frame_bits_threshold

P帧超大阈值,默认为8388608。

取值范围:大于等于0

b_frame_bits_threshold

B帧超大阈值,默认为8388608。

取值范围:大于等于0

reencode_priority

码率控制优先级,默认为OT_VENC_REENCODE_BIT_RATE_FIRST。

discard_param

超大帧丢帧调节参数。

【注意事项】

无。

【相关数据类型及接口】

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_ROW

按行刷新

OT_VENC_INTRA_REFRESH_COLUMN

按列刷新

【注意事项】

无

【相关数据类型及接口】

ot_venc_intra_refresh

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;

【成员】

成员名称

描述

enable

是否使能帧内刷新。默认为0

0:不使能

1:使能

mode

I宏块刷新模式,分为按行刷新和按列刷新。

refresh_num

每次I宏块刷新行数或者列数,可以通过这个变量控制刷新的速度及码流的平稳程度。刷新行数或者列数越多,刷新的速度越快,但是码流平稳度越差;刷新的行数或者列数越少,刷新的速度越慢,但是码流平稳度越好。

request_i_qp

I帧QP值,在帧内刷新模式,可能方案还需要插入IDR帧,设置I帧QP用于控制插入的IDR帧的质量,质量越好IDR帧大小越大;质量越差IDR帧大小越小。

取值范围:SVAC3.0协议[0, 63],其他协议[0, 51]

【注意事项】

无

【相关数据类型及接口】

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;

【成员】

成员名称

描述

mod_type

设置或者获取模块参数的类型。

venc_mod_param

VENC模块参数。

h264_mod_param

H.264模块参数。

h265_mod_param

H.265模块参数。

svac3_mod_param

SVAC3.0模块参数。

jpeg_mod_param

JPEG模块参数。

【注意事项】

无。

【相关数据类型及接口】

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_VENC

ssxx_venc.ko模块参数类型

OT_VENC_MOD_H264

ssxx_h264e.ko模块参数类型

OT_VENC_MOD_H265

ssxx_h265e.ko模块参数类型

OT_VENC_MOD_JPEG

ssxx_jpege.ko模块参数类型

OT_VENC_MOD_RC

ssxx_rc.ko模块参数类型

OT_VENC_MOD_SVAC3

ssxx_svac3e.ko模块参数类型

【注意事项】

OT_VENC_MOD_RC为预留成员,当前暂不支持RC模块参数配置。

【相关数据类型及接口】

ot_venc_mod_param

ot_venc_venc_mod_param

【说明】

ssxx_venc.ko模块参数。

【定义】

typedef struct {
    td_u32 buf_cache;
    td_u32 frame_buf_recycle;
} ot_venc_venc_mod_param;

【成员】

成员名称

描述

buf_cache

码流获取是否支持cache方式。

0:关闭码流Buffer Cache

1:打开码流Buffer Cache

默认值:0

frame_buf_recycle

帧存是否回收。

0:关闭编码帧存回收

1:打开编码帧存回收

默认值:0

【注意事项】

无。

【相关数据类型及接口】

ot_venc_mod_param

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;

【成员】

成员名称

描述

one_stream_buf

编码码流帧配置模式。

0:多包模式

1:单包模式

默认值:0

mini_buf_mode

编码码流buffer配置模式。

0:码流buffer根据分辨率分配

1:码流buffer下限为32k,用户保证合理

默认值:0

low_power_mode

低功耗模式。

0:关闭低功耗模式

1:使能低功耗模式

2:使能极低功耗模式

默认值:1

注意:低功耗或者极低功耗使能后会导致图像质量损失。若开启极低功耗模式,低码率场景会导致运动过后模糊面积增加,人脸肤色表现有划痕或缺块等现象。噪声大场景可能导致画面不均匀。

vb_src

参考帧和重构帧的帧存分配方式。

OT_VB_SRC_PRIVATE:私有VB方式,驱动内部完成帧存分配;

OT_VB_SRC_USER:用户VB,需由用户分配帧存。

默认值:OT_VB_SRC_PRIVATE

ot_vb_src请参考”系统控制”章节。

qp_hist_en

Qp直方图输出控制模式。

0:Qp直方图不输出,即ot_venc_h264_adv_stream_info中的成员变量 qp_hist[]为全0。

1:Qp直方图输出,即ot_venc_h264_adv_stream_info中的成员变量 qp_hist[]为实际的当前帧的QP直方图

默认值:0

max_user_data_len

用户数据最大字节数。

取值范围:[0, 65536]。

默认值:1024。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_mod_param

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;

【成员】

成员名称

描述

one_stream_buf

编码码流帧配置模式。

0:多包模式

1:单包模式

默认值:0

mini_buf_mode

编码码流buffer配置模式。

0:码流buffer根据分辨率分配

1:码流buffer下限为32k,用户保证合理

默认值:0

low_power_mode

低功耗模式。

0:关闭低功耗模式

1:使能低功耗模式

2:使能极低功耗模式

默认值:1

注意:低功耗或者极低功耗使能后会导致图像质量损失。若开启极低功耗模式,低码率场景会导致运动过后模糊面积增加,人脸肤色表现有划痕或缺块等现象。

vb_src

参考帧和重构帧的帧存分配方式。

OT_VB_SRC_PRIVATE:私有VB方式,驱动内部完成帧存分配;

OT_VB_SRC_USER:用户VB,需由用户分配帧存。

默认值:OT_VB_SRC_PRIVATE

qp_hist_en

Qp直方图输出控制模式。

0:Qp直方图不输出,即ot_venc_h265_adv_stream_info中的成员变量 qp_hist[]为全0。

1:Qp直方图输出,即ot_venc_h265_adv_stream_info中的成员变量 qp_hist[]为实际的当前帧的QP直方图。

默认值:0

max_user_data_len

用户数据最大字节数。

取值范围:[0, 65536]。

默认值:1024。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_mod_param

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;

【成员】

成员名称

描述

one_stream_buf

编码码流帧配置模式。

0:多包模式

1:单包模式

默认值:0

mini_buf_mode

编码码流buffer配置模式。

0:码流buffer根据分辨率分配

1:码流buffer下限为32k,用户保证合理

默认值:0

low_power_mode

低功耗模式。

0:关闭低功耗模式

1:使能低功耗模式

2:使能极低功耗模式

默认值:1

注意:低功耗或者极低功耗使能后会导致图像质量损失。若开启极低功耗模式,低码率场景会导致运动过后模糊面积增加,人脸肤色表现有划痕或缺块等现象。

vb_src

参考帧和重构帧的帧存分配方式。

OT_VB_SRC_PRIVATE:私有VB方式,驱动内部完成帧存分配;

OT_VB_SRC_USER:用户VB,需由用户分配帧存。

默认值:OT_VB_SRC_PRIVATE

qp_hist_en

Qp直方图输出控制模式。

0:Qp直方图不输出,即ot_venc_svac3_adv_stream_info中的成员变量 qp_hist[]为全0。

1:Qp直方图输出,即ot_venc_svac3_adv_stream_info中的成员变量 qp_hist[]为实际的当前帧的QP直方图。

默认值:0

max_user_data_len

用户数据最大字节数。

取值范围:[0, 65536]

默认值:1024

【注意事项】

无。

【相关数据类型及接口】

ot_venc_mod_param

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;

【成员】

成员名称

描述

one_stream_buf

编码码流帧配置模式。

0:多包模式

1:单包模式

默认值:0

mini_buf_mode

编码码流buffer配置模式。

0:码流buffer根据分辨率分配

1:码流buffer下限为32k,用户保证合理

默认值:0

clear_stream_buf

JPEG编码通道设置属性时是否清空码流buffer。

0:设置通道属性时保留码流buffer和上下文计数;

1:设置通道属性时清空码流buffer。

默认值:1

【注意事项】

无。

【相关数据类型及接口】

ot_venc_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_FRAME_TYPE_NONE

当前帧编码类型不指定,实际帧类型由驱动内部决定。

OT_VENC_FRAME_TYPE_IDR

指定当前帧编为IDR帧。

OT_VENC_FRAME_TYPE_P_SKIP

指定当前帧编为p_skip帧。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

qpmap_valid

QPMAP模式中,Qp表是否生效。

skip_weight_valid

QPMAP模式中,SkipWeight表是否生效。

blk_start_qp

QPMAP模式中,第一个16*16块的Qp值。

取值范围:SVAC3.0协议[0, 63],其他协议[0, 51]。

qpmap_phys_addr

QPMAP模式中,Qp表的物理地址。

td_phys_addr_t请参考”系统控制”章节。

skip_weight_phys_addr

QPMAP模式中,SkipWeight表的物理地址。

frame_type

指定当前帧编码帧类型。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_send_frame_ex

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;

【成员】

成员名称

描述

width

通道编码宽度。

height

通道编码高度。

pts

生成qpmap使用的帧的pts,可以不设置。

user_rc_info

qpmap信息。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_send_qpmap

ot_venc_user_roimap

【说明】

用户ROI信息结构体。

【定义】

typedef struct {
    td_bool valid;
    td_phys_addr_t phys_addr;
} ot_venc_user_roimap;

【成员】

成员名称

描述

valid

该图的ROIMap表是否有效。

phys_addr

该图的ROIMap表的物理地址。

【注意事项】

ROIMap仅支持JPEG和MJPEG协议。

【相关数据类型及接口】

ss_mpi_venc_send_frame_ex

说明:

  • 对于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;

【成员】

成员名称

描述

user_frame

用户发送图像帧信息结构体。具体描述请参见系统控制章节。

user_rc_info

用户码控信息结构体。

user_roimap

用户ROIMap信息结构体。

user_mosaic

马赛克信息结构体。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_send_frame_ex

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;

【成员】

成员名称

描述

rc_info_valid

外部输入码率控制信息是否生效。

target_bits

目标码率。

max_qp

帧最大QP,用于钳位质量。

取值范围:SVAC3.0协议[0, 63],其他协议[0, 51]

默认值:51

min_qp

帧最小QP,用于钳位码率波动。

取值范围:[0, max_qp]

默认值:10

start_qp

编码当前帧的startqp值。

frame_type

指定当前帧编码帧类型。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_omx_send_frame

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;

【成员】

成员名称

描述

user_frame

用户发送图像帧信息结构体,具体描述请参见“系统控制”章节。

user_rc_info

外部码控信息结构体。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_omx_send_frame

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;

【成员】

成员名称

描述

OT_VENC_MOSAIC_MODE_RECT

马赛克模式:用户输入马赛克区域。

OT_VENC_MOSAIC_MODE_MAP

马赛克模式:用户输入马赛克表。

【注意事项】

Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100仅支持OT_VENC_MOSAIC_MODE_MAP模式。

【相关数据类型及接口】

ss_mpi_venc_send_multi_frame

ot_venc_mosaic_pixel_yuv

【说明】

定义纯色填充的颜色。

【定义】

typedef struct {
    td_u8 data_y;
    td_u8 data_u;
    td_u8 data_v;
} ot_venc_mosaic_pixel_yuv;

【成员】

成员名称

描述

data_y

纯色填充的Y分量数值。

data_u

纯色填充的U分量数值。

data_v

纯色填充的V分量数值。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_send_multi_frame

ot_venc_mosaic_rect

【说明】

马赛克rect模式的参数结构体。

【定义】

typedef struct {
    td_u32 rect_num;
    ot_rect rect[OT_VENC_MAX_MOSAIC_RECT_NUM];
} ot_venc_mosaic_rect;

【成员】

成员名称

描述

rect_num

输入马赛克区域个数。

rect

每个马赛克区域的起始点及宽高。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_send_multi_frame

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;

【成员】

成员名称

描述

valid

马赛克表有效标志。

phys_addr

马赛克表物理地址。

td_phys_addr_t具体描述请参见“系统控制”章节

specified_yuv_en

指定YUV填充有效标志。

pixel_yuv

纯色填充的YUV分量像素值。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_send_multi_frame

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;

【成员】

成员名称

描述

mode

马赛克模式。

blk_size

马赛克块大小。

ot_mosaic_blk_size请参考”系统控制”章节。

rect_param

马赛克rect模式对应的参数。

map_param

马赛克map模式对应的参数。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

frame_num

用户发送图像帧数量。仅支持发送2帧。

frame

用户发送图像帧信息结构体数组。

ot_video_frame_info具体描述请参见“系统控制”章节。

mosaic_info

马赛克信息结构体。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_send_multi_frame

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;

【成员】

成员名称

描述

valid

批量抠图有效开关。

crop_num

批量抠图的抠图个数

crop_rect

批量抠图的坐标信息。

x,width,height必须16像素对齐,y必须2像素对齐。

ot_rect请参考”系统控制”章节。

【注意事项】

无

【相关数据类型及接口】

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;

【成员】

成员名称

描述

frame

用户发送图像帧信息结构体数组。

ot_video_frame_info具体描述请参见“系统控制”章节。

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_DUPLICATE_FRAME_STRATEGE_RECODE

使用重编输入图像实现增帧功能。

OT_VENC_DUPLICATE_FRAME_STRATEGE_COPY

使用拷贝编码输出码流实现增帧功能。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

mosaic_en

该值无效,马赛克使能标志使用ot_venc_mosaic_map中valid标志。

composite_enc_en

是否使能复合编码。

取值范围:[0, 1]

默认值为TD_FALSE。

启动复合编码后需要调用接口ss_mpi_venc_send_multi_frame发送图像,一次送2个图像到编码队列。ot_venc_multi_frame_info:frame[0]为基础层图像,ot_venc_multi_frame_info:frame[1]为增强层图像。

quality_level

复合编码的质量级别。

取值范围:[0, 1]

质量等级为1时编码器提升编码质量,需要的参考帧增加一倍,重构帧数量增加一个。

质量等级为0时编码质量会降低,需要的参考帧数量不变,重构帧数量增加一个。

请参考接口ss_mpi_venc_set_chn_config描述。

duplicate_frame_strategy

编码增帧策略,支持OT_VENC_DUPLICATE_FRAME_STRATEGE_RECODE和OT_VENC_DUPLICATE_FRAME_STRATEGE_COPY。

默认值 OT_VENC_DUPLICATE_FRAME_STRATEGE_RECODE。

请参考接口ss_mpi_venc_set_chn_config描述。

svc_version

设置可使能的智能编码版本。

默认智能编码1.0。

ssvc_en

空域SVC编码使能开关。

取值范围:[0, 1],默认值:0。

【注意事项】

通道创建失败情况下已设置的config无法复位成默认值,用户需要重新调用此接口复位config。

【相关数据类型及接口】

ss_mpi_venc_send_multi_frame

ot_venc_sse_rgn

【说明】

SSERegion模块中参数。

【定义】

typedef struct {
    td_u32  idx;
    td_bool enable;
    ot_rect rect;
} ot_venc_sse_rgn;

【成员】

成员名称

描述

idx

SSE 区域的索引,系统支持的索引范围为[0,7],不支持超出这个范围的索引。

enable

是否使能这个SSE区域。

rect

SSE 区域。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

color_to_grey_en

开启或关闭一个通道的彩转灰功能。

priority

编码通道优先级参数。

取值范围:[0, 2)。

max_stream_cnt

最大码流缓存帧数。

取值范围:大于等于0

默认值:200

poll_wake_up_frame_cnt

编码指定的帧poll_wake_up_frame_cnt之后唤醒阻塞接口。

取值范围:大于0

默认值:1

crop_info

通道截取(Crop)参数

frame_rate

通道帧率控制参数

in_depth

输入队列深度。

取值范围:[1,OT_VENC_MAX_IN_DEPTH]

默认值: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;

【成员】

成员名称

描述

enable

开启或关闭前景宏块级码控制。默认关闭。

direction

在前景宏块级码率控制时,用于控制减方向Thr的下标。

取值范围:[0, 16]。

默认值:8。

gain

前景检测中用于计算sad的阈值。

取值范围:[0, 15]。

默认值:8。

offset

前景检测中用于计算sad的阈值。

取值范围:[0, 255]。

默认值:8。

threshold_p

P帧在前景宏块级码率控制时的mad门限。

取值范围:[0, 255]。

threshold_b

B帧在前景宏块级码率控制时的mad门限。

取值范围:[0, 255]。

【注意事项】

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_0

摄像机不运动或周期性连续运动的场景。

OT_VENC_SCENE_1

高码率下运动场景。

OT_VENC_SCENE_2

中等码率下有规律的连续运动,且编码压力比较大场景。

OT_VENC_SCENE_3

中低码率下镜头连续转动、缩放等场景。

OT_VENC_SCENE_4

复杂场景极低码率,加快图像收敛。副作用对码控的稳定性有冲击。目前仅H.265编码协议生效,其他协议效果不保证。

【注意事项】

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;

【成员】

成员名称

描述

detect_scene_chg_en

是否使能场景切换检测。

使能场景切换检测后,编码器会自动检测场景切换,并且在检测到场景切换后主动调整QP,提升质量;但是如果频繁的出现场景切换,会导致码率升高。云台、车载产品在镜头运动时有较大概率判断为场景切换。默认为TD_TRUE,建议在运动时设置为TD_FALSE。

adapt_insert_idr_frame_en

是否使能自适应插入IDR帧,默认为TD_FALSE。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_chn_pool

【说明】

定义编码通道绑定的VB池结构体。

【定义】

typedef struct {
    ot_vb_pool pic_vb_pool;
    ot_vb_pool pic_info_vb_pool;
} ot_venc_chn_pool;

【成员】

成员名称

描述

pic_vb_pool

用于存储Picture的VB池pool id。

pic_info_vb_pool

用于存储Picture的信息(pme、tmv、pmeinfo)的VB池pool id。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_venc_attach_vb_pool

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;

【成员】

成员名称

描述

pred_mode

倾向性选择模式:

  • OT_OP_MODE_AUTO:驱动内部完成倾向性配置;
  • OT_OP_MODE_MANUAL:设置该接口,用户完成倾向性配置。

ot_op_mode请参考“系统控制”章节。

intra32_cost

Intra32倾向性调节,该值增大表示选择该模式的倾向性越小。

取值范围:[0, 15]。

默认值:8。

H.264该值无效。

intra16_cost

Intra16倾向性调节,该值增大表示选择该模式的倾向性越小。

取值范围:[0, 15]。

默认值:8。

intra8_cost

Intra8倾向性调节,该值增大表示选择该模式的倾向性越小。

取值范围:[0, 15]。

默认值:8。

intra4_cost

Intra4倾向性调节,该值增大表示选择该模式的倾向性越小。

取值范围:[0, 15]。

默认值:8。

inter64_cost

Inter64倾向性调节,该值增大表示选择该模式的倾向性越小。

取值范围:[0, 15]。

默认值:8。

Hi3519DV500:H.264、H.265该值无效。

Hi3516CV610:H.264、H.265、SVAC3.0该值无效。

Hi3511CV100:H.264该值无效。

inter32_cost

Inter32倾向性调节,该值增大表示选择该模式的倾向性越小。

取值范围:[0, 15]。

默认值:8。

H.264该值无效。

inter16_cost

Inter16倾向性调节,该值增大表示选择该模式的倾向性越小。

取值范围:[0, 15]。

默认值:8。

inter8_cost

Inter8倾向性调节,该值增大表示选择该模式的倾向性越小。

取值范围:[0, 15]。

默认值:8。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

enable

标识skip倾向性是否使能

gain

前景检测中用于计算sad的阈值。

取值范围:[0, 15]

默认值:8。

offset

前景检测中用于计算sad的阈值。

取值范围:[0, 255]

默认值:8。

bg_cost

背景skip倾向性调节:

0:不调节;

8:强制skip模式;

1-7:值越小背景越倾向skip模式;

9-15:值越小背景越不倾向skip模式;

注意:1-7的skip倾向性力度要大于9-15的skip倾向性。

取值范围:[0, 15]

默认值:10。

fg_cost

前景skip倾向性调节:

0:不调节;

8:强制skip模式;

1-7:值越小前景越倾向skip模式;

9-15:值越小前景越不倾向skip模式;

注意:1-7的skip倾向性力度要大于9-15的skip倾向性。

取值范围:[0, 15]

默认值:10。

bg_lambda_factor

背景编码lambda强度调节参数。通过调节lambda能影响计算skip的比例。

0: 内部算法自适应。

1-7:值越大,skip比例越高

取值范围:[0, 7]

默认值:0。

fg_lambda_factor

前景编码lambda强度调节参数。通过调节lambda能影响计算skip的比例。

0: 内部算法自适应。

1-7:值越大,skip比例越高

取值范围:[0, 7]

默认值:0。

【注意事项】

无

【相关数据类型及接口】

ot_venc_debreath_effect

【说明】

去除呼吸效应参数结构体。

【定义】

typedef struct {
    td_bool enable;
    td_s32 strength0;
    td_s32 strength1;
} ot_venc_debreath_effect;

【成员】

成员名称

描述

enable

去除呼吸效应是否使能。

TD_TRUE:使能;

TD_FALSE:不使能。

strength0

去除呼吸效应强度调节参数0。值越大,呼吸效应改善会越弱,值越小,呼吸效应改善越明显。

取值范围:[0, 35]。

默认值:6。

strength1

去除呼吸效应强度调节参数1。其值越大,I帧会越大,其值越小,I帧会越小。

取值范围:[0, 35]。

默认值:16。

【注意事项】

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;

【成员】

成员名称

描述

enable

QP分层是否使能。

TD_TRUE:使能;

TD_FALSE:不使能。

默认不使能。

qp_delta[OT_VENC_MAX_HIERARCHY_NUM]

每一层帧相对于第0层P帧的Qp差值。

取值范围:[-10, 10]。

默认值:0。

frame_num[OT_VENC_MAX_HIERARCHY_NUM]

每一层中帧的数目。

取值范围:[0, 5]。

默认值:0。

【注意事项】

各层级帧类型的起始帧级QP,是由码控加参数设置的层间qp_delta的共同影响,而非各层级的qp_delta的简单叠加。

【相关数据类型及接口】

ot_venc_rc_adv_param

【说明】

定义RC模块的高级参数,此接口会包含与码流控制算法无关的功能,并且未来版本还有可能扩展。

【定义】

typedef struct {
    td_u32 clear_stats_after_set_attr;
} ot_venc_rc_adv_param;

【成员】

成员名称

描述

clear_stats_after_set_attr

设置新的通道码率后,是否清除码率控制的统计信息,默认值为1。

0:设置通道码率后不清除RC的帧率和码率统计信息;

1:设置通道码率后清除RC的帧率和码率统计信息;

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;

【成员】

成员名称

描述

SVC_RECT_TYPE0

智能检测目标类型0。

SVC_RECT_TYPE1

智能检测目标类型1。

SVC_RECT_TYPE2

智能检测目标类型2。

SVC_RECT_TYPE3

智能检测目标类型3。

SVC_RECT_TYPE4

智能检测目标类型4。

SVC_RECT_TYPE5

智能检测目标类型5。

SVC_RECT_TYPE6

智能检测目标类型6。

SVC_RECT_TYPE7

智能检测目标类型7。

SVC_RECT_TYPE8

智能检测目标类型8。

SVC_RECT_TYPE9

智能检测目标类型9。

SVC_RECT_TYPE10

智能检测目标类型10。

SVC_RECT_TYPE11

智能检测目标类型11。

SVC_RECT_TYPE12

智能检测目标类型12。

SVC_RECT_TYPE13

智能检测目标类型13。

SVC_RECT_TYPE14

智能检测目标类型14。

SVC_RECT_TYPE15

智能检测目标类型15。

【注意事项】

  • 智能编码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

I帧的QpMap值。取值范围:[0,255]。取值说明见【注意事项】

默认值为0。

qpmap_value_p

P帧的QpMap值。取值范围:[0,255]。取值说明见【注意事项】

默认值为0。

skipmap_value

P帧前景SkipMap值。使用更强的Skip倾向性可以降低码率,但会牺牲质量

取值范围:[0,255]。

默认值为0。

【注意事项】

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

【说明】

定义智能编码版本。

【定义】

typedef enum {
    OT_VENC_SVC_V1 = 0,
    OT_VENC_SVC_V2,
    OT_VENC_SVC_BUTT,
} ot_venc_svc_version;

【成员】

成员名称

描述

OT_VENC_SVC_V1

智能编码1.0。

OT_VENC_SVC_V2

智能编码2.0。

【注意事项】

仅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;

【成员】

成员名称

描述

fg_region

前景区域的QpMap和SkipMap值。

activity_region

可能有目标区域的QpMap和SkipMap值。

bg_region

背景区域的QpMap和SkipMap值。

fg_protect_adaptive_en

对面积较大的前景物体少量升高QP,避免质量过好,以减少对码率的消耗。

取值范围:[0,1]。

默认值为1。

【注意事项】

  • 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

【说明】

定义智能编码调节参数。

【定义】

typedef  ot_venc_svc_param  ot_venc_svc_param_v1

【成员】

参考ot_venc_svc_param

【注意事项】

参考ot_venc_svc_param

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;

【成员】

成员名

描述

max_ref_num

长期参考个数,范围[2,4]。

refresh_interval

参考刷新间隔,范围[1,21]。

推荐值:2

qp_delta

前景和背景qp调节值,范围[-16,15]。

roi_type

内部接收检测目标方式。

内部默认接收检测框。

【注意事项】

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;

【成员】

成员名

描述

svc_version

智能编码版本号。

svc_param_v1

智能编码1.0参数。

svc_param_v2

智能编码2.0参数。

【注意事项】

无

【相关数据类型及接口】

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_ROI_TYPE_RECT

接收检测目标框。

OT_VENC_SVC_ROI_TYPE_MASK

接收检测目标mask。

【注意事项】

无

【相关数据类型及接口】

ot_venc_svc_mask_info

【说明】

定义智能检测目标mask信息。

【定义】

typedef struct {
   ot_size base_resolution;
   ot_vb_blk mask_blk;
   td_u64 pts;
} ot_venc_svc_mask_info;

【成员】

成员名称

描述

base_resolution

智能目标识别基础分辨率,用于目标框长、宽缩放计算。

mask_blk

承载智能检测目标mask信息的vb。

pts

时间戳, 单位:us。

【注意事项】

  • base_resolution要小于或等于开启智能编码功能通道的分辨率,要求宽高2对齐。
  • mask数据格式,每个像素用4bit表示当前像素的类型,[0,14]表示前景,15表示背景。
  • mask建议初始化为背景值(15),然后更新前景区域。
  • 送目标mask由于需要单独vb记录整个基础分辨率,因此相比目标框的方式占用更多内存。

【相关数据类型及接口】

ss_mpi_venc_send_svc_mask

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;

【成员】

成员名称

描述

rect_num

智能检测目标个数,取值范围[0, OT_VENC_MAX_SVC_RECT_NUM]。

base_resolution

智能目标识别基础分辨率,用于目标框长、宽缩放计算。

rect_attr

智能检测目标框坐标信息。

detect_type

智能目标属性类别。

pts

时间戳, 单位:us。

【注意事项】

  • 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

【相关数据类型及接口】

ss_mpi_venc_send_svc_region

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_SAD_MODE_ZERO

Sad计算采用无运动搜索方式。

OT_VENC_MD_SAD_MODE_SEARCH

Sad计算采用有运动搜索方式。

【注意事项】

无。

【相关数据类型及接口】

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

在线模式。

sad_stats_en

上报信息为计算的SAD值使能信号。

level_stats_en

上报信息为Md Level值使能信号。

sad_mode

Sad的计算模式

0:no motion cost计算模式;

1:motion cost计算模式。

threshold_gain

区分md level层级阈值的计算系数,取值范围:[0,15]

threshold_offset

区分md level层级阈值的计算偏移,取值范围:[0,255]

qp_delta

检测区域的相对Qpdelta,取值范围:[0,63]。

md_skip_weight

检测区域的Skip倾向性选择权重,取值范围:[0,15]。

【注意事项】

  • 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

【说明】

定义去背景模糊控制信息。

【定义】

typedef struct {
    td_bool deblur_en;
    td_bool deblur_adaptive_en;
} ot_venc_deblur_param;

【成员】

成员名称

描述

deblur_en

去背景模糊使能开关。

deblur_adaptive_en

去背景模糊自适应调节开关。

【注意事项】

详见请参考ss_mpi_venc_set_deblur接口描述【注意】。

【相关数据类型及接口】

ot_venc_param_set_id

【说明】

定义H.264/H.265参数集ID。

【定义】

typedef struct {
   td_u32 param_set_id;
} ot_venc_param_set_id;

【成员】

成员名称

描述

param_set_id

参数集ID。

H.264取值范围:[0, 30]

H.265取值范围:[0, 15]

【注意事项】

无

【相关数据类型及接口】

ot_venc_h264_poc

【说明】

定义H.264协议编码通道POC类型。

【定义】

typedef struct {
    td_u32 pic_order_cnt_type;
} ot_venc_h264_poc;

【成员】

成员名称

描述

pic_order_cnt_type

取值范围:[0, 2],默认值0,具体含义参见H.264协议。

【注意事项】

无

【相关数据类型及接口】

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;

【成员】

成员名称

描述

OT_VENC_JPEG_DERING_LEVEL_0

不调用ss_mpi_venc_set_jpeg_dering_attr接口对去Ring效应强度等级设置下的默认值

OT_VENC_JPEG_DERING_LEVEL_1

相比dering_en=0增加较弱的去Ring效应,相比OT_VENC_JPEG_DERING_LEVEL_0增加清晰度较多

OT_VENC_JPEG_DERING_LEVEL_2

相比dering_en=0增加中等的去Ring效应,相比OT_VENC_JPEG_DERING_LEVEL_0增加清晰度中等

OT_VENC_JPEG_DERING_LEVEL_3

相比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;

【成员】

成员名称

描述

dering_en

JPEG编码通道使能去Ring效应。

0:不使能去Ring算法;

1:使能去Ring算法,在相同量化表和qfactor的情况下能减少Ring现象并且减小图片文件大小,但也会损失一些图片清晰度和细节。

默认值:1

dering_level

JPEG编码通道的强边去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;

【成员】

成员名称

描述

enable

标识质量均衡是否使能

取值范围:[0, 1]。

默认值:0。

level_adaptive_en

qp_level自适应是否使能

取值范围:[0, 1]。

默认值:0。

interval

两次编码的帧间隔,多少帧进行一次质量均衡调节。

取值范围:[0, 30]。

默认值:5。

target_ratio

编码前后频域能量丢失百分比,超过这个预设值才会进行质量均衡调节。

取值范围:[0, 127]。

默认值:45。

ratio_offset_i

自适应模式下I帧target_ratio的偏移量。在码控平稳情况下,值越小,I帧图像质量越好。注意:target_ratio+ ratio_offset_i需要clip [0, 127]

取值范围:[-127, 127]。

默认值:0。

ratio_offset_p

自适应模式下P帧target_ratio的偏移量。在码控平稳情况下,值越小,P帧图像质量越好。注意:target_ratio+ ratio_offset_p需要clip [0, 127]

取值范围:[-127, 127]。

默认值:0。

quality_switch

分段调节阈值。小于该阈值减qp,大于该阈值加qp

取值范围:[0, 7]。

默认值:4。

threshold[OT_VENC_MAX_QUALITY_BALANCE_NUM]

质量均衡调节门限,通过quality_switch确定下标分前后两段,每一段的值都是递增, 实际质量均衡值减去target_ratio,正数时选择前一段,负数选择后一段。

取值范围:[0, 255]。

默认值[0,0,0,7,19,13,13,26]。

level[OT_VENC_MAX_QUALITY_BALANCE_NUM]

调节qp的幅度

取值范围:[0, 15]。

默认值[1,1,1,1,1,1,1,1]。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

enable

数字水印使能控制。

取值范围:[0, 1]。

默认值:0。

strength

数字水印强度(0:weak, 1:middle, 2:strong, default:0),强度越大意味着打到UV分量的幅度越大,抗攻击性越强。

取值范围:[0, 2]。

默认值:0。

component

水印添加到U/V分量,0:U component, 1:V component。

取值范围:[0, 1]。

默认值:0。

template_period

水印模板切换周期。

取值范围:[1, 255]。

默认值:10。

info

水印信息。

seed

水印生成种子。

默认值:0。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

enable

数字水印保护使能控制。

取值范围:[0, 1]。

默认值:0。

strength

数字水印保护强度(0:weak, 1:middle, 2:strong, default:0)

取值范围:[0, 2]。

默认值:0。

top

水印保护区上边界位置。

取值范围:[0, pic_height / 2 - 1]。

默认值:0。

bottom

水印保护区下边界位置。

取值范围:[1, pic_height / 2]。

默认值:0。

left

水印保护区左边界位置。

取值范围:[0, pic_width/ 2 - 1]。

默认值:0。

right

水印保护区右边界位置。

取值范围:[1, pic_width / 2]。

默认值:0。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_deblur_far_bg

【说明】

定义运动物体远区域的拖尾和残留区域检测参数结构体。

【定义】

typedef struct {
    td_u8 qp_delta;
    td_u8 min_qp;
    td_u8 max_qp;
} ot_venc_deblur_far_bg;

【成员】

成员名称

描述

qp_delta

对检测为离运动物体较远的拖尾与残留区域的块级QP的下调值。

取值:[0, 15]

默认值:4

min_qp

检测为离运动物体较远的拖尾与残留区域的块级QP的最终最小值(当前区域具有最高优先级,包括其它块级QP调整)。

取值:SVAC3.0协议[0, 63],其他协议[0, 51]

默认值:0

max_qp

检测为离运动物体较远的拖尾与残留区域的块级QP的最终最大值(当前区域具有最高优先级,包括其它块级QP调整)。

取值:SVAC3.0协议[0, 63],其他协议[0, 51]

默认值:SVAC3.0协议63,其他协议51

【注意事项】

qp_delta的调节建议范围为【0,3】之间,调节过大对帧级码控的平稳性产生影响,产生主观图像质量的副作用。

【相关数据类型及接口】

ot_venc_adv_deblur

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;

【成员】

成员名称

描述

gain

检测为离运动物体较近的拖尾与残留区域的阈值调整参数,阈值越小,越倾向于检测为拖尾与残留near区域

取值:[0, 15]

默认值:8

offset

检测为离运动物体较近的拖尾与残留区域的阈值调整参数,阈值越小,越倾向于检测为拖尾与残留near区域

取值:[0, 255]

默认值:8

qp_delta

对检测为离运动物体较近的拖尾与残留区域的块级QP的下调值

取值:[0, 15]

默认值:1

min_qp

检测为离运动物体较近的拖尾与残留区域的块级QP的最终最小值(该最小值对比其他码控在当前区域的最小值具有最高优先级)

取值:SVAC3.0[0, 63],其他协议[0, 51]

默认值:0

max_qp

检测为离运动物体较近的拖尾与残留区域的块级QP的最终最大值(该最大值对比其他码控在当前区域的最大值具有最高优先级)

取值:SVAC3.0[0, 63],其他协议[0, 51]

默认值:SVAC3.0协议63,其他协议51

【注意事项】

qp_delta的调节建议范围为【0,2】之间,调节过大对帧级码控的平稳性产生影响,产生主观图像质量的副作用。

【相关数据类型及接口】

ot_venc_adv_deblur

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

离运动物体较近的拖尾与残留区域的检测使能信号:0关闭;1使能。

取值:[0, 1]

默认值:0

far_bg_en

离运动物体较远的拖尾与残留区域的检测使能信号:0关闭;1使能。

取值:[0, 1]

默认值:0

near_bg

定义运动物体近区域拖尾和残留区域检测信息

far_bg

定义运动物体远区域拖尾和残留区域检测信息

【注意事项】

【相关数据类型及接口】

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;

【成员】

成员名称

描述

rcn_ref_share_buf_en

是否使能帧节省模式。

取值范围:[0, 1]

静态属性。

frame_buf_ratio

帧buffer比例。

取值范围:[70, 100]

静态属性。

is_aiseg_chn

是否为语义分割图编码通道。

取值范围:[0, 1]

静态属性。

【注意事项】

frame_buf_ratio用来设置节省帧buffer比例,比如设置为80,则表示帧buffer为原始大小的80%;设置frame_buf_ratio不为100时,可能会对以下功能有影响, 且该值越小理论上出现的概率越高:

  1. 去呼吸效应在某些帧上可能会失效,涉及接口ss_mpi_venc_set_debreath_effect;
  2. QPMAP表不能强制指定skip块,SkipWeight表不能强制指定skip块,强制指定skip块可能会导致系统异常,驱动内部不做检查,用户自行保证;
  3. ROI背景低帧率编码可能会出现部分帧的非ROI区域不能编码为p_skip块,涉及接口ss_mpi_venc_set_roi_bg_frame_rate;
  4. 某些场景指定为p_skip帧的情况下可能会失效,如编码瞬时码率超过阈值时丢帧策略,涉及接口ss_mpi_venc_set_frame_lost_strategy;
  5. skip倾向性可能会失效,涉及接口ss_mpi_venc_set_skip_bias。
  6. 视频低部被强制编码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;

【成员】

成员名称

描述

gop

SVAC3.0 gop值。

取值范围:[1, 65536]

stats_time

ABR码率统计时间,以秒为单位。

取值范围:[1, 60]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

bit_rate

最大bitrate,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE, OT_VENC_MAX_BITRATE]

vbv_buf_delay

用以控制vbv虚拟缓存的容量(vbv_buf_size),vbv_buf_size等于为bit_rate乘以vbv_buf_delay,vbv_buf_delay单位为秒。码率控制算法使得vbv_buf_delay时间窗内的平均码率达到目标码率。vbv_buf_delay越大,编码质量越稳定。

取值范围:[1, 100]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

SVAC3.0 gop值。

取值范围:[1, 65536]

stats_time

CBR码率统计时间,以秒为单位。

取值范围:[1, 60]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

bit_rate

最大bitrate,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE, OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

SVAC3.0 gop值。

取值范围:[1, 65536]

stats_time

VBR码率统计时间,以秒为单位。

取值范围:[1, 60]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

max_bit_rate

编码器输出最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE, OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

SVAC3.0 gop值。

取值范围:[1, 65536]

stats_time

AVBR码率统计时间,以秒为单位。

取值范围:[1, 60]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

max_bit_rate

编码器输出最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE, OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

SVAC3.0 gop值。

取值范围:[1, 65536]

stats_time

QVBR码率统计时间,以秒为单位。

取值范围:[1, 60]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

target_bit_rate

编码器输出最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE, OT_VENC_MAX_BITRATE]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

SVAC3.0 gop值。

取值范围:[1, 65536]

stats_time

CVBR码率统计时间,以秒为单位。

取值范围:[1, 60]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

max_bit_rate

编码器输出短期最大码率,以kbps为单位。

取值范围:[OT_VENC_MIN_BITRATE, OT_VENC_MAX_BITRATE]

short_term_stats_time

码率短期统计时间,以秒为单位。

取值范围:[1, 120]

long_term_stats_time

码率长期统计时间,单位由高级参数long_term_stats_time_unit决定,默认为分钟。

取值范围:[1, 1440]

long_term_max_bit_rate

编码器输出长期最大码率,以kbps为单位。

取值范围:[2, max_bit_rate]

long_term_min_bit_rate

编码器输出长期最小码率,以kbps为单位。

取值范围:[0, long_term_max_bit_rate]

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

SVAC3.0 gop值。

取值范围:[1, 65536]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

i_qp

I帧所有宏块Qp值。

取值范围:[0, 63]

p_qp

P帧所有宏块Qp值。

取值范围:[0, 63]

b_qp

B帧所有宏块Qp值。

取值范围:[0, 63]

vi_qp

VI/RL帧所有宏块Qp值。

取值范围:[0, 63]

【注意事项】

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。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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

SVAC3.0 gop值。

取值范围:[1, 65536]

stats_time

QPMAP码率统计时间,以秒为单位。

取值范围:[1, 60]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

qpmap_mode

CU32或CU64的QP值的取值方式。

【注意事项】

gop_mode 为OT_VENC_GOP_MODE_I模式时,gop必须设置为1。

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

gop

svac3.0 gop值。

取值范围:[1, 65536]

src_frame_rate

输入帧率,以fps为单位。

取值范围:[1/64, 240]

分数帧率时分母不大于64。

dst_frame_rate

编码器输出帧率,以fps为单位。

取值范围:[1/64, src_frame_rate]

分数帧率时分母不大于64。

i_qp

I帧所有宏块Qp值。

取值范围:[0, 63]

p_qp

P帧所有宏块Qp值。

取值范围:[0, 63]

b_qp

B帧所有宏块Qp值。

取值范围:[0, 63]

max_i_qp

I帧的最大QP。

取值范围:[i_qp, 63]

min_i_qp

I帧的最小QP。

取值范围:[0, i_qp]

max_p_qp

P帧的最大QP。

取值范围:[p_qp, 63]

min_p_qp

P帧的最小QP。

取值范围:[0, p_qp]。

max_vi_qp

VI帧的最大QP。

取值范围:[p_qp, 63]

min_vi_qp

VI帧的最小QP。

取值范围:[0, p_qp]

max_b_qp

B帧的最大QP。

取值范围:[b_qp, 63]

min_b_qp

B帧的最小QP。

取值范围:[0, b_qp]

【注意事项】

请参见ot_venc_h264_cbr 关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

bg_interval

长期参考帧的间隔。

取值范围:[gop, 65536],且必须是gop的整数倍。

bg_qp_delta

长期参考帧和P帧的QP差值。

取值范围:[-10, 30]

备注:在调试信息中,该参数等同其他码控模式的ip_qp_delta。

vi_qp_delta

虚拟I帧相对于普通P帧的QP差值。

取值范围:[-10, 30]

crr_split_num

非显示知识图像切片个数。

取值范围:[1, gop)

crr_delay_num

CRR切片传输延迟个数。

(crr_split_num-1)*(crr_delay_num+1)+ 2 小于GOP大小

strategy

CRR帧对应位置显示帧编码策略。

【注意事项】

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

chg_pos

开始调整Qp时的码率相对于最大码率的比例。

取值范围:[50, 100]

默认值:90。

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]

默认值:20。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1,100]

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]

默认值:2。

max_qp

P帧的最大QP。

取值范围:[0, 63]

默认值:63。

min_qp

P帧的最小QP。

取值范围:[0, max_qp]

默认值:27。

max_i_qp

I帧的最大QP。

取值范围:[0, 63]

默认值:63。

min_i_qp

I帧的最小QP。

取值范围:[0, max_i_qp]

默认值:27。

max_vi_qp

VI帧的最大QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:63。

min_vi_qp

VI帧的最小QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:27。

qpmap_en

VBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

QPMAP模式下CU32、CU64 QP值的取值方式。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

chg_pos

开始调整Qp时的码率相对于最大码率的比例。

取值范围:[50, 100]

默认值:90。

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]

默认值:100。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1, 100]

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]

默认值:2。

min_still_percent

静止状态下目标码率的最小百分比。此变量设置为100,AVBR将不会在判别为静止时主动调低目标码率。

取值范围:[5, 100]

默认值:25。

max_still_qp

静止状态最大QP。

取值范围:[min_i_qp, max_i_qp]

默认值:41。

min_still_psnr

暂时无效,只能设置为0.

max_qp

P帧的最大QP。

取值范围:[0, 63]

默认值:63。

min_qp

P帧的最小QP。

取值范围:[0, max_qp]

默认值:27。

max_i_qp

I帧的最大QP。

取值范围:[0, 63]

默认值:63。

min_i_qp

I帧的最小QP。

取值范围:[0, max_i_qp]

默认值:27。

max_vi_qp

VI帧的最大QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:63。

min_vi_qp

VI帧的最小QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:27。

min_qp_delta

帧级QP最小值和CU级QP最小值的差值。

I帧:FrameLevelMinQp = min_qp_delta+ min_i_qp

P、B帧:FrameLevelMinQp= min_qp_delta+min_qp

取值范围:[0, 4]

默认值:0。

motion_sensitivity

运动敏感度。

取值范围:[0, 100]

默认值:100。

qpmap_en

AVBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

QPMAP模式下CU32、CU64 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;

【成员】

成员名称

描述

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion, 100]

默认值:100。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1, 100]

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]

默认值:2。

qpmap_en

QVBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

QpMap模式。

取值范围:[0, 2]

默认值:0。

max_qp

P、B帧的最大QP。

取值范围:[min_qp, 63]

默认值:63。

min_qp

P、B帧的最小QP。

取值范围:[0, 63]。

默认值:16。

max_i_qp

I帧的最大QP。

取值范围:[min_i_qp, 63]

默认值:63。

min_i_qp

I帧的最小QP。

取值范围:[0, 63]。

默认值:16。

max_vi_qp

VI帧的最大QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:63。

min_vi_qp

VI帧的最小QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:16。

max_bit_percent

码率百分比上限。

取值范围:[min_bit_percent, 180]。

默认值:125。

min_bit_percent

码率百分比下限。

取值范围:[30, 180]

默认值:45。

max_psnr_fluctuate

Psnr上限。

取值范围:[min_psnr_fluctuate, 40]

默认值:30。

min_psnr_fluctuate

Psnr下限。

取值范围:[18, 40]

默认值:23。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

max_i_proportion

最大IP帧码率的比值。

取值范围:[min_i_proportion,100]

默认值:100。

min_i_proportion

最小IP帧码率的比值。

取值范围:[1, 100]

默认值:1。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]

默认值:2。

qpmap_en

CVBR模式下是否使能QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

QpMap模式。

取值范围:[0, 2]

默认值:0。

max_qp

P、B帧的最大QP。

取值范围:[min_qp, 63]

默认值:57。

min_qp

P、B帧的最小QP。

取值范围:[0, 63]

默认值:24。

max_i_qp

I帧的最大QP。

取值范围:[min_i_qp, 63]

默认值:57。

min_i_qp

I帧的最小QP。

取值范围:[0, 63]

默认值:21。

max_vi_qp

VI帧的最大QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:57。

min_vi_qp

VI帧的最小QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:24。

min_qp_delta

帧级QP最小值和CU级QP最小值的差值。

I帧:FrameLevelMinQp = min_qp_delta+ min_i_qp

P、B帧:FrameLevelMinQp= min_qp_delta+min_qp

取值范围:[0, 4]

默认值:0。

max_qp_delta

帧级QP最大值和CU级QP最大值的差值。

I帧:FrameLevelMaxQp = max_i_qp- max_qp_delta

P、B帧:FrameLevelMaxQp= max_qp-max_qp_delta

取值范围:[0, 4]

默认值:0。

extra_bit_percent

编码器输出码流最大透支bit数百分比。(当前不生效)

在码率不足时,确保图像质量,编码器会通过透支一定数量的bit数以提升图像质量,这部分透支的码率来源于前期节省的码率,若前期无节省码率。则当前参数不生效。

取值范围:[0, 1000]

默认值:5。

long_term_stats_time_unit

码率长期统计时间参数(long_term_stats_time)的单位,本变量单位是秒(s),如配置long_term_stats_time_unit = 60,long_term_stats_time=3,代表长期统计时间为3分钟。

取值范围:[1, 1800]

默认值:60。

【注意事项】

无

【相关数据类型及接口】

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;

【成员】

成员名称

描述

max_i_proportion

最大IP帧比例。

取值范围:[min_i_proportion, 100]

默认值:20。

min_i_proportion

最小IP帧比例。

取值范围:[1, 100]

默认值:1。

max_qp

帧最大QP,用于钳位质量。

取值范围:[0, 63]

默认值:63。

min_qp

帧最小QP,用于钳位码率波动。

取值范围:[0, max_qp]

默认值:10。

max_i_qp

I帧的最大QP。用于控制I帧的最小bits数。

取值范围:[0, 63]

默认值:63。

min_i_qp

I帧的最小QP。用于控制I帧的最大bits数。

取值范围:[0, max_i_qp]

默认值:10。

max_vi_qp

VI帧的最大QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:63。

min_vi_qp

VI帧的最小QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:10。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]

默认值:2。

qpmap_en

CBR码控模式下,使能/关闭QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

使能QpMap表的情况,CU32和CU64的Qp值的取值方式。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

max_p_qp

P帧的最大QP。用于控制P帧的最小bits数。

取值范围:[0, 63]

默认值:63。

min_p_qp

P帧的最小QP。用于控制P帧的最大bits数。

取值范围:[0, max_p_qp]

默认值:10。

max_i_qp

I帧的最大QP。用于控制I帧的最小bits数。

取值范围:[0, 63]

默认值:63。

min_i_qp

I帧的最小QP。用于控制I帧的最大bits数。

取值范围:[0, max_i_qp]

默认值:10。

max_vi_qp

VI帧的最大QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:63。

min_vi_qp

VI帧的最小QP, 用于SMART_P/SMART_CRR/ADV_SMART_CRR。

取值范围:[0, 63]

默认值:10。

max_reencode_times

每帧重编码次数。0表示不进行重编码。

取值范围:[0, 3]

默认值:2。

qpmap_en

ABR码控模式下,使能/关闭QpMap功能。

取值范围:TD_TRUE或TD_FALSE。

默认值:TD_FALSE。

qpmap_mode

使能QpMap表的情况,CU32和CU64的Qp值的取值方式。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

chroma_quant_param_disable_flag

默认值为0。

取值范围:[0, 1]

chroma_quant_param_delta_cb

取值范围:[-16, 16]

chroma_quant_param_delta_cr

取值范围:[-16, 16]

【注意事项】

  • 在场景配置为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;

【成员】

成员名称

描述

deblocking_filter_disable_flag

默认为0。

取值范围:0或1。

deblocking_filter_parameter_flag

默认为1。

取值范围:0或1。

alpha_c_offset

默认为0。

取值范围:[-8, 8]

beta_offset

默认为0。

取值范围:[-8, 8]

cross_patch_loop_filter_enable_flag

默认为1。

取值范围:0或1。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_svac3_sao

【说明】

定义SVAC3.0协议编码通道Sao的结构体。

【定义】

typedef struct {
    td_u32 patch_sao_luma_flag;
    td_u32 patch_sao_chroma_flag;
} ot_venc_svac3_sao;

【成员】

成员名称

描述

patch_sao_luma_flag

默认为1。

取值范围:0或1。

patch_sao_chroma_flag

默认为1。

取值范围:0或1。

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

luma_picture_alf_enable

亮度分量alf使能,默认为1。

取值范围:0或1。

chroma_picture_alf_enable

色度分量alf使能,默认为1。

取值范围:0或1。

sharpness_strength

清晰度强度。

默认为0。

取值范围:[0, 16]

【注意事项】

仅Hi3511CV100支持。

【相关数据类型及接口】

ot_venc_svac3_privacy

【说明】

定义SVAC3.0协议编码通道隐私保护的结构体。

【定义】

typedef struct {
    td_bool enable;
    td_u32 mode;
} ot_venc_svac3_privacy;

【成员】

成员名称

描述

enable

隐私编码使能,默认为0。

取值范围:0或1。

mode

隐私编码模式,默认为0。

取值范围:0或1。

【注意事项】

仅Hi3511CV100支持。

【相关数据类型及接口】

ot_venc_svac3_emulation

【说明】

定义SVAC3.0协议编码通道是否插入防竞争码的结构体。

【定义】

typedef struct {
    td_bool stuff03_disable;
} ot_venc_svac3_emulation;

【成员】

成员名称

描述

stuff03_disable

默认为0。

取值范围:0或1。

【注意事项】

无。

【相关数据类型及接口】

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_DISABLE

CRR帧对应位置不重编显示帧

OT_VENC_CRR_RECODE_NORMAL

CRR帧对应位置重编显示帧。

OT_VENC_CRR_RECODE_COPY

CRR帧对应位置显示帧使用临近码流补帧。

OT_VENC_CRR_RECODE_WRITE_BACK

CRR帧对应位置使用回写yuv重编显示帧。

【注意事项】

  • 如果存在多路设置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策略。

【相关数据类型及接口】

ss_mpi_venc_create_chn

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;

【成员】

成员名称

描述

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

低码率策略,该配置为最低码率图像质量也是最差,为码率策略第四档。

【注意事项】

  • 无。

【相关数据类型及接口】

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

协议能力集H.264控制位。

OT_VENC_PAYLOAD_SUPPORT_H265

协议能力集H.265控制位。

OT_VENC_PAYLOAD_SUPPORT_SVAC3

协议能力集SVAC3.0控制位。

OT_VENC_PAYLOAD_SUPPORT_JPEG

协议能力集JPEG控制位。

OT_VENC_PAYLOAD_SUPPORT_MJPEG

协议能力集MJPEG控制位。

OT_VENC_PAYLOAD_SUPPORT_BUTT

协议能力集不支持的协议控制位。

【注意事项】

对于通道可以支持的协议类型,使用按位或的方式进行设置,比如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

码控能力集ABR控制位。

OT_VENC_RC_SUPPORT_CBR

码控能力集CBR控制位。

OT_VENC_RC_SUPPORT_VBR

码控能力集VBR控制位。

OT_VENC_RC_SUPPORT_AVBR

码控能力集AVBR控制位。

OT_VENC_RC_SUPPORT_QVBR

码控能力集QVBR控制位。

OT_VENC_RC_SUPPORT_CVBR

码控能力集CVBR控制位。

OT_VENC_RC_SUPPORT_FIXQP

码控能力集FIXQP控制位。

OT_VENC_RC_SUPPORT_QPMAP

码控能力集QPMAP控制位。

OT_VENC_RC_SUPPORT_RANGEQP

码控能力集RANGEQP控制位。

OT_VENC_RC_SUPPORT_BUTT

码控能力集不支持的码控控制位。

【注意事项】

对于通道可以支持的码控类型,使用按位或的方式进行设置,比如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;

【成员】

成员名称

描述

OT_VENC_GOP_SUPPORT_NORMAL_P

能力集GOP类型NORMAL_P控制位。

OT_VENC_GOP_SUPPORT_DUAL_P

能力集GOP类型DUAL_P控制位。

OT_VENC_GOP_SUPPORT_SMART_P

能力集GOP类型SMART_P控制位。

OT_VENC_GOP_SUPPORT_ADV_SMART_P

能力集GOP类型ADV_SMART_P控制位。

OT_VENC_GOP_SUPPORT_BIPRED_B

能力集GOP类型BIPRED_B控制位。

OT_VENC_GOP_SUPPORT_LOW_DELAY_B

能力集GOP类型LOW_DELAY_B控制位。

OT_VENC_GOP_SUPPORT_SMART_CRR

能力集GOP类型SMART_CRR控制位。

OT_VENC_GOP_SUPPORT_SINGLE_SP

能力集GOP类型SINGLE_SP控制位。

OT_VENC_GOP_SUPPORT_I

能力集GOP类型I帧编码模式控制位

OT_VENC_GOP_SUPPORT_ADV_SMART_CRR

能力集GOP类型ADV_SMART_CRR控制位。

OT_VENC_GOP_SUPPORT_BUTT

能力集GOP类型不支持的类型控制位。

【注意事项】

对于通道可以支持的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

能力集SMART_CRR重编策略DISABLE模式控制位。

OT_VENC_CRR_SUPPORT_RECODE_NORMAL

能力集SMART_CRR重编策略NORMAL模式控制位。

OT_VENC_CRR_SUPPORT_RECODE_COPY

能力集SMART_CRR重编策略COPY模式控制位。

OT_VENC_CRR_SUPPORT_RECODE_WRITE_BACK

能力集SMART_CRR重编策略WRITE_BACK模式控制位。

OT_VENC_CRR_SUPPORT_RECODE_BUTT

能力集SMART_CRR重编策略不支持的模式控制位。

【注意事项】

对于通道可以支持的重编策略,使用按位或的方式进行设置,比如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

能力集低码率策略AUTO模式控制位。

OT_VENC_BITRATE_STRATEGY_SUPPORT_HIGH_QUALITY

能力集低码率策略HIGH_QUALITY模式控制位。

OT_VENC_BITRATE_STRATEGY_SUPPORT_BIAS_QUALITY

能力集低码率策略BIAS_QUALITY模式控制位。

OT_VENC_BITRATE_STRATEGY_SUPPORT_BIAS_BITRATE

能力集低码率策略BIAS_BITRATE模式控制位。

OT_VENC_BITRATE_STRATEGY_SUPPORT_LOW_BITRATE

能力集低码率策略LOW_BITRATE模式控制位。

OT_VENC_BITRATE_STRATEGY_SUPPORT_BUTT

能力集低码率策略不支持的模式控制位。

【注意事项】

对于通道可以支持的低码率策略,使用按位或的方式进行设置,比如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_NONE

能力集智能编码NONE控制位。

OT_VENC_SVC_SUPPORT_V1

能力集智能编码SVC_V1控制位。

OT_VENC_SVC_SUPPORT_V2

能力集智能编码SVC_V2控制位。

OT_VENC_SVC_SUPPORT_BUTT

能力集智能编码不支持的版本控制位。

【注意事项】

对于通道可以支持的智能编码版本,使用按位或的方式进行设置,比如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;

【成员】

成员名称

描述

payload_support

支持的协议类型。

可配置范围参考定义ot_venc_payload_support,Hi3511CV100不支持JPEG/MJPEG类型。

max_pic_width

编码图像最大宽度。

取值范围:[MIN_WIDTH, MAX_WIDTH],以像素为单位。

必须是MIN_ALIGN的整数倍。

max_pic_height

编码图像最大高度。

取值范围:[MIN_HEIGHT, MAX_HEIGHT],以像素为单位。

必须是MIN_ALIGN的整数倍

buf_size

码流buffer大小。

取值范围:[Min, Max],以byte为单位。

必须是64的整数倍。

推荐值:一幅最大编码图像大小。推荐值为MaxPicWidth x MaxPicHeight x 1.5byte。

调用接口ss_mpi_venc_set_mod_param设置模块参数min_buf_mode可以选择取值范围限制方式。

对于H.264/H.265/SVAC3.0:

1、min_buf_mode = 0:

Min:一幅最大编码图像大小的1/2。

Max:无限制,但是会消耗更多的内存。

2、min_buf_mode = 1,用户保证buffer大小合理性:

Min:32x1024 byte

Max:无限制,但是会消耗更多的内存。

对于Jpeg/Mjpeg:

1、min_buf_mode = 0:

Min:图像最大宽高16对齐后的乘积。

Max:无限制,但是会消耗更多的内存。

2、min_buf_mode = 1,用户保证buffer大小合理性:

Min:不小于32x1024 byte

Max:无限制,但是会消耗更多的内存。

对于Prores:

Min:一幅最大编码图像大小。

Max:无限制,但是会消耗更多的内存。

rcn_ref_share_buf_en

是否使能帧节省模式。

取值范围:[0,1]。

默认不使能

frame_buf_ratio

帧buffer比例。

取值范围:[70,100]。

【注意事项】

能力集使能时,创建通道的参数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;

【成员】

成员名称

描述

rc_mode_support

支持的RC模式。

可配置范围参考定义ot_venc_rc_mode_support。

内部默认设置为芯片支持的所有RC模式。

min_gop

可设置的gop 最小值。

取值范围:[1, 65536]。同时需要满足min_gop <= min_bg_interval

默认值30。

max_gop

可设置的gop 最大值。

取值范围:[1, 65536]。同时需要满足max_gop <= max_bg_interval

默认值30。

max_stats_time

码率统计时间,以秒为单位。

取值范围:[1, 60]。

默认值30。

max_src_frame_rate

码控最大输入帧率,以fps为单位。

取值范围:[1, 240]。

默认值30。

max_short_term_stats_time

最大码率短期统计时间,以秒为单位

取值范围:[1, 120]。

默认值30。

max_long_term_stats_time

码率长期统计时间,单位由高级参数long_term_stats_time_unit决定,默认为分钟。

取值范围:[1, 1440]。

默认值180

【注意事项】

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;

【成员】

成员名称

描述

gop_mode_support

支持的GOP模式。

可配置范围参考定义ot_venc_gop_support。

内部默认设置为芯片支持的所有GOP模式。

crr_recode_strategy_support

SMART_CRR GOP模式下可设置的重编策略。

可配置范围参考定义ot_venc_crr_recode_strategy_support。

默认值OT_VENC_CRR_SUPPORT_RECODE_DISABLE。

min_bg_interval

可设置的背景帧间隔最小值。

取值范围:[1, 65536]。同时需要满足min_gop <= min_bg_interval

默认值30。

max_bg_interval

可设置的背景帧间隔最大值。

取值范围:[1, 65536]。同时需要满足min_gop <= min_bg_interval

默认值1200。

skip_ref_support

是否支持特定条件下的跨帧参考,详细情况见注意事项。

取值范围:[0,1]

默认值不支持。

max_frame_num

最大帧存个数。

取值范围[0,8]

默认3个。

【注意事项】

  • 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;

【成员】

成员名称

描述

user_data_support

是否可以插入user_data

取值范围:[0,1]

默认不支持。

watermark_support

是否可以插入水印

取值范围:[0,1]

默认不支持。

deblur_support

是否支持deblur

取值范围:[0,1]

默认不支持

quality_balance_support

是否可以使能quality_balance

取值范围:[0,1]

默认不支持

md_support

是否可以使能md

取值范围:[0,1]

默认不支持

jpeg_roi_support

是否可以使能jpeg roi

取值范围:[0,1]

默认不支持,Hi3511CV100不支持设置该参数。

bitrate_strategy_support

可以使能的低码率策略。

取值范围参考ot_venc_bitrate_strategy_support

默认OT_VENC_BITRATE_STRATEGY_SUPPORT_AUTO

svc_support

可以使能的智能编码版本。

取值范围参考ot_venc_svc_version_support

默认OT_VENC_SVC_SUPPORT_NONE。

svc_v2_max_ref_num

可以设置的智能编码2.0参考个数。

取值范围:[2,4]

默认2。

【注意事项】

  • 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;

【成员】

成员名称

描述

enable

是否使能能力集

取值范围:[0,1]

默认不使能

attr_capability

属性能力集

rc_capability

码率控制能力集

gop_capability

GOP能力集

feature_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;

【成员】

成员名称

描述

VENC_EXPORT_FRAME_TYPE_I

I 帧,包括smart_crr中的显示和非显示知识图像

VENC_EXPORT_FRAME_TYPE_P

普通P帧

VENC_EXPORT_FRAME_TYPE_B

B帧

VENC_EXPORT_FRAME_TYPE_SP

dualp 和singleSp中的特殊P帧

VENC_EXPORT_FRAME_TYPE_VI

虚拟I帧

【注意事项】

无

【相关数据类型及接口】

无

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;

【成员】

成员名称

描述

VENC_EXPORT_FRAME_STATUS_INIT

初始化

VENC_EXPORT_FRAME_STATUS_NORMAL

正常中断

VENC_EXPORT_FRAME_STATUS_LOST

中断丢帧

VENC_EXPORT_FRAME_STATUS_REENCODE

需要重编

【注意事项】

无

【相关数据类型及接口】

无

ot_venc_export_rc_attr

【说明】

定义驱动外部码控属性。

【定义】

typedef struct {
    ot_payload_type type;
    ot_venc_rc_attr venc_rc_attr;
} ot_venc_export_rc_attr;

【成员】

成员名称

描述

type

协议类型。

venc_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;

【成员】

成员名称

描述

cur_frame_type

当前帧类型

last_frame_status

前一帧工作状态

last_frm_bits

前一帧编码bit,不包含以下数据的长度:

参数集(vps,sps,pps);

sei;

svac3.0协议中的扩展数据,picture_header;

last_madi_val

前一帧空域纹理复杂度Madi值

last_madp_val

前一帧空域纹理复杂度Madi值

last_move_scene_sum

前一帧运动块个数。块大小为MB(H264)或者LCU(H265、SVAC3.0)大小

【注意事项】

无

【相关数据类型及接口】

无

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;

【成员】

成员名称

描述

target_bits

目标码率。

max_qp

帧最大QP,用于钳位质量。

取值范围:SVAC3.0协议:[0, 63],其他协议:[0, 51]

min_qp

帧最小QP,用于钳位码率波动。

取值范围:[0, max_qp]

start_qp

指定当前帧起始qp。

取值范围:[min_qp, max_qp]

【注意事项】

无

【相关数据类型及接口】

无

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;

【成员】

成员名称

描述

venc_export_rc_init

初始化函数,创建通道时被调用。

返回 0 表示成功,返回非0表示失败。

venc_export_rc_deinit

去初始化函数,销毁通道时被调用。

返回 0 表示成功,返回非0表示失败。

venc_export_rc_reset

复位函数,调用mpi复位函数,获取其他导致内部复位的因素,触发该函数被调用。

在中断上下文运行,不可休眠。

返回 0 表示成功,返回非0表示失败。

venc_export_rc_change

修改编码属性时被调用。

在中断上下文运行,不可休眠。

返回 0 表示成功,返回非0表示失败。

venc_export_rc_calc

码控计算函数,每一帧编码前被调用。外部码控算法需要根据提供的信息(rc_frame_info)计算出当前帧的码控信息(rc_enc_info)。

在中断上下文运行,不可休眠。

返回 0 表示成功,返回非0表示失败。

【注意事项】

无

【相关数据类型及接口】

无

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

外部驱动注册函数

【注意事项】

  • register_export_callback在驱动内部被赋值,使用者调用该函数。成功返回0,失败返回对应的错误码。
  • 只能在通道未创建的情况下注册外部码控。
  • 注册回调函数全部为0表示不使用外部码控。
  • 如果使用外部码控,需要保证所有回调函数非空。

【相关数据类型及接口】

无

ot_venc_fast_enc_param

【说明】

定义快速编码参数。

【定义】

typedef struct {
    td_bool enable;
} ot_venc_fast_enc_param;

【成员】

成员名称

描述

enable

快速编码使能控制

【注意事项】

无。

【相关数据类型及接口】

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;

【成员】

成员名称

描述

map_class_num

语义分割图类别数量。

取值范围:[0, OT_VENC_MAX_AISEG_CLASS_NUM]

map_label

语义分割图像素标签数组,有效长度即map_class_num。

取值范围:[0, 255]

map_value

语义分割图像素标签映射值数组,有效长度即map_class_num。

取值范围:[0, 255]

user_frame

语义分割图的帧信息结构体,具体描述请参见“系统控制”章节。

【注意事项】

  • 本结构仅用于语义分割图编码通道送帧,仅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;

【成员】

成员名称

描述

OT_VENC_FG_MODE_FOREGROUND

前景的质量优先模式。

OT_VENC_FG_MODE_BALANCE

前景背景质量平衡模式。

【注意事项】

仅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;

【成员】

成员名称

描述

enable

预滤波使能。

取值范围:[0, 1];默认值:0;

filter_mode

预滤波模式。

具体定义见ot_venc_prefilter_mode,默认值:1。

filter_range

预滤波区域范围。

具体定义见ot_venc_prefilter_range,默认值:1。

filter_strength

预滤波强度。

具体定义见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;

成员名称

描述

OT_VENC_PREFILTER_MODE_0

模式0,强纹理区域滤波。

OT_VENC_PREFILTER_MODE_1

模式1,强纹理加平坦区域滤波。

【注意事项】

仅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;

成员名称

描述

OT_VENC_PREFILTER_RANGE_0

范围0,检测的区域范围较小。

OT_VENC_PREFILTER_RANGE_1

范围1,检测的区域范围中等。

OT_VENC_PREFILTER_RANGE_2

范围2,检测的区域范围较大。

【注意事项】

仅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;

成员名称

描述

OT_VENC_PREFILTER_STRENGTH_1

滤波强度1。

OT_VENC_PREFILTER_STRENGTH_2

滤波强度2。

OT_VENC_PREFILTER_STRENGTH_3

滤波强度3。

OT_VENC_PREFILTER_STRENGTH_4

滤波强度4。

【注意事项】

仅Hi3511CV100支持。

【相关数据类型及接口】

ot_venc_svac3_aiseg

【说明】

定义SVAC3.0语义分割功能参数结构体。

【定义】

typedef struct {
    td_bool enable;
    td_u32 buf_size;
} ot_venc_svac3_aiseg;

成员名称

描述

enable

语义分割使能。

取值范围:[0, 1];默认值:0;

buf_size

语义分割数据缓存大小,以字节为单位。

取值范围:(0,8951808‬],默认值:524288。

【注意事项】

仅Hi3511CV100支持。

【相关数据类型及接口】

错误码

视频编码API错误码如表1所示。

表 1 视频编码API错误码

错误代码

宏定义

描述

0xa0088003

OT_ERR_VENC_INVALID_CHN_ID

通道ID超出合法范围

0xa0088007

OT_ERR_VENC_ILLEGAL_PARAM

参数超出合法范围

0xa0088008

OT_ERR_VENC_EXIST

试图申请或者创建已经存在的设备、通道或者资源

0xa0088009

OT_ERR_VENC_UNEXIST

试图使用或者销毁不存在的设备、通道或者资源

0xa008800a

OT_ERR_VENC_NULL_PTR

函数参数中有空指针

0xa008800b

OT_ERR_VENC_NOT_CFG

使用前未配置

0xa008800c

OT_ERR_VENC_NOT_SUPPORT

不支持的参数或者功能

0xa008800d

OT_ERR_VENC_NOT_PERM

该操作不允许,如试图修改静态配置参数

0xa0088014

OT_ERR_VENC_NO_MEM

分配内存失败,如系统内存不足

0xa0088015

OT_ERR_VENC_NO_BUF

分配缓存失败,如申请的数据缓冲区太大

0xa0088016

OT_ERR_VENC_BUF_EMPTY

缓冲区中无数据

0xa0088017

OT_ERR_VENC_BUF_FULL

缓冲区中数据满

0xa0088018

OT_ERR_VENC_SYS_NOT_READY

系统没有初始化或没有加载相应模块

0xa0088022

OT_ERR_VENC_BUSY

VENC系统忙

0xa0088023

OT_ERR_VENC_SIZE_NOT_ENOUGH

buffer大小不足