几何畸变矫正子系统

概述

几何畸变矫正(Geometric Distortion Correction,以下简称GDC)子系统实现的功能:对一帧图像进行鱼眼校正(包括360°全景、180°全景和Normal三种校正模式)、LDC(镜头畸变校正)校正、展宽、旋转、PMF矫正、输出图像拼接和输出图像打背景色功能。

须知:

  • 仅SS928V100/SS927V100/SS626V100支持此模块。

  • SS626V100不支持LDC、展宽、低延时功能。

功能描述

基本概念

  • job

    GDC管理task的结构,一个job里可以包含多个task,GDC保证task按照添加到job的顺序执行,并且保证一个job里的所有task一次性提交硬件执行。用户可以通过GDC的模块参数(g_max_gdc_job)设置GDC支持的最大job数。job数取值范围为[20, 400],默认值为128。

  • task

    对一幅图像完成具体的一个或多个操作,比如鱼眼校正、LDC矫正等。用户可以通过GDC的模块参数(g_max_gdc_task)设置GDC支持的最大task数。task数取值范围为[20, 800],默认值为200。

  • node

    GDC硬件的最小执行单位(对硬件而言),一个task对应一个node。node中包含硬件工作需要的信息,比如源的地址,目标的地址,操作的类型等,并按照硬件要求的形式组织。用户可以通过GDC的模块参数(g_max_gdc_node)设置GDC支持的最大node数。node数取值范围为[20, 800],默认值为200。

功能描述

GDC的功能主要有鱼眼校正(包含矫正后的输出图像拼接、输出图像打背景色等功能)、镜头畸变校正、展宽、旋转、PMF矫正等。

  • 鱼眼校正

    GDC支持对一幅图像进行鱼眼校正处理。

    须知:

    • 鱼眼校正支持三种校正模式,360°全景模式,180°全景模式,normal模式。

    • 360°全景模式支持地装和顶装;180°全景模式支持壁装;normal模式支持地装,顶装,壁装。

    • 鱼眼功能在算法处理时,算法计算分块大小跟图像输出的宽高,out_radius,模式有关。分块越多耗时越大,out_radius最大配置为max(图像输出宽,图像输出高) 的一半,若超出分块数会明显增加,硬件耗时也会显著增加。

    GDC支持对一幅图像进行鱼眼校正的同时进行缩放处理。鱼眼缩放效果不好,建议使用典型参数设置,尽量不使用GDC对鱼眼矫正后图像进行缩放。

    须知: 鱼眼输入输出图像规格见表1所示。支持在进行鱼眼校正的同时,在输出图像允许的范围内对图像进行缩放。

  • 镜头畸变校正

    GDC支持对一幅图像进行镜头畸变校正处理。

  • 展宽

    GDC支持对一幅图像进行远端展宽处理。

    须知: 使用GDC进行镜头畸变校正或展宽处理时,输入图像大小与输出图像大小必须一致,不支持同时进行缩放。

  • 旋转

    GDC支持对一帧图像进行固定角度或任意角度旋转,固定角度旋转不支持压缩输出。固定角度旋转只有在和LDC、DIS或者展宽任务组合时才由GDC完成,否则由VGS完成。

  • PMF矫正

    GDC支持对一帧图像进行PMF矫正处理,可实现平面图像的投影变换,详细说明参见《GDC调试指南》。

  • 压缩

    GDC只支持LINEAR格式的非压缩图像输入,只支持LINEAR格式的压缩/非压缩图像输出。

  • 输出图像拼接

    GDC支持对一幅图像的多个区域分别进行FISHEYE校正,并对校正后的图像进行拼接后输出。非压缩输出时,各区域的x坐标要求16对齐,y坐标要求2对齐;压缩输出时,各区域的x坐标要求256对齐,各区域的宽要求256对齐或等于输出图像宽与该区域x坐标的差值,y坐标都要求2对齐。

    须知: 这里的输出图像拼接是指在同一个VI或VPSS的通道内,最多支持对4个区域分别进行校正,并将校正后的图像拼接为一幅图像输出。多个通道之间的鱼眼校正处理输出,不支持拼接输出。

  • 输出图像打背景色

    FISHEYE矫正时支持对输出的图像打背景色,用于输出有缝隙拼接。无缝拼接输出时建议关闭背景色,节省性能。

表 1 SS928V100 GDC硬件规格

规格点

描述

视频输入数据格式

  • 只支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420和OT_PIXEL_FORMAT_YUV_400格式输入。
  • 只支持LINEAR格式
  • 只支持非压缩图像。
  • 只支持8Bit的YUV数据。

输入图像分辨率

  • 最小支持:鱼眼校正为1280*720,镜头畸变校正为640x480,展宽为640x480,固定角度旋转为360x360,任意角度旋转为480x360,PMF矫正为480x360。
  • 最大支持:8192x8192。
  • 宽度和高度均为2像素对齐,stride 16对齐。

视频输出数据格式

  • 只支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420和OT_PIXEL_FORMAT_YUV_400格式输出。
  • 只支持LINEAR格式
  • 支持非压缩和段压缩图像。
  • 只支持8Bit的YUV数据。

输出图像分辨率

  • 最小支持:鱼眼校正为640x360,镜头畸变校正为640x480,展宽为640x480,固定角度旋转为360x360,任意角度旋转为480x360,PMF矫正为480x360。
  • 最大支持:8192x8192。
  • 高度为2像素对齐;非压缩输出时宽为2像素对齐,压缩输出时为256对齐,或等于输出宽大小减去该校正区域的x坐标。stride 16对齐。

缩放能力

镜头畸变校正、展宽不支持缩放。

性能

3840x2160@60fps

表 2 SS626V100 GDC硬件规格

规格点

描述

视频输入数据格式

  • 只支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420和OT_PIXEL_FORMAT_YUV_400格式输入。
  • 只支持LINEAR格式。
  • 只支持非压缩图像。
  • 只支持8Bit的YUV数据。

输入图像分辨率

  • 最小支持:鱼眼校正为1280x720,固定角度旋转为360x360,任意角度旋转为480x360,PMF矫正为480x360。
  • 最大支持:8192x8192。
  • 宽度和高度均为2像素对齐,stride 16对齐。

视频输出数据格式

  • 只支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420和OT_PIXEL_FORMAT_YUV_400格式输出。
  • 只支持LINEAR格式
  • 支持非压缩和段压缩图像。
  • 只支持8Bit的YUV数据。

输出图像分辨率

  • 最小支持:鱼眼校正为640x360,固定角度旋转为360x360,任意角度旋转为480x360,PMF矫正为480x360。
  • 最大支持:8192x8192。
  • 高度为2像素对齐;非压缩输出时宽为2像素对齐,压缩输出时为256对齐,或等于输出宽大小减去该校正区域的x坐标。stride 16对齐。

缩放能力

各功能支持缩放

性能

16M@30fps

说明: 鱼眼矫正模式中,不同配置下处理的计算量和带宽差别较大,非典型配置可能会出现性能不足的情况。 GDC做像素格式转换,仅支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420或OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420转成OT_PIXEL_FORMAT_YUV_400。

