视频解码¶
概述¶
VDEC模块提供驱动视频解码硬件工作的MPI接口,实现视频解码功能。
不同解决方案的VDEC特性如表1所示。
表 1 不同解决方案的VDEC特性
解决方案 |
硬件解码模块 |
支持最大通道数 |
支持协议 |
最大、最小分辨率支持 |
|---|---|---|---|---|
SS528V100/SS625V100 |
VDH JPEGD |
128 |
VDH: H.264/H.265 JPEGD: JPEG/MJPEG |
VDH:
JPEGD: JPEG/MJPEG: max 16384x16384, min 8x8 |
SS524V100/SS522V101 |
VDH JPEGD |
128 |
VDH: H.264/H.265 JPEGD: JPEG/MJPEG |
VDH:
JPEGD: JPEG/MJPEG: max 16384x16384, min 8x8 |
SS928V100 |
VDH JPEGD |
128 |
VDH: H.264/H.265/MPEG4 JPEGD: JPEG/MJPEG |
VDH:
JPEGD: JPEG/MJPEG: max 16384x16384, min 8x8 |
SS626V100 |
VDH JPEGD |
128 |
VDH: H.264/H.265/MPEG4 JPEGD: JPEG/MJPEG |
VDH:
JPEGD: JPEG/MJPEG: max 16384x16384, min 8x8 |
重要概念¶
码流发送方式
VDEC解码器提供三种码流发送方式:
流式发送(OT_VDEC_SEND_MODE_STREAM):用户每次可发送任意长度码流到解码器,由解码器内部完成一帧码流的识别过程。须注意,对H.264/H.265/MPEG4而言,在收到下一帧码流才能识别当前帧码流的结束,所以在该发送模式下,输入一帧H.264/H.265/MPEG4码流,不能希望马上开始解码图像。
按帧发送(OT_VDEC_SEND_MODE_FRAME):用户每次发送完整一帧码流到解码器,每调用一次发送接口,解码器就认为该帧码流已经结束,开始解码图像,因此需保证每次调用发送接口发送的码流必须为一帧,否则会出现解码错误。通过该发送方式可以达到快速解码的目的。
按兼容模式发送(OT_VDEC_SEND_MODE_COMPAT):支持一帧码流分多次发送给解码器,但是每帧码流结束时必须配置帧结束标志end_of_frame为TD_TRUE,否则认为当前帧码流还未结束。
码流发送方式mode可在接口ss_mpi_vdec_create_chn中设置。
图像输出方式
根据H.264/H265/MPEG4协议,解码图像可能不会在解码后立即输出。VDEC解码器可以通过设置不同的图像输出方式达到尽快输出的目的。图像输出方式包括以下两种:
解码序:解码图像按照解码的先后顺序输出。
显示序:解码图像按照H.264/H.265/MPEG4协议输出。
根据H.264/H.265/MPEG4协议,视频的解码顺序未必是视频的输出顺序(即显示序)。例如B帧解码时需要前后的P帧作为参考,所以B帧后的P帧先于B帧解码,但B帧先于P帧输出。按解码序输出是保证快速输出的一个必要条件,用户选择按解码序输出,需保证码流的解码序与显示序相同。
按帧发送码流与按解码序输出相结合能达到快速解码和快速输出的目的,用户必须保证每次发送的是完整的一帧码流以及码流的解码序和显示序相同。
图像输出方式out_order可在接口ss_mpi_vdec_set_chn_param中设置。
时间戳(PTS)处理
在模式OT_VDEC_SEND_MODE_FRAME下发送码流时,解码输出的图像时间戳PTS为发送码流接口(ss_mpi_vdec_send_stream)中用户送入的PTS,解码器不会更改此值;如果用户配置的PTS值为0,则表示用户不进行帧率控制,而是由视频输出模块(VO)进行帧率控制;当VDEC为回放模式且VPSS为AUTO模式时,如果用户送入的PTS值为-1,则表示此图像不会被视频输出模块(VO)显示;如果是其他值,则表示视频输出模块(VO)根据用户设置的PTS值进行帧率控制。
注意:不能出现PTS值为0和非0混合的情况。
在模式OT_VDEC_SEND_MODE_STREAM下发送码流时,解码输出图像的PTS统一设为0,表示用户不进行帧率控制,而是由视频输出模块(VO)进行帧率控制。
用户图片
当网络异常断开,前端没有码流送来时,用户可通过设置插入用户图片显示在VO上,以提示当前网络异常或没有码流可解码。VDEC提供两种插入用户图片方式:
立刻插入用户图片:VDEC会先清空解码器内部的码流和图像,然后插入用户图片。
延迟插入用户图片:VDEC会先把解码器内部的码流全部解完,待解码图像全部输出之后再插入用户图片。
解码帧存分配方式
解码ModuleVB池:创建解码通道时不分配图像Buffer,而是由用户调用相应的MPI接口创建专属于解码模块的ModuleVB池,该VB池只允许VDEC获取VB块,其它模块只能使用不能获取。对于SS626V100,不同的解码通道部署模式使用的模块VB池不同:部署模式为OT_VDEC_DEPLOYMENT_MODE0的通道,模块vb使用uid为OT_VB_UID_VDEC的ModuleVB池;部署模式为OT_VDEC_DEPLOYMENT_MODE1的通道,模块vb使用uid为OT_VB_UID_VDEC_ADAPT的ModuleVB池。
解码PrivateVB池:创建解码通道时由VDEC创建私有VB池作为该通道的图像Buffer,用户可以在创建通道接口ss_mpi_vdec_create_chn中设置私有VB池的个数frame_buf_cnt和VB块的大小frame_buf_size。
解码UserVB池:创建解码通道时不分配图像Buffer,而是由用户调用接口ss_mpi_vb_create_pool创建一个视频缓存VB池,再通过调用接口ss_mpi_vdec_attach_vb_pool把某个解码通道绑定到固定的视频缓存VB池中。
三种解码帧存分配方式可通过接口ss_mpi_vdec_set_mod_param的参数vb_src来设置。当解码帧存使用ModuleVB池或者UserVB池方式时,可以不用销毁解码通道直接销毁VB池,但是销毁解码VB池前用户必须保证没有任何模块正在使用这个VB池里的任何一块VB(可通过复位解码通道,以及复位解码直接绑定的后级模块实现,如VDEC绑定VPSS,则就要同时复位VDEC和VPSS;如果用户是从VDEC里获取图像上去,也必须保证全部图像释放回VDEC),否则会出现程序异常的情况。
码流Buffer配置模式
解码码流buffer配置支持两种模式:一般模式和省内存模式。
一般模式:码流Buffer总大小为用户配置的stream_buf_size +通道宽x通道高/2,stream_buf_size可配置的最小值为通道宽x通道高x3/4,此模式下码流Buffer能容纳每一帧码流,包括超大帧。
省内存模式:码流Buffer的总大小为用户创建解码通道时配置的stream_buf_size的大小,stream_buf_size可配置的最小值为32KB,但是用户必须保证送入码流每帧大小不能超过stream_buf_size的大小。流模式发送码流时省内存模式无效。
两种模式可通过接口ss_mpi_vdec_set_mod_param的参数mini_buf_mode来设置。mini_buf_mode=1表示省内存模式;mini_buf_mode=0表示一般模式。
模块参数¶
g_vdec_max_chn_num
VDEC模块支持的最大通道数。用户可根据业务场景需求配置一个合理的最大解码通道数,以减少通道上下文相关的内存占用。取值范围:[1, OT_VDEC_MAX_CHN_NUM]。
使用方法:Linux系统通过加载ssxxx_vdec.ko或ssxxxx_vdec.ko时设置g_vdec_max_chn_num的值。
g_vfmw_max_chn_num
VFMW模块(H264/H265/MPEG4视频解码模块)支持的最大通道数。用户可根据业务场景需求配置一个合理的最大通道数,以减少通道上下文相关的内存占用。取值范围是[1, OT_VDEC_MAX_CHN_NUM]。
使用方法:Linux系统通过加载ssxxx_vfmw.ko或ssxxxx_vfmw.ko时设置g_vfmw_max_chn_num的值。
g_vdec_compat_mode
码流兼容模式,范围[0, 1],默认值为0。设置为1后可以提高参考帧语法错误的兼容性,但是会增加内存消耗。
使用方法:Linux系统通过加载ssxxx_vdec.ko时设置g_vdec_compat_mode的值。
g_vdec_affinity
支持vdec模块timer绑核,取值范围为芯片最大cpu核数,-1时默认不绑核,默认不做绑核操作,SS626V100取值范围[-1, 7]。
使用方法:linux系统通过加载ssxxx_vdec.ko时设置g_vdec_affinity的值。
动态设置方法:
1、echo argv > /sys/module/ot_vdec/parameters/g_vdec_affinity命令将vdec的timer固定绑定某个CPU上,argv参数指定cpu核。
例如:echo 7 > /sys/module/ot_vdec/parameters/g_vdec_affinity绑到CPU7上。argv为-1时默认不绑核,取值范围为芯片最大cpu核数,SS626V100取值范围[0, 7]。
2、cat /sys/module/ot_vdec/parameters/g_vdec_affinity指令查看timer绑定到哪个CPU。
g_vfmw_mdc_affinity
支持ot_vfmw_mdc线程绑核,取值范围为芯片最大cpu核数,-1时默认不绑核,默认不做绑核操作,SS626V100取值范围[-1, 7]。
使用方法:inux系统通过加载ssxxx_vfmw.ko时设置g_vfmw_mdc_affinity的值。
须知:OT_VDEC_MAX_CHN_NUM是各个解决方案默认支持最大通道数,参考表1。
VDEC支持的最大通道数包括H264/H265/MPEG4/JPEG/MJPEG解码通道总数。
VFMW支持的最大通道数只包含H264/H265/MPEG4解码通道总数。
API参考¶
视频解码模块实现创建解码通道、发送视频码流、获取解码后图像等功能。
该功能模块提供以下MPI:
ss_mpi_vdec_set_mod_param:设置解码模块参数。
ss_mpi_vdec_get_mod_param:获取解码模块参数。
ss_mpi_vdec_create_chn:创建视频解码通道。
ss_mpi_vdec_destroy_chn:销毁视频解码通道。
ss_mpi_vdec_reset_chn:复位解码通道。
ss_mpi_vdec_get_chn_attr:获取视频解码通道属性。
ss_mpi_vdec_set_chn_attr:设置视频解码通道属性。
ss_mpi_vdec_start_recv_stream:解码器开始接收用户发送的码流。
ss_mpi_vdec_stop_recv_stream:解码器停止接收用户发送的码流。
ss_mpi_vdec_query_status:查询解码通道状态。
ss_mpi_vdec_send_stream:向视频解码通道发送码流数据。
ss_mpi_vdec_get_frame:获取视频解码通道的解码图像。
ss_mpi_vdec_release_frame:释放视频解码通道的解码图像。
ss_mpi_vdec_set_chn_param:设置解码通道参数。
ss_mpi_vdec_get_chn_param:获取解码通道参数。
ss_mpi_vdec_set_protocol_param:设置协议相关的内存分配通道参数。
ss_mpi_vdec_get_protocol_param:获取协议相关的内存分配通道参数。
ss_mpi_vdec_set_user_data_attr:设置解码通道用户数据属性。
ss_mpi_vdec_get_user_data_attr:获取解码通道用户数据属性。
ss_mpi_vdec_get_user_data:获取视频解码通道的用户数据。
ss_mpi_vdec_release_user_data:释放视频解码通道的用户数据。
ss_mpi_vdec_set_user_pic:设置用户图片属性。
ss_mpi_vdec_enable_user_pic:使能插入用户图片。
ss_mpi_vdec_disable_user_pic:禁止使能插入用户图片。
ss_mpi_vdec_set_display_mode:设置显示模式。
ss_mpi_vdec_get_display_mode:获取显示模式。
ss_mpi_vdec_set_rotation:设置解码图像旋转角度。
ss_mpi_vdec_get_rotation:获取解码图像旋转角度。
ss_mpi_vdec_attach_vb_pool:将解码通道绑定到某个视频缓存VB池中。
ss_mpi_vdec_detach_vb_pool:将解码通道从某个视频缓存VB池中解绑定。
ss_mpi_vdec_get_fd:获取视频解码通道的设备文件句柄。
ss_mpi_vdec_close_fd:关闭视频解码通道的设备文件句柄。
ss_mpi_vdec_set_low_delay_attr:设置解码通道低延时属性。
ss_mpi_vdec_get_low_delay_attr:获取解码通道低延时属性。
ss_mpi_vdec_set_chn_config:设置解码通道配置。
ss_mpi_vdec_get_chn_config:获取解码通道配置。
ss_mpi_vdec_set_deployment_mode1_cfg:设置部署模式为OT_VDEC_DEPLOYMENT_MODE1的解码通道的配置参数。
ss_mpi_vdec_get_deployment_mode1_cfg:获取部署模式为OT_VDEC_DEPLOYMENT_MODE1的解码通道的配置参数。
ss_mpi_vdec_set_mod_param¶
【描述】
设置解码模块参数。
【语法】
td_s32 ss_mpi_vdec_set_mod_param(const ot_vdec_mod_param *mod_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
mod_param |
模块参数结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
此接口必须在所有解码通道创建前调用,否则会返回错误码OT_ERR_VDEC_NOT_PERM。
如果系统已设置为OT_SCHEDULE_QUICK模式,vb模式不支持OT_VB_SRC_PRIVATE,返回错误码OT_ERR_VDEC_NOT_SUPPORT。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_mod_param¶
【描述】
获取解码模块参数。
【语法】
td_s32 ss_mpi_vdec_get_mod_param(ot_vdec_mod_param *mod_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
mod_param |
模块参数结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
无。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_create_chn¶
【描述】
创建视频解码通道。
【语法】
td_s32 ss_mpi_vdec_create_chn(ot_vdec_chn chn, const ot_vdec_chn_attr *attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
attr |
解码通道属性指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
通道号不能超出最大的通道号范围。
如果参数attr为空,会返回错误码[OT_ERR_VDEC_NULL_PTR。
在创建视频解码通道之前必须保证通道未创建(或者已经销毁),否则会直接返回通道已存在错误OT_ERR_VDEC_EXIST。
系统内存不足时会返回OT_ERR_VDEC_NO_MEM的错误码,可考虑扩展MMZ内存或OS内存。
当通道属性attr中的值超过解码能力集时,会返回OT_ERR_VDEC_ILLEGAL_PARAM的错误码。目前解码能力集如表1所示。
使用解码ModuleVB池方式时要在创建解码通道之前要先创建专属于VDEC的模块VB池,使用解码UserVB方式时也要先创建用于解码的视频缓存VB池,且要保证VB块的大小和个数满足当前解码通道所需图像Buffer的大小和个数。H264、H265、MPEG4解码每个解码通道所需VB个数至少为参考帧+显示帧+1,JPEG/MJPEG解码每个解码通道所需VB个数至少为显示帧+1。不同协议解码所需的图像VB块大小不同,具体计算方法可参见ot_buffer.h里面的函数ot_vdec_get_pic_buf_size。
如果需要解码的H.264/MPEG4码流有B帧,或者需要解码的H.265码流支持时域运动矢量预测(sps_temporal_mvp_enabled_flag = 1),则创建通道时需要设置此通道支持时域运动矢量预测(temporal_mvp_en设置为1),还需要为其分配输出每一帧tmv信息的VB块,该VB块的大小比图像VB块小很多,所需个数为ref_frame_num +1,具体大小计算可参见ot_buffer.h里面的函数ot_vdec_get_tmv_buf_size,否则会导致解码出现花屏等错误。
如果H.264/MPEG4解码不需要解码B帧,或者H.265解码不需要解码支持时域运动矢量预测(sps_temporal_mvp_enabled_flag = 1)的码流,则创建通道时可设置此通道不支持时域运动矢量预测(temporal_mvp_en设置为0),此种情况不输出tmv信息,可以不用创建tmv VB池,节省MMZ内存。
如果解码帧存分配方式使用的是解码PrivateVB池,则用户需要根据解码码流配置解码所需的帧存VB大小frame_buf_size和个数frame_buf_cnt,以及存放tmv信息的VB大小tmv_buf_size,解码器内部按此配置创建相应的私有VB池。
使用MoudleVB和UserVB方式时参数frame_buf_size、frame_buf_cnt和tmv_buf_size无效。
只要帧存buffer和tmv buffer足够大,当capacity_strategy为OT_VDEC_CAPACITY_STRATEGY_BY_MOD时,解码通道能解码在模块参数最大最小分辨率范围内的任意分辨率码流;当capacity_strategy为OT_VDEC_CAPACITY_STRATEGY_BY_CHN时,解码通道能解码在通道属性最大最小分辨率范围内的任意分辨率码流。通道宽高当前只与码流buffer、SCD buffer大小有关。
当接口 ss_mpi_vdec_set_mod_param设置的最大宽高小于当前解决方案支持的最大宽高时,本接口设置的通道宽高以接口 ss_mpi_vdec_set_mod_param设置的最大宽高为上限。
开启快速调度功能后,分配VB时可参考以下计算公式pic_vb_cnt = ref_frame_num * vdec_chn_num + vdec_chn_num / 2,tmv_vb_cnt = ref_frame_num * vdec_chn_num + vdec_chn_num / 2。实际分配的VB个数需要根据实际情况决定。
创建多路视频解码通道时,不支持使能slice低延时。如果已经存在slice低延时视频解码通道,返回OT_ERR_VDEC_NOT_SUPPORT。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_destroy_chn¶
【描述】
销毁视频解码通道。
【语法】
td_s32 ss_mpi_vdec_destroy_chn(ot_vdec_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
销毁前必须保证通道已创建,否则会返回通道未创建的错误。
销毁前必须停止接收码流(或者尚未开始接收码流),否则返回错误码OT_ERR_VDEC_NOT_PERM。
解码帧存模式为私有vb模式时,销毁通道时如果vb被其他模块占用,会销毁失败,模块占用释放后可再次调用接口进行销毁。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_reset_chn¶
【描述】
复位视频解码通道。
【语法】
td_s32 ss_mpi_vdec_reset_chn(ot_vdec_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
复位前必须保证通道已创建,否则会返回错误码[OT_ERR_VDEC_UNEXIST。
复位前必须停止接收码流,否则返回错误码OT_ERR_VDEC_NOT_PERM。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_chn_attr¶
【描述】
获取视频解码通道属性。
【语法】
td_s32 ss_mpi_vdec_get_chn_attr(ot_vdec_chn chn, ot_vdec_chn_attr *attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
attr |
解码通道属性指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
获取属性前必须保证通道已创建,否则会返回通道未创建的错误码[OT_ERR_VDEC_UNEXIST。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_set_chn_attr¶
【描述】
设置视频解码通道属性。
【语法】
td_s32 ss_mpi_vdec_set_chn_attr(ot_vdec_chn chn, const ot_vdec_chn_attr *attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
attr |
解码通道属性指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
设置属性前必须保证通道已创建,否则会返回通道未创建的错误码[OT_ERR_VDEC_UNEXIST。
可以改变的属性有type、mode、ref_frame_num,其它属性不能改变。其中type只能H264、H265、MPEG4相互切换,JPEG、MJPEG相互切换。切换协议时通道参数会恢复系统默认值。
解码器内部会在改变属性时自动复位解码通道。
切换通道属性之前必须先停止接收码流,否则返回错误码OT_ERR_VDEC_NOT_PERM。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_start_recv_stream¶
【描述】
解码器开始接收用户发送的码流。
【语法】
td_s32 ss_mpi_vdec_start_recv_stream(ot_vdec_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
启动接收码流前必须保证通道已创建,否则会返回通道未创建的错误码[OT_ERR_VDEC_UNEXIST。
启动接收码流前必须保证已经禁止使能用户图片,否则返回该操作不允许的错误码OT_ERR_VDEC_NOT_PERM。
启动接收码流之后,才能调用ss_mpi_vdec_send_stream发送码流成功。
重复调用启动接收码流接口时,返回成功。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_stop_recv_stream¶
【描述】
解码器停止接收用户发送的码流。
【语法】
td_s32 ss_mpi_vdec_stop_recv_stream(ot_vdec_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
停止接收码流前必须保证通道已创建,否则会返回通道未创建的错误码[OT_ERR_VDEC_UNEXIST。
调用此接口后,调用发送码流接口ss_mpi_vdec_send_stream会返回OT_ERR_VDEC_NOT_PERM。
重复调用停止接收码流接口时,返回成功。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_query_status¶
【描述】
查询解码通道状态。
【语法】
td_s32 ss_mpi_vdec_query_status(ot_vdec_chn chn, ot_vdec_chn_status *status);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
status |
视频解码通道状态结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
查询通道状态前必须保证通道已创建,否则会返回通道未创建的错误码[OT_ERR_VDEC_UNEXIST。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_send_stream¶
【描述】
向视频解码通道发送码流数据。
【语法】
td_s32 ss_mpi_vdec_send_stream(ot_vdec_chn chn, const ot_vdec_stream *stream, td_s32 milli_sec);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
stream |
解码码流数据指针。 |
输入 |
milli_sec |
送码流方式标志。 取值范围:
动态属性。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
此接口通过改变milli_sec值支持阻塞方式、非阻塞方式、超时方式发送码流。
发送数据前必须保证已经调用ss_mpi_vdec_start_recv_stream接口启动接收码流,否则直接返回该操作不允许的错误码OT_ERR_VDEC_NOT_PERM。如果在发送数据过程中停止接收码流,就会立刻返回OT_ERR_VDEC_NOT_PERM。
发送数据前必须保证通道已经被创建,否则直接返回通道未创建的错误码OT_ERR_VDEC_UNEXIST。如果在发送码流过程中复位通道或者销毁通道,就会立刻返回错误码。
发送码流时需要按照创建解码通道时设置的发送方式进行发送。按帧发送时,调用此接口一次,必须发送完整的一帧码流,否则解码会出现错误。兼容模式发送时,一帧可以分多次接口调用,每帧码流结束时必须配置帧结束标志end_of_frame为1,否则解码会出现错误。流式发送则无此限制。
不能发送end_of_stream为0的空码流包(码流长度为0或码流地址为空),否则返回错误码OT_ERR_VDEC_ILLEGAL_PARAM。
在发送完所有码流后,可以发送end_of_stream为1的空码流包,表示当前码流文件结束,解码器会把所有码流全部解完并输出全部图像。除此之外,其它情况应该把end_of_stream置为0。
当码流buffer为空且装不下当前包码流时,会返回参数超出范围的错误码OT_ERR_VDEC_ILLEGAL_PARAM。
按帧/兼容模式发送码流时,解码图像的时间戳等于传入参数stream结构体中的时间戳,按流发送时,解码图像的时间戳等于0。
以非阻塞方式发送码流,如果码流缓冲区已满,会立刻返回错误码OT_ERR_VDEC_BUF_FULL。
以超时方式发送码流,到达设定的超时时间还不能成功发送码流会返回错误码OT_ERR_VDEC_BUF_FULL。
超时的有效时间单位为10ms,因此实际最长等待时间为10ms倍数,具体等待时间与系统调度有关。
复合码流帧模式送流时建议将基础层和增强层分开送帧。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_frame¶
【描述】
获取视频解码通道的解码图像。
【语法】
td_s32 ss_mpi_vdec_get_frame(ot_vdec_chn chn, ot_video_frame_info *frame_info, ot_vdec_supplement_info *supplement, td_s32 milli_sec);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
frame_info |
获取的解码图像信息。具体请参见“系统控制”章节。 |
输出 |
supplement |
获取的解码图像补充信息。 |
输出 |
milli_sec |
获取图像方式标志。 取值范围:
动态属性。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
此接口通过改变milli_sec值支持阻塞方式、非阻塞方式、超时方式获取解码图像。
通过ss_mpi_vdec_get_frame获取解码图像数据后,需要通过ss_mpi_vdec_release_frame来释放。
如果不需要获取补充信息,可以置位supplement为NULL。
获取解码图像时必须保证通道已经被创建,否则直接返回通道未创建的错误码OT_ERR_VDEC_UNEXIST。失败如果在获取图像的过程中销毁通道,就会立刻返回错误码
如果在获取解码图像的过程中复位通道,则会返回错误码OT_ERR_VDEC_UNEXIST。
以非阻塞方式获取解码图像,如果缓冲区内无图像,会立刻返回错误码OT_ERR_VDEC_BUF_EMPTY。
以超时方式获取解码图像,到达设定的超时时间还不能获取到图像则会返回错误码OT_ERR_VDEC_BUF_EMPTY。
超时的有效时间单位为10ms,因此实际最长等待时间为10ms倍数,具体等待时间与系统调度有关。
此接口支持select操作。
输入码流为奇数宽高分辨率的JPEG图像时,解码会对原宽高向下裁剪为2对齐。因此保存为YUV或RGB文件时,需要直接使用帧信息中的stride,不能用输出后的宽度计算stride。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_release_frame¶
【描述】
释放视频解码通道的图像。
【语法】
td_s32 ss_mpi_vdec_release_frame(ot_vdec_chn chn, const ot_video_frame_info *frame_info);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
frame_info |
解码后的图像信息指针,由ss_mpi_vdec_get_frame接口获取。具体请参见“系统控制”章节。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
此接口需与ss_mpi_vdec_get_frame配对使用,获取的数据应当在使用完之后立即释放,如果不及时释放,会导致解码过程阻塞等待资源。
释放的数据必须是ss_mpi_vdec_get_frame从该通道获取的数据,不得对数据信息结构体进行任何修改。
允许用户非顺序释放,即不按照获取图像的顺序释放图像。
尽量在通道销毁前将获取的通道图像释放。如果获取了通道图像,而通道被重新销毁再创建,释放图像时驱动会因为找不到图像节点而释放不成功。PrivateVB模式下,因通道图像占用而销毁不成功时,当图像释放后,需要重新调用一次销毁通道接口才能销毁成功。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_set_chn_param¶
【描述】
设置解码通道参数。
【语法】
td_s32 ss_mpi_vdec_set_chn_param(ot_vdec_chn chn, const ot_vdec_chn_param *chn_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
chn_param |
通道参数。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
必须保证通道已创建,否则会返回错误码OT_ERR_VDEC_UNEXIST。
该接口可设置通道的一些高级属性,创建通道后有默认值,默认值见数据类型ot_vdec_chn_param的说明。
各项参数如超过合法范围,会返回OT_ERR_VDEC_ILLEGAL_PARAM的错误码,各参数范围见数据类型ot_vdec_chn_param的说明。
H.264/H.265/MPEG4解码切换压缩/非压缩输出模式、OT_VIDEO_FORMAT_TILE_64x16/OT_VIDEO_FORMAT_LINEAR视频格式时,必须先调用接口ss_mpi_vdec_stop_recv_stream停止接收码流。压缩/非压缩切换之后解码器内部会自动复位解码通道。
仅H265通道支持复合解码功能。
复合解码使能后,不支持IPB解码模式,否则会返回错误码OT_ERR_VDEC_ILLEGAL_PARAM。复合解码使能后,每帧图像会解码两次,逻辑性能开销增加一倍。
复合解码使能后,参考帧个数需要增加,根据实际情况设置。
仅H264/H265通道支持slice低延时功能,否则会返回错误码OT_ERR_VDEC_ILLEGAL_PARAM。
使能slice低延时时不支持流模式送流,否则会返回错误码OT_ERR_VDEC_NOT_SUPPORT。
创建多路视频解码通道时,不支持使能slice低延时,否则会返回错误码OT_ERR_VDEC_NOT_SUPPORT。
视频格式为OT_VIDEO_FORMAT_LINEAR时,仅支持非压模式输出,否则会返回错误码OT_ERR_VDEC_ILLEGAL_PARAM。
调用SYS接口ss_mpi_sys_set_schedule_mode并设置参数为OT_SCHEDULE_QUICK时,不支持显示序和IPB解码模式功能,否则会返回错误码OT_ERR_VDEC_NOT_SUPPORT。
快速释放参考帧模式为自适应模式或者强制模式时,复合码流不支持解码增强层。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_chn_param¶
【描述】
获取解码通道参数。
【语法】
td_s32 ss_mpi_vdec_get_chn_param(ot_vdec_chn chn, ot_vdec_chn_param *chn_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
chn_param |
通道参数。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
须保证通道已创建,否则会返回错误码OT_ERR_VDEC_UNEXIST。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_set_protocol_param¶
【描述】
设置协议相关的内存分配通道参数。
【语法】
td_s32 ss_mpi_vdec_set_protocol_param(ot_vdec_chn chn, const ot_vdec_protocol_param *protocol_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
protocol_param |
通道参数。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
必须保证通道已创建,否则会返回错误码OT_ERR_VDEC_UNEXIST。
设置协议参数前必须先停止接收码流,否则返回错误码OT_ERR_VDEC_NOT_PERM。
切换协议参数时,解码器内部会复位解码通道。
协议参数所需的内存是解码器内部根据当前码流实际vps/sps/pps/slice个数使用vmalloc动态分配的,最大上限不超过此接口设置的最大vps/sps/pps/slice个数。
当接口ss_mpi_vdec_set_mod_param设置的max_slice_num小于当前解决方案支持的最大slice数时,本接口设置的通道最大slice数以接口ss_mpi_vdec_set_mod_param设置的max_slice_num为上限。
仅H264、H265通道支持设置协议参数,其他协议通道设置时返回错误码OT_ERR_VDEC_NOT_SUPPORT。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_protocol_param¶
【描述】
获取协议相关的内存分配通道参数。
【语法】
td_s32 ss_mpi_vdec_get_protocol_param(ot_vdec_chn chn, ot_vdec_protocol_param *protocol_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
protocol_param |
通道参数。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
仅H264、H265通道支持获取协议参数,其他协议通道获取时返回错误码OT_ERR_VDEC_NOT_SUPPORT。
必须保证通道已创建,否则会返回错误码OT_ERR_VDEC_UNEXIST。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_set_user_data_attr¶
【描述】
设置解码通道用户数据属性。
【语法】
td_s32 ss_mpi_vdec_set_user_data_attr(ot_vdec_chn chn, const ot_vdec_user_data_attr *user_data_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
user_data_attr |
用户数据属性。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
此接口必须在解码通道创建前调用,否则会返回错误码OT_ERR_VDEC_NOT_PERM。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_user_data_attr¶
【描述】
获取解码通道用户数据属性。
【语法】
td_s32 ss_mpi_vdec_get_user_data_attr(ot_vdec_chn chn, ot_vdec_user_data_attr *user_data_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
user_data_attr |
用户数据属性。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
无。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_user_data¶
【描述】
获取视频解码通道的用户数据。
【语法】
td_s32 ss_mpi_vdec_get_user_data(ot_vdec_chn chn, ot_vdec_user_data *user_data, td_s32 milli_sec);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
milli_sec |
获取用户数据方式标志。 取值范围:
动态属性。 |
输入 |
user_data |
获取的解码用户数据 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
此接口通过改变milli_sec值支持阻塞方式、非阻塞方式、超时方式获取用户数据。
用户数据是H.264/H.265编码时,插入码流SEI segment的一段用户私有数据。
JPEG/MJPEG解码通道不支持获取用户数据。
获取用户数据时必须保证通道已经被创建,否则直接返回错误码OT_ERR_VDEC_UNEXIST。如果在获取用户数据的过程中销毁通道,则会立刻返回错误码OT_ERR_VDEC_UNEXIST。
如果在获取用户数据的过程中复位通道,则会返回错误码OT_ERR_VDEC_UNEXIST。
以非阻塞方式获取用户数据,当解码器中已解用户数据小于1byte时,会立刻返回错误码OT_ERR_VDEC_BUF_EMPTY。
以超时方式获取用户数据,到达设定的时间还不能成功获取用户数据,会返回错误码OT_ERR_VDEC_BUF_EMPTY。
通过ss_mpi_vdec_get_user_data获取解码用户数据后,需要通过ss_mpi_vdec_release_user_data来释放,且必须和获取时一致。
获取用户数据如果不及时,造成用户数据缓冲区满时,会出现丢弃用户数据的情况。
超时的有效时间单位为10ms,因此实际最长等待时间为10ms倍数,具体等待时间与系统调度有关。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_release_user_data¶
【描述】
释放用户数据。
【语法】
td_s32 ss_mpi_vdec_release_user_data(ot_vdec_chn chn, const ot_vdec_user_data *user_data);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
user_data |
解码后的用户数据指针,由ss_mpi_vdec_get_user_data接口获取。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
此接口需与ss_mpi_vdec_get_user_data配对使用,获取的数据应当在使用完之后立即释放,如果不及时释放,会造成缓冲区满时丢弃用户数据的情况。
释放的数据必须是ss_mpi_vdec_get_user_data从该通道获取的数据,不得对数据信息结构体进行任何修改,也不允许释放从其他的通道获取的数据,否则可能会导致释放失败。
释放数据时必须保证通道已经被创建,否则直接返回OT_ERR_VDEC_UNEXIST。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_set_user_pic¶
【描述】
设置用户图片属性。
【语法】
td_s32 ss_mpi_vdec_set_user_pic(ot_vdec_chn chn, const ot_video_frame_info *usr_pic);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
usr_pic |
用户图片属性结构指针。具体请参见“系统控制”章节。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
设置用户图片属性前必须保证通道已创建,否则会返回通道未创建的错误码OT_ERR_VDEC_UNEXIST。
设置用户图片前必须先调用接口ss_mpi_vdec_disable_user_pic禁止使能用户图片,否则返回错误码OT_ERR_VDEC_NOT_PERM。
用户图片属性设置成功之后VDEC就会一直占着这块用户图片VB,直到销毁解码通道时才释放。
存放用户图片的VB可以从公共VB池里获取。用户也可以创建一个私有VB池,从这个私有VB池里获取一块VB存放用户图片,但是用户必须保证只有在销毁解码通道之后才能销毁这个私有VB池,否则会出现程序异常的情况。
用户图片属性支持重复设置,重复设置用户图片属性时,解码器会先释放之前的用户图片VB块,然后占住当前的用户图片VB块。
不同的通道可以设置同一个用户图片的属性,也可以设置不同用户图片的属性,用户图片的宽高不受解码通道宽高的限制。
用户图片的PTS统一置为0。
目前只支持设置8bit YVU420 Linear格式不压缩的用户图片。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_enable_user_pic¶
【描述】
使能插入用户图片。
【语法】
td_s32 ss_mpi_vdec_enable_user_pic(ot_vdec_chn chn, td_bool instant);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
instant |
使能用户图片方式。 取值范围: 0:使能延迟插入用户图片; 1:使能立刻插入用户图片。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
使能插入用户图片前必须保证通道已创建,否则会返回通道未创建的错误码OT_ERR_VDEC_UNEXIST。
使能插入用户图片之前必须先设置用户图片属性,否则返回错误码OT_ERR_VDEC_NOT_PERM。
使能插入用户图片之前必须先停止接收码流,否则返回错误码OT_ERR_VDEC_NOT_PERM。
调用ss_mpi_vdec_enable_user_pic接口使能插入用户图片之后,必须调用接口ss_mpi_vdec_disable_user_pic禁止使能插入用户图片。
重复使能插入用户图片返回成功,但不会再次插入用户图片。
instant为1是使能立刻插入用户图片,这时VDEC会先复位解码通道,然后插入用户图片。因此当禁止使能用户图片后送入新码流时,不能希望马上开始正确解码,必须等到下一个I帧到来才能开始正确解码。
instant为0是使能延迟插入用户图片,这时VDEC会先等待解码器把所有码流解完并输出全部图像之后才插入用户图片。如果在码流解完之前禁止使能了用户图片,则码流解完后也不会插入用户图片。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_disable_user_pic¶
【描述】
禁止使能插入用户图片。
【语法】
td_s32 ss_mpi_vdec_disable_user_pic(ot_vdec_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
查询通道状态前必须保证通道已创建,否则会返回通道未创建的错误码OT_ERR_VDEC_UNEXIST。
重复禁止使能用户图片,返回成功。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_set_display_mode¶
【描述】
设置显示模式。
【语法】
td_s32 ss_mpi_vdec_set_display_mode(ot_vdec_chn chn, ot_video_display_mode display_mode);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
display_mode |
显示模式枚举,默认值:OT_VIDEO_DISPLAY_MODE_PLAYBACK 具体请参见“系统控制”章节。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
设置显示模式前必须保证通道已创建,否则会返回通道未创建的错误码OT_ERR_VDEC_UNEXIST。
预览模式(OT_VIDEO_DISPLAY_MODE_PREVIEW):预览模式下VDEC绑定的直接后级模块(比如VPSS)以非阻塞方式接收解码图像,即当VPSS的图像Buffer满时(解码帧存个数比VPSS缓存队列个数多),VPSS丢弃VDEC发送过来的图像,以达到不反压VDEC解码的目的,实现实时预览。需要注意的是,当解码帧存个数比VPSS缓存队列个数少时,即使开启预览模式,VPSS还是会反压解码。
回放模式(OT_VIDEO_DISPLAY_MODE_PLAYBACK):回放模式下VDEC绑定的直接后级模块(比如VPSS)以阻塞方式接收解码图像,即当VPSS的图像Buffer满时,拒绝接收VDEC发送过来的图像,VDEC发现当前图像发送失败后启动图像重新发送机制,直到图像发送成功为止。回放模式下VDEC绑定的直接后级模块能够反压VDEC解码,以达到不丢弃任何一帧解码图像的回放效果。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_display_mode¶
【描述】
获取显示模式。
【语法】
td_s32 ss_mpi_vdec_get_display_mode(ot_vdec_chn chn, ot_video_display_mode *display_mode);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
display_mode |
显示模式枚举指针。具体请参见“系统控制”章节。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
获取显示模式前必须保证通道已创建,否则会返回通道未创建的错误码OT_ERR_VDEC_UNEXIST。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_set_rotation¶
【描述】
设置解码图像旋转角度。
【语法】
td_s32 ss_mpi_vdec_set_rotation(ot_vdec_chn chn, ot_rotation rotation);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
rotation |
旋转角度枚举。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
必须保证通道已创建,否则会返回错误码OT_ERR_VDEC_UNEXIST。
如果不支持旋转功能,返回错误码OT_ERR_VDEC_NOT_SUPPORT。
旋转前的图像压缩格式可以是压缩或非压缩,旋转后的图像都是OT_VIDEO_FORMAT_LINEAR非压缩格式的。
旋转解码图像需要占用VB块,这些VB块是从公共VB池里获取的,每个通道-能获取的用于旋转输出buffer的最大VB个数为display_frame_num+1,display_frame_num越大,可用于VGS和后级模块轮转的VB越多,系统运行就越流畅。
仅宽、高都是2对齐的图像支持旋转。
解码图像旋转是VDEC内部调用VGS实现的,如果没有加载ssxx_vgs.ko或ssxxx_vgs.ko,则会返回错误码OT_ERR_VDEC_SYS_NOT_READY。
SS928V100解码输出OT_VIDEO_FORMAT_TILE_64x16格式时不支持旋转,会返回错误码OT_ERR_VDEC_NOT_SUPPORT。
开启输出低延时功能时不支持旋转,会返回错误码OT_ERR_VDEC_NOT_SUPPORT。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_rotation¶
【描述】
获取解码图像的旋转角度。
【语法】
td_s32 ss_mpi_vdec_get_rotation(ot_vdec_chn chn, ot_rotation *rotation);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
rotation |
旋转角度枚举指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
获取属性前必须保证通道已创建,否则会返回通道未创建的错误码OT_ERR_VDEC_UNEXIST。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_attach_vb_pool¶
【描述】
将解码通道绑定到某个视频缓存VB池中。
【语法】
td_s32 ss_mpi_vdec_attach_vb_pool(ot_vdec_chn chn, const ot_vdec_chn_pool *pool);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
pool |
视频缓存VB池信息。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
必须保证通道已创建,否则会返回通道未创建的错误码OT_ERR_VDEC_UNEXIST。
用户必须调用接口ss_mpi_vb_create_pool(见“系统控制”章节) 创建一个视频缓存VB池,再通过调用接口ss_mpi_vdec_attach_vb_pool把当前解码通道绑定到固定pool id的VB池中。可以把多个解码通道绑定到同一个VB池中,但是不能把同一个解码通道绑定到多个VB池中。
当要切换当前解码通道绑定的VB池时,只需再调一次接口ss_mpi_vdec_attach_vb_pool正确配置需要绑定到的VB池即可。
如果当前解码帧存分配方式使用的不是解码UserVB池,则返回错误码OT_ERR_VDEC_NOT_SURPPORT。
pic_vb_pool必须保证是已创建VB池的有效pool id,否则返回错误码OT_ERR_VDEC_ILLEGAL_PARAM。H.264/H.265/ MPEG4解码,如果支持时域运动矢量预测(temporal_mvp_en设置为1),pic_vb_pool也必须是已创建VB池的有效pool id,否则返回错误码OT_ERR_VDEC_ILLEGAL_PARAM。
绑定VB池和创建通道的操作,需要在同一个进程中执行。
ss_mpi_vdec_detach_vb_pool¶
【描述】
将解码通道从某个视频缓存VB池中解绑定。
【语法】
td_s32 ss_mpi_vdec_detach_vb_pool(ot_vdec_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
必须保证通道已创建,否则会返回通道未创建的错误码OT_ERR_VDEC_UNEXIST。
如果当前解码帧存分配方式使用的不是解码UserVB池,则返回错误码OT_ERR_VDEC_NOT_SURPPORT。
ss_mpi_vdec_get_fd¶
【描述】
获取视频解码通道的设备文件句柄。
【语法】
td_s32 ss_mpi_vdec_get_fd(ot_vdec_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
正数值 |
有效返回值。 |
非正数值 |
无效返回值。 |
【错误码】
无。
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
无。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_close_fd¶
【描述】
关闭视频解码的设备文件句柄。
【语法】
td_s32 ss_mpi_vdec_close_fd(ot_vdec_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
关闭成功。 |
-1 |
关闭失败。 |
【错误码】
无。
【需求】
头文件:ss_mpi_vdec.h、ot_common_vdec.h
库文件:libss_mpi.a
【注意】
此接口不能与其它MPI接口同时调用,用户必须保证此接口与其它接口在时间上是串行调用的。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_set_low_delay_attr¶
【描述】
设置解码通道低延时属性。
【语法】
td_s32 ss_mpi_vdec_set_low_delay_attr(ot_vdec_chn chn, const ot_low_delay_info *low_delay_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
low_delay_attr |
低延时属性。ot_low_delay_info具体请参见“系统控制”章节。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_video.h
库文件:libss_mpi.a
【注意】
设置属性前必须保证通道已创建,否则会返回OT_ERR_VDEC_UNEXIST。
仅H264/H265通道支持设置,否则会返回OT_ERR_VDEC_NOT_SUPPORT。
仅解码图像输出顺序为解码序时支持设置,否则会返回OT_ERR_VDEC_NOT_SUPPORT。
设置low_delay_attr参数line_cnt不符合合法范围[16, 8192]时,会返回OT_ERR_VDEC_ILLEGAL_PARAM。
当前通道为旋转状态时,不支持使能低延时,否则会返回OT_ERR_VDEC_NOT_PERM。
低延时属性中one_buf_en参数设置无效。
仅SS928V100/SS626V100支持此接口,其他解决方案调用时会返回OT_ERR_VDEC_NOT_SUPPORT。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_low_delay_attr¶
【描述】
获取解码通道低延时属性。
【语法】
td_s32 ss_mpi_vdec_get_low_delay_attr(ot_vdec_chn chn, ot_low_delay_info *low_delay_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 具体请参见“系统控制”章节。 |
输入 |
low_delay_attr |
低延时属性。具体请参见“系统控制”章节。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ot_common_video.h
库文件:libss_mpi.a
【注意】
获取属性前必须保证通道已创建,否则会返回OT_ERR_VDEC_UNEXIST。
仅SS928V100/SS626V100支持此接口,其他解决方案调用时会返回OT_ERR_VDEC_NOT_SUPPORT。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_set_chn_config¶
【描述】
设置解码通道配置。
【语法】
td_s32 ss_mpi_vdec_set_chn_config(ot_vdec_chn chn, const ot_vdec_chn_config *chn_config);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:0, OT_VDEC_MAX_CHN_NUM)。 |
输入 |
chn_config |
解码通道配置。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ss_common_video.h
库文件:libmpi.a
【注意】
仅SS626V100支持此接口。
本接口需要在创建通道之前调用。
解码部署模式仅对H264/H265/MPEG4通道有效。
部署模式为OT_VDEC_DEPLOYMENT_MODE0时,解码通道部署在arm主核侧。
部署模式为OT_VDEC_DEPLOYMENT_MODE1时,解码通道部署在独立的mdc(micro decoding controller)上。需要主核侧加载ot_ipcm.ko、ot_dcc.ko、ot_vdec_adapt.ko驱动;mdc侧需要加载mmz、base、sys、ipcm、dcc、vfmw、vdec_server驱动,可参考文件amp/riscv_liteos/mdc/app_init.c。
部署模式为OT_VDEC_DEPLOYMENT_MODE1时,mdc侧可通过dev/logmpp_mdc查看。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_chn_config¶
【描述】
获取解码通道配置。
【语法】
td_s32 ss_mpi_vdec_get_chn_config(ot_vdec_chn chn, ot_vdec_chn_config *chn_config);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
chn |
视频解码通道号。 取值范围:[0, OT_VDEC_MAX_CHN_NUM)。 具体请参见“系统控制”章节。 |
输入 |
chn_config |
解码通道配置。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ss_common_video.h
库文件:libmpi.a
【注意】
仅SS626V100支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_set_deployment_mode1_cfg¶
【描述】
设置部署模式为OT_VDEC_DEPLOYMENT_MODE1的解码通道的配置参数。
【语法】
td_s32 ss_mpi_vdec_set_deployment_mode1_cfg(const ot_vdec_deployment_mode1_config *config);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
config |
解码通道配置参数。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ss_common_video.h
库文件:libmpi.a
【注意】
在创建解码通道之前设置。
仅SS626V100支持此接口。
【举例】
无。
【相关主题】
无。
ss_mpi_vdec_get_deployment_mode1_cfg¶
【描述】
获取部署模式为OT_VDEC_DEPLOYMENT_MODE1的解码通道的配置参数。
【语法】
td_s32 ss_mpi_vdec_get_deployment_mode1_cfg(ot_vdec_deployment_mode1_config *config);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
config |
解码通道配置参数。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vdec.h、ss_common_video.h
库文件:libmpi.a
【注意】
仅SS626V100支持此接口。
【举例】
无。
【相关主题】
无。
数据类型¶
视频解码相关数据类型、数据结构定义如下:
[OT_VDEC_MAX_CHN_NUM:定义最大解码通道数。
ot_vdec_chn:定义VDEC通道号。
ot_vdec_chn_attr:定义解码通道属性。
ot_vdec_video_attr:定义视频解码视频通道属性。
ot_vdec_send_mode:定义码流发送方式枚举。
ot_vdec_chn_status:定义通道状态结构体。
ot_vdec_dec_err:定义解码错误信息结构体。
ot_vdec_event:定义解码事件上报类型。
ot_vdec_chn_param:定义解码通道高级参数结构体。
ot_vdec_video_param:定义视频解码高级参数结构体。
ot_vdec_pic_param:定义图片解码高级参数结构体。
ot_video_dec_mode:定义解码模式枚举。
ot_video_out_order:定义解码输出顺序枚举。
ot_h264_protocol_param: 与H.264协议相关的内存分配参数。
ot_h265_protocol_param: 定义与H.265协议相关的内存分配参数。
ot_vdec_protocol_param:定义与协议相关的内存分配参数结构体。
ot_vdec_frame_type:定义输出帧类型。
ot_vdec_supplement_info:定义输出帧补充信息。
ot_vdec_video_supplement_info:定义输出视频帧补充信息。
ot_vdec_stream:定义解码码流结构体。
ot_vdec_user_data_attr:定义用户数据属性。
ot_vdec_user_data:定义用户数据结构体。
ot_vdec_chn_pool:定义解码通道绑定的VB池结构体。
ot_vdec_capacity_strategy:定义解码图像最大宽高能力集。
ot_vdec_video_mod_param:定义视频解码模块参数结构体。
ot_vdec_pic_mod_param:定义图片解码模块参数结构体。
ot_vdec_mod_param:定义解码模块参数结构体。
ot_quick_mark_mode:定义快速释放参考帧模式枚举。
vdec_deployment_mode:定义解码部署模式枚举。
ot_vdec_chn_config:定义解码通道配置。
ot_vdec_deployment_mode1_config:定义部署模式为OT_VDEC_DEPLOYMENT_MODE1的解码通道的配置参数。
OT_VDEC_MAX_CHN_NUM¶
【说明】
定义最大解码通道个数。
【定义】
#define OT_VDEC_MAX_CHN_NUM 128
【注意事项】
最大解码通道数:由于最大通道个数涉及到内存的分配,允许用户根据实际需要重新指定最大解码通道个数,具体方式为:Linux系统通过加载ssxxx_vdec.ko或ssxxxx_vdec.ko时设置g_vdec_max_chn_num的值。
【相关数据类型及接口】
无。
ot_vdec_chn¶
【说明】
定义VDEC通道号。
【定义】
typedef td_s32 ot_vdec_chn;
【注意事项】
取值范围:[0, OT_VDEC_MAX_CHN_NUM)。
【相关数据类型及接口】
无。
ot_vdec_chn_attr¶
【说明】
定义解码通道属性结构体。
【定义】
typedef struct {
ot_payload_type type;
ot_vdec_send_mode mode;
td_u32 pic_width;
td_u32 pic_height;
td_u32 stream_buf_size;
td_u32 frame_buf_size;
td_u32 frame_buf_cnt;
union {
ot_vdec_video_attr video_attr;
};
} ot_vdec_chn_attr;
【成员】
成员名称 |
描述 |
|---|---|
type |
解码协议类型枚举值。 动态属性。 具体描述请参见“系统控制”章节,其中JPEG和MJPEG在解码器内部无任何区别。H264、MPEG4与H265之间,JPEG与MJPEG之间可以进行通道协议切换。 |
mode |
码流发送方式。 动态属性。 |
pic_width |
通道支持的解码图像最大宽(以像素为单位) 静态属性。 |
pic_height |
通道支持的解码图像最大高(以像素为单位) 静态属性。 |
stream_buf_size |
码流缓存的大小。 取值范围:帧模式或者兼容模式解码且使用码流Buffer省内存模式时,大于等于32KB;其它情况大于等于解码通道大小(宽x高)的3/4倍,即420图像大小的一半(宽x高x3/2x1/2),以byte为单位。 推荐值:一幅YUV420解码图像大小。即:宽x高x1.5。 静态属性。 |
frame_buf_size |
解码图像帧存buffer大小。 取值范围:大于0,但是用户必须保证所配置的帧存大小满足解码码流内存要求,否则不能正常解码。 仅PrivateVB模式有效。 静态属性。 |
frame_buf_cnt |
解码图像帧存个数。 取值范围:(0, 33],但是用户必须保证所配置的帧存个数满足解码码流帧存个数要求,否则无法正常解码。 H.264/H.265/MPEG4解码所需帧存个数为参考帧+显示帧+1。 JPEG/MJPEG解码所需帧存个数为显示帧+1。 仅PrivateVB模式有效。 静态属性。 |
video_attr |
视频(H.264/H.265/MPEG4)解码通道属性。 |
【描述】
无。
【相关数据类型及接口】
无。
ot_vdec_video_attr¶
【说明】
定义视频解码视频通道属性。
【定义】
typedef struct {
td_u32 ref_frame_num;
td_bool temporal_mvp_en;
td_u32 tmv_buf_size;
} ot_vdec_video_attr;
【成员】
成员名称 |
描述 |
|---|---|
ref_frame_num |
参考帧的数目。 取值范围:[0, 16],以帧为单位。 参考帧的数目决定解码时需要的参考帧个数,会较大的影响内存VB块占用,根据实际情况设置合适的值。
动态属性。 |
temporal_mvp_en |
是否支持时域运动矢量预测 取值范围:[0, 1]。 如果H.264、MPEG4解码不需要解码B帧,或者H.265解码不需要解码支持时域运动矢量预测(sps_temporal_mvp_enabled_flag = 1)的码流,则配置temporal_mvp_en为0,否则配置为1。 当配置为0时,可不分配输出tmv信息的VB块,节省MMZ内存。 静态属性。 |
tmv_buf_size |
视频解码图像tmv Buffer大小,仅PrivateVB模式且temporal_mvp_en为1时有效。 静态属性。 |
【注意事项】
帧码流解码只解I帧时可以把参考帧设置为0以节省帧存。
仅SS626V100支持解码H264/H265场码流。
【相关数据类型及接口】
无。
ot_vdec_send_mode¶
【说明】
定义码流发送方式。
【定义】
typedef enum {
OT_VDEC_SEND_MODE_STREAM = 0,
OT_VDEC_SEND_MODE_FRAME,
OT_VDEC_SEND_MODE_COMPAT,
OT_VDEC_SEND_MODE_BUTT
} ot_vdec_send_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_VDEC_SEND_MODE_STREAM |
按流方式发送码流。JPEG/MJPEG解码不支持此模式。 |
OT_VDEC_SEND_MODE_FRAME |
按帧方式发送码流。 以帧为单位。 |
OT_VDEC_SEND_MODE_COMPAT |
兼容模式发送码流。 一帧码流可以分多次发送,当一帧码流发送完毕时end_of_frame需要置为TD_TRUE。 |
【注意事项】
OT_VDEC_SEND_MODE_COMPAT模式发送码流时,当前帧码流PTS和need_display记录的是当前帧第一个slice发送完成时给解码器的PTS和need_display标志。建议一帧内每包码流PTS和need_display和第一包保持一致。
当一帧码流的最后一包没有把end_of_frame为TD_TRUE时,还可以再发送一个end_of_frame为TD_TRUE的空包(注意带上当前帧的PTS和need_display标志)给解码器内部标识当前帧码流已发送完毕。
OT_VDEC_SEND_MODE_COMPAT模式发送码流,当码流buffer内部仅有当前帧数据且直到装满整个buffer也没有接收到end_of_frame为TD_TRUE的标志时,意味着整个码流buffer的大小都不足以装下一帧码流,这时会返回参数超出范围的错误码OT_ERR_VDEC_ILLEGAL_PARAM。此时用户可选择复位解码通道或者发送一个end_of_frame为TD_TRUE的空包下来结束当前帧码流(码流实际未结束,强制解码一定会报错)。
【相关数据类型及接口】
无。
ot_vdec_chn_status¶
【说明】
定义通道状态结构体。
【定义】
typedef struct {
ot_payload_type type;
td_u32 left_stream_bytes;
td_u32 left_stream_frames;
td_u32 left_decoded_frames;
td_bool is_started;
td_u32 recv_stream_frames;
td_u32 dec_stream_frames;
ot_vdec_dec_err dec_err;
td_u32 width;
td_u32 height;
td_u64 latest_frame_pts;
} ot_vdec_chn_status;
【成员】
成员名称 |
描述 |
|---|---|
type |
解码协议。具体描述请参见“系统控制”章节。 |
left_stream_bytes |
码流buffer中待解码的byte数,包括正在解码的当前帧中未解码的byte数。 |
left_stream_frames |
码流buffer中待解码的帧数,不包括正在解码的当前帧。 -1表示无效。 流模式发送时无效。码流有错丢帧时可能计数不准。 |
left_decoded_frames |
图像buffer中剩余的pic数目。 |
is_started |
解码器是否已经启动接收码流。 |
recv_stream_frames |
码流buffer中已接收码流帧数。 -1表示无效。 流模式发送时无效。 |
dec_stream_frames |
码流buffer中已解码帧数。 |
dec_err |
解码错误信息。 |
width |
图像宽度。 |
height |
图像高度。 |
latest_frame_pts |
最新解码图像的时间戳。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_vdec_dec_err¶
【说明】
定义解码错误信息结构体。
【定义】
typedef struct {
td_s32 set_pic_size_err;
td_s32 set_protocol_num_err;
td_s32 set_ref_num_err;
td_s32 set_pic_buf_size_err;
td_s32 format_err;
td_s32 stream_unsupport;
td_s32 pack_err;
td_s32 stream_size_over;
td_s32 stream_not_release;
} ot_vdec_dec_err;
【成员】
成员名称 |
描述 |
|---|---|
set_pic_size_err |
图像的宽(或高)比通道的宽(或高)大,保留。 |
set_protocol_num_err |
设置的协议参数个数不够。比如:Slice、Pps、Sps个数。(此参数仅对H.264/H.265解码有效) |
set_ref_num_err |
设置的参考帧个数不够。(此参数仅对H.264/H.265/MPEG4解码有效) |
set_pic_buf_size_err |
图像buffer内存大小不够。 |
format_err |
不支持的格式。比如H.264场码流,JPEG的Progressive码流。 |
stream_unsupport |
不支持的规格(码流规格与解决方案宣称支持的规格不一致)。 |
pack_err |
码流有错。 |
stream_size_over |
一帧码流太大了,当整个SCDbuffer都装不下一帧码流时,强制清空SCDbuffer。 (此参数仅对H.264/H.265/MPEG4解码有效) |
stream_not_release |
VFMW内部管理码流错误,出现长时间不释放码流的情况,保留。 |
【注意事项】
所有错误信息均以累加计数的形式表现。比如解码每发现一次码流有错, pack_err数值就加1。
复位通道后所有错误信息计数清零。
【相关数据类型及接口】
无。
ot_vdec_event¶
【说明】
定义解码事件上报类型。
【定义】
typedef enum {
OT_VDEC_EVENT_STREAM_ERR = 1,
OT_VDEC_EVENT_UNSUPPORT,
OT_VDEC_EVENT_ERR_THRESHOLD_OVER,
OT_VDEC_EVENT_REF_NUM_OVER,
OT_VDEC_EVENT_SLICE_NUM_OVER,
OT_VDEC_EVENT_SPS_NUM_OVER,
OT_VDEC_EVENT_PPS_NUM_OVER,
OT_VDEC_EVENT_PIC_BUF_SIZE_ERR,
OT_VDEC_EVENT_SIZE_OVER,
OT_VDEC_EVENT_FRAME_SIZE_CHG,
OT_VDEC_EVENT_VPS_NUM_OVER,
OT_VDEC_EVENT_BUTT
} ot_vdec_event;
【成员】
成员名称 |
描述 |
|---|---|
OT_VDEC_EVENT_STREAM_ERR |
码流包解码错误,例如解码slice_header、pps、sps错误。 |
OT_VDEC_EVENT_UNSUPPORT |
不支持的解码规格。 |
OT_VDEC_EVENT_ERR_THRESHOLD_OVER |
错误率超过设定的err_threshold值。 |
OT_VDEC_EVENT_REF_NUM_OVER |
解码需要参考帧数超过配置的参考帧数目。 |
OT_VDEC_EVENT_SLICE_NUM_OVER |
码流里实际slice数超出配置的最大slice数。 |
OT_VDEC_EVENT_SPS_NUM_OVER |
码流里实际sps数超出配置的最大sps数。 |
OT_VDEC_EVENT_PPS_NUM_OVER |
码流里实际pps数超出配置的最大pps数。 |
OT_VDEC_EVENT_PIC_BUF_SIZE_ERR |
解码输出buf大小不足导致解码失败。 |
OT_VDEC_EVENT_SIZE_OVER |
解码图像宽高超过通道配置宽高。 |
OT_VDEC_EVENT_FRAME_SIZE_CHG |
解码图像分辨率变化。 |
OT_VDEC_EVENT_VPS_NUM_OVER |
码流里实际vps数超出配置的最大vps数。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_vdec_chn_param¶
【说明】
定义解码通道高级参数。
【定义】
typedef struct {
ot_payload_type type;
td_u32 display_frame_num;
union {
ot_vdec_video_param video_param;
ot_vdec_pic_param pic_param;
};
} ot_vdec_chn_param;
【成员】
成员名称 |
描述 |
|---|---|
type |
解码协议。具体描述请参见“系统控制”章节。 |
display_frame_num |
解码缓存图像的最小帧数。 取值范围:[0, 16]。 Default:2。 |
video_param |
视频(H.264/H.265/MPEG4)解码高级参数。 |
pic_param |
图片(JPEG/MJPEG)解码高级参数。 |
【注意事项】
只有在用户态获取解码图像或者VDEC绑定的后级模块不会缓存任何解码图像的情况下才能把display_frame_num设置为0,否则解码可能会由于帧存不够而被反压,停止解码。
【相关数据类型及接口】
无。
ot_vdec_video_param¶
【说明】
定义视频解码高级参数。
【定义】
typedef struct {
td_bool composite_dec_en;
td_bool slice_input_en;
td_s32 err_threshold;
ot_video_dec_mode dec_mode;
ot_video_out_order out_order;
ot_compress_mode compress_mode;
ot_video_format video_format;
ot_quick_mark_mode quick_mark_mode;
} ot_vdec_video_param;
【成员】
成员名称 |
描述 |
|---|---|
composite_dec_en |
复合解码使能开关。用于隐私保护编码码流的解码, 同一条码流可以输出两种效果。基础层是公众可见的图像效果(例如人脸区域用马赛克保护起来), 增强层是高权限者可以看的效果(例如人脸区域不遮挡)。 普通码流composite_dec_en设置为TD_TRUE解码器可能无图像输出,请设置为默认值TD_FALSE。 TD_FALSE:输出基本层; TD_TRUE:输出增强层; Default:TD_FALSE。 仅SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100支持 |
slice_input_en |
slice输入低延时使能开关。 Default:TD_FALSE。 仅SS928V100/SS626V100支持 |
err_threshold |
错误阈值。 取值范围:[0, 100]。 0代表有错即丢,100代表无论错误多少均继续解码显示。 解码器计算每帧的错误率(错误宏块数 / 总宏块数 x 100%),如果错误率大于err_threshold则丢弃该帧不显示,而且如果此帧为参考帧,则后续所有帧都丢弃,直到下一个I帧。 Default:30 仅VDH解码有效。 |
dec_mode |
解码模式: Default:OT_VIDEO_DEC_MODE_IP。 |
out_order |
解码图像输出顺序。 Default:OT_VIDEO_OUT_ORDER_DEC |
compress_mode |
解码图像压缩模式。 取值范围:仅支持OT_COMPRESS_MODE_NONE和OT_COMPRESS_MODE_TILE。 Default:OT_COMPRESS_MODE_TILE 详细描述请参考“系统控制”章节 |
video_format |
解码图像数据格式。详细描述请参考“系统控制”章节 SS528V100/ SS625V100/SS524V100/SS522V101仅支持OT_VIDEO_FORMAT_TILE_64x16。 SS928V100支持OT_VIDEO_FORMAT_TILE_64x16和OT_VIDEO_FORMAT_LINEAR Default:OT_VIDEO_FORMAT_TILE_64x16 |
quick_mark_mode |
快速释放参考帧模式。仅SS528V100/SS625V100/SS524V100/SS522V101/SS626V100支持。 Default:OT_QUICK_MARK_ADAPT。 SS626V100使能mdc解码的通道不支持,默认OT_QUICK_MARK_NONE。 |
【注意事项】
普通码流composite_dec_en设置为TD_TRUE解码器可能无图像输出,请设置为默认值TD_FALSE。
复合解码使能在下一个GOP生效。关闭复合解码立即生效。
开启输出低延时后,错误阈值失效。
开启slice低延时后,如果解码带B帧码流,需要设置为IPB解码模式,否则会出现解码错误。
视频解码仅支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420格式输出。
【相关数据类型及接口】
无。
ot_vdec_pic_param¶
【说明】
定义图形解码高级参数。
【定义】
typedef struct {
ot_pixel_format pixel_format;
td_u32 alpha;
} ot_vdec_pic_param;
【成员】
成员名称 |
描述 |
|---|---|
pixel_format |
JPEG(MJPEG)解码输出格式。具体描述请参见“系统控制”章节。 取值范围:仅支持以下几种输出格式 OT_PIXEL_FORMAT_RGB_565、OT_PIXEL_FORMAT_BGR_565、 OT_PIXEL_FORMAT_RGB_888、OT_PIXEL_FORMAT_BGR_888、 OT_PIXEL_FORMAT_ARGB_1555、OT_PIXEL_FORMAT_ABGR_1555、 OT_PIXEL_FORMAT_ARGB_8888、OT_PIXEL_FORMAT_ABGR_8888、 OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422 Default:OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420 |
alpha |
ARGB格式输出时的全局alpha,仅ARGB输出时有效。 取值范围:[0, 255]。 Default:255。 注:当输出格式为ARGB1555或者ABGR1555时,[0, 127]表示透明,[128, 255]表示不透明。 |
【注意事项】
如果原JPEG图片格式是YUV400,则解码输出的YUV只能是OT_PIXEL_FORMAT_YUV_400格式。
SS528V100/SS625V100/SS524V100/SS522V101仅支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420输出,SS928V100/SS626V100支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420和OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422输出。
当原JPEG图片格式是YUV422/YVU422且设置输出格式为OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422时,才能正确输出YVU422图像。
RGB888、ARGB8888格式的图像的在内存存储示意图如下,其他格式类似。
图 1 RGB888/ARGB8888格式的图像在内存存储示意图

【相关数据类型及接口】
无。
ot_video_dec_mode¶
【说明】
定义视频解码模式枚举。
【定义】
typedef enum {
OT_VIDEO_DEC_MODE_IPB = 0,
OT_VIDEO_DEC_MODE_IP,
OT_VIDEO_DEC_MODE_I,
OT_VIDEO_DEC_MODE_BUTT
} ot_video_dec_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_VIDEO_DEC_MODE_IPB |
IPB模式,即I、P、B帧都解码。 |
OT_VIDEO_DEC_MODE_IP |
IP模式,即只解码I帧和P帧。 |
OT_VIDEO_DEC_MODE_I |
I模式,即只解码I帧。 |
【注意事项】
设置为I模式只解码I帧时,可把参考帧个数设置为0以节省帧存。
【相关数据类型及接口】
无。
ot_video_out_order¶
【说明】
定义视频解码输出顺序枚举。
【定义】
typedef enum {
OT_VIDEO_OUT_ORDER_DISPLAY = 0,
OT_VIDEO_OUT_ORDER_DEC,
OT_VIDEO_OUT_ORDER_BUTT
} ot_video_out_order;
【成员】
成员名称 |
描述 |
|---|---|
OT_VIDEO_OUT_ORDER_DISPLAY |
显示序输出。 |
OT_VIDEO_OUT_ORDER_DEC |
解码序输出。 |
【注意事项】
解码有B帧的码流应设置为显示序输出。
【相关数据类型及接口】
无。
ot_h264_protocol_param¶
【说明】
与H.264协议相关的内存分配参数。
【定义】
typedef struct {
td_s32 max_slice_num;
td_s32 max_sps_num;
td_s32 max_pps_num;
} ot_h264_protocol_param;
【成员】
成员名称 |
描述 |
|---|---|
max_slice_num |
该通道解码支持的最大Slice个数。 取值范围:[1, 600] Default:16。 |
max_sps_num |
该通道解码支持的最大SPS个数。 取值范围:[1, 32] Default:2。 |
max_pps_num |
该通道解码支持的最大PPS个数。 取值范围:[1, 256] Default:2。 |
【注意事项】
无。
【相关数据类型及接口】
ot_h265_protocol_param¶
【说明】
定义与H.265协议相关的内存分配参数。
【定义】
typedef struct {
td_s32 max_slice_segment_num;
td_s32 max_vps_num;
td_s32 max_sps_num;
td_s32 max_pps_num;
} ot_h265_protocol_param;
【成员】
成员名称 |
描述 |
|---|---|
max_slice_segment_num |
该通道解码支持的最大SliceSegment个数。 取值范围:[1, 600] Default:16。 |
max_vps_num |
该通道解码支持的最大VPS个数。 取值范围:[1, 16]。 Default:2。 |
max_sps_num |
该通道解码支持的最大SPS个数。 取值范围:[1, 16]。 Default:2。 |
max_pps_num |
该通道解码支持的最大PPS个数。 取值范围:[1, 64]。 Default:2。 |
【注意事项】
无。
【相关数据类型及接口】
ot_vdec_protocol_param¶
【说明】
定义与协议相关的内存分配参数。
【定义】
typedef struct {
ot_payload_type type;
union {
ot_h264_protocol_param h264_param;
ot_h265_protocol_param h265_param;
};
} ot_vdec_protocol_param;
【成员】
成员名称 |
描述 |
|---|---|
type |
解码通道支持的协议。具体描述请参见“系统控制”章节。 |
h264_param |
H.264协议参数。 |
h265_param |
H.265协议参数。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_vdec_frame_type¶
【说明】
定义输出帧类型。
【定义】
typedef enum {
OT_VDEC_FRAME_TYPE_I = 0,
OT_VDEC_FRAME_TYPE_P = 1,
OT_VDEC_FRAME_TYPE_B = 2,
OT_VDEC_FRAME_TYPE_BUTT
} ot_vdec_frame_type;
【成员】
成员名称 |
描述 |
|---|---|
OT_VDEC_FRAME_TYPE_I |
IDR帧。 |
OT_VDEC_FRAME_TYPE_P |
P帧。 |
OT_VDEC_FRAME_TYPE_B |
B帧。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_vdec_supplement_info¶
【说明】
定义输出帧补充信息。
【定义】
typedef struct {
ot_payload_type type;
union {
ot_vdec_video_supplement_info video_supplement_info;
};
} ot_vdec_ supplement_info;
【成员】
成员名称 |
描述 |
|---|---|
type |
解码协议类型枚举值。 |
video_supplement_info |
视频帧补充信息。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_vdec_video_supplement_info¶
【说明】
定义输出视频帧补充信息。
【定义】
typedef struct {
ot_vdec_frame_type frame_type;
td_u32 err_rate;
td_u32 poc;
} ot_vdec_video_supplement_info;
【成员】
成员名称 |
描述 |
|---|---|
frame_type |
解码帧类型。 |
err_rate |
错误率。 |
poc |
POC值。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_vdec_stream¶
【说明】
定义视频解码的码流结构体。
【定义】
typedef struct {
td_bool end_of_frame;
td_bool end_of_stream;
td_bool need_display;
td_u64 pts;
td_u64 private_data;
td_u32 len;
td_u8 *ATTRIBUTE addr;
} ot_vdec_stream;
【成员】
成员名称 |
描述 |
|---|---|
end_of_frame |
当前帧是否结束。 仅COMPAT模式发送码流时有效。 |
end_of_stream |
是否发完所有码流。 |
need_display |
当前帧是否输出显示。 0:不显示; 1:显示。 |
pts |
码流包的时间戳。 以μs为单位。 |
private_data |
私有数据,仅支持帧模式和兼容模式。 |
len |
码流包的长度。 以byte为单位。 |
addr |
码流包的地址。 |
【注意事项】
按帧/兼容模式发送时,解码图像的时间戳等于码流包中的时间戳。
按流发送时,解码图像的时间戳等于0。
当发完所有码流后,把end_of_stream置为1,表示码流文件结束,这时解码器会解完发送下来的所有码流并输出所有图像。如果发完所有码流后把end_of_stream置为0,解码器内部可能残余大于等于一帧的图像未解码输出,因为解码器必须等到下一帧码流到来才能知道当前帧已经结束,送入解码。
VDEC支持发送一包end_of_stream为1的空码流包(地址为空或长度为0)。
JPEG/MJPEG解码或者流模式发送码流时need_display标志无效。
按兼容模式发送时,建议同一帧中每包的私有数据参数设置为相同的值。
解码完成后,私有数据private_data存放至图像帧结构体ot_video_frame中user_data[0]。具体请参考“系统控制”章节。
【相关数据类型及接口】
无。
ot_vdec_user_data_attr¶
【说明】
定义用户数据属性。
【定义】
typedef struct {
td_bool enable;
td_u32 max_user_data_len;
} ot_vdec_user_data_attr;
【成员】
成员名称 |
描述 |
|---|---|
enable |
是否支持用户数据,默认值1。范围为[0,1] |
max_user_data_len |
单个用户数据最大长度,默认值1024。范围为(0, 65536],单位为字节。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_vdec_user_data¶
【说明】
定义用户数据结构体。
【定义】
typedef struct {
td_phys_addr_t phys_addr;
td_u32 len;
td_bool is_valid;
td_u8 *ATTRIBUTE virt_addr;
} ot_vdec_user_data;
【成员】
成员名称 |
描述 |
|---|---|
phys_addr |
用户数据的物理地址 |
len |
用户数据的长度。 以byte为单位。 |
is_valid |
当前数据的有效标识。 取值范围:{0, 1}。
|
virt_addr |
用户数据的虚拟地址。 |
【注意事项】
获取用户数据失败时,is_valid等于0。
获取用户数据成功时,is_valid等于1。
【相关数据类型及接口】
无。
ot_vdec_chn_pool¶
【说明】
定义解码通道绑定的VB池结构体。
【定义】
typedef struct {
ot_vb_pool pic_vb_pool;
ot_vb_pool tmv_vb_pool;
} ot_vdec_chn_pool;
【成员】
成员名称 |
描述 |
|---|---|
pic_vb_pool |
用于存储pic的VB池Poold。 |
tmv_vb_pool |
用于存储tmv信息的VB池pool id。 |
【注意事项】
H.264/MPEG4解码且支持B帧或者H.265解码支持时域运动矢量预测(sps_temporal_mvp_enabled_flag = 1)的码流,pic_vb_pool和tmv_vb_pool都必须是已创建VB池的有效pool id。
H.264/MPEG4解码且不支持B帧或者JPEG/MJPEG解码,只需要配置pic_vb_pool是已创建VB池的有效pool id。
【相关数据类型及接口】
无。
ot_vdec_capacity_strategy¶
【说明】
定义解码图像的最大宽高能力集策略。
【定义】
typedef enum {
OT_VDEC_CAPACITY_STRATEGY_BY_MOD = 0,
OT_VDEC_CAPACITY_STRATEGY_BY_CHN = 1,
OT_VDEC_CAPACITY_STRATEGY_BUTT
} ot_vdec_capacity_strategy;
【成员】
成员名称 |
描述 |
|---|---|
OT_VDEC_CAPACITY_STRATEGY_BY_MOD |
输入码流的宽或高超过模块参数的最大宽或高,解码器自动丢弃源码流。 |
OT_VDEC_CAPACITY_STRATEGY_BY_CHN |
输入码流的宽或高超过通道创建的属性最大宽或高,解码器自动丢弃源码流。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_vdec_video_mod_param¶
【说明】
定义视频解码模块参数结构体。
【定义】
typedef struct {
td_u32 max_pic_width;
td_u32 max_pic_height;
td_u32 max_slice_num;
td_u32 vdh_msg_num;
td_u32 compat_no_ref;
} ot_vdec_video_mod_param;
【成员】
成员名称 |
描述 |
|---|---|
max_pic_width |
视频解码支持的最大宽度。 取值范围:参见表1,最小值为H.264/MPEG4/H.265解码支持分辨率的最小宽度。最大值为H.264/MPEG4/H.265解码支持分辨率的最大宽度。默认为最大值。 |
max_pic_height |
视频解码支持的最大高度。 取值范围:参见表1,最小值为H.264/MPEG4/H.265解码支持分辨率的最小宽度。最大值为H.264/MPEG4/H.265解码支持分辨率的最大宽度。默认为最大值。 |
max_slice_num |
H.264/H.265解码支持的最大slice个数。 取值范围:最小值为1,最大值为H264/H265解码支持slice的最大个数。默认为最大值。 |
vdh_msg_num |
VDH解码消息池个数。 取值范围:[1, 8]。默认值为8。仅SS528V100/SS625V100/SS928V100/SS626V100有效。 |
compat_no_ref |
兼容无参考帧的异常码流。 取值范围:[0, 1]。默认值为1。 0:不兼容无参考帧的异常,解码器进行丢帧处理; 1:兼容无参考帧的异常,解码器会尝试进行强制解码,解码出的图像会存在花屏。 |
【注意事项】
vdh_msg_num是VDH消息池“vdh_msg_num”的个数,参数值改小后,可能会导致解码性能下降,因此需要按具体的使用场景进行配置,一般建议单路解码vdh_msg_num设置为3,若场景超过3路解码,建议该值配置为8。
max_slice_num配置需要根据实际Slice数限制,否则可能导致超出限制的帧无法正常解码。其取值大小与VDH消息池“vfmw_vdh_msg”大小有关。
max_pic_width及max_pic_height建议根据实际情况配置,否则可能导致高于该分辨率无法正常解码。它们的取值大小与VDH片外内存“vfmw_vdh_ext”大小有关。
【相关数据类型及接口】
无。
ot_vdec_pic_mod_param¶
【说明】
定义图片解码模块参数结构体。
【定义】
typedef struct {
td_u32 max_pic_width;
td_u32 max_pic_height;
td_bool progressive_en;
td_bool dynamic_alloc_en;
ot_vdec_capacity_strategy capacity_strategy;
} ot_vdec_pic_mod_param;
【成员】
成员名称 |
描述 |
|---|---|
max_pic_width |
图片解码支持的最大宽度,默认值为当前解决方案支持最大宽度。 取值范围:参见表1,最小值为JPEG/MJPEG解码支持分辨率的最小宽度。最大值为JPEG/MJPEG解码支持分辨率的最大宽度。默认为最大值。 |
max_pic_height |
图片解码支持的最大高度,默认值为当前解决方案支持最大高度。 取值范围:参见表1,最小值为JPEG/MJPEG解码支持分辨率的最小宽度。最大值为JPEG/MJPEG解码支持分辨率的最大宽度。默认为最大值。 |
progressive_en |
JPEG/MJPEG解码是否支持progressive格式。 取值范围:[0, 1]。默认为0。 |
dynamic_alloc_en |
JPEG/MJPEG解码支持progressive格式时,所需buf分配方式,默认值为0。 0:静态分配, progressive_en置为1时按照max_pic_width和max_pic_height分配buf,运行过程中不销毁,如需释放需要用户调用接口置位progressive_en为0。推荐场景,progressive图片多,对内存碎片敏感。 1:动态分配,progressive_en置为1时不分配buf,运行过程中根据实际图像宽高分配buf,解码当前帧完成后自动释放。推荐场景,progressive图片少,允许部分内存碎片。 |
capacity_strategy |
解码图像的最大宽高能力集策略。默认值为OT_VDEC_CAPACITY_STRATEGY_BY_MOD。 |
【注意事项】
progressive_en置位为1时,buf计算公式:ALIGN_UP(pic_width, 64) * 16 * 3 * sizeof(td_s16) + 4096,所有通道共用一个buf。此外,如果内存分配失败,静态分配时,接口上报错误码;动态分配时,自动丢弃源码流。
Progressive解码支持像素格式为:YUV420、YUV422_2x1、YUV422_1x2和YUV 444。
YUV422_2x1表示2:1的水平取样,没有垂直下采样;
YUV422_1x2表示没有水平下采样,2:1的垂直下采样。
Progressive解码仅支持软解码,其中输出图像不支持RGB格式。
所有创建通道宽和高必须小于或等于模块参数最大宽和高。
【相关数据类型及接口】
无。
ot_vdec_mod_param¶
【说明】
定义解码模块参数结构体。
【定义】
typedef struct {
ot_vb_src vb_src;
td_u32 mini_buf_mode;
td_u32 timer_interval;
td_bool rotation_support;
td_bool low_delay_support;
ot_vdec_video_mod_param video_mod_param;
ot_vdec_pic_mod_param pic_mod_param;
} ot_vdec_mod_param;
【成员】
成员名称 |
描述 |
|---|---|
vb_src |
解码帧存VB来源。 取值范围:仅支持OT_VB_SRC_MOD、OT_VB_SRC_PRIVATE、OT_VB_SRC_USER Default:OT_VB_SRC_MOD 具体描述请参见“系统控制”章节 |
mini_buf_mode |
码流buffer配置模式。 0:一般模式; 1:省内存模式。 |
timer_interval |
timer定时器间隔时间。 取值范围:[1,20],默认为10。 |
rotation_support |
是否支持旋转。 取值范围:[0, 1],默认为TD_TRUE。 |
low_delay_support |
是否支持解码通道低延时。 取值范围:[0, 1],默认为TD_TRUE。 |
video_mod_param |
视频解码模块参数。对JPEG/MJPEG无效。 |
pic_mod_param |
图片解码模块参数。对H264/MPEG4/H265无效。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_quick_mark_mode¶
【说明】
定义快速释放参考帧模式枚举。
【定义】
typedef enum {
OT_QUICK_MARK_ADAPT = 0,
OT_QUICK_MARK_FORCE,
OT_QUICK_MARK_NONE,
OT_QUICK_MARK_BUTT
} ot_quick_mark_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_QUICK_MARK_ADAPT |
自适应模式。 |
OT_QUICK_MARK_FORCE |
强制模式。 |
OT_QUICK_MARK_NONE |
普通模式。 |
【注意事项】
无。
【相关数据类型及接口】
无。
vdec_deployment_mode¶
【说明】
解码部署模式枚举。
【定义】
typedef enum {
OT_VDEC_DEPLOYMENT_MODE0,
OT_VDEC_DEPLOYMENT_MODE1,
OT_VDEC_DEPLOYMENT_BUTT
} vdec_deployment_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_VDEC_DEPLOYMENT_MODE0 |
解码部署模式0。 |
OT_VDEC_DEPLOYMENT_MODE1 |
解码部署模式1。 |
【注意事项】
仅SS626V100支持OT_VDEC_DEPLOYMENT_MODE1。
【相关数据类型及接口】
无。
ot_vdec_chn_config¶
【说明】
定义解码通道配置。
【定义】
typedef struct {
vdec_deployment_mode deployment_mode;
} ot_vdec_chn_config;
【成员】
成员名称 |
描述 |
|---|---|
deployment_mode |
解码部署模式 默认值在驱动加载后第一次创建通道时确定,h264/h265/mpeg4通道为OT_VDEC_DEPLOYMENT_MODE1;jpeg/mjpeg通道为OT_VDEC_DEPLOYMENT_MODE0。 |
【注意事项】
仅SS626V100支持此数据类型。
【相关数据类型及接口】
ot_vdec_deployment_mode1_config¶
【说明】
定义部署模式为OT_VDEC_DEPLOYMENT_MODE1的解码通道的配置参数。
【定义】
typedef struct {
td_u32 max_chn_num;
} ot_vdec_deployment_mode1_config;
【成员】
成员名称 |
描述 |
|---|---|
max_chn_num |
定义mdc侧最大部署解码通道路数。 取值范围:[0,OT_VDEC_MAX_CHN_NUM],默认值为96。 |
【注意事项】
仅SS626V100支持此数据类型。
【相关数据类型及接口】
错误码¶
表 1 VDEC API错误码
错误代码 |
宏定义 |
描述 |
|---|---|---|
0xa0058003 |
OT_ERR_VDEC_INVALID_CHN_ID |
通道ID超出合法范围 |
0xa0058007 |
OT_ERR_VDEC_ILLEGAL_PARAM |
参数超出合法范围 |
0xa0058008 |
OT_ERR_VDEC_EXIST |
试图创建已经存在的通道 |
0xa0058009 |
OT_ERR_VDEC_UNEXIST |
通道未创建或已销毁 |
0xa005800a |
OT_ERR_VDEC_NULL_PTR |
函数参数中有空指针 |
0xa005800b |
OT_ERR_VDEC_NOT_CFG |
使用前未配置 |
0xa005800c |
OT_ERR_VDEC_NOT_SUPPORT |
不支持的参数或者功能 |
0xa005800d |
OT_ERR_VDEC_NOT_PERM |
该操作不允许 |
0xa0058014 |
OT_ERR_VDEC_NO_MEM |
分配内存失败,如系统内存不足 |
0xa0058015 |
OT_ERR_VDEC_NO_BUF |
分配缓存失败,如申请的数据缓冲区太大 |
0xa0058016 |
OT_ERR_VDEC_BUF_EMPTY |
缓冲区中无数据 |
0xa0058017 |
OT_ERR_VDEC_BUF_FULL |
缓冲区中数据满 |
0xa0058018 |
OT_ERR_VDEC_SYS_NOT_READY |
系统没有初始化或者相关依赖的模块没有加载 |
0xa0058021 |
OT_ERR_VDEC_BAD_ADDR |
地址错误 |
0xa0058022 |
OT_ERR_VDEC_BUSY |
系统忙 |