概述

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

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

表 1 解决方案编码规格

解决方案

H.264

JPEG

MOTION JPEG

H.265

BP

MP

HP

MP

Main 10

SS528V100

支持

支持

支持

支持

支持

支持

不支持

SS625V100

支持

支持

支持

支持

支持

支持

不支持

SS524V100

支持

支持

支持

支持

支持

支持

不支持

SS522V101

支持

支持

支持

支持

支持

支持

不支持

SS928V100

支持

支持

支持

支持

支持

支持

不支持

SS626V100

支持

支持

支持

支持

支持

支持

不支持

功能描述

编码数据流程图

图 1 VENC的数据流程图

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

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

通道支持接收YUV格式图像输入,其中H.264/H.265支持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)。通道模块接收外部原始图像数据,而不关心图像数据是来自哪个外部模块。

SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100解决方案输入YUV支持的压缩格式:OT_COMPRESS_MODE_NONE、OT_COMPRESS_MODE_SEG、OT_COMPRESS_MODE_SEG_COMPACT。

SS528V100/SS625V100/SS524V100/SS522V101/SS626V100解决方案输入YUV压缩格式为OT_COMPRESS_MODE_SEG_COMPACT时,VENC支持YUV的最大宽度为2688;

SS928V100解决方案输入YUV压缩格式为OT_COMPRESS_MODE_SEG_COMPACT时,VENC支持YUV的最大宽度为4096。

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

  • 如果输入图像比编码通道尺寸大,VENC将按照编码通道尺寸大小,调用VGS对源图像进行缩小,然后对缩小之后的图像进行编码。

  • 如果输入图像比编码通道尺寸小,VENC丢弃源图像。VENC不支持放大输入图像编码。

  • 如果输入图像与编码通道尺寸相当,VENC直接接收源图像,进行编码。

说明:

  1. 通道的帧率控制默认不打开,需要用户调用接口设置。RC中也具有帧率控制功能。推荐使用RC的帧率控制,这样不会对码率控制造成过大的冲击。

  2. 对于H.264/ H.265编码,输入图像格式由非单分量切换为单分量时,由于存在帧间预测量化误差,在编码出下一个I帧之前图像会存有色度残留。建议客户在切换单分量时调用接口ss_mpi_venc_reset_chn进行通道复位。

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

编码通道

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

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

码率控制

码率控制器实现对编码码率进行控制。

从信息学的角度分析,图像的压缩比越低,压缩图像的质量越高;图像压缩比例越高,压缩图像的质量越低。在场景变化的情况下,追求图像质量稳定,则编码码率会波动较大;如追求编码码率稳定,则图像质量会波动较大。以H.264编码为例,通常图像Qp越低,图像的质量越好,码率越高;图像Qp越高,图像质量越差,码率越低。

码率控制是针对连续的编码码流而言,所以,JPEG协议编码通道不包括码率控制功能。

码率控制器分别提供了对MJPEG协议编码通道CBR、VBR、FIXQP三种码率控制模式,H.264/H.265协议编码通道CBR、VBR、AVBR、QVBR、CVBR、FIXQP、QPMAP七种码率控制模式,对图像质量和码率进行调节,对于H.264/H.265/协议通道的QPMAP模式,码控的策略由用户决定。

CBR

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

  • 码率统计时间stats_time

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

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

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

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小于max_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设置了瞬时,短期与长期码率的限制。其中,瞬时码率的限制保证了网络带宽对传输的要求;长期码率限制保证了在长时间视频录制时,存储设备有足够的空间储存数据;同时,短期码率会根据长期码率的设置和实际使用情况进行调节,以在场景复杂的情况下提供更加平稳的图像质量,并在场景简单时节省码率。

FIXQP

FIXQP固定QP值。在码率统计时间内,编码图像所有宏块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所示。

图 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模式下需要调用接口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 = (width +255) / 256 * 256 / 16 H.264: qpmap_size = stride *((height + 15) / 16 * 16 / 16) H.265: qpmap_size = stride *((height + 31) / 32 * 32 / 16)

  • Qpmap模式下,skipweight表需要内存计算如下: H.264: stride = (width + 511) / 512 * 512 / 32 H.265: stride = (width + 1023) / 1024 * 1024 / 64 H.264: skipweight_size = stride * (height + 15) /16 *16 / 16 H.265: skipweight_size = stride * (height + 31)/ 32 *32 / 32

GOP结构

两种编码协议(H.264/H.265)对GOP结构类型模式的支持情况如表1

表 1 编码协议支持GOP结构类型

GOP 模式

参考帧个数

SS528V100/SS625V100/SS928V100/SS626V100

SS524V100/SS522V101

H.264/H.265

H.264/H.265

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

不支持

不支持

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

    其中:Bg指IDR帧,且为长期参考帧,VI指P帧,该帧只参考Bg帧,且Qp值小于其他P帧Qp值。

图 2 OT_VENC_GOP_MODE_SMART_P模式的帧结构图

  • OT_VENC_GOP_MODE_ADV_SMART_P模式的帧结构,如图3所示。

    其中:Bg指背景建模帧,是IDR帧,且为长期参考帧,VI指P帧,该帧只参考Bg帧,且Qp值小于其他P帧Qp值

图 3 OT_VENC_GOP_MODE_ADV_SMART_P模式的帧结构图

  • OT_VENC_GOP_MODE_BIPRED_B模式的帧结构,如图4所示。

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

图 4 OT_VENC_GOP_MODE_BIPRED_B模式的帧结构图

说明:

  • H.264非normal_p模式下,不支持svc-t。

  • H.265协议的帧存管理方式默认在码流中传输,通过模块参数g_h265e_feature_en控制,默认为1。如果客户的解码器有兼容性问题可以在加载h265e.ko设置g_h265e_feature_en=0。

高级跳帧参考模式

高级跳帧参考模式涉及3个参数:base、enhance和pred_en,其含义请参考ot_venc_ref_param。高级跳帧参考模式示意如图1图6所示。

须知: dual_p模式且sp_interval不等于0下配置高级跳帧参考需要满足如下条件:base*(enhance+1)= sp_interval,例如:4倍高级跳帧参考(base=2,enhance=1),那么dual_p的sp_interval =2*(1+1)=4。

图 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高级跳帧参考示意图

彩转灰

彩转灰:即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通道进行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帧刷新ISlice,可以为客户提供码率非常平滑的编码方式,每个I帧和P帧的大小可以非常接近。在网络带宽有限(如无线网络)的情况下,降低I帧过大带来的网络冲击,降低网传延时,降低网络传输出错的概率。