鱼眼标定工具库

根据鱼眼镜头获取鱼眼原图自动确定鱼眼镜头的位置特性(偏移、半径)。该标定工具库需要配合鱼眼镜头使用。

鱼眼标定工具库的详细说明和API参考请查看《GDC调试指南》。

API参考

用户需要调用VI模块或VPSS模块中提供的以下MPI接口打开或关闭功能,并设置GDC功能相关属性,具体请参考“视频输入”章节和“视频处理子系统”章节。

  • ss_mpi_vi_set_pipe_fisheye_cfg:设置VI PIPE对应的鱼眼镜头LMF参数配置。

  • ss_mpi_vi_get_pipe_fisheye_cfg:获取VI PIPE对应的鱼眼镜头LMF参数配置。

  • ss_mpi_vi_set_chn_fisheye:设置VI通道对应的鱼眼属性。

  • ss_mpi_vi_get_chn_fisheye:获取VI通道对应的鱼眼属性。

  • ss_mpi_vi_set_chn_spread_attr:设置VI通道展宽属性。

  • ss_mpi_vi_get_chn_spread_attr:获取VI通道展宽属性。

  • ss_mpi_vi_set_chn_ldc_attr:设置VI镜头畸变校正(LDC)属性。

  • ss_mpi_vi_get_chn_ldc_attr:获取VI镜头畸变校正(LDC)属性。

  • ss_mpi_vi_ldc_pos_query_dst_to_src:根据镜头畸变校正(LDC)的输出图像坐标点查找输入图像的坐标点。

  • ss_mpi_vi_ldc_pos_query_src_to_dst:根据镜头畸变校正(LDC)的输入图像坐标点查找输出图像的坐标点。

  • ss_mpi_vi_set_chn_rotation:设置VI图像旋转属性。

  • ss_mpi_vi_get_chn_rotation:获取VI图像旋转属性。

  • ss_mpi_vi_fisheye_pos_query_dst_to_src:根据鱼眼校正输出图像坐标点查找源图像坐标点。

  • ss_mpi_vpss_set_grp_fisheye_cfg:设置VPSS GROUP鱼眼镜头LMF参数。

  • ss_mpi_vpss_get_grp_fisheye_cfg:获取VPSS GROUP鱼眼镜头LMF参数。

  • ss_mpi_vpss_set_chn_fisheye:设置VPSS物理通道鱼眼属性。

  • ss_mpi_vpss_get_chn_fisheye:获取VPSS物理通道鱼眼属性。

  • ss_mpi_vpss_set_chn_spread_attr:设置VPSS物理通道展宽属性。

  • ss_mpi_vpss_get_chn_spread_attr:获取VPSS物理通道展宽属性。

  • ss_mpi_vpss_set_chn_ldc_attr:设置VPSS镜头畸变校正(LDC)属性。

  • ss_mpi_vpss_get_chn_ldc_attr:获取VPSS镜头畸变校正(LDC)属性。

  • ss_mpi_vpss_ldc_pos_query_dst_to_src:根据镜头畸变校正(LDC)的输出图像坐标点查找输入图像的坐标点。

  • ss_mpi_vpss_ldc_pos_query_src_to_dst:根据镜头畸变校正(LDC)的输入图像坐标点查找输出图像的坐标点。

  • ss_mpi_vpss_set_chn_rotation:设置VPSS物理通道旋转属性。

  • ss_mpi_vpss_get_chn_rotation:获取VPSS物理通道旋转属性。

  • ss_mpi_vpss_fisheye_pos_query_dst_to_src:根据鱼眼矫正输出图像坐标点查找源图像坐标点。

各MPI接口的具体用法请参考VI和VPSS章节中的MPI接口描述、注意事项及示例。

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

  • ss_mpi_gdc_begin_job:启动一个job。

  • ss_mpi_gdc_set_cfg:设置鱼眼镜头的配置。

  • ss_mpi_gdc_add_correction_task:往一个已经开启的job里添加鱼眼校正task。

  • ss_mpi_gdc_add_correction_ex_task:往一个已经开启的job里添加鱼眼校正task(XY模式)或做黑边检测。

  • ss_mpi_gdc_add_pmf_task: 往一个已经开启的job里添加PMF校正task.

  • ss_mpi_gdc_end_job:提交一个job,GDC开始对这个job进行处理。

  • ss_mpi_gdc_cancel_job:取消一个job。

  • ss_mpi_gdc_fisheye_pos_query_dst_to_src:根据鱼眼校正输出图像坐标点查找源图像坐标点。

  • ss_mpi_gdc_fisheye_multi_pos_query_dst_to_src:根据鱼眼校正输出图像坐标点查找源图像坐标点,支持多点反向查询。

  • ss_mpi_gdc_fisheye_multi_pos_query_src_to_dst:根据源图像坐标点查找鱼眼校正输出图像坐标点,支持多点正向查询。

  • ss_mpi_gdc_set_dsp_lut_cfg:设置dsp lut功能配置。

  • ss_mpi_gdc_get_dsp_lut_cfg:获取dsp lut功能配置。

ss_mpi_gdc_begin_job

【描述】

启动一个job。

【语法】

td_s32 ss_mpi_gdc_begin_job(ot_gdc_handle *handle);

【参数】

参数名称

描述

输入/输出

handle

用以返回handle。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h

  • 库文件:libss_mpi.a

【注意】

  • 可一次开启多个job,但必须判断ss_mpi_gdc_begin_job函数返回成功后才能使用返回的handle。

  • handle不能为空指针或非法指针。

ss_mpi_gdc_set_cfg

【描述】

设置鱼眼镜头的配置。

【语法】

td_s32 ss_mpi_gdc_set_cfg(ot_gdc_handle handle, const ot_gdc_fisheye_job_cfg *job_cfg);

【参数】

参数名称

描述

输入/输出

handle

表示一个已经开启的job的handle。

输入

job_cfg

Job配置指针,包括LMF系数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h、ot_common_video.h

  • 库文件:libss_mpi.a

【注意】

LMF系数的物理地址必须16对齐。

【举例】

请参见ss_mpi_gdc_cancel_job的举例。

ss_mpi_gdc_add_correction_task

【描述】

往一个已经开启的job里添加鱼眼校正task。

【语法】

td_s32 ss_mpi_gdc_add_correction_task(ot_gdc_handle handle, const ot_gdc_task_attr *task, const ot_fisheye_attr *fisheye_attr);

【参数】

参数名称

描述

输入/输出

handle

表示一个已经开启的job的handle。

输入

task

GDC task属性指针。

输入

fisheye_attr

FISHEYE校正区域属性配置指针

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h、ot_common_video.h

  • 库文件:libss_mpi.a

