拼接

概述

AVS(Any View Stitching,全景拼接)实现的功能:对多路图像进行全景拼接,并且按照指定的投影模式输出图像。整个拼接过程主要包括标定以及拼接输出。本章节主要描述拼接输出部分。另外,AVS也支持水平、垂直或者田字形的非融合拼接。

须知: 本章仅SS928V100/SS927V100支持此模块。

功能描述

基本概念

  • GROUP

    AVS对用户提供组(GROUP)的概念。最大可用数为OT_AVS_MAX_GRP_NUM个,各GROUP分时复用AVS硬件。每个AVS GROUP包含多个PIPE和多个通道。

  • PIPE

    AVS组的PIPE。用于输入拼接源图像。PIPE的数目即拼接路数。用户可以通过系统绑定和前端相连或者发送图像到PIPE中拼接。

  • CHANNEL

    AVS组的通道。用于输出拼接的结果图像。其中通道0为拼接输出的原图,其他通道是通道0的缩小图,缩小最大倍数为15倍。

  • 投影

    将全景空间图像投影到平面坐标中用于编码和传输。AVS支持的投影模式有Equirectangular、Cylindrical、Rectilinear和Cube map四种投影模式。

API参考

该功能模块为用户提供以下MPI:

  • ss_mpi_avs_create_grp:创建一个AVS GROUP。

  • ss_mpi_avs_destroy_grp:销毁一个AVS GROUP。

  • ss_mpi_avs_start_grp:启用AVS GROUP。

  • ss_mpi_avs_stop_grp:禁用AVS GROUP。

  • ss_mpi_avs_reset_grp:重置AVS GROUP。

  • ss_mpi_avs_close_fd:关闭组和通道的文件描述符。

  • ss_mpi_avs_get_grp_attr:获取AVS GROUP属性。

  • ss_mpi_avs_set_grp_attr:设置AVS GROUP属性。

  • ss_mpi_avs_send_pipe_frame:用户向AVS GROUP上的PIPE发送图像。

  • ss_mpi_avs_get_pipe_frame:用户从AVS GROUP上的PIPE获取一帧原始图像。

  • ss_mpi_avs_release_pipe_frame:用户释放一帧原始图像。

  • ss_mpi_avs_set_chn_attr:设置AVS通道属性。

  • ss_mpi_avs_get_chn_attr:获取AVS通道属性。

  • ss_mpi_avs_enable_chn:启用AVS通道。

  • ss_mpi_avs_disable_chn:禁用AVS通道。

  • ss_mpi_avs_get_chn_frame:用户获取一帧通道图像。

  • ss_mpi_avs_release_chn_frame:用户释放一帧通道图像。

  • ss_mpi_avs_get_mod_param:获取AVS模块参数。

  • ss_mpi_avs_set_mod_param:设置AVS模块参数。

ss_mpi_avs_create_grp

【描述】

创建一个AVS GROUP。

【语法】

td_s32 ss_mpi_avs_create_grp(ot_avs_grp grp, const ot_avs_grp_attr *grp_attr);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

grp_attr

AVS GROUP属性指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

组不支持重复创建。

各模式下对输入图像的要求如表1所示。

表 1 各模式下对输入图像的要求

属性

模式

BLEND

NOBLEND_VER

NOBLEND_HOR/NOBLEND_QR

宽高

各路图像宽高相同,并须4对齐。

各路图像宽高相同,并须2对齐。

各路图像宽高相同,并须2对齐。

Stride

输入图像的stride的须256对齐,并且各路图像的stride须相等。

各路图像的stride不要求相等,要求16对齐。

各路图像的stride不要求相等,要求16对齐。

像素格式

各路图像相同,仅支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420。

各路图像相同,支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420,OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422或单分量。

各路图像相同,支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420,OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422或单分量。

视频格式

各路图像相同,仅支持TILE_16x8

各路图像相同,仅支持LINEAR

各路图像相同,仅支持LINEAR

压缩模式

支持TILE压缩或者非压格式,各路图像的压缩模式要求相同。

支持非压或者SEG或SEG_COMPACT压缩模式。各路图像要求相同。

支持非压或者SEG压缩模式。在非压缩输出时还支持输入SEG_COMPACT压缩模式。各路图像要求相同

动态范围

各路图像的动态范围相同。

各路图像的动态范围相同。

各路图像的动态范围相同。

【举例】

无。

【相关主题】

无。

ss_mpi_avs_destroy_grp

【描述】

销毁一个AVS GROUP。

【语法】

td_s32 ss_mpi_avs_destroy_grp(ot_avs_grp grp);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • 组必须已经创建。

  • 调用此接口之前,必须先调用ss_mpi_avs_stop_grp禁用此GROUP。

  • 调用此接口时,会一直等待此GROUP当前任务处理结束才会真正销毁。

【举例】

无。

【相关主题】

无。

ss_mpi_avs_start_grp

【描述】

启用AVS GROUP。

【语法】

td_s32 ss_mpi_avs_start_grp(ot_avs_grp grp);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • 组必须已经创建。

  • 重复调用该函数启用同一个组返回成功。