使用方式

  1. 通过接口ss_mpi_venc_set_intra_refresh设置刷新使能enable;

  2. 设置刷新使能后SDK会自动根据设置的刷新行数或列数refresh_num从每个GOP的第一帧开始按行(从上至下)或按列(从左至右)完成Intra宏块刷新;刷新间隔为GOP;

  3. SDK会自动把每次按行刷新第一帧的帧内预测宏块转换为一个I Slice;

  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协议有效;

  • ss_mpi_venc_set_intra_refresh设置使能enable,按行刷新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/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是通道宽x通道高x3/4,JPEG和MJPEG是通道宽x通道高。

  • 省内存模式:码流Buffer大小配置的下限是32*1024 bytes,此模式需要用户保证码流buffer大小设置合理,否则会出现因码流buffer不足而不断重编或者丢帧的情况。

两种模式可通过调用ss_mpi_venc_set_mod_param接口设置相应的模块参数来选择。模块参数值为1表示省内存模式,模块参数值 0表示一般模式。

编码帧存回收

H.264和H.265编码目前支持的参考帧数最多为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编码支持):创建编码通道时不分配参考帧和重构帧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段落。

多编码器编码

说明: SS528V100支持多个编码器,SS625V100/SS524V100/SS522V101/SS928V100/SS626V100仅支持一个。

H.264/H.265编码支持多编码器编码,SS528V100支持3个逻辑并行。实际使用中可以根据需要的编码性能选择关闭部分编码逻辑用来降低部分芯片功耗。使用方式为:对于linux,加载ssxx_vedu.ko时设置模块参数g_vedu_en,关闭逻辑时仅支持VEDU编号从大到小依次关闭。比如,某解决方案支持vedu0/vedu1/vedu2三个逻辑,vedu2没有关闭时是不允许关闭vedu0和vedu1,假如现在仅需要2个逻辑,则设置g_vedu_en=1,1,0

智能编码

智能编码(Smart Video Coding,简称:SVC)技术包括编码更低码率与前景保护的控制机制。

为了更加准确地对场景中的目标进行保护或者从背景中节省码率,智能编码将一帧图像按照前景、背景及可能目标区域等不同层次进行编码。为了满足用户对各区域质量与总体码率的不同需求,智能编码为用户提供了各区域对应QpMap值和Skip倾向性的配置接口。具体来说,当调用ss_mpi_venc_enable_svc接口使能智能编码后,可以进一步配置接口ss_mpi_venc_set_svc_param中对应的参数,以达到在不同的场景中对前景、背景及可能目标区域的质量进行不同控制的目的,而最终实现该场景的码率质量优化。例如,增加背景区域的QpMap值或者Skip倾向性可以节省码率,但也可能带来质量损失。同时,通过用户可根据已检测到的智能信息获得图像场景的复杂度的总体信息,来主动调节编码码率控制等相关参数。

特别说明:QpMap调节Qp的优先级高于参数设置的MinQP和MaxQp,因此在打开智能编码时,在码率不足或者码率充裕时,MaxQP和MinQP会失效。

复合编码

说明: SS528V100/SS625V100/SS522V101/SS524V100/SS626V100暂不支持。