【注意】

  • handle标识的Fisheye矫正job必须是已经开启的job。

  • fisheye_attr中的lmf_en参数为1时,必须在调用ss_mpi_gdc_set_cfg接口后才能调用此接口。

  • task属性必须满足GDC的能力。

  • 各区域不支持做OT_FISHEYE_VIEW_MODE_NO_TRANS任务。

  • 此接口不支持添加背景色功能,即bg_color_en参数不能设置为TRUE;如果需要添加背景色,建议在添加鱼眼矫正任务之前,调用VGS的接口ss_mpi_vgs_add_cover_task对需要添加背景色区域打上背景色。

  • 输出图像为压缩格式时,校正区域数只能设置为1,且设置的区域需要完全覆盖输出图像。

  • 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_gdc_end_job接口提交已经添加的task,否则必须调用ss_mpi_gdc_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。

  • 鱼眼校正支持三种校正模式,360°全景模式,180°全景模式,normal模式。360全景模式支持地装和顶装;180°全景模式支持壁装;normal模式支持地装,顶装,壁装。

【举例】

请参见ss_mpi_gdc_cancel_job的举例。

ss_mpi_gdc_add_correction_ex_task

【描述】

往一个已经开启的job里添加鱼眼校正task(XY模式)或做黑边检测。

【语法】

td_s32 ss_mpi_gdc_add_correction_ex_task(ot_gdc_handle h_handle, const ot_gdc_task_attr *task, const ot_fisheye_attr_ex *fisheye_attrr_ex, td_bool check_mode);

【参数】

参数名称

描述

输入/输出

h_handle

表示一个已经开启的job的handle。

输入

task

GDC task属性指针。

输入

fisheye_attrr_ex

FISHEYE校正区域属性配置指针(XY模式)。

输入

check_mode

检查模式。

  • 取值为TD_TRUE时,为纯黑边检查模式。
  • 取值为TD_FALSE时,为校正模式。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h、ot_common_video.h

  • 库文件:libss_mpi.a

【注意】

  • handle标识的Fisheye矫正job必须是已经开启的job。

  • 在非检查模式下,即check_mode为FALSE,不支持同时开启LMF功能。

  • task属性必须满足GDC的能力。

  • 各区域不支持做OT_FISHEYE_VIEW_MODE_NO_TRANS任务。

  • 在非检查模式下,即check_mode为FALSE,此接口不支持添加背景色功能,即bg_color_en参数不能设置为TRUE;如果需要添加背景色,建议在添加鱼眼矫正任务之前,调用VGS的接口ss_mpi_vgs_add_cover_task对需要添加背景色区域打上背景色。

  • 输出图像为压缩格式时,校正区域数只能设置为1,且设置的区域需要完全覆盖输出图像。

  • 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_gdc_end_job接口提交已经添加的task,否则必须调用ss_mpi_gdc_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。

  • 只支持Normal模式下的黑边检查或者XY模式矫正。

  • 当check_mode为TD_TRUE时:

    • 只会检查参数 task->img_in.video_frame.width,task->img_in.video_frame.height,task->img_out.video_frame.width,task->img_out.video_frame.height、hor_offset、ver_offset、mount_mode、rgn_num、out_radius、in_radius、x、y、hor_zoom、ver_zoom、out_rect.width、out_rect.height的合法性,其他参数不做合法范围检查。当检测到黑边或以上参数非法时,均返回错误码 ;当无黑边及以上参数合法时返回成功。

    • 无论返回值是什么,这个任务都不会添加到任务队列中,后续不能提交任务,否则会报错。

  • 当check_mode为TD_FALSE时:

    对全部参数做合法性检查,当检测到黑边或非法参数时,返回错误码;当无黑边及参数合法时返回成功,并且添加此任务到任务队列中,为后面提交此任务做准备。

【举例】

无。

ss_mpi_gdc_add_pmf_task

【描述】

往一个已经开启的job里添加PMF校正task。

【语法】

td_s32 ss_mpi_gdc_add_pmf_task(ot_gdc_handle handle, const ot_gdc_task_attr *task, const ot_gdc_pmf_attr *gdc_pmf_attr);

【参数】

参数名称

描述

输入/输出

handle

表示一个已经开启的job的handle。

输入

task

GDC task属性指针。

输入

gdc_pmf_attr

PMF参数的结构体指针

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h、ot_common_video.h

  • 库文件:libss_mpi.a

【注意】

  • handle标识的PMF矫正job必须是已经开启的job。

  • gdc_pmf_attr中的PMF参数需要满足的条件参见《GDC 调试指南》中的说明。

  • task属性必须满足GDC的能力。

  • 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_gdc_end_job接口提交已经添加的task,否则必须调用ss_mpi_gdc_cancel_job。接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。

【举例】

无。

ss_mpi_gdc_end_job

【描述】

提交一个job,GDC开始对这个job进行处理。

【语法】

td_s32 ss_mpi_gdc_end_job(ot_gdc_handle handle);

【参数】

参数名称

描述

输入/输出

handle

表示一个已经开启的job的handle。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h

  • 库文件:libss_mpi.a

【注意】

  • handle标识的job必须是已经开启的job。

  • 如果此接口返回失败,必须调用ss_mpi_gdc_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。

【举例】

参见ss_mpi_gdc_begin_job。

ss_mpi_gdc_cancel_job

【描述】

取消一个job。

【语法】

td_s32 ss_mpi_gdc_cancel_job(ot_gdc_handle handle);

【参数】

参数名称

描述

输入/输出

handle

表示一个已经开启的job的handle。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h

  • 库文件:libss_mpi.a

【注意】

handle标识的job必须是已经开启的job。

【举例】

td_s32 ret = TD_SUCCESS;
ot_gdc_handle handle;
ot_gdc_task_attr task;
ot_fisheye_attr fisheye_attr;
ot_gdc_fisheye_job_cfg fisheye_job_cfg;
ret = ss_mpi_gdc_begin_job(&handle);
if (ret != TD_SUCCESS) {
    goto handle_err;
}
ret = ss_mpi_gdc_set_cfg(handle, &fisheye_job_cfg);
if (ret != TD_SUCCESS) {
    ss_mpi_gdc_cancel_job(handle);
    goto handle_err;
}
ret = ss_mpi_gdc_add_correction_task (handle, &task, &fisheye_attr);
if (ret != TD_SUCCESS) {
    ss_mpi_gdc_cancel_job(handle);
    goto handle_err;
}
 
ret = ss_mpi_gdc_end_job(handle);
if (ret != TD_SUCCESS) {
    ss_mpi_gdc_cancel_job(handle);
    goto handle_err;
}

ss_mpi_gdc_fisheye_pos_query_dst_to_src

【描述】

根据鱼眼校正输出图像坐标点查找源图像坐标点。

【语法】

td_s32 ss_mpi_gdc_fisheye_pos_query_dst_to_src(const ot_gdc_fisheye_point_query_attr *fisheye_point_query_attr, const ot_video_frame_info *video_info, const ot_point *dst_point, ot_point *src_point);

【参数】

参数名称

描述

输入/输出

fisheye_point_query_attr

鱼眼矫正坐标点查找属性参数

输入

video_info

鱼眼输入图像帧信息

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

输入

dst_point

鱼眼校正图上需要查找映射关系的坐标点。

ot_point请参考“系统控制”章节

输入

src_point

鱼眼原图上查找到的坐标点。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h、ot_common_video.h

  • 库文件:libss_mpi.a