【举例】

无。

【相关主题】

无。

ss_mpi_avs_stop_grp

【描述】

禁用AVS GROUP。

【语法】

td_s32 ss_mpi_avs_stop_grp(ot_avs_grp grp);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • 组必须已经创建。

  • 重复调用该函数禁用同一个组返回成功。

【举例】

无。

【相关主题】

ss_mpi_avs_start_grp

ss_mpi_avs_reset_grp

【描述】

重置AVS GROUP。

【语法】

td_s32 ss_mpi_avs_reset_grp(ot_avs_grp grp);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

组必须已经创建。

【举例】

无。

【相关主题】

ss_mpi_avs_start_grp

ss_mpi_avs_close_fd

【描述】

关闭组和通道的文件描述符。

【语法】

td_s32 ss_mpi_avs_close_fd(td_void);

【参数】

无。

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

该接口不能与其它的AVS接口同时调用,用户须保证该接口与其他接口在时间上是串行调用的。

【举例】

无。

【相关主题】

无。

ss_mpi_avs_get_grp_attr

【描述】

获取AVS GROUP属性。

【语法】

td_s32 ss_mpi_avs_get_grp_attr(ot_avs_grp grp,ot_avs_grp_attr *grp_attr);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

grp_attr

AVS GROUP属性指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

组必须已经创建。

【举例】

无。

【相关主题】

ss_mpi_avs_create_grp

ss_mpi_avs_set_grp_attr

【描述】

设置AVS GROUP属性。

【语法】

td_s32 ss_mpi_avs_set_grp_attr(ot_avs_grp grp, const ot_avs_grp_attr *grp_attr);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

grp_attr

AVS GROUP属性指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • 组必须已经创建。

  • GROUP属性必须合法,其中部分静态属性不可动态设置,具体请参见ot_avs_grp_attr。

  • 如果使用该接口动态切换投影模式,要确保工作空间大小working_set_size满足目标投影模式需要的大小,否则切换不成功。

【举例】

无。

【相关主题】

ss_mpi_avs_get_grp_attr

ss_mpi_avs_send_pipe_frame

【描述】

用户向AVS GROUP上的PIPE发送图像。

【语法】

td_s32 ss_mpi_avs_send_pipe_frame(ot_avs_grp grp, ot_avs_pipe pipe, const ot_video_frame_info *frame_info, td_s32 milli_sec);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

pipe

用户送入图像的管道号。取值范围为[0, OT_AVS_PIPE_NUM)

输入

frame_info

待发送的图像信息。ot_video_frame_info具体描述请参见系统控制章节。

输入

milli_sec

  • 超时参数milli_sec设为-1时,为阻塞发送;
  • 0时为非阻塞发送;
  • 大于0时为超时等待发送时间,超时时间的单位为毫秒(ms)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

组必须已经创建。

【举例】

无。

【相关主题】

无。

ss_mpi_avs_get_pipe_frame

【描述】

用户从AVS GROUP上的PIPE获取一帧原始图像。

【语法】

td_s32 ss_mpi_avs_get_pipe_frame(ot_avs_grp grp, ot_avs_pipe pipe, ot_video_frame_info *frame_info, td_s32 milli_sec);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

pipe

用户送入图像的管道号。取值范围为[0, OT_AVS_PIPE_NUM)

输入

frame_info

获取的图像信息。ot_video_frame_info具体描述请参见“系统控制”章节。

输出

milli_sec

  • 超时参数milli_sec设为-1时,为阻塞获取;
  • 0时为非阻塞获取;

大于0时为超时等待获取时间,超时时间的单位为毫秒(ms)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • GROUP必须已创建。

  • 获取的图像要及时释放,否则将造成VB不够的情况,建议与ss_mpi_avs_release_pipe_frame接口配对使用。

【相关主题】

ss_mpi_avs_release_pipe_frame

ss_mpi_avs_release_pipe_frame

【描述】

用户释放一帧原始图像。

【语法】

td_s32 ss_mpi_avs_release_pipe_frame(ot_avs_grp grp, ot_avs_pipe pipe, const ot_video_frame_info *frame_info);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

pipe

AVS PIPE号。

取值范围[0, OT_AVS_PIPE_NUM)。

输入

frame_info

图像信息。ot_video_frame_info具体描述请参见“系统控制”章节。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • 实际上,此接口的grp和pipe参数并无实际用途,可在取值范围内任意设置。

  • 此接口需与ss_mpi_avs_get_pipe_frame配对使用。

【举例】

无。

【相关主题】

ss_mpi_avs_get_pipe_frame

ss_mpi_avs_set_chn_attr

【描述】

设置AVS通道属性。

【语法】

td_s32 ss_mpi_avs_set_chn_attr(ot_avs_grp grp, ot_avs_chn chn, const ot_avs_chn_attr *chn_attr);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

chn

AVS 通道号。

OT_AVS_MODE_BLEND模式下取值范围[0, OT_AVS_MAX_CHN_NUM)