复合编码(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次逻辑,最大解码能力降低一半。

API参考

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

注意:SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100不支持PRORES相关接口。

该功能模块提供以下MPI:

  • ss_mpi_venc_create_chn:创建编码通道。

  • ss_mpi_venc_destroy_chn:销毁编码通道。

  • ss_mpi_venc_reset_chn:复位编码通道。

  • ss_mpi_venc_start_chn:开启编码通道接收输入图像。

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

  • ss_mpi_venc_query_status:查询编码通道状态。

  • ss_mpi_venc_set_chn_attr:设置编码通道的编码属性。

  • ss_mpi_venc_get_chn_attr:获取编码通道的编码属性。

  • ss_mpi_venc_get_stream:获取编码码流。

  • ss_mpi_venc_release_stream:释放码流缓存。

  • ss_mpi_venc_get_stream_buf_info:获取码流buffer的物理地址和大小。

  • ss_mpi_venc_insert_user_data:插入用户数据。

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

  • ss_mpi_venc_send_frame_ex:支持用户发送原始图像及该图的QpMap表信息进行编码。

  • ss_mpi_venc_omx_send_frame:支持用户对于H.264/H.265编码通路发送外部码率控制信息进行编码。

  • ss_mpi_venc_send_multi_frame:用户发送2个图像及马赛克区域信息进行编码

  • ss_mpi_venc_set_chn_config:设置编码通道复合编码配置

  • ss_mpi_venc_get_chn_config:获取编码通道复合编码配置

  • ss_mpi_venc_request_vi:请求VI(虚拟I帧)帧。

  • ss_mpi_venc_request_idr:请求IDR帧。

  • ss_mpi_venc_enable_idr:使能IDR帧。

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

  • ss_mpi_venc_close_fd:关闭编码通道对应的设备文件句柄。

  • ss_mpi_venc_set_roi_attr:设置编码通道的感兴趣区域编码配置。

  • ss_mpi_venc_get_roi_attr:获取编码通道的感兴趣区域编码配置。

  • ss_mpi_venc_set_roi_attr_ex: 设置编码通道的感兴趣区域编码高级配置。

  • ss_mpi_venc_get_roi_attr_ex: 获取编码通道的感兴趣区域编码高级配置。

  • ss_mpi_venc_set_roi_bg_frame_rate:设置编码通道非感兴趣区域的帧率配置。

  • ss_mpi_venc_get_roi_bg_frame_rate:获取编码通道非感兴趣区域的帧率配置。

  • ss_mpi_venc_set_h264_intra_pred:设置H.264编码的帧内预测配置。

  • ss_mpi_venc_get_h264_intra_pred:获取H.264编码的帧内预测配置。

  • ss_mpi_venc_set_h264_trans:设置H.264编码的变换、量化配置。

  • ss_mpi_venc_get_h264_trans:获取H.264编码的变换、量化配置。

  • ss_mpi_venc_set_h264_entropy:设置H.264编码的熵编码配置。

  • ss_mpi_venc_get_h264_entropy:获取H.264编码的熵编码配置。

  • ss_mpi_venc_set_h264_dblk:设置H.264编码的deblocking配置。

  • ss_mpi_venc_get_h264_dblk:获取H.264编码的deblocking配置。

  • ss_mpi_venc_set_h264_vui:设置H.264编码的VUI配置。

  • ss_mpi_venc_get_h264_vui:获取H.264编码的VUI配置。

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

  • ss_mpi_venc_get_h265_vui:获取H.265协议编码通道的VUI配置

  • ss_mpi_venc_set_jpeg_param:设置JPEG编码的参数集合。

  • ss_mpi_venc_get_jpeg_param:获取JPEG编码的参数集合。

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

  • ss_mpi_venc_get_mjpeg_param:获取MJPEG协议编码通道的高级参数。

  • ss_mpi_venc_set_rc_param:设置通道码率控制高级参数。

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

  • ss_mpi_venc_set_ref_param:设置H.264/H.265编码通道高级跳帧参考参数。

  • ss_mpi_venc_get_ref_param:获取H.264/H.265编码通道高级跳帧参考参数。

  • ss_mpi_venc_set_jpeg_enc_mode:设置JPEG抓拍通道的抓拍模式。

  • ss_mpi_venc_get_jpeg_enc_mode:获取JPEG抓拍通道的抓拍模式。

  • ss_mpi_venc_set_slice_split:设置H.264/H.265编码的slice分割配置。

  • ss_mpi_venc_get_slice_split:获取H.264/H.265编码的slice分割配置。

  • ss_mpi_venc_set_search_window:设置H.264/H.265通道的搜索窗范围。

  • ss_mpi_venc_get_search_window:获取H.264/H.265通道的搜索窗范围。

  • ss_mpi_venc_set_h265_pu:设置H.265编码的PU配置。

  • ss_mpi_venc_get_h265_pu:获取H.265编码的PU配置。

  • ss_mpi_venc_set_h265_trans :设置H.265编码的变换、量化配置。

  • ss_mpi_venc_get_h265_trans:获取H.265编码的变换、量化配置。

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

  • ss_mpi_venc_get_h265_entropy:获取H.265通道的熵编码属性。

  • ss_mpi_venc_set_h265_dblk:设置H.265编码的deblocking配置。

  • ss_mpi_venc_get_h265_dblk:获取H.265编码的deblocking配置。

  • ss_mpi_venc_set_h265_sao:设置H.265编码的SAO配置。

  • ss_mpi_venc_get_h265_sao:获取H.265编码的SAO配置。

  • ss_mpi_venc_set_frame_lost_strategy:设置瞬时码率超出阈值时丢帧策略的配置。

  • ss_mpi_venc_get_frame_lost_strategy:获取瞬时码率超出阈值时丢帧策略的配置。

  • ss_mpi_venc_set_super_frame_strategy:设置超大帧处理配置。

  • ss_mpi_venc_get_super_frame_strategy :获取超大帧处理配置。

  • ss_mpi_venc_get_intra_refresh:获取P帧刷Islice的设置参数。

  • ss_mpi_venc_set_intra_refresh:设置P帧刷Islice的参数。

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

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

  • ss_mpi_venc_set_sse_rgn:设置H.264/H.265通道的SSE属性。

  • ss_mpi_venc_get_sse_rgn:获取H.264/H.265通道的SSE属性。

  • ss_mpi_venc_set_chn_param:设置Venc通道参数。

  • ss_mpi_venc_get_chn_param:获取Venc通道参数。

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

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

  • ss_mpi_venc_set_scene_mode:设置编码场景模式。

  • ss_mpi_venc_get_scene_mode:获取编码场景模式。

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

  • ss_mpi_venc_detach_vb_pool:将编码通道从某个视频缓存VB池中解绑定。

  • ss_mpi_venc_set_cu_pred:设置CU模式的倾向性。

  • ss_mpi_venc_get_cu_pred:获取CU模式的倾向性配置。

  • ss_mpi_venc_set_skip_bias:设置cu/mb选择Skip模式的倾向性。

  • ss_mpi_venc_get_skip_bias:获取cu/mb选择Skip模式的倾向性配置。

  • ss_mpi_venc_set_debreath_effect:设置去除呼吸效应参数。

  • ss_mpi_venc_get_debreath_effect:获取去除呼吸效应参数。

  • ss_mpi_venc_set_hierarchical_qp:设置分层qp参数。

  • ss_mpi_venc_get_hierarchical_qp:获取分层qp参数。

  • ss_mpi_venc_set_rc_adv_param:设置RC模块的高级参数。

  • ss_mpi_venc_get_rc_adv_param:获取RC模块的高级参数。

  • ss_mpi_venc_set_jpeg_roi_attr:设置jpeg ROI属性。

  • ss_mpi_venc_get_jpeg_roi_attr:获取jpeg ROI属性。

  • ss_mpi_venc_enable_svc:开启/关闭智能编码。

  • ss_mpi_venc_get_svc_param:获取智能编码相关参数。

  • ss_mpi_venc_set_svc_param:设置智能编码相关参数。

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

  • ss_mpi_venc_get_md:获取编码器md检测信息。

  • ss_mpi_venc_set_md:设置编码器md检测区域控制信息。

  • ss_mpi_venc_get_deblur:获取背景去模糊算法相关参数。

  • ss_mpi_venc_set_deblur:设置背景去模糊算法相关参数。

  • ss_mpi_venc_get_param_set_id:获取H.264/H.265参数集ID。

  • ss_mpi_venc_set_param_set_id:设置H.264/H.265参数集ID。

  • ss_mpi_venc_get_h264_poc:获取H.264协议编码通道的POC类型。

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

  • ss_mpi_venc_get_jpeg_dering_level:获取JPEG编码通道的强边去Ring效应强度等级。

  • ss_mpi_venc_set_jpeg_dering_level:设置JPEG编码通道的强边去Ring效应强度等级。

  • ss_mpi_venc_enable_jpeg_dblk:是否使能JPEG编码通道的Block效应。

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

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

  • ss_mpi_venc_get_jpeg_roi_adv_attr:获取JPEG和MJPEG编码通道的ROI高级属性。

  • ss_mpi_venc_set_jpeg_roi_adv_attr:设置JPEG和MJPEG编码通道的ROI高级属性。

ss_mpi_venc_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

JPEG/MJPEG

WIDTH

HEIGHT

MIN_ALIGN

WIDTH

HEIGHT

MIN_ALIGN

MAX

MIN

MAX

MIN

MAX

MIN

MAX

MIN

SS528V100

SS625V100

SS524V100

SS522V101

SS626V100

4096

114

4096

114

2

16384

32

16384

32

2

SS928V100

8192

114

8192

114

2

16384

32

16384

32

2

  • 部分解决方案支持多编码器并行编码,H.265e编码支持垂直划分Tile,根据通道宽高和码率控制器输出帧率决定tile划分数目;H.264e编码支持水平划分Tile(实际是划分slice),根据通道宽高和帧率决定Tile划分数目。SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100不支持。

  • 编码器属性必须设置编码码流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

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

Frame/Slice

Main profile

Main 10 profile

  • H265 mini_buf_mode=0时,Buffer≥ MaxPicwidth * MaxPicheight *(3/4)*(5/4);
  • H265 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)

  • 为了保证本芯片自编自解的解码性能也能达到最优,当只划分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,编码帧存由YHeaderSize、CHeaderSize、YSize、CSize、PmeSize、 PmeInfoSize和TmvSize共同构成,编码器默认根据最大宽高计算帧存进行内存分配,在设置通道宽高时需保证根据通道宽高计算的每一部分帧存大小都不能大于最大宽高计算的帧存大小。

  • JPEG/MJPEG,通道宽高的设置要满足:

    PicWidth*PicHeight<= MaxPicWidth* MaxPicHeight

  • 码率控制器属性首先需要配置RC模式,JPEG抓拍通道不需要配置码率控制器属性,其他协议类型通道(H.264/H.265/MJPEG)都必须配置。码率控制器属性RC模式必须与编码器属性协议类型匹配。

  • 对H.264/H.265编码协议,码率控制均支持七种模式:CBR、VBR、AVBR、QVBR、CVBR、QPMAP和FIXQP。并且对于不同协议,相同RC模式的属性变量基本一致。

  • MJPEG的码率控制支持三种模式:CBR、VBR和FIXQP。

  • src_frame_rate应该设置为产生TimeRef的实际帧率,RC需要根据src_frame_rate统计实际的帧率以及进行码率控制。详情请参看ot_venc_h264_cbr注意事项。

  • CBR除了上述的属性之外,还需要设置平均比特率。平均比特率的单位是kbps。平均比特率的设置与编码通道宽高以及图像帧率都有关系。

  • 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.264e编码通道profile为Baseline时,协议不支持编码B帧。

  • H.265e编码通道QPMAP除了上述属性之外,还需要设置qpmap_mode,表示 CU的QP值的选择方式。

  • H.264/H.265 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.