【注意】

  • 多区域时,每个区域的坐标点按照每个区域单独计算,不能按照拼接之后的图像来计算。

  • 对于video_info结构体的成员中,反向查找计算只用到了width和height两个成员,因此接口只对参数width和height范围做了检查。

  • 对于fisheye_point_query_attr结构体的成员fisheye_attr,它的结构体成员中bg_color_en/bg_color/out_rect中的x和y值不影响反向查找结果,因此接口不对以上参数范围做检查。

  • 支持360°全景模式、180°全景模式、Normal校正模式。

【举例】

无。

ss_mpi_gdc_fisheye_multi_pos_query_dst_to_src

【描述】

根据鱼眼校正输出图像坐标点查找源图像坐标点,支持多点反向查询。

【语法】

td_s32 ss_mpi_gdc_fisheye_multi_pos_query_dst_to_src(const ot_gdc_fisheye_point_query_attr *fisheye_point_query_attr, const ot_video_frame_info *video_info, td_u32 num, const ot_point *dst, ot_point *src);

【参数】

参数名称

描述

输入/输出

fisheye_point_query_attr

鱼眼矫正坐标点查找属性参数

输入

video_info

鱼眼输入图像帧信息

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

输入

num

鱼眼矫正坐标点的查找个数,最多200个。

输入

dst

鱼眼校正图上需要查找映射关系的坐标点。

ot_point请参考“系统控制”章节

输入

src

鱼眼原图上查找到的坐标点。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h、ot_common_video.h

  • 库文件:libss_mpi.a

【注意】

  • 多区域时,每个区域的坐标点按照每个区域单独计算,不能按照拼接之后的图像来计算。

  • 对于video_info结构体的成员中,反向查找计算只用到了width和height两个成员,因此接口只对参数width和height范围做了检查。

  • 对于fisheye_point_query_attr结构体的成员fisheye_attr,它的结构体成员中bg_color_en/bg_color/out_rect中的x和y值不影响反向查找结果,因此接口不对以上参数范围做检查。

  • 支持360°全景模式、180°全景模式、Normal校正模式。

【举例】

td_s32 ret = TD_SUCCESS;
ot_gdc_fisheye_point_query_attr fisheye_point_query_attr;
ot_video_frame_info video_info;
td_u32 point_num = 160;
ot_point *dst = malloc(sizeof(ot_point) * point_num);
ot_point *src = malloc(sizeof(ot_point) * point_num);
if (dst == TD_NULL){
    printf("malloc dst error!\n");
    return TD_FAILURE;
}
if (src == TD_NULL) {
    printf("malloc src error!\n");
    free(dst);
    dst = TD_NULL;
    return TD_FAILURE;
}
ret = ss_mpi_gdc_fisheye_multi_pos_query_dst_to_src(&fisheye_point_query_attr, &video_info, point_num, dst, src);
if (ret != TD_SUCCESS) {
    goto free_mem;
}
free_mem:
if (dst != TD_NULL) {
    free(dst);
    dst = TD_NULL;
}
if (src != TD_NULL) {
    free(src);
    src = TD_NULL;
}
return ret;

ss_mpi_gdc_fisheye_multi_pos_query_src_to_dst

【描述】

根据源图像坐标点查找鱼眼校正输出图像坐标点,支持多点正向查询。

【语法】

td_s32 ss_mpi_gdc_fisheye_multi_pos_query_src_to_dst(const ot_gdc_fisheye_point_query_attr *fisheye_point_query_attr, const ot_video_frame_info *video_info, td_u32 num, const ot_point *src, ot_point *dst);

【参数】

参数名称

描述

输入/输出

fisheye_point_query_attr

鱼眼矫正坐标点查找属性参数

输入

video_info

鱼眼输入图像帧信息

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

输入

num

鱼眼矫正坐标点的查找个数,最多200个。

输入

src

鱼眼原图上需要查映射关系的坐标点。

ot_point请参考“系统控制”章节

输入

dst

鱼眼校正图上查找到的坐标点。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h、ot_common_video.h

  • 库文件:libss_mpi.a

【注意】

  • 多区域时,每个区域的坐标点按照每个区域单独计算,不能按照拼接之后的图像来计算。

  • 对于video_info结构体的成员中,正向查找计算只用到了width和height两个成员,因此接口只对参数width和height范围做了检查。

  • 对于fisheye_point_query_attr结构体的成员fisheye_attr,它的结构体成员中bg_color_en/bg_color/out_rect中的x和y值不影响正向查找结果,因此接口不对以上参数范围做检查。

  • 开启lmf功能场景下,不支持正向查找坐标点。

  • 支持360°全景模式、180°全景模式、Normal校正模式。

  • 180°全景模式下,fan_strength只支持配置成0。

  • 正向查找功能存在一定的计算精度误差,为了避免边界查找失败,当正向查找到的点坐标超出边缘两个像素以内,会主动近似成边缘的坐标。

  • 360全景校正模式下,当内半径in_radius配置为0的时候,由于鱼眼图的中心会拉伸变换成边界,所以鱼眼图中心点正向查找到的输出点位置将会是边界的中心,即顶装查询到的是下边界的中心点,地装查询到的是上边界的中心点。

【举例】

td_s32 ret = TD_SUCCESS;
ot_gdc_fisheye_point_query_attr fisheye_point_query_attr;
ot_video_frame_info video_info;
td_u32 point_num = 160;
ot_point *dst = malloc(sizeof(ot_point) * point_num);
ot_point *src = malloc(sizeof(ot_point) * point_num);
if (dst == TD_NULL){
    printf("malloc dst error!\n");
    return TD_FAILURE;
}
if (src == TD_NULL) {
    printf("malloc src error!\n");
    free(dst);
    dst = TD_NULL;
    return TD_FAILURE;
}
ret = ss_mpi_gdc_fisheye_multi_pos_query_src_to_dst(&fisheye_point_query_attr, &video_info, point_num, src, dst);
if (ret != TD_SUCCESS) {
    goto free_mem;
}
free_mem:
if (dst != TD_NULL) {
    free(dst);
    dst = TD_NULL;
}
if (src != TD_NULL) {
    free(src);
    src = TD_NULL;
}
return ret;

ss_mpi_gdc_set_dsp_lut_cfg

【描述】

设置dsp lut功能配置。

【语法】

td_s32 ss_mpi_gdc_set_dsp_lut_cfg(const ot_gdc_dsp_lut_cfg *dsp_lut_cfg);

【参数】

参数名称

描述

输入/输出

dsp_lut_cfg

dsp lut功能配置指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h

  • 库文件:libss_mpi.a

【注意】

  • 仅SS928V100支持此接口。

  • 当有lut任务或hybrid_dis任务在处理时,设置is_dsp_lut_support为FALSE时会返回失败。

【举例】

ss_mpi_gdc_get_dsp_lut_cfg

【描述】

获取dsp lut功能配置。

【语法】

td_s32 ss_mpi_gdc_get_dsp_lut_cfg(ot_gdc_dsp_lut_cfg *dsp_lut_cfg);