OT_AVS_MODE_NOBLEND_VEROT_AVS_MODE_NOBLEND_HOROT_AVS_MODE_NOBLEND_QR模式下只能取0

OT_AVS_PROJECTION_CUBE_MAP投影模式下只能取0

输入

chn_attr

AVS通道属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • GROUP必须已创建。

  • 必须要先设置通道0的属性,才能设置其他通道的属性。

  • OT_AVS_MODE_NOBLEND_VER、OT_AVS_MODE_NOBLEND_HOR和OT_AVS_MODE_NOBLEND_QR模式下,只能设置0通道的属性。

  • 在OT_AVS_PROJECTION_CUBE_MAP投影模式下,只能设置0通道的属性。

【举例】

无。

【相关主题】

ss_mpi_avs_get_chn_attr

ss_mpi_avs_get_chn_attr

【描述】

获取AVS通道属性。

【语法】

td_s32 ss_mpi_avs_get_chn_attr(ot_avs_grp grp, ot_avs_chn chn, ot_avs_chn_attr *chn_attr);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)

输入

chn

AVS 通道号。

取值范围:[0, OT_AVS_MAX_CHN_NUM)

输入

chn_attr

AVS通道属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • GROUP必须已创建。

  • 如果没有设置通道属性就获取,获取的值为0。

【举例】

无。

【相关主题】

ss_mpi_avs_set_chn_attr

ss_mpi_avs_enable_chn

【描述】

启用AVS通道。

【语法】

td_s32 ss_mpi_avs_enable_chn(ot_avs_grp grp, ot_avs_chn chn);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

chn

AVS 通道号。