【举例】

无。

【相关主题】

无。

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。

【举例】

无。

【相关主题】

无。

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(请参考“区域管理”章节)接口之前先调用该接口。

【举例】

无。

【相关主题】

无。

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并不会被清除。

【举例】

无。

【相关主题】

无。

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所示(不支持OT_VENC_GOP_MODE_LOW_DELAY_B,下表中不涉及该模式):

表 1 最大延时生效时间

改变前的gop_mode

改变后的gop_mode

最大延时(以编码帧的个数为单位)

OT_VENC_GOP_MODE_LOW_DELAY_B

非OT_VENC_GOP_MODE_LOW_DELAY_B

1+b_frame_num

非OT_VENC_GOP_MODE_LOW_DELAY_B

任意不同于改变前的gop_mode

1

  • 修改gop_mode时,通道的非ROI区域帧率、去除呼吸效应、P帧刷Islice以及编码通道瞬时码率超过阈值时丢帧策略的属性、跳帧参考的属性(H.264/H.265)、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 大小是否满足需求,如果大小不足,则接口返回失败。

【举例】

无。

【相关主题】

无。

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时,则为超时,即如果缓冲无数据,则会等待用户设定的超时时间,若在设定的时间内有数据则返回获取成功,否则返回超时失败OT_ERR_VENC_BUSY。

  • 支持按包或按帧方式获取码流。如果按包获取,则:

    • 对于H.264编码协议,每次获取的是一个NAL单元。

    • 对于JPEG编码协议,每次获取的是一个参数包或数据包。

    • 对于H.265编码协议,每次获取的是一个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,码流特征信息的输出用于支持用户的上层应用。

    • 码流高级特征信息,数据类型为联合体,包含了不同编码协议对应的码流高级特征信息h264_adv_info/h265_adv_info,码流高级特征信息的输出用于支持用户的上层应用。

  • 如果用户长时间不获取码流,码流缓冲区就会满。一个编码通道如果发生码流缓冲区满,就会不再启动编码,直到用户获取码流,从而有足够的码流缓冲可以用于编码时,才开始继续编码。

  • 建议用户获取码流接口调用与释放码流的接口调用成对出现,且尽快释放码流,防止出现由于用户态获取码流,释放不及时而导致的码流buffer满,停止编码。

  • 建议用户使用select方式获取码流,且按照如下的流程:

  1. 调用ss_mpi_venc_query_status函数查询编码通道状态;

  2. 确保cur_packs和left_stream_frames同时大于0;

  3. 调用malloc分配cur_packs个包信息结构体;

  4. 调用ss_mpi_venc_get_stream获取编码码流;

  5. 调用ss_mpi_venc_release_stream释放码流缓存。

  • 当one_stream_buf为1时,用户获取一帧码流时只会得到一个码流包(不包含用户数据)的地址,即pack_cnt为1,地址为pack[0]. addr。而在ot_venc_pack结构体中增加offset,用来指出一帧码流中有效数据的地址和pack[0].addr的偏移。如图1-20所示(以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设置h.265e.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, 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取值范围:(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和MJPEG/JPEG编码协议。

  • H.264/H.265协议通道最多同时分配4块内存空间用于缓存用户数据,并通过调用接口ss_mpi_venc_set_mod_param设置每段用户数据允许的最大字节数max_user_data_len。如果用户插入的数据多于4块,或插入的一段用户数据大于max_user_data_len时,此接口会返回错误。每段用户数据以SEI包的形式被插入到最新的图像码流包之前。在某段用户数据包被编码发送之后,H.264/H.265通道内缓存这段用户数据的内存空间被清零,用于存放新的用户数据。

  • 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编码通道支持接收Semi-plannar YVU 4:2:0/ Semi-planar YUV 4:2:0或PIXEL_FORMAT_YUV_400图像,JPEG/MJPEG编码通道支持接收Semi-plannar YVU 4:2:0/ Semi-planar YUV 4:2:0、Semi-plannar YVU 4:2:2/ Semi-planar YUV 4:2:2或PIXEL_FORMAT_YUV_400图像。

  • 视频输入的原始图像大小必须不小于编码通道的大小。

  • 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_send_frame_ex

【描述】

支持用户对于H.264和H.265编码通路发送原始图像及该图的QpMap表信息进行编码;支持用户对于JPEG和MJPEG通路发送原始图像及该图的ROIMap表信息进行编码。

【语法】

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编码通道支持接收Semi-plannar 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)图像。

  • 视频输入的原始图像大小必须不小于编码通道的大小。

  • 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像,若码控模式为CBR/VBR/AVBR/QVBR/CVBR时,用户需调用ss_mpi_venc_set_rc_param接口使能QpMap功能,且只支持相对模式。

  • Gop Mode模式为OT_VENC_GOP_MODE_ADV_SMART_P时不支持qpmap模式,调用此接口会返回不支持。

  • Rc为fixqp模式下不支持该接口。

  • 指定当前帧编码类型时,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。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_omx_send_frame

【描述】

支持用户对于H.264、H.265编码通路发送外部码率控制信息进行编码;

【语法】

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编码通道支持接收Semi-plannar YVU 4:2:0/ Semi-planar YUV 4:2:0/PIXEL_FORMAT_YUV_400图像。

  • 视频输入的原始图像大小必须不小于编码通道的大小。

  • 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像。

  • Rc为FIXQP模式下不支持该接口。

  • 指定当前帧类型为p_skip时,仅在GOP类型为OT_VENC_GOP_MODE_NORMAL_P时支持。

  • 开启P帧帧内刷新时,不支持指定当前帧类型为p_skip。

  • 此接口仅支持H.264/H.265通道,只提供外部控制码率的功能,不保证图像效果。

  • SS528V100/SS625V100/SS524V100/SS522V101/SS626V100不支持此接口, 仅SS928V100支持。

【举例】

无。

【相关主题】

无。

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

【注意】

  • SS528V100/SS625V100/SS522V101/SS524V100/SS626V100暂不支持该接口。

  • 此接口必须在使能复合编码后使用,支持用户一次发送两张图像及对应的马赛克区域信息至编码通道。

  • 如果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_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。

  • 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像。

【举例】

无。

【相关主题】

无。

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

【注意】

  • SS528V100/SS625V100/SS522V101/SS524V100/SS626V100暂不支持该接口。

  • 本接口需要在创建通道之前调用。

  • 使能复合编码后,编码不支持绑定接收图像,只能通过接口ss_mpi_venc_send_multi_frame送图像到编码器。

  • 复合编码使能后仅支持创建H.265编码通道;仅支持normal_p和smart_p两种GOP结构。

  • 复合编码使能后,RC模式支持CBR、VBR、AVBR、CVBR、QVBR、FixQP,不支持QpMap模式,也不支持在CBR等模式中使用相对QpMap。

  • 使能复合编码后,客户可以设置质量级别。质量级别为0时编码通道需要增加一个重构帧VB,总VB个数的计算方法是:TotalVB = RefNum + 2;质量级别为1时编码通道需要的参考帧需要增加一倍,总VB个数的计算方法是:TotalVB = RefNum * 2 + 2。参考帧数目RefNum取决于GOP结构和跳帧参考参数。

  • 马赛克功能不支持单独开启,在使能复合编码才可以添加马赛克。

  • 复合编码使能后除码流长度外,其他码流上报信息都只统计基础层图像的数据。

  • 复合编码使能后,不支持开启svc智能编码。

  • 复合编码使能后,不能使用p_skip编码,受影响的有:

    • RC码率过冲插入p_skip帧;

    • ROI背景低帧率;

    • H.265编码skip倾向性。

【举例】

无。

【相关主题】

无。

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

【注意】

SS528V100/SS625V100/SS522V101/SS524V100/SS626V100暂不支持该接口。

【举例】

无。

【相关主题】

无。

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编码协议。

  • 由于此接口不受帧率控制影响,每调用一次即编出一个VI,调用频繁会影响码流帧率和码率的稳定,使用时需要注意。此外,下一帧编码启动前多次接口调用只会编出一个VI。

  • 请求VI帧只用于GOP模式为smart_p。

  • 当请求虚拟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编码协议。

  • 由于此接口不受帧率控制影响,每调用一次即编出一个IDR,调用频繁会影响码流帧率和码率的稳定,使用时需要注意。此外,下一帧编码启动前多次接口调用只会编出一个IDR。

  • 当GOP模式为smart_p或B帧模式下,请求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,只支持使能IDR帧。

  • 某些参数设置后需要IDR帧才生效,此时需要用户申请IDR帧。

  • 本接口只支持H.264/H.265编码协议。

【举例】

无。

【相关主题】

无。

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_close_fd

【描述】

关闭编码通道对应的设备文件句柄。

【语法】

td_s32 ss_mpi_venc_close_fd(ot_venc_chn chn);

【参数】

参数名称

描述

输入/输出

chn

视频编码通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

关闭成功。

-1

关闭失败。

【错误码】

无。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

  • 此接口不能与其它MPI接口同时调用,用户必须保证此接口与其它接口在时间上是串行调用的。

  • 本接口用于关闭VENC通道文件句柄,建议在VENC通道销毁情况下使用。

  • 使用select方式监听码流时,不能关闭对应通道fd,否则会影响码流监听。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_roi_attr

【描述】

设置H.264/H.265通道的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协议编码通道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通道的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协议编码通道ROI区域索引。

输入

roi_attr

对应ROI区域的配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.264/H.265协议编码通道的idx的ROI配置。

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

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

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_roi_attr_ex

【描述】

设置H.264/H.265通道的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协议编码通道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通道的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协议编码通道ROI区域索引。

输入

roi_attr_ex

对应ROI区域的配置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.264/H.265协议编码通道的idx的ROI配置。

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

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

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_roi_bg_frame_rate

【描述】

设置H.264/H.265通道的非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协议编码通道非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协议通道非ROI区域的帧率低于ROI区域时,本模块内部会关闭SAO滤波,故建议客户调用ss_mpi_venc_set_h265_sao关闭SAO功能。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_roi_bg_frame_rate

【描述】

获取H.264/H.265通道的非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配置,然后再进行设置。

  • SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100不支持量化表。

【举例】

无。

【相关主题】

无。

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,最大值不超过{(picwidth+15)>>4 * (picheight+15)>>4 * 2, 65535}的较小值。当mcu_per_ecs配置较小时,容易引起CPU占用时间较长等现象,客户需要根据实际使用需求合理配置。

    • ecs_output_en:仅SS928V100/SS626V100支持,不支持的默认值为TD_FALSE。

  • 如果用户想使用自己的量化表,在设置量化表的同时,请将qfactor设置为50。

  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个帧编码时生效。

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

  • 建议用户在调用此接口之前,先调用ss_mpi_venc_get_jpeg_param接口,获取当前编码通道的jpeg_param配置,然后再进行设置。

【举例】

无。

【相关主题】

无。

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

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

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

【举例】

无。

【相关主题】

无。

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,最大值不超过{(picwidth+15)>>4 * (picheight+15)>>4 * 2,65535}的较小值。当mcu_per_ecs配置较小时,容易引起CPU占用时间较长等现象,客户需要根据实际使用需求合理配置。

    • ecs_output_en:仅SS928V100/SS626V100支持,不支持的默认值为TD_FALSE。

  • 如果用户想使用自己的量化表,在设置量化表的同时,请将qfactor设置为50。

  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个帧编码时生效。

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

  • 建议用户在调用此接口之前,先调用ss_mpi_venc_get_mjpeg_param接口,获取当前编码通道的mjpeg_param配置,然后再进行设置。

【举例】

无。

【相关主题】

无。

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

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

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

【举例】

无。

【相关主题】

无。

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/Mjpeg的CBR/VBR码率控制模式和H.264/H.265的AVBR/QVBR/CVBR码率控制模式下行级和宏块级码控的参数的设置。

  • 码率控制器的高级参数由以下参数组成:

    • 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协议,宏块级码率控制既有加方向(最大加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默认值为:

      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。

    • first_frame_start_qp:第一帧的起始Qp值,CBR/VBR/AVBR/QVBR/CVBR有效。first_frame_start_qp 如果为-1则第一帧的起始QP由编码器内部计算,如果为其它合法值则由用户指定该合法值为第一帧起始QP。该值默认为-1。此处第一帧的含义是:通道创建,Gop模式切换,RC模式切换,或分辨率切换后,序列的第一个IDR帧。需要注意如果第一帧编码完成后判定为重编,重编的帧不是第一帧,不受first_frame_start_qp 的约束。

    • 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内部有默认值,在对质量无特殊需求下,建议不更改此组参数。

    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为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为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为51。min_qp和max_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为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为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在对质量无特殊需求下,建议不更改此组参数。

    • 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。在对质量无特殊需求下,建议不更改此组参数。

    • 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,否则会导致通道频繁丢帧。SS528V100、SS625V100、SS524V100、SS522V101、SS626V100不支持低延时,仅SS928V100支持非卷绕低延时。

【举例】

无。

【相关主题】

无。

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/MJPEG编码通道码率控制的高级参数。各参数的含义请具体请参见ot_venc_rc_param。

  • 如果rc_param为空,则返回失败。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_ref_param

【描述】

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

【语法】

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

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

  • 创建H.264/H.265协议编码通道时,默认跳帧参考模式是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。

  • 当编码帧存分配使用UserVB方式且打开帧节省模式时,由于高级跳帧参考参数变化,导致参考帧个数增加,内部会判断已绑定的VB池存储Picture的VB个数是否满足需求,如果不够,则接口会返回失败。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_ref_param

【描述】

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

【语法】

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

输出

【返回值】

返回值

描述

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 模式。

  • SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100解决方案上,对应绑定的VPSS 通道支持压缩和非压缩格式输出。

【举例】

无。

【相关主题】

无。

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类型的编码通道有效。

  • 本接口必须在通道创建之后,通道销毁之前调用。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_slice_split

【描述】

设置通道的slice分割属性,仅支持H.264/H.265通道。

【语法】

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码流slice分割参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

头文件:ot_common_venc.h、ss_mpi_venc.h

库文件:libss_mpi.a

【注意】

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

  • 本接口用于设置H.264/H.265协议编码通道码流的分割方式。

  • Slice分割属性主要由以下参数决定

    • enable:当前帧是否进行slice分割。

    • split_mode:slice分割模式,split_mode = 0表示按照byte数来进行分割,split_mode = 1表示按照宏块行或者LCU行进行分割。split_mode >=2不被支持。

    split_mode必须在enable为真的条件下有效,否则,无效。

    • slice_size:slice的大小,当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占图像宏块行数或LCU行数,slice_size的单位为宏块行或者LCU行数。且当编码至图像的最后几行,不足slice_size时,剩余的宏块行或者LCU行被划分为一个slice。

    • slice_output_en:仅SS928V100/SS626V100/SS524V100/SS528V100支持,不支持的默认值为TD_FALSE,当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通道。

【举例】

【相关主题】

无。

ss_mpi_venc_get_slice_split

【描述】

获取H.264/H.265通道的slice分割属性。

【语法】

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码流slice分割参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.264/H.265通道的slice分割属性。本接口必须在通道创建之后,通道销毁之前调用。

  • 此接口仅支持H.264/H.265通道。

【举例】

【相关主题】

无。

ss_mpi_venc_set_search_window

【描述】

设置通道的搜索窗范围,仅支持H.264/H.265通道。

【语法】

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

  • 搜索窗主要由三个参数决定:

    • mode:自动模式:使用SDK内部默认值;手动模式:当用户设置的搜索窗小于内部默认值时使用用户设置的值,当用户设置的搜索窗大小等于内部默认值时使用内部默认值。

    • hor:用户设置的搜索窗水平范围,当mode为手动模式时有效,最小值为32,不检查上限。

    • ver:用户设置的搜索窗垂直范围,当mode为手动模式时有效,最小值为32,不检查上限。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_search_window

【描述】

获取通道的搜索窗范围,仅支持H.264/H.265通道。

【语法】

td_s32 ss_mpi_venc_get_search_window(ot_venc_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协议编码通道的搜索窗范围。

【举例】

无。

【相关主题】

无。

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接口,获取当前通道的变换量化的配置,然后再进行设置。

  • SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100仅支持无量化表。

【举例】

无。

【相关主题】

无。

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协议通道编码p_skip帧时,本模块内部会关闭SAO滤波,故建议客户调用ss_mpi_venc_set_h265_sao关闭SAO功能。

  • 如果frame_gap等于0时,表示瞬时码率超出阈值允许一直丢帧,直到瞬时码率不大于阈值。

  • 使能跳帧参考或者svc-t编码,base层帧不能编码为p_skip帧。

  • 本接口仅支持H.264/H.265/Mjpeg 的CBR/VBR码率控制模式、H.264/H.265 的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/Mjpeg 的CBR/VBR码率控制模式、H.264/H.265 的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。

  • 本接口在编码通道创建之后,编码通道销毁之前设置。

  • 本接口仅支持H.264/H.265/Mjpeg 的CBR/VBR码率控制模式、H.264/H.265的AVBR/QVBR/CVBR码率控制模式的参数的设置。

  • VPSS-VENC处于卷绕低延时模式时,不支持超大帧重编,强制配置会导致通道频繁丢帧。SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100不支持卷绕低延时。

【举例】

无。

【相关主题】

无。

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/MJPEG的CBR/VBR码率控制模式和H.264/H.265的AVBR/QVBR/CVBR码率控制模式。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_intra_refresh

【描述】

获取P帧刷Islice的设置参数。

【语法】

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帧刷I slice的参数。

【语法】

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编码通道。

  • 改变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))

SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100的lcu_size为32;

列:

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

H.265

行: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帧刷I slice,不支持QPMap模式使能skip,内部会自适应关闭skip。

  • 如果开启去呼吸效应功能,需关闭去呼吸效应功能,再使能P帧刷I slice,否则返回不允许。

  • 使能P帧刷I slice时,需等下一个GOP的IDR帧才能生效。

  • 关闭P帧刷I slice参数时会立即生效。

  • 动态修改P帧刷I slice参数时,需要等下一个GOP才能生效。

【举例】

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_jpge.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_jpge.ko模块参数。

  • 调用本接口模块参数时,需要先配置ot_venc_mod_param->mod_type,否则获取不到对应模块参数。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_sse_rgn

【描述】

设置H.264/H.265通道的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 协议编码通道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的SSE区域的起始点坐标必须在图像范围内,且必须LCU对齐;SSE区域的长宽必须是LCU对齐,且区域必须在图像范围内。

  • 本接口属于高级接口,系统默认八个SSE区域使能,不调用此接口时,默认均为第一个宏块区域。用户可以调用此接口改变SSE区域,从而在水印信息中得到每个区域的SSE总和。

  • 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等待下一帧时发生。

  • 建议用户在调用此接口之前,先调用ss_mpi_venc_get_sse_rgn接口,获取当前通道的SSE配置,然后再进行设置。

  • 仅SS928V100的H.264编码通道支持该接口,H.265全支持。

【举例】

【相关主题】

无。

ss_mpi_venc_get_sse_rgn

【描述】

获取H.264/H.265 通道的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协议编码通道SSE 区域索引。

输入

sse_cfg

对应SSE参数设置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取H.264/H.265协议编码通道的index的SSE 配置。

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

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

  • 仅SS928V100的H.264编码通道支持该接口,H.265全支持。

【举例】

无。

【相关主题】

无。

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:当通道使用超时或阻塞获取码流,编码指定的帧之后唤醒阻塞接口。

      默认一帧唤醒一次。在编码过程中被设置时,等待下一帧时生效。阻塞获取码流时,建议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低延时模式时,不支持增帧模式,强制配置会导致通道频繁丢帧。SS528V100、SS625V100、SS524V100、SS522V101不支持VPSS-VENC低延时。

      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协议,宏块级码率控制既有加方向(最大加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_0。

  • 仅H.265/H.264编码通道支持。

  • 设置场景模式为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编码通道支持。

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

【举例】

无。

【相关主题】

无。

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

指向ot_venc_chn_pool结构体的指针,该结构体包含存储Picture的VB池PoolId(`pic_vb_pool`)和存储Picture信息的VB池PoolId(`pic_info_vb_pool`)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h、ot_comm_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编码支持UserVB池方式,如果当前编码帧存分配方式使用的不是编码UserVB池,则返回通道不支持的错误码。

  • 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 不足。

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_comm_vb.h

  • 库文件:libss_mpi.a

【注意】

  • 必须保证通道已创建,否则会返回通道未创建的错误码。

  • 如果当前编码帧存分配方式使用的不是编码UserVB池,则返回通道不支持的错误码。

  • 调用该接口后,不保证内部已完成VB池占用的释放,如果要进行销毁VB池建议首先调用接口ss_mpi_venc_reset_chn。

  • VB池如绑定了开启帧节省模式的编码通道,则销毁VB池前,必须调用ss_mpi_venc_detach_vb_pool接口解绑定,或销毁对应绑定的编码通道,VB池的占用才会释放。

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_comm_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_clost/intra8_cost/intra4_cost/inter64_cost/inter32_cost/inter16_cost/inter8_cost分别设置各自模式的倾向性大小。默认每个cost值为8,即不做倾向性配置,每个模式的cost设置越大意味着选择该模式的倾向性越小。

  • 仅H.265/H.264编码通道支持。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_comm_vb.h

  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取CU模式选择的倾向性的配置。

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

  • 仅H.265/H.264编码通道支持。

【举例】

无。

【相关主题】

无。

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_comm_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值为10。

  • 仅H.265/H.264编码通道支持。

【举例】

无。

【相关主题】

无。

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_comm_vb.h

  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取cu/mb选择Skip模式的倾向性。

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

  • 仅H.265/H.264编码通道支持。

【举例】

无。

【相关主题】

无。

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_comm_vb.h

  • 库文件:libss_mpi.a

【注意】

  • 仅H.264/H.265支持去呼吸效应功能。

  • 必须保证通道已创建,否则会返回通道未创建的错误码。

  • 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。

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

  • 当GOP等于1时,不允许使能去除呼吸效应功能。

  • 如果开启P帧刷I slice,需关闭P帧刷I slice功能,再使能去除呼吸效应,否则返回不允许。

  • 建议用户在调用此接口之前,先调用ss_mpi_venc_get_debreath_effect接口,获取去除呼吸效应参数,然后再进行设置。

  • 使能该接口编码器会对图像做处理,有一定的性能损失,建议用户按需开启,默认为关闭。

  • VPSS-VENC处于卷绕低延时或单帧低延时模式时,不支持去呼吸效应功能。如果用户同时开启了低延时和去呼吸效应功能,去呼吸效应功能无效。SS528V100/SS625V100/SS524V100/SS522V101/SS626V100不支持低延时,SS928V100支持非卷绕低延时。

  • 支持同时开启帧节省模式和去呼吸效应。

  • 该功能主要由如下三个参数决定。

    • enable:去除呼吸效应使能控制。

    • strength0为设置去除呼吸效应强度调节参数0,默认值为6。strength0值越大,呼吸效应改善会越弱,值越小,呼吸效应改善越明显,但是在编码压力很大且码率很低时,会导致图像更加模糊。

    • strength1为设置去除呼吸效应强度调节参数1,默认值为16。其值越大,I帧会越大,其值越小,I帧会越小。如果I帧变大对客户应用有影响,客户可以尝试把strength1调小一点,会降低I帧码流的大小, 但是可能会减弱呼吸效应的改善程度。

  • 原则上,对不同的场景,呼吸效应的改善要做到最佳,需要调节不同的参数。但是考虑到多场景的适应性,建议客户使用默认值。

【举例】

无。

【相关主题】

无。

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_comm_vb.h

  • 库文件:libss_mpi.a

【注意】

  • 仅H.264/H.265支持去除呼吸效应功能。

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

【举例】

无。

【相关主题】

无。

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_comm_vb.h

  • 库文件:libss_mpi.a

【注意】

  • 必须保证通道已创建,否则会返回通道未创建的错误码。

  • 本接口在编码通道创建之后,编码通道销毁之前设置。

  • 本接口在编码过程中被调用时,等到下一个I帧时生效。

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

  • 建议用户在调用此接口之前,先调用ss_mpi_venc_get_hierarchical_qp接口,然后再进行设置。

  • 仅在GOP类型为NORMAL_P、SMART_P、ADV_SMART_P时支持该接口。

  • 仅H.265/H.264编码通道支持。

  • 建议在高帧率运动场景时使用该功能,即SceneMode设置为OT_VENC_SCENE_1。

  • 建议在GOP模式为OT_VENC_GOP_MODE_NORMAL_P和OT_VENC_GOP_MODE_SMART_P和OT_VENC_GOP_MODE_ADV_SMART_P时使用该功能。

  • 该功能主要由如下参数决定。

    • 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_pp分层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_comm_vb.h

  • 库文件:libss_mpi.a

【注意】

  • 仅H.264/H.265用于获取分层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(默认值):是否清除码率控制的统计信息。

  • 当设置的参数改变统计信息内存大小时,需要重新分配内存或者算法可能读取到未被赋值的内存,此时无论clear_stats_after_set_attr设置什么参数都会清除统计信息。

  • 此接口仅支持H.264/H.265/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/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配置,然后再进行设置。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_jpeg_roi_attr

【描述】

获取JPEG和MJPEG编码通道的ROI属性,本接口仅适用于支持ROI功能的编码通道(如H.264/H.265)。

【语法】

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属性。

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

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

【举例】

无。

【相关主题】

无。

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_comm_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

  • 本接口用于开启/关闭H.264/H.265编码通道智能编码功能。

  • 支持码控模式为CBR、VBR、AVBR、QVBR、CVBR下的智能编码。

    • 在CBR模式下,设置相同的目标码率时,开启智能编码可以增强前景图像质量;

    • 在VBR、QVBR、CVBR模式下,开启智能编码时,可以在保证前景质量的同时降低码率;或者在不改变背景质量的情况下,提升前景的质量。

    • AVBR模式下,开启后对码率的影响视场景变化。

  • 智能编码与QpMap模式、FixQp模式、ROI、PSkip功能、MD相关接口互斥。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_get_svc_param

【描述】

获取智能编码相关参数。

【语法】

td_s32 ss_mpi_venc_get_svc_param(ot_venc_chn chn,ot_venc_svc_param *svc_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

svc_param

智能编码参数

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_comm_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

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

  • 调用本接口前需调用ss_mpi_venc_enable_svc接口开启智能编码功能。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_svc_param

【描述】

设置智能编码相关参数。

【语法】

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_comm_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

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

  • 调用本接口前需调用ss_mpi_venc_enable_svc接口开启智能编码功能。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_send_svc_region

【描述】

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

【语法】

td_s32 ss_mpi_venc_send_svc_region(ot_venc_chn chn, ot_venc_svc_rect_info *svc_region);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

svc_region

检测目标框属性信息。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_comm_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

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

  • 调用本接口前需调用ss_mpi_venc_enable_svc接口开启智能编码功能。

【举例】

无。

【相关主题】

无。

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_comm_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

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

【举例】

无。

【相关主题】

无。

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_comm_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

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

  • 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,  const ot_venc_deblur_param *deblur_param);

【参数】

参数名称

描述

输入/输出

chn

编码通道号。

输入

deblur_param

背景去模糊控制信息。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_comm_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

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

【举例】

无。

【相关主题】

无。

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_comm_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

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

  • 典型应用场景说明:适用于_录像机_固定的_视频采集_场景。

  • 与skip_bias、skipweight功能冲突,这两种功能生效时,去背景模糊算法失效。SVC与MD算法都有设置skipweight参数,当SVC和MD分别作用时,去背景模糊算法失效。

  • 不支持SmartP Gop类型。

【举例】

无。

【相关主题】

无。

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_comm_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_comm_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_comm_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_comm_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_level

【描述】

获取JPEG编码通道的强边去Ring效应强度等级。

【语法】

td_s32 ss_mpi_venc_get_jpeg_dering_level(ot_venc_chn chn, ot_venc_jpeg_dering_level*dering_level);

【参数】

参数名称

描述

输入/输出

chn

通道号

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

dering_level

去Ring效应强度等级。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

  • 本接口用于获取JPEG编码通道的强边去Ring效应强度等级。

  • 本接口只对JPEG类型的编码通道有效且只在dering_mode为1的情况下才能够调用。

  • 本接口必须在通道创建之后,通道销毁之前调用。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_set_jpeg_dering_level

【描述】

设置JPEG编码通道的强边去Ring效应强度等级。

【语法】

td_s32 ss_mpi_venc_set_jpeg_dering_level(ot_venc_chn chn, const ot_venc_jpeg_dering_level dering_level);

【参数】

参数名称

描述

输入/输出

chn

通道号。

取值范围:[0, OT_VENC_MAX_CHN_NUM)。

输入

dering_level

去Ring效应强度等级。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,返回错误码。

【需求】

  • 头文件:ot_common_venc.h、ss_mpi_venc.h

  • 库文件:libss_mpi.a

【注意】

  • 本接口用于设置JPEG编码通道的强边去Ring效应强度等级。

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

  • 本接口只对JPEG类型的编码通道有效且只在dering_mode为1的情况下才能够调用。

  • 强边去RING效应强度等级有四种:

    • OT_VENC_JPEG_DERING_LEVEL_0等级:默认dering_level值,当打开或者关闭全局去dering功能时需要设置。

    • OT_VENC_JPEG_DERING_LEVEL_1等级:较低的去Ring能力,较高的清晰度。

    • OT_VENC_JPEG_DERING_LEVEL_2等级:中等的去Ring能力,中等的清晰度。

    • OT_VENC_JPEG_DERING_LEVEL_3等级:较强的去Ring能力,较低的清晰度。

  • 创建JPEG通道之后,JPEG通道默认处于dering_mode=1的情况。当用户需要设置JPEG编码通道的强边去Ring效应强度等级,可以调用本接口,设置JPEG通道为不同的强度等级,从而得到需要的效果。

  • 仅SS928V100/SS626V100支持。

【举例】

无。

【相关主题】

无。

ss_mpi_venc_enable_jpeg_dblk

【描述】

是否使能JPEG编码通道的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编码通道的去Block效应。

  • 本接口用于在较低qfactor <50的情况下,可以改善块效应。

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

【举例】

无。

【相关主题】

无。

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编码通道。

  • 本接口用于获取运动物体较近较远区域拖尾和残留区域检测参数。

【举例】

无。

【相关主题】

无。

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编码通道。

  • 本接口需要在deblur使能后才生效。

  • 本接口用于设置运动物体较近、较远区域拖尾和残留区域检测参数。

  • 典型应用场景说明:适用于录像机固定的视频采集场景。

  • 与skip_bias、skip_weight功能冲突,这两种功能生效时,去背景模糊算法失效。SVC与MD算法都有设置skip_weight参数,当SVC和MD分别作用时,去背景模糊算法失效。

  • 不支持smartp Gop类型。

  • 去背景模糊算法副作用:该算法是用于改善运动后背景模糊的算法,本质是针对待定区域进行qp的调节,在定码率较低的情况下,会影响码率的分配,导致I帧的QP升高,从而影响了背景的图像质量,背景清晰度和运动过后的清晰度两者需要衡量,若重点关注背景清晰度,建议该接口关闭。

  • 与ot_venc_deblur_param中自适应deblur功能互斥,只有关闭了自适应开关,才能调用该接口设置advanced deblur参数。

【举例】

无。

【相关主题】

无。

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高级属性。

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

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

【举例】

无。

【相关主题】

无。

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依次提高,等级越高降码率相对越多,图像质量损失也相对越多。

    • rect:指定当前的ROI的起始坐标和区域的大小。ROI的起始点坐标必须在图像范围内,且必须16对齐;ROI区域的长宽必须是16对齐并且大于0;ROI区域必须在图像范围内。

    • 仅支持4种不同的level,即最多3种不同的fg_level和1种不同的bg_level。

  • 本接口属于高级接口,默认不使能ROI,用户必须调用此接口使能ROI。

  • 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。

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

【举例】

无。

【相关主题】

无。