【参数】

参数名称

描述

输入/输出

dsp_lut_cfg

dsp lut功能配置指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,参见错误码。

【需求】

  • 头文件:ot_common_gdc.h、ss_mpi_gdc.h

  • 库文件:libss_mpi.a

【注意】

仅SS928V100支持此接口。

【举例】

数据类型

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

  • ot_gdc_handle:定义GDC JOB的句柄。

  • OT_GDC_IP_NUM:定义GDC 的IP数量。

  • OT_GDC_PRIVATE_DATA_NUM:定义task相关私有数据的长度。

  • ot_gdc_task_attr:定义GDC task的属性。

  • OT_FISHEYE_LMF_COEF_NUM:定义LMF参数个数。

  • ot_fisheye_cfg:定义FISHEYE的鱼眼镜头LMF参数配置。

  • ot_gdc_fisheye_job_cfg:定义FISHEYE任务对应的鱼眼镜头LMF参数配置。

  • ot_fisheye_mount_mode:定义FISHEYE的安装模式。

  • ot_fisheye_view_mode:定义FISHEYE的校正模式。

  • ot_fisheye_rgn_attr:定义FISHEYE每个校正区域的属性配置。

  • ot_fisheye_rgn_attr_ex:定义FISHEYE每个校正区域的属性配置(XY模式)。

  • OT_GDC_PMF_COEF_NUM: PMF矫正系数的参数个数。

  • ot_gdc_pmf_attr:定义PMF属性的相关配置。

  • OT_FISHEYE_MAX_RGN_NUM:定义FISHEYE支持的最大校正区域个数。

  • ot_fisheye_attr:定义FISHEYE属性的相关配置。

  • ot_fisheye_attr_ex:定义FISHEYE属性的相关配置。

  • ot_fisheye_correction_attr:定义鱼眼矫正属性的相关配置。

  • ot_gdc_fisheye_point_query_attr:鱼眼矫正坐标点查找属性参数。

  • OT_FISHEYE_MIN_IN_IMAGE_WIDTH:定义鱼眼校正输入图像最小宽。

  • OT_FISHEYE_MIN_IN_IMAGE_HEIGHT:定义鱼眼校正输入图像最小高度。

  • OT_FISHEYE_MIN_OUT_IMAGE_WIDTH:定义鱼眼校正输出图像最小宽度。

  • OT_FISHEYE_MIN_OUT_IMAGE_HEIGHT:定义鱼眼校正输出图像最小高度。

  • OT_LDC_MIN_IMAGE_WIDTH:定义LDC校正输入输出图像最小宽度。

  • OT_LDC_MIN_IMAGE_HEIGHT:定义LDC校正输入输出图像最小高度。

  • OT_SPREAD_MIN_IMAGE_WIDTH: SPREAD输入输出图像最小宽度。

  • OT_SPREAD_MIN_IMAGE_HEIGHT: SPREAD输入输出图像最小高度。

  • OT_ROTATION_EX_MIN_IMAGE_WIDTH: 自由角度旋转输入输出图像最小宽度。

  • OT_ROTATION_EX_MIN_IMAGE_HEIGHT: 自由角度旋转输入输出图像最小高度。

  • OT_PMF_MIN_IMAGE_WIDTH:定义PMF校正输入输出图像最小宽度。

  • OT_PMF_MIN_IMAGE_HEIGHT:定义PMF校正输入输出图像最小高度。

  • OT_GDC_MAX_IMAGE_WIDTH:定义GDC模块支持的图像最大宽度。

  • OT_GDC_MAX_IMAGE_HEIGHT:定义GDC模块支持的图像最大高度。

  • OT_GDC_DSP_MAX_NUM:GDC模块支持绑定DSP核的最大个数。

  • ot_gdc_dsp_lut_cfg:定义DSP LUT参数配置。

ot_gdc_handle

【说明】

定义GDC JOB的句柄。

【定义】

typedef td_u32 ot_gdc_handle;

【注意事项】

无。

【相关数据类型及接口】

无。

OT_GDC_IP_NUM

【说明】

定义GDC 的IP数量。

【定义】

#define OT_GDC_IP_NUM 1

【注意事项】

无。

【相关数据类型及接口】

无。

OT_GDC_PRIVATE_DATA_NUM

【说明】

定义task相关私有数据的长度。

【定义】

#define OT_GDC_PRIVATE_DATA_NUM  4

【注意事项】

无。

【相关数据类型及接口】

ot_gdc_task_attr

ot_gdc_task_attr

【说明】

定义GDC task的属性。

【定义】

typedef struct {
    ot_video_frame_info img_in; /* input picture */
    ot_video_frame_info img_out; /* output picture */
    td_u64 private_data[OT_GDC_PRIVATE_DATA_NUM]; /* RW; private data of task */
    td_u64 reserved; /* RW; debug information,state of current picture */
} ot_gdc_task_attr;

【成员】

成员名称

描述

img_in

输入图像属性。

img_out

输出图像属性。

private_data

与task相关的私有数据,GDC不会使用和修改其中的数据。

reserved

保留项。

【注意事项】

输入和输出图像属性需要满足规定的属性。

【相关数据类型及接口】

ot_video_frame_info

OT_FISHEYE_LMF_COEF_NUM

【说明】

鱼眼镜头LMF参数个数。

【定义】

#define OT_FISHEYE_LMF_COEF_NUM         128

【注意事项】

无。

【相关数据类型及接口】

ot_fisheye_cfg

ot_fisheye_cfg

【说明】

定义FISHEYE的鱼眼镜头LMF参数配置。

【定义】

typedef struct {
    td_u16 lmf_coef[OT_FISHEYE_LMF_COEF_NUM]; /* RW;  LMF coefficient of gdc len */
} ot_fisheye_cfg;

【成员】

成员名称

描述

lmf_coef

鱼眼镜头LMF参数。

【注意事项】

  • 如果在VI的ss_mpi_vi_set_chn_fisheye接口中,ot_fisheye_attr属性开启了LMF参数功能,则必须调用VI的ss_mpi_vi_set_pipe_fisheye_cfg设置LMF参数,否则进行鱼眼处理时会因为获取不到用户配置的LMF参数而报错。

  • 如果在VPSS的ss_mpi_vpss_set_chn_fisheye接口中,ot_fisheye_attr属性开启了LMF参数功能,则必须调用VPSS的ss_mpi_vpss_set_grp_fisheye_cfg设置LMF参数,否则进行鱼眼处理时会因为获取不到用户配置的LMF参数而报错。

  • LMF参数要按照镜头厂商的推荐参数进行转换后再配置(正确的LMF参数符合lmf_coef[i+1] ≥lmf_coef[i]+5&& lmf_coef [i + 1] <= lmf_coef [i] + 31 && lmf_coef [57] <1024< lmf_coef [85] &&lmf_coef[0] = 0的规律),如果配置的参数不满足此规律则会报错,如果配置的参数有误则可能出现总线错误等异常现象,如果没有镜头厂商提供的参数建议关闭LMF功能。