取值范围[0, OT_AVS_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • GROUP必须已创建。

  • 必须先使用ss_mpi_avs_set_chn_attr接口设置通道属性才能启用通道。

  • 通道0启用后才能启用其他的通道。

  • 在OT_AVS_PROJECTION_CUBE_MAP投影模式下,只能使能0通道。

  • 多次启用通道返回成功。

【举例】

无。

【相关主题】

无。

ss_mpi_avs_disable_chn

【描述】

禁用AVS通道

【语法】

td_s32 ss_mpi_avs_disable_chn(ot_avs_grp grp, ot_avs_chn chn);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

chn

AVS 通道号。

取值范围:[0, OT_AVS_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • GROUP必须已创建。

  • 通道0要在其他的通道都禁用了之后才能禁用。

  • 重复禁用通道返回成功。

【举例】

无。

【相关主题】

无。

ss_mpi_avs_get_chn_frame

【描述】

用户获取一帧通道图像

【语法】

td_s32 ss_mpi_avs_get_chn_frame(ot_avs_grp grp, ot_avs_chn chn, ot_video_frame_info *frame_info, td_s32 milli_sec);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

chn

AVS 通道号。

取值范围[0, OT_AVS_MAX_CHN_NUM)。

输入

frame_info

获取的图像信息。ot_video_frame_info具体描述请参见“系统控制”章节。

输出

milli_sec

  • 超时参数milli_sec设为-1时,为阻塞获取;
  • 0时为非阻塞获取;
  • 大于0时为超时等待获取时间,超时时间的单位为毫秒(ms)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • GROUP必须已创建。

  • 只有设置通道队列深度不为0,才能获取到图像。

  • 获取的图像要及时释放,否则将造成VB不够的情况,建议与ss_mpi_avs_release_chn_frame接口配对使用。

【相关主题】

ss_mpi_avs_release_chn_frame

ss_mpi_avs_release_chn_frame

【描述】

用户释放一帧通道图像。

【语法】

td_s32 ss_mpi_avs_release_chn_frame(ot_avs_grp grp, ot_avs_chn chn, const ot_video_frame_info *frame_info);

【参数】

参数名称

描述

输入/输出

grp

AVS GROUP号。

取值范围:[0, OT_AVS_MAX_GRP_NUM)。

输入

chn

AVS 通道号。

取值范围:[0, OT_AVS_MAX_CHN_NUM)。

输入

frame_info

图像信息。ot_video_frame_info具体描述请参见“系统控制”章节。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • 实际上,此接口的grp和chn参数并无实际用途,可在取值范围内任意设置。

  • 此接口需与ss_mpi_avs_get_chn_frame配对使用。

【举例】

无。

【相关主题】

ss_mpi_avs_get_chn_frame

ss_mpi_avs_get_mod_param

【描述】

获取AVS模块参数。

【语法】

td_s32 ss_mpi_avs_get_mod_param(ot_avs_mod_param *mod_param);

【参数】

参数名称

描述

输入/输出

mod_param

AVS模块参数结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

AVS模块要加载后才能获取模块参数。

【举例】

无。

【相关主题】

ss_mpi_avs_set_mod_param

ss_mpi_avs_set_mod_param

【描述】

设置AVS模块参数。

【语法】

td_s32 ss_mpi_avs_set_mod_param(const ot_avs_mod_param *mod_param);

【参数】

参数名称

描述

输入/输出

mod_param

AVS模块参数结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,请参见错误码

【需求】

  • 头文件:ot_common_avs.h、ss_mpi_avs.h

  • 库文件:libss_mpi.a

【注意】

  • AVS模块必须已经加载。

  • 该接口应该在创建第一个AVS融合拼接组之前调用,否则不会生效。

  • 如果不调用该接口,系统会使用默认值。

【举例】

无。

【相关主题】

ss_mpi_avs_get_mod_param

数据类型

AVS模块相关数据类型定义如下:

  • OT_AVS_MAX_GRP_NUM:定义AVS最大GROUP个数。

  • OT_AVS_PIPE_NUM:定义AVS最大PIPE个数。

  • OT_AVS_MAX_CHN_NUM:定义AVS最大通道个数。

  • OT_AVS_SPLIT_NUM:定义AVS分割拼接的分割数。

  • OT_AVS_SPLIT_PIPE_NUM:定义AVS在分割拼接时一个分割中最多的拼接路数。

  • OT_AVS_CUBE_MAP_SURFACE_NUM:定义AVS立方体投影的面的个数。

  • OT_AVS_MAX_IN_WIDTH:定义AVS输入图像的最大宽度。

  • OT_AVS_MAX_IN_HEIGHT:定义AVS输入图像的最大高度。

  • OT_AVS_BLEND_MIN_IN_WIDTH:定义AVS融合拼接时输入图像的最小宽度。

  • OT_AVS_BLEND_MIN_IN_HEIGHT:定义AVS融合拼接时输入图像的最小高度。

  • OT_AVS_NO_BLEND_MIN_IN_WIDTH:定义AVS非融合拼接时输入图像的最小宽度。

  • OT_AVS_NO_BLEND_MIN_IN_HEIGHT:定义AVS非融合拼接时输入图像的最小高度。

  • OT_AVS_MAX_OUT_WIDTH:定义AVS输出图像的最大宽度。

  • OT_AVS_MAX_OUT_HEIGHT:定义AVS输出图像的最大高度。

  • OT_AVS_MIN_OUT_WIDTH:定义AVS融合拼接时输出图像的最小宽度。

  • OT_AVS_MIN_OUT_HEIGHT:定义AVS融合拼接时输出图像的最小高度。

  • ot_avs_grp:定义AVS GROUP类型。

  • ot_avs_pipe:定义AVS PIPE类型。

  • ot_avs_chn:定义AVS通道类型。

  • ot_avs_mode:定义AVS工作模式。

  • ot_avs_lut_accuracy:定义查找表的精度。

  • ot_avs_lut:定义查找表属性。

  • ot_avs_projection_mode:定义拼接输出投影模式。

  • ot_avs_gain_mode:定义亮度增益补偿模式。

  • ot_avs_gain_attr:定义亮度增益补偿属性。

  • ot_avs_rotation:定义AVS旋转属性。

  • ot_avs_fov:定义AVS视场角。

  • ot_avs_split_attr:定义分割属性。

  • ot_avs_cube_map_attr:定义立方体投影属性。

  • ot_avs_out_attr:定义AVS拼接输出属性。

  • ot_avs_grp_attr:定义AVS GROUP属性。

  • ot_avs_chn_attr:定义AVS通道属性。

  • ot_avs_mod_param:定义AVS模块参数。

OT_AVS_MAX_GRP_NUM

【说明】

定义AVS最大GROUP个数。

【定义】

#define OT_AVS_MAX_GRP_NUM          32

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_PIPE_NUM

【说明】

定义AVS最大PIPE个数。

【定义】

#define OT_AVS_PIPE_NUM             4

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_MAX_CHN_NUM

【说明】

定义AVS最大通道个数。

【定义】

#define OT_AVS_MAX_CHN_NUM          2

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_SPLIT_NUM

【说明】

定义AVS分割拼接的分割数。

【定义】

#define OT_AVS_SPLIT_NUM            2

【注意事项】

该宏定义在SS928V100上没有意义。

【相关数据类型及接口】

无。

OT_AVS_SPLIT_PIPE_NUM

【说明】

定义AVS在分割拼接时一个分割中最多的拼接路数。

【定义】

#define OT_AVS_SPLIT_PIPE_NUM       4

【注意事项】

该宏定义在SS928V100上没有意义。

【相关数据类型及接口】

无。

OT_AVS_CUBE_MAP_SURFACE_NUM

【说明】

定义AVS立方体投影的面的个数。

【定义】

#define OT_AVS_CUBE_MAP_SURFACE_NUM   6

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_MAX_IN_WIDTH

【说明】

定义AVS输入图像的最大宽度。

【定义】

#define OT_AVS_MAX_IN_WIDTH         8192

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_MAX_IN_HEIGHT

【说明】

定义AVS输入图像的最大高度。

【定义】

#define OT_AVS_MAX_IN_HEIGHT        8192

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_BLEND_MIN_IN_WIDTH

【说明】

定义AVS融合拼接时输入图像的最小宽度。

【定义】

#define OT_AVS_BLEND_MIN_IN_WIDTH         1280

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_BLEND_MIN_IN_HEIGHT

【说明】

定义AVS融合拼接时输入图像的最小高度。

【定义】

#define OT_AVS_BLEND_MIN_IN_HEIGHT        720

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_NO_BLEND_MIN_IN_WIDTH

【说明】

定义AVS非融合拼接时输入图像的最小宽度。

【定义】

#define OT_AVS_NO_BLEND_MIN_IN_WIDTH         64

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_NO_BLEND_MIN_IN_HEIGHT

【说明】

定义AVS非融合拼接时输入图像的最小高度。

【定义】

#define OT_AVS_NO_BLEND_MIN_IN_HEIGHT        64

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_MAX_OUT_WIDTH

【说明】

定义AVS输出图像的最大宽度。

【定义】

#define OT_AVS_MAX_OUT_WIDTH        16384

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_MAX_OUT_HEIGHT

【说明】

定义AVS输出图像的最大高度。

【定义】

#define OT_AVS_MAX_OUT_HEIGHT       8192

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_MIN_OUT_WIDTH

【说明】

定义AVS融合拼接时输出图像的最小宽度。

【定义】

#define OT_AVS_MIN_OUT_WIDTH        256

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AVS_MIN_OUT_HEIGHT

【说明】

定义AVS融合拼接时输出图像的最小高度。

【定义】

#define OT_AVS_MIN_OUT_HEIGHT       256

【注意事项】

无。

【相关数据类型及接口】

无。

ot_avs_grp

【说明】

定义AVS GROUP类型。

【定义】

typedef   td_s32 ot_avs_grp;

【注意事项】

无。

【相关数据类型及接口】

无。

ot_avs_pipe

【说明】

定义AVS PIPE类型。

【定义】

typedef   td_s32 ot_avs_pipe;

【注意事项】

无。

【相关数据类型及接口】

无。

ot_avs_chn

【说明】

定义AVS通道类型。

【定义】

typedef   td_s32 ot_avs_chn;

【注意事项】

无。

【相关数据类型及接口】

无。

ot_avs_mode

【说明】

定义AVS工作模式。

【定义】

typedef enum {
    OT_AVS_MODE_BLEND = 0,
    OT_AVS_MODE_NOBLEND_VER = 1,
    OT_AVS_MODE_NOBLEND_HOR = 2,
    OT_AVS_MODE_NOBLEND_QR = 3,
    OT_AVS_MODE_BUTT
} ot_avs_mode;

【成员】

成员名称

描述

OT_AVS_MODE_BLEND

融合拼接模式,根据LUT拼接,在拼接处有融合。

OT_AVS_MODE_NOBLEND_VER

垂直非融合拼接模式。将输入的各路图像垂直放在一起,拼接处没有融合。

OT_AVS_MODE_NOBLEND_HOR

水平非融合拼接模式。将输入的各路图像水平放在一起,拼接处没有融合。

OT_AVS_MODE_NOBLEND_QR

田字形非融合拼接模式。仅支持4路图像的拼接,两行摆放,每行两路放在一起,拼接处没有融合。

【注意事项】

表 1 各模式下的输入分辨率

拼接模式

分辨率

最小宽度

最大宽度

最小高度

最大高度

BLEND

OT_AVS_BLEND_MIN_IN_WIDTH

OT_AVS_MAX_IN_WIDTH

OT_AVS_BLEND_MIN_IN_HEIGHT

OT_AVS_MAX_IN_HEIGHT

NOBLEND_VER

OT_AVS_NO_BLEND_MIN_IN_WIDTH

OT_AVS_MAX_IN_WIDTH

OT_AVS_NO_BLEND_MIN_IN_HEIGHT

OT_AVS_MAX_IN_HEIGHT

NOBLEND_HOR

OT_AVS_NO_BLEND_MIN_IN_WIDTH

4096

OT_AVS_NO_BLEND_MIN_IN_HEIGHT

OT_AVS_MAX_IN_HEIGHT

NOBLEND_QR

OT_AVS_NO_BLEND_MIN_IN_WIDTH

4096

OT_AVS_NO_BLEND_MIN_IN_HEIGHT

OT_AVS_MAX_IN_HEIGHT

【相关数据类型及接口】

ot_avs_lut_accuracy

【说明】

定义查找表的精度。

【定义】

typedef enum {
    OT_AVS_LUT_ACCURACY_HIGH = 0, 
    OT_AVS_LUT_ACCURACY_LOW = 1, 
    OT_AVS_LUT_ACCURACY_BUTT
} ot_avs_lut_accuracy;

【成员】

成员名称

描述

OT_AVS_LUT_ACCURACY_HIGH

查找表高精度。

OT_AVS_LUT_ACCURACY_LOW

查找表低精度。

【注意事项】

  • 查找表的精度须与标定时的精度选择一致,否则AVS无法正常工作。

  • 查找表精度高,拼接更准确,但拼接性能会比低精度查找表时有所下降。

【相关数据类型及接口】

无。

ot_avs_lut

【说明】

定义查找表属性。

【定义】

typedef struct {
    ot_avs_lut_accuracy accuracy; 
    td_phys_addr_t phys_addr[OT_AVS_PIPE_NUM];
} ot_avs_lut;

【成员】

成员名称

描述

accuracy

查找表的精度,须和标定的配置一致。

phys_addr[OT_AVS_PIPE_NUM]

各路查找表的物理地址,查找表数据来自标定。

【注意事项】

  • phys_addr要求256对齐,并且是有效的MMZ内存。

  • 用户须保证查找表的物理地址和其中的内容正确有效,不然可能会发生卡死的情况。

  • accuracy须和标定时候的值一致。

【相关数据类型及接口】

ot_avs_out_attr

ot_avs_projection_mode

【说明】

定义拼接输出投影模式。

【定义】

typedef enum {
    OT_AVS_PROJECTION_EQUIRECTANGULAR = 0, 
    OT_AVS_PROJECTION_RECTILINEAR = 1, 
    OT_AVS_PROJECTION_CYLINDRICAL = 2, 
    OT_AVS_PROJECTION_CUBE_MAP = 3, 
    OT_AVS_PROJECTION_BUTT
} ot_avs_projection_mode;

【成员】

成员名称

描述

OT_AVS_PROJECTION_EQUIRECTANGULAR

等距柱面投影模式。

OT_AVS_PROJECTION_RECTILINEAR

直线投影模式。

OT_AVS_PROJECTION_CYLINDRICAL

柱面投影模式。

OT_AVS_PROJECTION_CUBE_MAP

立方体投影模式。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_avs_gain_mode

【说明】

定义亮度增益补偿模式。

【定义】

typedef enum {
    OT_AVS_GAIN_MODE_MANUAL = 0, 
    OT_AVS_GAIN_MODE_AUTO = 1, 
    OT_AVS_GAIN_MODE_BUTT
} ot_avs_gain_mode;

【成员】

成员名称

描述

OT_AVS_GAIN_MODE_MANUAL

手动模式,用户手动配置亮度增益补偿值。

OT_AVS_GAIN_MODE_AUTO

自动模式,AVS自动统计拼接处的亮度差异,自动进行亮度增益补偿。

【注意事项】

  • 如果创建了多个使用OT_AVS_MODE_BLEND模式的AVS GROUP,只能使用手动模式。

  • 使用OT_AVS_PROJECTION_CUBE_MAP投影模式时,只能使用手动模式。

  • 自动模式下,AVS亮度增益补偿滞后一帧。

【相关数据类型及接口】

无。

ot_avs_gain_attr

【说明】

定义亮度增益补偿属性。

【定义】

typedef struct {
    ot_avs_gain_mode mode;
    td_s32 coef[OT_AVS_PIPE_NUM];
} ot_avs_gain_attr;

【成员】

成员名称

描述

mode

亮度增益补偿模式。

coef[OT_AVS_PIPE_NUM]

在手动模式下的各路亮度增益值。取值范围:[0, 65535], 配置为16384时亮度不校正,比16384小时图像变暗,比16384大时图像变亮。

【注意事项】

  • coef[OT_AVS_PIPE_NUM]只有在手动模式下才有效。

  • 使用OT_AVS_PROJECTION_CUBE_MAP投影模式时,只能使用手动模式,并且各路增益值要求一致。

  • 亮度增益模块虽然支持0~4倍调整,实际使用时建议控制在合理范围内调整,当增益倍数大于2倍时,图像较容易产生对比度过强、细节损失等不自然现象。

【相关数据类型及接口】

无。

ot_avs_rotation

【说明】

定义AVS旋转属性。

【定义】

typedef struct {
    td_s32 yaw; 
    td_s32 pitch; 
    td_s32 roll; 
} ot_avs_rotation;

【成员】

成员名称

描述

yaw

偏航角,取值范围:[-18000, 18000],单位:0.01°。

pitch

俯仰角,取值范围:[-18000, 18000],单位:0.01°。

roll

翻滚角,取值范围:[-18000, 18000],单位:0.01°。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_avs_fov

【说明】

定义AVS视场角。

【定义】

typedef struct {
    td_u32 fov_x; 
    td_u32 fov_y; 
} ot_avs_fov;

【成员】

成员名称

描述

fov_x

水平方向上的视场角。单位:0.01°

  • 当投影模式为EQUIRECTANGULAR时,取值范围:[1000, 36000];
  • 当投影模式为RECTILINEAR时,取值范围:[1000, 15000];
  • 当投影模式为CYLINDRICAL时,取值范围:[1000, 36000]

fov_y

垂直方向上的视场角。单位:0.01°

  • 当投影模式为EQUIRECTANGULAR时,取值范围:[1000, 18000];
  • 当投影模式为RECTILINEAR时,取值范围:[1000, 15000];
  • 当投影模式为CYLINDRICAL时,取值范围:[1000, 15000]

【注意事项】

当投影模式为OT_AVS_PROJECTION_CUBE_MAP投影模式时,该参数无效。

【相关数据类型及接口】

无。

ot_avs_split_attr

【说明】

定义分割属性。

【定义】

typedef struct {
    td_u32 pipe_num;
    ot_avs_pipe pipe[OT_AVS_SPLIT_PIPE_NUM];
} ot_avs_split_attr;

【成员】

成员名称

描述

pipe_num

该分割拼接中拼接的路数。

pipe[OT_AVS_SPLIT_PIPE_NUM]

该分割拼接中用到图像的pipe号。

【注意事项】

  • 用户须保证分割属性的正确性,否则输出图可能会出现黑块。

  • 在SS928V100上该参数没有意义。

【相关数据类型及接口】

无。

ot_avs_cube_map_attr

【说明】

定义立方体投影属性。

【定义】

typedef struct {
    td_bool bg_color_en;
    td_u32 bg_color;
    td_u32 surface_len;
    ot_point start_point[OT_AVS_CUBE_MAP_SURFACE_NUM]; 
} ot_avs_cube_map_attr;

【成员】

成员名称

描述

bg_color_en

是否使能背景色。

bg_color

背景色属性,格式RGB888。

surface_len

立方体投影的单个面的边长,要求4对齐。取值范围: [256, 4096]

start_point[OT_AVS_CUBE_MAP_SURFACE_NUM]

立方体投影的每一个面在输出图像上的起点位置。不能超出图像,要求4对齐。

【注意事项】

  • 如果未使能背景色,输出图像未铺满的地方会显示随机数据。使能背景色,会增加VGS模块的性能和VB的消耗,如果展开的面填满了输出图像,建议关闭背景色。

  • 展开面不能超出输出图像。

  • OT_AVS_PROJECTION_CUBE_MAP展开时,如果输出配置为压缩,则必须使能背景色。

  • OT_AVS_PROJECTION_CUBE_MAP展开时,如果输出配置为压缩,则起点的X坐标要求256对齐,surface_len也要求256对齐。

【相关数据类型及接口】

无。

ot_avs_out_attr

【说明】

定义AVS拼接输出属性。

【定义】

typedef struct {
    ot_avs_projection_mode projection_mode;
    ot_point center;
    ot_avs_fov fov; 
    ot_avs_rotation orig_rotation;
    ot_avs_rotation rotation; 
    ot_avs_split_attr split_attr[OT_AVS_SPLIT_NUM];
    ot_avs_cube_map_attr cube_map_attr;
} ot_avs_out_attr;

【成员】

成员名称

描述

projection_mode

拼接输出的投影模式。

center

投影中心在输出图中的位置。一般设置为输出图像的中心点,表示投影中心和输出图像中心点重合。

fov

拼接输出区域的视场角。

orig_rotation

拼接输出起始旋转角度属性。

rotation

拼接输出旋转属性。

split_attr[OT_AVS_SPLIT_NUM]

分割拼接时的分割属性。

cube_map_attr

立方体投影属性。

【注意事项】

  • split_attr[OT_AVS_SPLIT_NUM]在SS928V100上不支持,设置了不会生效。

  • center投影中心即为三维球面全景图转换到二维投影输出图的投影中心位置,当投影模式为OT_AVS_PROJECTION_CUBE_MAP时,center不生效。

  • 一般情况下,投影中心与输出图像中心重合,即投影输出图的fov上下左右对称。如需要对输出图像进行裁剪,仅显示部分视野,则可减小fov,同时通过移动投影中心点,选择感兴趣的区域作为输出图。

  • 投影中心点的X和Y的范围是(-16384, 16384)。

  • 投影中心和fov需要一起调节,否则输出图会出现黑块或者杂乱的情况。

  • 投影中心点移动之后,超出最大fov区域不显示图像,可通过减小fov的配置来裁剪超出部分。

【相关数据类型及接口】

无。

ot_avs_grp_attr

【说明】

定义AVS GROUP属性。

【定义】

typedef struct {
    ot_avs_mode mode;
    td_u32 pipe_num;
    td_bool sync_pipe_en;
    ot_avs_lut lut; 
    ot_avs_gain_attr gain_attr; 
    ot_avs_out_attr out_attr;
    ot_frame_rate_ctrl frame_rate;
} ot_avs_grp_attr;

【成员】

成员名称

描述

mode

拼接模式。静态属性,创建GROUP时设定,不可更改。

pipe_num

PIPE数,即拼接路数。取值范围:[1, OT_AVS_PIPE_NUM]。静态属性,创建GROUP时设定不可更改

sync_pipe_en

是否通过PTS进行各路图像的同步。

lut

查找表属性。

gain_attr

亮度增益补偿属性。

out_attr

拼接输出属性。

frame_rate

帧率属性。具体描述请参见“系统控制”章节。

【注意事项】

  • sync_pipe_en如果打开,AVS会根据各路输入图像PTS进行同步,找出PTS最为接近的一组图像进行拼接,会导致AVS占用的VB数目增多,如果有同步要求的拼接使能同步,如果对拼接同步要求不高关闭同步可以达到节省内存的目的。

  • lut、gain_attr以及out_attr只有在OT_AVS_MODE_BLEND模式下才会有效。

【相关数据类型及接口】

无。

ot_avs_chn_attr

【说明】

定义AVS通道属性。

【定义】

typedef struct {
    td_u32 width; 
    td_u32 height; 
    ot_compress_mode compress_mode; 
    ot_dynamic_range dynamic_range; 
    td_u32 depth; 
} ot_avs_chn_attr;

【成员】

成员名称

描述

width

通道宽度,单位:像素,要求4对齐。

height

通道高度,单位:像素,要求4对齐。

compress_mode

通道压缩模式。具体描述请参见“系统控制”章节。

dynamic_range

通道动态范围。具体描述请参见“系统控制”章节。

depth

通道图像队列深度。取值范围:[0, 8]

【注意事项】

  • width、height和dynamic_range只有在OT_AVS_MODE_BLEND拼接模式下才会生效。

  • 仅通道0支持OT_COMPRESS_MODE_SEG压缩,其余通道不支持压缩。

  • 其余通道的高度不能小于通道0的高度的15分之1,不能大于通道0的高度。

  • 其余通道的宽度不能小于通道0的宽度的15分之1,不能大于通道0的宽度的2分之1。

  • 通道图像队列深度在获取通道图像的时候才有用,如没必要,建议设置为0,否则会导致AVS模块VB占用的增加。

  • 通道0的动态范围设置无效,通道0输出的动态范围和输入图相同。

  • SS928V100的非0通道的动态范围只能设置为SDR8。

  • 如果AVS使能的通道没有绑定后端,并且depth为0时,AVS会停止工作。

  • SS927V100所有的OT_AVS_MODE_BLEND模式拼接组通道0的输出总面积最大为3840x2160,SS928V100无此限制。

【相关数据类型及接口】

无。

ot_avs_mod_param

【说明】

定义AVS模块参数。

【定义】

typedef struct {
    td_u32 working_set_size;
} ot_avs_mod_param;

【成员】

成员名称

描述

working_set_size

AVS工作空间的大小,单位KB,默认值为204800。取值范围:(0, 4000000]

【注意事项】

  • working_set_size如果为非4对齐,内部会自动向上4对齐。

  • AVS的工作空间用于AVS内部的DDR交互,working_set_size即用于配置交互DDR的大小。

  • AVS会根据配置的working_set_size大小来自适应交互数据的压缩率。内部使用比特率来表示数据量,非压缩时原始数据大小为80bits,该值越小说明压缩率越大,性能越好,但是图像质量牺牲越大。AVS内部压缩可根据比特率大小自动切换有损及无损压缩。比特率最小为30bits,此时压缩率最大;设置的working_set_size计算得到的比特率比30bit小会报错;最大没有限制,当比特率大于106bits时,此时可保证调用无损压缩;推荐使用比特率为40bits,即平均压缩率约为50%,此时性能较佳,且图像质量基本不下降。比特率与working_set_size的转换公式如下:

    W= I * (R * A + 80 * B + 25179639) / 2^12 (KB)

    W为working_set_size;

    R为比特率;

    I为输入Pipe数;

    A = 1344/4096 * out_width * out_height + 168/64 * (out_width + out_height) + 27

    B = 21/4096 * out_width * out_height + 21/64 * (out_width + out_height ) + 27

    立方体投影模式下,out_width和out_height为立方体投影的单个面的边长;其他投影模式下,out_width为通道0的宽度,out_height为通道0的高度;

    以双鱼眼拼接为例,如果通道0的宽高为6000*3000,比特率为40bits,则working_set_size的计算如下:

    A = 1344/4096 * 6000 * 3000 + 168/64 * (6000 + 3000) + 27= 5929902

    B = 21/4096 * 6000 * 3000 + 21/64 * (6000 + 3000) + 27= 95265.28125

    W = 2 * (40 * 5929902 + 80 * 95265.28125 + 25179639)/2^12 = 131834.43KB

【相关数据类型及接口】

无。

错误码

全景拼接API错误码如下所示。

表 1 AVS API错误码

错误代码

宏定义

描述

0xa0068001

OT_ERR_AVS_INVALID_DEVID

AVS GROUP号无效

0xa0068003

OT_ERR_AVS_INVALID_CHNID

AVS通道号无效

0xa0068007

OT_ERR_AVS_ILLEGAL_PARAM

AVS参数设置无效

0xa0068008

OT_ERR_AVS_EXIST

AVS GROUP已创建

0xa0068009

OT_ERR_AVS_UNEXIST

AVS GROUP未创建

0xa006800a

OT_ERR_AVS_NULL_PTR

输入参数空指针错误

0xa006800c

OT_ERR_AVS_NOT_SUPPORT

操作不支持

0xa006800d

OT_ERR_AVS_NOT_PERM

操作不允许

0xa0068002

OT_ERR_AVS_INVALID_PIPEID

AVS PIPE号无效

0xa0068014

OT_ERR_AVS_NO_MEM

分配内存失败

0xa0068015

OT_ERR_AVS_NO_BUF

分配BUF失败

0xa0068016

OT_ERR_AVS_BUF_EMPTY

图像队列为空

0xa0068018

OT_ERR_AVS_NOT_READY

AVS系统未初始化

0xa0068022

OT_ERR_AVS_BUSY

AVS系统忙