注:ss_mpi_vi_set_chn_fisheye请具体请参考 “视频输入” 章节。

【相关数据类型及接口】

ot_fisheye_attr

ot_gdc_fisheye_job_cfg

【说明】

定义FISHEYE任务对应的鱼眼镜头LMF参数配置。

【定义】

typedef struct {
    td_phys_addr_t  len_map_phys_addr; /* LMF coefficient physic addr */
} ot_gdc_fisheye_job_cfg;

【成员】

成员名称

描述

len_map_phys_addr

保存鱼眼LMF系数的物理地址。

【注意事项】

  • 如果在接口ss_mpi_gdc_add_correction_task中,ot_fisheye_attr属性开启了LMF参数功能,则必须调用ss_mpi_gdc_set_cfg接口设置LMF参数,否则进行鱼眼处理时会因为获取不到用户配置的LMF参数而报错。

  • LMF参数要按照镜头厂商的推荐参数进行转换后再配置(正确的LMF参数符合lmf_coef[i+1] ≥lmf_coef[i]+5&& lmf_coef [i + 1] <= lmf_coef [i] + 31 && lmf_coef [57] <1024< lmf_coef [85]&& lmf_coef[0] = 0的规律)

    • 如果配置的参数不满足此规律则会报错,如果配置的参数有误则可能出现总线错误等异常现象;

    • 如果没有镜头厂商提供的参数建议关闭LMF功能。

  • len_map_phys_addr地址只能是MMZ内存的地址,且须16Byte对齐。

【相关数据类型及接口】

ot_fisheye_attr

ot_fisheye_mount_mode

【说明】

定义FISHEYE属性中的安装模式。

【定义】

typedef enum {
    OT_FISHEYE_MOUNT_MODE_DESKTOP = 0, /* Desktop mount mode */
    OT_FISHEYE_MOUNT_MODE_CEILING = 1, /* Ceiling mount mode */
    OT_FISHEYE_MOUNT_MODE_WALL = 2, /* wall mount mode */
    OT_FISHEYE_MOUNT_MODE_BUTT
} ot_fisheye_mount_mode;

【成员】

成员名称

描述

OT_FISHEYE_MOUNT_MODE_DESKTOP

地装模式。

OT_FISHEYE_MOUNT_MODE_CEILING

顶装模式。

OT_FISHEYE_MOUNT_MODE_WALL

壁装模式。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_fisheye_view_mode

【说明】

定义FISHEYE属性中的校正模式。

【定义】

typedef enum {
    OT_FISHEYE_VIEW_MODE_360_PANORAMA = 0, /* 360 panorama mode of gdc correction */
    OT_FISHEYE_VIEW_MODE_180_PANORAMA = 1, /* 180 panorama mode of gdc correction */
    OT_FISHEYE_VIEW_MODE_NORM = 2, /* normal mode of gdc correction */
    OT_FISHEYE_VIEW_MODE_NO_TRANS = 3, /* no gdc correction */
    OT_FISHEYE_VIEW_MODE_BUTT
} ot_fisheye_view_mode;

【成员】

成员名称

描述

OT_FISHEYE_VIEW_MODE_360_PANORAMA

360°全景模式。

OT_FISHEYE_VIEW_MODE_180_PANORAMA

180°全景模式。

OT_FISHEYE_VIEW_MODE_NORM

Normal校正模式。

OT_FISHEYE_VIEW_MODE_NO_TRANS

不做校正模式,输出原图。

【注意事项】

360°校正模式下不支持壁装,180°校正模式下不支持顶装和地装。

【相关数据类型及接口】

ot_fisheye_rgn_attr

【说明】

定义FISHEYE每个校正区域的属性配置。

【定义】

typedef struct {
    ot_fisheye_view_mode view_mode; /* RW; range: [0, 3];gdc view mode */
    td_u32 in_radius; /* RW; inner radius of gdc correction region */
    td_u32 out_radius; /* RW; out radius of gdc correction region */
    td_u32 pan; /* RW; range: [0, 360] */
    td_u32 tilt; /* RW; range: [0, 360] */
    td_u32 hor_zoom; /* RW; horizontal zoom of correction region */
    td_u32 ver_zoom; /* RW; vertical zoom of correction region */
    ot_rect out_rect; /* RW; out imge rectangle attribute */
} ot_fisheye_rgn_attr;

【成员】

成员名称

描述

view_mode

该校正区域的校正模式。

in_radius

360°全景模式表示该校正区域所对应原图的内半径,其他模式无效。

取值范围:[0,out_radius)

out_radius

360°全景模式表示该校正区域所对应原图的外半径,其他模式为校正区域的可视半径。

取值范围:[1,3 x max(width of input picture/4, height of input picture/4)]

pan

该校正区域PTZ参数的Pan值。

取值范围:[0,360]

tilt

该校正区域PTZ参数的Tilt值。

取值范围:[0,360]

hor_zoom

该校正区域PTZ参数的水平Zoom值。

取值范围:

  • NORMAL校正模式下为[1,5265]
  • 其它校正模式下为[1,4095]

ver_zoom

该校正区域PTZ参数的垂直Zoom值。

取值范围:[1,4095]

out_rect

该校正区域的输出位置及宽高。

取值范围:位置及宽高不能超出整个鱼眼矫正输出图的范围;且宽高需满足鱼眼输出图像规格限制

【注意事项】

  • 鱼眼支持对一幅图像的多个区域分别进行校正,每个区域的属性配置是各自独立的。

  • NORMAL矫正模式下,当hor_zoom值大于4875时,也就是视场角大于150度时,可能会出现性能不足的情况。

【相关数据类型及接口】

ot_fisheye_rgn_attr_ex

【说明】

定义FISHEYE每个校正区域的属性配置(XY模式)。

【定义】

typedef struct {
    ot_fisheye_view_mode view_mode; /* RW; range: [0, 3];gdc view mode */
    td_u32 in_radius; /* RW; inner radius of gdc correction region */
    td_u32 out_radius; /* RW; out radius of gdc correction region */
    td_u32 x; /* RW; range: x-coordinate of the centre point of correction region */
    td_u32 y; /* RW; range: y-coordinate of the centre point of correction region */
    td_u32 hor_zoom; /* RW; horizontal zoom of correction region */
    td_u32 ver_zoom; /* RW; vertical zoom of correction region */
    ot_rect out_rect; /* RW; out imge rectangle attribute */
} ot_fisheye_rgn_attr_ex;

【成员】

成员名称

描述

view_mode

该校正区域的校正模式。

in_radius

360°全景模式表示该校正区域所对应原图的内半径,其他模式无效。

取值范围:[0,out_radius)

out_radius

360°全景模式表示该校正区域所对应原图的外半径,其他模式为校正区域的可视半径。

取值范围:[1,3 x max(width of input picture/4, height of input picture/4)]

x

选择区域的中心点X坐标。

取值范围:[0,width of input picture-1]

y

选择区域的中心点Y坐标。

取值范围:[0,height of input picture-1]

hor_zoom

该校正区域PTZ参数的水平Zoom值。

取值范围:

  • NORMAL校正模式下为[1,5265]
  • 其它校正模式下为[1,4095]

ver_zoom

该校正区域PTZ参数的垂直Zoom值。

取值范围:[1,4095]

out_rect

该校正区域的输出位置及宽高。

取值范围:位置及宽高不能超出整个鱼眼矫正输出图的范围;且宽高需满足鱼眼输出图像规格限制

【注意事项】

  • 鱼眼支持对一幅图像的多个区域分别进行校正,每个区域的属性配置是各自独立的。

  • NORMAL矫正模式下,当hor_zoom值大于4875时,也就是视场角大于150度时,可能会出现性能不足的情况。

【相关数据类型及接口】

OT_GDC_PMF_COEF_NUM

【说明】

PMF矫正系数的参数个数。

【定义】

#define OT_GDC_PMF_COEF_NUM         9

【注意事项】

无。

【相关数据类型及接口】

ot_gdc_pmf_attr

ot_gdc_pmf_attr

【说明】

定义PMF属性的相关配置。

【定义】

typedef struct {
    td_s64 pmf_coef[OT_GDC_PMF_COEF_NUM]; /* W;  PMF coefficient of gdc */
} ot_gdc_pmf_attr;

【成员】

成员名称

描述

pmf_coef

PMF矫正系数。

取值范围请参考《GDC调试指南》的2.2.5小节。

【注意事项】

无。

【相关数据类型及接口】

无。

OT_FISHEYE_MAX_RGN_NUM

【说明】

FISHEYE支持的最大校正区域个数。

【定义】

#define OT_FISHEYE_MAX_RGN_NUM 		4

【注意事项】

【相关数据类型及接口】

ot_fisheye_attr

ot_fisheye_attr

【说明】

定义FISHEYE属性的相关配置。

【定义】

typedef struct {
     /*
      * RW; range: [0, 1];
      * whether gdc len's LMF coefficient is from user config or from default linear config
      */
    td_bool lmf_en;
    td_bool bg_color_en; /* RW; range: [0, 1];whether use background color or not */
    td_u32  bg_color; /* RW; range: [0,0xffffff];the background color RGB888 */
 
    /*
     * RW; range: [-511, 511];
     * the horizontal offset between image center and physical center of len
     */
    td_s32  hor_offset;
    /*
     * RW; range: [-511, 511];
     * the vertical offset between image center and physical center of len
     */
    td_s32  ver_offset;
 
    td_u32  trapezoid_coef; /* RW; range: [0, 32];strength coefficient of trapezoid correction */
    td_s32  fan_strength; /* RW; range: [-760, 760];strength coefficient of fan correction */
 
    ot_fisheye_mount_mode mount_mode; /* RW; range: [0, 2];gdc mount mode */
 
    td_u32 rgn_num; /* RW; range: [1, 4]; gdc correction region number */
    ot_fisheye_rgn_attr fisheye_rgn_attr[OT_FISHEYE_MAX_RGN_NUM]; /* RW; attribution of gdc correction region */
} ot_fisheye_attr;

【成员】

成员名称

描述

lmf_en

是否使用用户设置的鱼眼镜头LMF参数。

bg_color_en

是否在输出图像打上背景色。

bg_color

背景色的颜色RGB888格式,取值范围:[0, 0xFFFFFF]

hor_offset

镜头中心点相对于SENSOR中心点的水平偏移,取值范围:[-511, 511],单位为像素。

ver_offset

镜头中心点相对于SENSOR中心点的垂直偏移,取值范围:[-511, 511],单位为像素。

trapezoid_coef

梯形校正强度系数。用于壁装时的俯仰角校正,取值范围:[0, 32]

fan_strength

扇形校正强度系数,仅在180模式时有效,取值范围:[-760, 760]

mount_mode

鱼眼校正安装模式。

rgn_num

一幅图像的校正区域数目,最多支持4个区域。

fisheye_rgn_attr

每个校正区域各自的属性配置。

【注意事项】

  • FISHEYE支持对一幅图像的多个区域分别进行校正处理,每个校正区域的校正模式,PTZ参数等互相独立。同时根据每个校正区域设置的输出位置及宽高,对图像进行拼接后输出。

  • 没有使能背景色时,输出图像的非校正区域是随机数据,可能会出现异常图像。

【相关数据类型及接口】

无。

ot_fisheye_attr_ex

【说明】

定义FISHEYE属性的相关配置。

【定义】

typedef struct {
     /*
      * RW; range: [0, 1];
      * whether gdc len's LMF coefficient is from user config or from default linear config
      */
    td_bool lmf_en;
    td_bool bg_color_en; /* RW; range: [0, 1];whether use background color or not */
    td_u32 bg_color; /* RW; range: [0,0xffffff];the background color RGB888 */
 
    /*
     * RW; range: [-511, 511];
     * the horizontal offset between image center and physical center of len
     */
    td_s32 hor_offset;
    /*
     * RW; range: [-511, 511];
     * the vertical offset between image center and physical center of len
     */
    td_s32 ver_offset;
 
    td_u32 trapezoid_coef; /* RW; range: [0, 32];strength coefficient of trapezoid correction */
    td_s32 fan_strength; /* RW; range: [-760, 760];strength coefficient of fan correction */
 
    ot_fisheye_mount_mode mount_mode; /* RW; range: [0, 2];gdc mount mode */
 
    td_u32 rgn_num; /* RW; range: [1, 4]; gdc correction region number */
    ot_fisheye_rgn_attr_ex fisheye_rgn_attr[OT_FISHEYE_MAX_RGN_NUM]; /* RW; attribution of gdc correction region */
} ot_fisheye_attr_ex;

【成员】

成员名称

描述

lmf_en

是否使用用户设置的鱼眼镜头LMF参数。

bg_color_en

是否在输出图像打上背景色。

bg_color

背景色的颜色RGB888格式,取值范围:[0, 0xFFFFFF]。

hor_offset

镜头中心点相对于SENSOR中心点的水平偏移,取值范围:[-511, 511],单位为像素。

ver_offset

镜头中心点相对于SENSOR中心点的垂直偏移,取值范围:[-511, 511],单位为像素。

trapezoid_coef

梯形校正强度系数。用于壁装时的俯仰角校正,取值范围:[0, 32]

fan_strength

扇校正强度系数,仅在180模式时有效,取值范围:[-760, 760]

mount_mode

鱼眼校正安装模式。

rgn_num

一幅图像的校正区域数目,最多支持4个区域。

fisheye_rgn_attr

每个校正区域各自的属性配置(XY模式属性)。

【注意事项】

  • FISHEYE支持对一幅图像的多个区域分别进行校正处理,每个校正区域的校正模式,PTZ参数等互相独立。同时根据每个校正区域设置的输出位置及宽高,对图像进行拼接后输出。

  • 没有使能背景色时,输出图像的非校正区域是随机数据,可能会出现异常图像。

【相关数据类型及接口】

无。

ot_fisheye_correction_attr

【说明】

定义鱼眼矫正属性的相关配置。

【定义】

typedef struct {
    td_bool enable;
    ot_fisheye_attr fisheye_attr;
    ot_size dst_size;
} ot_fisheye_correction_attr;

【成员】

成员名称

描述

enable

控制鱼眼矫正使能开关。

fisheye_attr

鱼眼属性。

dst_size

鱼眼矫正后的输出图像大小。范围:[OT_FISHEYE_MIN_OUT_IMAGE_WIDTH x OT_FISHEYE_MIN_OUT_IMAGE_HEIGHT, OT_GDC_MAX_IMAGE_WIDTH x OT_GDC_MAX_IMAGE_HEIGHT]

【注意事项】

无。

【相关数据类型及接口】

无。

ot_gdc_fisheye_point_query_attr

【说明】

鱼眼矫正坐标点查找属性参数。

【定义】

typedef struct {
    td_u32 rgn_index;
    ot_fisheye_attr *fisheye_attr;
    td_u16 lmf_coef[OT_FISHEYE_LMF_COEF_NUM];
} ot_gdc_fisheye_point_query_attr;

【成员】

成员名称

描述

rgn_index

鱼眼校正区域号。

取值范围:[0, OT_FISHEYE_MAX_RGN_NUM-1]

fisheye_attr

鱼眼属性参数。

lmf_coef

LMF系数。

【注意事项】

无。

【相关数据类型及接口】

无。

OT_FISHEYE_MIN_IN_IMAGE_WIDTH

【说明】

FISHEYE校正输入图像最小宽度。

【定义】

#define OT_FISHEYE_MIN_IN_IMAGE_WIDTH 	   1280

【注意事项】

【相关数据类型及接口】

OT_FISHEYE_MIN_IN_IMAGE_HEIGHT

【说明】

FISHEYE校正输入图像最小高度。

【定义】

#define OT_FISHEYE_MIN_IN_IMAGE_HEIGHT    720

【注意事项】

【相关数据类型及接口】

OT_FISHEYE_MIN_OUT_IMAGE_WIDTH

【说明】

FISHEYE校正输出图像最小宽度。

【定义】

#define OT_FISHEYE_MIN_OUT_IMAGE_WIDTH    640

【注意事项】

【相关数据类型及接口】

OT_FISHEYE_MIN_OUT_IMAGE_HEIGHT

【说明】

FISHEYE校正输出图像最小高度。

【定义】

#define OT_FISHEYE_MIN_OUT_IMAGE_HEIGHT   360

【注意事项】

【相关数据类型及接口】

OT_LDC_MIN_IMAGE_WIDTH

【说明】

LDC校正输入输出图像最小宽度。

【定义】

#define OT_LDC_MIN_IMAGE_WIDTH 		        640

【注意事项】

仅SS928V100支持。

【相关数据类型及接口】

OT_LDC_MIN_IMAGE_HEIGHT

【说明】

LDC校正输入输出图像最小高度。

【定义】

#define OT_LDC_MIN_IMAGE_HEIGHT  		    480

【注意事项】

仅SS928V100支持。

【相关数据类型及接口】

OT_SPREAD_MIN_IMAGE_WIDTH

【说明】

SPREAD输入输出图像最小宽度。

【定义】

#define OT_SPREAD_MIN_IMAGE_WIDTH          640

【注意事项】

仅SS928V100支持。

【相关数据类型及接口】

OT_SPREAD_MIN_IMAGE_HEIGHT

【说明】

SPREAD输入输出图像最小高度。

【定义】

#define OT_SPREAD_MIN_IMAGE_HEIGHT         480

【注意事项】

仅SS928V100支持。

【相关数据类型及接口】

OT_ROTATION_EX_MIN_IMAGE_WIDTH

【说明】

自由角度旋转输入输出图像最小宽度。

【定义】

#define OT_ROTATION_EX_MIN_IMAGE_WIDTH    480

【注意事项】

【相关数据类型及接口】

OT_ROTATION_EX_MIN_IMAGE_HEIGHT

【说明】

自由角度旋转输入输出图像最小高度。

【定义】

#define OT_ROTATION_EX_MIN_IMAGE_HEIGHT    360

【注意事项】

【相关数据类型及接口】

OT_PMF_MIN_IMAGE_WIDTH

【说明】

PMF校正输入输出图像最小宽度。

【定义】

#define OT_PMF_MIN_IMAGE_WIDTH 		        480

【注意事项】

【相关数据类型及接口】

OT_PMF_MIN_IMAGE_HEIGHT

【说明】

PMF校正输入输出图像最小高度。

【定义】

#define OT_PMF_MIN_IMAGE_HEIGHT  		    360

【注意事项】

【相关数据类型及接口】

OT_GDC_MAX_IMAGE_WIDTH

【说明】

GDC模块支持的图像最大宽度。

【定义】

#define  OT_GDC_MAX_IMAGE_WIDTH       8192

【注意事项】

【相关数据类型及接口】

OT_GDC_MAX_IMAGE_HEIGHT

【说明】

GDC模块支持的图像最大高度。

【定义】

#define  OT_GDC_MAX_IMAGE_HEIGHT       8192

【注意事项】

【相关数据类型及接口】

OT_GDC_DSP_MAX_NUM

【说明】

GDC模块支持绑定DSP核的最大个数。

【定义】

#define  OT_GDC_DSP_MAX_NUM        2

【注意事项】

【相关数据类型及接口】

ot_gdc_dsp_lut_cfg

【说明】

定义DSP LUT参数配置。

【定义】

typedef struct {
    td_bool is_dsp_lut_support;
    td_bool is_dsp_id_bind[OT_GDC_DSP_MAX_NUM];
} ot_gdc_dsp_lut_cfg;

【成员】

成员名称

描述

is_dsp_lut_support

是否支持DSP LUT功能。

is_dsp_id_bind

是否绑定对应的DSP核。

支持绑定0、1核。

【注意事项】

要绑定DSP核,需要调用DSP相关接口加载对应的DSP Bin,具体参考《SVP2.0 API 参考》。

【相关数据类型及接口】

错误码

GDC错误码

GDC错误码如下所示。

表 1 GDC错误码

错误代码

宏定义

描述

0xa0258015

OT_ERR_GDC_NO_BUF

分配内存失败。

0xa0258016

OT_ERR_GDC_BUF_EMPTY

GDC的job,task或node节点已经使用完毕。

0xa025800a

OT_ERR_GDC_NULL_PTR

输入参数空指针错误

0xa0258007

OT_ERR_GDC_ILLEGAL_PARAM

GDC参数设置无效。

0xa0258018

OT_ERR_GDC_NOT_READY

系统未初始化。

0xa025800c

OT_ERR_GDC_NOT_SUPPORT

操作不支持。

0xa025800d

OT_ERR_GDC_NOT_PERM

操作不允许。

0xa0258022

OT_ERR_GDC_BUSY

GDC通道号申请失败

0xa0258003

OT_ERR_GDC_INVALID_CHN_ID

GDC通道号无效

0xa0258009

OT_ERR_GDC_CHN_UNEXIST

GDC通道号不存在

0xa0258017

OT_ERR_GDC_BUF_FULL

缓冲区数据已满