视频图形子系统
概述
VGS是视频图形子系统,全称为Video Graphics Sub-System。支持对一幅输入图像进行处理,如进行Crop、缩放、像素格式转换、视频存储格式转换、压缩/解压、Cover、OSD、Mosaic、画线、旋转、亮度和统计、Corner_rect、拼接、Border、Aspect Ratio、Mirror/Flip等处理。
功能描述
基本概念
-
job
VGS管理task的结构,一个job里可以包含多个task,VGS保证task按照添加到job的顺序执行,并且保证一个job里的所有task一次性提交硬件执行。用户可以在加载VGS ko时设置模块参数(g_max_vgs_job)来设置VGS支持的最大job数。job数取值范围为[OT_VGS_MIN_JOB_NUM,OT_VGS_MAX_JOB_NUM],默认为OT_VGS_DEFAULT_JOB_NUM。
-
task
对一幅图像完成具体的一个或多个操作,比如叠加OSD、缩放或像素格式转换等。用户可以在加载VGS ko时设置模块参数(g_max_vgs_task)来设置VGS支持的最大task数。task数取值范围为[OT_VGS_MIN_TASK_NUM,OT_VGS_MAX_TASK_NUM],默认为OT_VGS_DEFAULT_TASK_NUM。
-
node
VGS硬件的最小执行单位,一个task对应一个或多个node。node中包含硬件工作需要的信息,比如源图像地址,目标图像地址,操作类型等,并按照硬件要求的形式组织。用户可以在加载VGS ko时设置模块参数(g_max_vgs_node)来设置VGS支持的最大node数。node数取值范围为[OT_VGS_MIN_NODE_NUM,OT_VGS_MAX_NODE_NUM],默认为OT_VGS_DEFAULT_NODE_NUM。
-
handle
任务句柄,标识一个job。
-
在垂直分块场景下,handle最大数量不受g_max_vgs_job限制,而是通过模块参数(g_max_vgs_ver_split_handle)进行配置。vgs_ver_split_handle取值范围[2,10],默认为5。
说明:
加载ko并配置模块参数命令示例:insmod ot_vgs.ko g_max_vgs_job=64 g_max_vgs_task=100 g_max_vgs_node=100 g_max_vgs_ver_split_handle=5
功能描述
VGS的功能主要有Crop、缩放、OSD、Cover、Mosaic、画线、像素格式转换、视频存储格式转换、压缩/解压、旋转、亮度和统计、Corner_rect、拼接、Aspect Ratio、Border、Mirror/Flip。
-
Crop
VGS支持从图像中裁剪指定区域。
-
缩放
VGS支持对一幅图像进行缩放,最大支持图像宽高均放大16倍,最大支持图像宽高均缩小30倍。支持单分量(Y)缩放。
-
OSD
VGS支持在一幅图像上叠加一张位图,可设置位图是否反色,支持批量叠加OSD。
须知: 批量叠加OSD时,内部是通过提交多个task来实现,每个task使用上一个task叠加完OSD的图像作为当前task的源图像进行OSD处理。
-
Cover
VGS支持对一幅图像进行遮挡操作,遮挡区域形状可以是矩形或者任意四边形,遮挡区域颜色为纯色,支持批量叠加Cover。
须知: 批量叠加Cover时,内部是通过提交多个task来实现,每个task使用上一个task叠加完Cover的图像作为当前task的源图像进行Cover处理。
-
Mosaic
VGS支持对一幅图像进行叠加Mosaic操作,Mosaic块大小有8x8、16x16、32x32、64x64四种选择,Mosaic区域形状为矩形,每个Mosaic块为纯色,支持批量叠加Mosaic。
须知: 批量叠加Mosaic时,内部是通过提交多个task来实现,每个task使用上一个task叠加完Mosaic的图像作为当前task的源图像进行Mosaic处理。
-
Corner_rect
VGS支持对一幅图像进行叠加Corner_rect操作,Corner_rect类型有角框和实线框,支持批量叠加Corner_rect。
须知: - 批量叠加Corner_rect时,内部是通过提交多个task来实现,每个task使用上一个task叠加完Corner_rect的图像作为当前task的源图像进行打Corner_rect处理。
- 批量叠加Corner_rect时,每个Corner_rect颜色和类型是一样的。
-
拼接
VGS支持对最多4幅图像进行水平拼接操作,图像数量可设置。
须知: 拼接输入的图像的宽高、像素格式、视频存储格式、压缩类型等信息需要保持一致。不支持对紧凑段压缩图像进行拼接。
-
画线
VGS支持对一幅图像进行画线操作,支持批量画线。
须知: - 画线操作时,如果起始坐标和结束坐标的X坐标相同,则起始坐标和结束坐标的Y坐标不变,X坐标分别向右增加线的宽度。
- 画线操作时,如果起始坐标和结束坐标的X坐标不相同,则X坐标不变,起始坐标与结束坐标的Y坐标分别向下方延伸线的宽度(即X坐标不变,Y坐标向下增加线宽)。
-
像素格式转换
VGS支持的输入输出像素格式包括semi-planar 420、semi-planar 422、package 422和单分量(Y)。支持semi-planar 420与semi-planar 422之间的格式转换,支持semi-planar 420、semi-planar 422到单分量(Y)格式的转换,做像素格式转换时,支持UV先后顺序可调整。
-
视频存储格式转换
VGS支持linear、tile64x16和tile32x4格式。
-
压缩/解压
VGS支持linear格式下semi-planar 422、semi-planar 420和单分量(Y)格式的压缩/解压。
-
亮度和统计
统计图像的指定区域亮度信息之和。支持批量统计。
-
旋转
VGS支持0、90、180和270度的旋转。
-
Aspect Ratio
幅形比,指定输出画面相对于输入画面的宽高纵横比。
-
Border
边框,指定输出画面四边覆盖边框。
-
Mirror/Flip
Mirror即水平镜像,Flip即上下翻转。可使用Mirror+Flip实现180°旋转。
图 1 Hi3519DV500 online任务支持功能的处理流程图

图 2 Hi3516CV610 online任务支持功能的处理流程图

图 3 Hi3511CV100 online任务支持功能的处理流程图

表 1 非online任务支持的功能
须知:
非online任务处理顺序与提交对应task的顺序保持一致。
输入输出特性
表 1 Hi3519DV500 VGS硬件规格
1、支持linear、tile64x16和tile32x4格式。 2、支持输入linear格式非压缩、紧凑段压缩和非紧凑段压缩图像,tile32x4格式非压缩和tile压缩图像。 3、支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422、OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_422、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_400、OT_PIXEL_FORMAT_YUYV_PACKAGE_422、OT_PIXEL_FORMAT_YVYU_PACKAGE_422、OT_PIXEL_FORMAT_UYVY_PACKAGE_422、OT_PIXEL_FORMAT_VYUY_PACKAGE_422、OT_PIXEL_FORMAT_YYUV_PACKAGE_422、OT_PIXEL_FORMAT_YYVU_PACKAGE_422、OT_PIXEL_FORMAT_UVYY_PACKAGE_422、OT_PIXEL_FORMAT_VUYY_PACKAGE_422、OT_PIXEL_FORMAT_VY1UY0_PACKAGE_422格式输入。 3、tile32x4格式非压缩时仅支持semi-planar 420,压缩时支持semi-planar 420和单分量(Y)。 |
|
|
3、宽度和高度均为2像素对齐(在ss_mpi_vgs_add_scale_task和ss_mpi_vgs_add_online_task接口中支持linear非压缩奇数宽高图像输入)。 4、非压缩时,linear格式帧起始地址2对齐,stride 16对齐。tile64x16格式帧起始地址2对齐,stride 16对齐。tile32x4格式帧起始地址32对齐,stride 32对齐。
|
|
|
2、支持输出linear格式非压缩、紧凑段压缩和非紧凑段压缩图像,tile32x4格式非压缩和tile压缩图像。 3、支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422、OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_422、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_400、OT_PIXEL_FORMAT_YUYV_PACKAGE_422、OT_PIXEL_FORMAT_YVYU_PACKAGE_422、OT_PIXEL_FORMAT_UYVY_PACKAGE_422、OT_PIXEL_FORMAT_VYUY_PACKAGE_422、OT_PIXEL_FORMAT_YYUV_PACKAGE_422、OT_PIXEL_FORMAT_YYVU_PACKAGE_422、OT_PIXEL_FORMAT_UVYY_PACKAGE_422、OT_PIXEL_FORMAT_VUYY_PACKAGE_422、OT_PIXEL_FORMAT_VY1UY0_PACKAGE_422格式输出。 3、tile32x4格式非压缩时仅支持semi-planar 420,压缩时支持semi-planar 420和单分量(Y)。 |
|
|
4、非压缩时,linear格式帧起始地址2对齐,stride 16对齐。tile32x4格式帧起始地址32对齐,stride 32对齐。
|
|
|
3、当输入Linear格式图像CROP后宽度大于8192(2*4096)且输出为非压缩时,只支持15倍缩小;当输入tile64x16或tile32x4格式图像Crop后宽度大于6144(2*3072)且输出为非压缩时,只支持11倍缩小。 |
表 2 Hi3516CV610 VGS硬件规格
|
3、支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422、OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_422、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_400格式输入。 |
|
|
3、宽度和高度均为2像素对齐(在ss_mpi_vgs_add_scale_task和ss_mpi_vgs_add_online_task接口中支持linear非压缩奇数宽高图像输入),linear格式帧起始地址2对齐,stride 8对齐。 |
|
|
3、支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422、OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_422、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_400、OT_PIXEL_FORMAT_YUYV_PACKAGE_422、OT_PIXEL_FORMAT_YVYU_PACKAGE_422、OT_PIXEL_FORMAT_UYVY_PACKAGE_422、OT_PIXEL_FORMAT_VYUY_PACKAGE_422、OT_PIXEL_FORMAT_YYUV_PACKAGE_422、OT_PIXEL_FORMAT_YYVU_PACKAGE_422、OT_PIXEL_FORMAT_UVYY_PACKAGE_422、OT_PIXEL_FORMAT_VUYY_PACKAGE_422、OT_PIXEL_FORMAT_VY1UY0_PACKAGE_422格式输出。 |
|
表 3 Hi3511CV100 VGS硬件规格
|
2、支持输入linear格式非压缩、紧凑段压缩和非紧凑段压缩图像。 3、支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422、OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_422、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_400格式输入。 |
|
|
3、宽度和高度均为2像素对齐(在ss_mpi_vgs_add_scale_task和ss_mpi_vgs_add_online_task接口中支持linear非压缩奇数宽高图像输入)。 4、非压缩时,linear格式帧起始地址2对齐,stride 16对齐。 5、压缩时,linear格式压缩头地址16对齐。header_stride 在帧宽度不大于4096时16对齐,帧宽度大于4096且不大于8192时32对齐,帧宽度大于8192时64对齐;帧起始地址16对齐,stride 16对齐。 |
|
|
2、支持输出linear格式非压缩、紧凑段压缩和非紧凑段压缩图像。 3、支持OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422、OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_422、OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420、OT_PIXEL_FORMAT_YUV_400格式输出。 |
|
|
4、非压缩时,linear格式帧起始地址2对齐,stride 16对齐。 5、压缩时,linear格式压缩头地址16对齐。header_stride 在帧宽度不大于4096时16对齐,帧宽度大于4096且不大于8192时32对齐,帧宽度大于8192时64对齐;帧起始地址16对齐,stride 16对齐。 |
|
API参考
该功能模块为用户提供以下MPI:
- ss_mpi_vgs_begin_job:启动一个job。
- ss_mpi_vgs_add_scale_task:往一个已经启动的job添加缩放task。
- ss_mpi_vgs_add_draw_line_task:往一个已经启动的job添加批量画线task。
- ss_mpi_vgs_add_cover_task:往一个已经启动的job添加批量叠加Cover task。
- ss_mpi_vgs_add_osd_task:往一个已经启动的job添加批量叠加OSD task。
- ss_mpi_vgs_add_rotation_task:往一个已经启动的job里添加旋转任务。
- ss_mpi_vgs_add_luma_task:往一个已经启动的job里添加批量获取亮度和任务。
- ss_mpi_vgs_add_mosaic_task:往一个已经启动的job里添加批量叠加Mosaic任务。
- ss_mpi_vgs_add_corner_rect_task:往一个已经启动的job里添加批量叠加Corner_rect任务。
- ss_mpi_vgs_add_stitch_task:往一个已经启动的job里添加拼接任务。
- ss_mpi_vgs_add_online_task:往一个已经启动的job里添加在线任务。
- ss_mpi_vgs_end_job:提交一个job。
- ss_mpi_vgs_cancel_job:取消一个job。
- ss_mpi_vgs_get_ver_split_job:获取垂直分块配置。
- ss_mpi_vgs_proc_ver_split:完成垂直分块放大处理。
- ss_mpi_vgs_release_ver_split_job:结束垂直分块处理。
ss_mpi_vgs_begin_job
【描述】
启动一个job。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
可一次启动多个job,但必须判断ss_mpi_vgs_begin_job函数返回成功后才能使用handle返回的HANDLE。
【举例】
td_s32 ret = TD_SUCCESS;
ot_vgs_handle handle;
ot_vgs_task_attr task_attr;
ret = ss_mpi_vgs_begin_job(&handle);
if (ret != TD_SUCCESS) {
VGS_ERROR_PROCESS(ret);
}
ret = ss_mpi_vgs_add_scale_task(handle, &task_attr, OT_VGS_SCALE_COEF_NORM);
if (ret != TD_SUCCESS){
ss_mpi_vgs_cancel_job(handle);
VGS_ERROR_PROCESS(ret);
}
ret = ss_mpi_vgs_end_job(handle);
if (ret != TD_SUCCESS){
ss_mpi_vgs_cancel_job(handle);
VGS_ERROR_PROCESS(ret);
}
ss_mpi_vgs_add_scale_task
【描述】
往一个已经启动的job里添加缩放task。
【语法】
td_s32 ss_mpi_vgs_add_scale_task(ot_vgs_handle handle, const ot_vgs_task_attr *task, ot_vgs_scale_coef_mode mode);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经启动的job。
- task属性必须满足VGS的能力。
- 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_vgs_end_job接口提交已经添加的task,否则必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
- 缩放任务比较灵活,不限制用户输入输出是否使用同一块VB。使用同一块VB时,建议只做非压缩图像的缩小任务,否则可能会导致图像异常。在Hi3511CV100中,当使用不同VB且输入帧包含附属信息时,需注意VGS不会将附属信息复制到输出帧。
- 支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
- 缩放系数支持的类型在ot_vgs_scale_coef_mode中有详细描述。
- Hi3519DV500 和Hi3511CV100当输入宽度大于4096时,不支持紧凑段压缩输入,也不支持紧凑段压缩输出。当输出宽度大于4096时,不支持紧凑段压缩输出。
- 对于Hi3519DV500,在输入非package422像素格式时,支持自适应输入低延时。
- 对于Hi3516CV610,仅在UVC场景支持输入低延时。
- 对于Hi3511CV100,支持输入低延时。
- 当宽(高)缩小倍数大于15时,输入宽(高)需4像素对齐。
-
在Hi3519DV500中
- 若宽(高)缩小倍数大于15,需满足宽不大于8192。
- 当输入Tile64x16或Tile32x4且为压缩时,若宽(高)缩小倍数大于11,需满足宽不大于6144。
-
在Hi3516CV610中,当宽缩小倍数大于15时,输入宽度不大于2048。
- 在Hi3511CV100中,不支持预缩放,最大支持图像宽高缩小15倍。
【举例】
请参见ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_add_draw_line_task
【描述】
往一个已经启动的job里添加批量画线task。
【语法】
td_s32 ss_mpi_vgs_add_draw_line_task(ot_vgs_handle handle, const ot_vgs_task_attr *task, const ot_vgs_line line[], td_u32 array_size);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经启动的job。
- task属性必须满足VGS的能力。
- 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_vgs_end_job接口提交已经添加的task,否则必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
- 支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
- 做批量画线任务时,输入输出压缩类型、像素格式保持不变。
- Hi3519DV500和Hi3511CV100压缩类型不是紧凑段压缩时,输入输出图像为同一块buffer。压缩类型为紧凑段压缩时,输入输出图像必须使用不同的buffer,而且一次只能画一个。在Hi3511CV100中,当使用不同buffer且输入帧包含附属信息时,需注意VGS不会将附属信息复制到输出帧。
- Hi3519DV500和Hi3511CV100压缩图像输入,画线功能实际上是由Cover功能实现,因此效果和非压缩图像效果略有不同。
- Hi3519DV500 支持linear格式和tile32x4格式输入。
- Hi3519DV500 和Hi3511CV100输入宽度大于4096时,不支持紧凑段压缩输入,也不支持紧凑段压缩输出。
【举例】
请参见 ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_add_cover_task
【描述】
往一个已经启动的job里添加批量叠加Cover task。
【语法】
td_s32 ss_mpi_vgs_add_cover_task(ot_vgs_handle handle, const ot_vgs_task_attr *task, const ot_cover cover[], td_u32 array_size);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经启动的job。
- task属性必须满足VGS的能力。
- 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_vgs_end_job接口提交已经添加的task,否则必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
- 做批量Cover任务时,输入输出压缩类型、像素格式保持不变。压缩类型不是紧凑段压缩时,输入输出图像为同一块buffer。压缩类型为紧凑段压缩时,输入输出图像必须使用不同的buffer,而且一次只能画一个。在Hi3511CV100中,当使用不同buffer且输入帧包含附属信息时,需要注意VGS不会将附属信息复制到输出帧。
- 支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
- Hi3519DV500 和Hi3511CV100输入宽度大于4096时,不支持紧凑段压缩输入,也不支持紧凑段压缩输出。
- Cover起始坐标及宽高2对齐。
- Hi3519DV500 和Hi3511CV100支持实心/空心任意四边形Cover,如果是凹四边形则退化为三角形。
- 空心任意四边形Cover和空心矩形Cover线宽范围为[2, 16],线宽2对齐。
- Hi3516CV610 空心任意四边形各点坐标需按照顺时针或逆时针方向输入。
- 当矩形Cover与输入图像存在重合区域时,自适应调整矩形Cover大小到图像内。
表 1 不同芯片Cover属性差异
【举例】
请参见ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_add_osd_task
【描述】
往一个已经启动的job里添加批量叠加OSD task。
【语法】
td_s32 ss_mpi_vgs_add_osd_task(ot_vgs_handle handle, const ot_vgs_task_attr *task, const ot_vgs_osd osd[], td_u32 array_size);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经启动的job。
- task属性必须满足VGS的能力。
- 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_vgs_end_job接口提交已经添加的task,否则必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
- 做批量OSD任务时,输入输出压缩类型、像素格式保持不变。压缩类型不是紧凑段压缩时,输入输出图像为同一块buffer。压缩类型为紧凑段压缩时,输入输出图像必须使用不同的buffer,而且一次只能画一个。在Hi3511CV100中,当使用不同buffer且输入帧包含附属信息时,需要注意VGS不会将附属信息复制到输出帧。
- 支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
- Hi3519DV500 支持linear格式和tile32x4格式输入。
- Hi3511CV100 支持linear格式输入。
- Hi3519DV500 和Hi3511CV100 输入宽度大于4096时,不支持紧凑段压缩输入,也不支持紧凑段压缩输出。
- Hi3511CV100不支持OSD反色。
- Hi3516CV610不支持OSD。
【举例】
请参见 ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_add_rotation_task
【描述】
往一个已经启动的job里添加旋转任务。
【语法】
td_s32 ss_mpi_vgs_add_rotation_task(ot_vgs_handle handle, const ot_vgs_task_attr *task, ot_rotation angle);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经创建的job。
- task属性必须满足VGS的能力。
- 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_vgs_end_job接口提交已经添加的task,否则必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
- 支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
- 做旋转任务时,需要申请输入图像buffer和输出图像buffer。在Hi3511CV100中,当使用不同buffer且输入帧包含附属信息时,需要注意VGS不会将附属信息复制到输出帧。
- 旋转的输入输出像素格式只支持semi-planar 420、单分量(Y),且不支持像素格式转换。
- 旋转不支持压缩写出。
- Hi3519DV500 和Hi3511CV100 旋转输入支持非紧凑段压缩和非压缩,但是非紧凑段压缩输入旋转90°和270°时的处理性能约为非压缩输入时的四分之一。
- Hi3519DV500 旋转支持linear格式和tile64x16格式输入,仅支持linear格式输出。
- Hi3511CV100 旋转支持linear格式输入输出。
【举例】
请参见 ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_add_luma_task
【描述】
往一个已经启动的job里批量添加获取亮度和任务。
【语法】
td_s32 ss_mpi_vgs_add_luma_task(ot_vgs_handle handle, const ot_vgs_task_attr *task, const ot_rect luma_rect[], td_u32 array_size, td_u64 luma_data[]);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经创建的job。
- task属性必须满足VGS的能力。
- 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_vgs_end_job接口提交已经添加的task,否则必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
- 支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
- 做获取亮度和任务时,只需要申请输入图像buffer。
- VGS只检查task的输入属性,不检查task的输出属性。
- 亮度和区域必须在输入图像内,且起始点及宽高均要求2像素对齐。
- Hi3519DV500 输入宽度大于4096时,不支持紧凑段压缩输入。
- Hi3519DV500 亮度和区域大小最小为2x2,最大为8192x8192。
- Hi3511CV100 亮度和区域大小最小为2x2,最大为16384x8192。
- Hi3516CV610 亮度和区域大小最小为6x6,最大为4096x4096。
【举例】
请参见 ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_add_mosaic_task
【描述】
往一个已经启动的job里添加批量叠加Mosaic task。
【语法】
td_s32 ss_mpi_vgs_add_mosaic_task(ot_vgs_handle handle, const ot_vgs_task_attr *task, const ot_mosaic mosaic[], td_u32 array_size);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经启动的job。
- task属性必须满足VGS的能力。
- 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_vgs_end_job接口提交已经添加的task,否则必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
- 做批量Mosaic任务时,输入输出压缩类型、像素格式保持不变。压缩类型不是紧凑段压缩时,输入输出图像为同一块buffer。压缩类型为紧凑段压缩时,输入输出图像必须使用不同的buffer,而且一次只能画一个。在Hi3511CV100中,当使用不同buffer且输入帧包含附属信息时,需要注意VGS不会将附属信息复制到输出帧。
- 支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
- Hi3519DV500 支持linear格式和tile32x4格式输入。
- Hi3511CV100 支持linear格式输入。
- Hi3519DV500 和Hi3511CV100输入宽度大于4096时,不支持紧凑段压缩输入。
- Mosaic起始坐标及宽4对齐,高2对齐。
- Hi3516CV610不支持Mosaic。
表 1 不同芯片Mosaic属性差异
【举例】
请参见 ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_add_corner_rect_task
【描述】
往一个已经启动的job里添加批量叠加Corner_rect task。
【语法】
td_s32 ss_mpi_vgs_add_corner_rect_task(ot_vgs_handle handle, const ot_vgs_task_attr *task, const ot_corner_rect corner_rect[], const ot_corner_rect_attr *corner_rect_attr, td_u32 array_size);
【参数】
|
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经启动的job。
- task属性必须满足VGS的能力。
- 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_vgs_end_job接口提交已经添加的task,否则必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
-
做批量Corner_rect任务时,输入输出压缩类型、像素格式保持不变。压缩类型不是紧凑段压缩时,输入输出图像为同一块buffer。压缩类型为紧凑段压缩时,输入输出图像必须使用不同的buffer,而且一次只能画一个。在Hi3511CV100中,当使用不同buffer且输入帧包含附属信息时,需要注意VGS不会将附属信息复制到输出帧。
支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
-
Hi3519DV500 支持linear格式和tile32x4格式输入。
- Hi3516CV610和Hi3511CV100 支持linear格式输入。
- Hi3519DV500 和Hi3511CV100输入宽度大于4096时,不支持紧凑段压缩输入。
- Corner_rect的类型可分为实线框(OT_CORNER_RECT_TYPE_FULL_LINE)或角框(OT_CORNER_RECT_TYPE_CORNER)。
- Corner_rect起始坐标及宽高2对齐。
-
坐标及宽高取值范围:
Hi3519DV500和Hi3511CV100:水平X:[-8192, 16382],垂直Y:[-8192, 8190],宽:[2, 8192],高:[2, 8192]。
Hi3516CV610:水平X:[-4096,4094],垂直Y:[-4096,4094],宽:[2,4096],高:[2,4096]。
-
线宽范围为[2, 16],线宽2对齐。水平线长(hor_len)不大于Corner_rect的宽,竖直线长(ver_len)不大于Corner_rect的高。
- 当角框与输入图像存在重合区域时,自适应调整角框大小到图像内。
- 批量处理时,每个Corner_rect的颜色、类型等属性(corner_rect_attr)都一样。
- Hi3516CV610中Corner_rect使用画线实现。
- Hi3511CV100中Corner_rect在非压缩场景使用画线实现,压缩场景使用cover实现。
【举例】
请参见ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_add_stitch_task
【描述】
往一个已经启动的job里添加拼接 task。
【语法】
td_s32 ss_mpi_vgs_add_stitch_task(ot_vgs_handle handle, const ot_vgs_stitch_task_attr *task, td_u32 pic_num);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经启动的job。
- task属性必须满足VGS的能力。
- 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_vgs_end_job接口提交已经添加的task,否则必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
- 支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
- 做拼接任务时,各输入图像的压缩类型、像素格式、视频存储格式,宽高大小需要一样。输出图像的宽度是各输入图像宽之和,输出图像高与输入图像高相同,不支持缩放。
- 不支持像素格式转换,即输出图像的像素格式需与输入图像的一致。
- 拼接输入图像宽高取值范围:宽:[32,4096],高:[32,8192]。
- 输入输出图像不支持紧凑段压缩。
- Hi3519DV500 支持linear格式输入,支持linear格式和tile32x4格式输出,其中tile32x4格式输出时要求输出宽度不大于4096。
- Hi3516CV610和Hi3511CV100均不支持拼接。
【举例】
请参见ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_add_online_task
【描述】
往一个已经启动的job里添加在线任务,叠加OSD/Cover/Mosaic/Corner_rect、Crop、Aspect Ratio、Mirror/Flip和缩放功能可以在同一个任务中处理。
【语法】
td_s32 ss_mpi_vgs_add_online_task(ot_vgs_handle handle, const ot_vgs_task_attr *task, const ot_vgs_online *online);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经启动的job。
- task属性必须满足VGS的能力。
- 如果此接口返回失败,如不需再添加其他任务,可以调用ss_mpi_vgs_end_job接口提交已经添加的task,否则必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
- 不限制用户输入输出是否使用同一块VB。使用同一块VB时,建议只做非压缩图像的缩小任务,否则可能会导致图像异常。在Hi3511CV100中,当使用不同VB且输入帧包含附属信息时,需要注意VGS不会将附属信息复制到输出帧。
- 支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
- 当设置紧凑段压缩写出时,不支持mirror或flip。
- Hi3519DV500 任务执行顺序为:Crop->Mosaic->Cover->Corner_rect->OSD->Scale/Aspect Ratio/Mirror/Flip。整个任务只占用一张图像的性能消耗。
- Hi3511CV100 任务执行顺序为:Crop->Mosaic->Cover->OSD->Scale/Aspect Ratio/Border/Mirror/Flip。整个任务只占用一张图像的性能消耗。
- Hi3516CV610 任务执行顺序为:Crop->Cover->Scale/Mirror/Flip。整个任务只占用一张图像的性能消耗。
- Cover/Mosaic/Corner_rect/OSD数量不要超过数组的大小。
- 所有Mosaic的块大小相同,以最后一个参数有效的Mosaic的块大小为准。
- Crop时,宽高和坐标必须2对齐,裁剪区域宽高不能小于32(其中Hi3516CV610不能小于6),不能大于原图。
- Aspect Ratio时,幅形比视频区域的宽高和坐标必须2对齐,宽高不能小于32,不能大于原图。
- 对于Hi3519DV500,Cover的数量范围:OT_COVER_RECT类型最多16个,OT_COVER_QUAD类型最多1个。其中空心矩形Cover是用Corner_rect实现的,数量上是共享的;如果只配置了空心矩形Cover,所有空心矩形Cover的颜色一致,统一使用第一个空心矩形Cover的颜色;如果同时配置了空心矩形Cover和Corner_rect,二者的颜色统一使用Corner_rect的颜色。
- 对于Hi3511CV100,Cover的数量范围:OT_COVER_RECT类型最多5个,OT_COVER_QUAD类型最多1个。其中空心矩形Cover是用空心任意四边形实现的,数量上是共享的;如果只配置了空心矩形Cover,所有空心矩形Cover的颜色一致,统一使用第一个空心矩形Cover的颜色。
- 对于Hi3516CV610,Cover的数量范围:OT_COVER_RECT类型最多1个。
- 对于Hi3519DV500,在输入非package422像素格式时,支持自适应输入低延时。
- 对于Hi3516CV610,仅在UVC场景支持输入低延时。
- 对于Hi3511CV100,支持输入低延时。
- Scale时,若当宽(高)缩小倍数大于15,对应输入宽(高)需4像素对齐。
- 当输入Linear格式图像宽度超过4096或tile64x16或tile32x4格式图像宽度超过3072,并且压缩输出时,不支持mirror和幅形比同时开启。
-
输出非压缩图像时,支持将一张图的某个区域缩放到另一张图的任意区域,输出的首地址是计算偏移后的,stride是大图的,width和height是小图的。如图1所示。

【举例】
请参见ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_end_job
【描述】
提交一个job。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle标识的job必须是已经启动的job。
- 如果此接口返回失败,必须调用ss_mpi_vgs_cancel_job接口取消掉handle标识的job。否则会导致handle标识的job不能再被循环利用。
【举例】
参见ss_mpi_vgs_begin_job举例。
ss_mpi_vgs_cancel_job
【描述】
取消一个job。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
handle标识的job必须是已经启动的job。
【举例】
请参见ss_mpi_vgs_begin_job举例。
ss_mpi_vgs_get_ver_split_job
【描述】
获取垂直分块配置。
【语法】
td_s32 ss_mpi_vgs_get_ver_split_job(const ot_vgs_ver_split_attr *ver_split_attr, ot_vgs_handle *handle, td_u32 *node_num);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle允许的最大数目可在加载ko时通过VGS模块参数g_max_vgs_ver_split_handle进行配置,最大值[2,10](默认为5),合理的设置更小值有助于减少内存占用。
- 垂直分块功能仅支持输出图像高度大于输出图像高度时使用。
- 若本接口计算出最后一块的高度小于32(jpeg允许的最小高度)时,会报错,此时需要调整buf_size让内部重新计算分块策略。
- 仅Hi3516CV610支持该接口。
【举例】
无。
ss_mpi_vgs_proc_ver_split
【描述】
完成本垂直分块放大处理。
【语法】
td_s32 ss_mpi_vgs_proc_ver_split(ot_vgs_handle handle, td_u32 node_id, ot_video_frame_info *in_frame, ot_video_frame_info *out_frame);
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle号需从ss_mpi_vgs_get_ver_split_job得到,即已获取过配置。
- VGS仅会在node_id为0时接收in_frame信息,且该帧信息的宽高需要与ss_mpi_vgs_get_ver_split_job时填写的一致。
- node_id为当前需要处理块的序号,从序号0开始,总共0~node_num-1,需按照递增顺序依次填入。
- 支持循环处理,即从0~node_num-1后,当放大输入输出分辨率、buf地址和size不变时,可再从0~node_num-1提交,达到分块信息重复利用的目的。
- 处理完成后,编码需要的帧信息在out_frame中返回。
- 仅Hi3516CV610支持该接口。
【举例】
无。
ss_mpi_vgs_release_ver_split_job
【描述】
结束本场景垂直分块处理。
【语法】
【参数】
【返回值】
失败,参见错误码。 |
【需求】
- 头文件:ot_common_vgs.h、ss_mpi_vgs.h
- 库文件:libss_mpi.a
【注意】
- handle号需从ss_mpi_vgs_get_ver_split_job得到,即已获取过配置。
- 仅Hi3516CV610支持该接口。
【举例】
无。
数据类型
VGS模块相关数据类型定义如下:
- OT_VGS_DEFAULT_JOB_NUM:定义VGS默认job数量。
- OT_VGS_DEFAULT_TASK_NUM:定义VGS默认task数量。
- OT_VGS_DEFAULT_NODE_NUM:定义VGS默认node数量。
- OT_VGS_MAX_JOB_NUM:定义VGS最大job数量。
- OT_VGS_MIN_JOB_NUM:定义VGS最小job数量。
- OT_VGS_MAX_TASK_NUM:定义VGS最大task数量。
- OT_VGS_MIN_TASK_NUM:定义VGS最小task数量。
- OT_VGS_MAX_NODE_NUM:定义VGS最大node数量。
- OT_VGS_MIN_NODE_NUM:定义VGS最小node数量。
- OT_VGS_CLUT_LEN:定义CLUT颜色表的长度。
- OT_VGS_TASK_PRIVATE_DATA_LEN:定义私有数据长度。
- OT_VGS_STITCH_NUM:定义水平拼接的最大图像数量。
- OT_VGS_IP_NUM:定义VGS IP个数。
- OT_VGS0:定义VGS IP0。
- OT_VGS_MAX_SOLID_RECT_COVER_NUM:定义Online 任务中的最大实心矩形Cover数量。
- OT_VGS_MAX_HOLLOW_RECT_COVER_NUM:定义Online 任务中的最大空心矩形Cover数量。
- OT_VGS_MAX_RECT_COVER_NUM:定义Online 任务中的最大矩形Cover数量。
- OT_VGS_MAX_QUAD_COVER_NUM:定义Online 任务中的最大任意四边形Cover数量。
- OT_VGS_MAX_COVER_NUM:定义Online 任务中的最大Cover数量。
- OT_VGS_MAX_OSD_NUM:定义Online 任务中的最大OSD数量。
- OT_VGS_MAX_CORNER_RECT_NUM: 定义Online 任务中的最大Corner_rect数量。
- OT_VGS_MAX_MOSAIC_NUM:定义Online 任务中的最大Mosaic数量。
- ot_vgs_handle:定义VGS job的句柄。
- ot_vgs_task_attr:定义VGS task的属性。
- ot_vgs_stitch_task_attr:定义VGS 拼接 task的属性。
- ot_vgs_line:定义VGS画线操作的相关配置。
- ot_vgs_osd_inverted_color:定义OSD反色模式类型。
- ot_vgs_osd:定义VGS上OSD的配置。
- ot_vgs_aspect_ratio:定义VGS 幅形比信息。
- ot_border:定义VGS 视频边框信息。
- ot_vgs_scale_coef_mode:定义VGS缩放系数模式的配置。
- ot_vgs_online:定义VGS在线任务的配置。
- ot_vgs_ver_split_attr:定义垂直分块属性。
OT_VGS_DEFAULT_JOB_NUM
【说明】
定义VGS默认job数量。
【定义】
【注意事项】
无
【相关数据类型及接口】
无
OT_VGS_DEFAULT_TASK_NUM
【说明】
定义VGS默认task数量。
【定义】
【注意事项】
无
【相关数据类型及接口】
无
OT_VGS_DEFAULT_NODE_NUM
【说明】
定义VGS默认node数量。
【定义】
【注意事项】
无
【相关数据类型及接口】
无
OT_VGS_MAX_JOB_NUM
【说明】
定义VGS最大job数量
【定义】
【注意事项】
无
【相关数据类型及接口】
无
OT_VGS_MIN_JOB_NUM
【说明】
定义VGS最小job数量
【定义】
【注意事项】
无
【相关数据类型及接口】
无
OT_VGS_MAX_TASK_NUM
【说明】
定义VGS最大task数量。
【定义】
【注意事项】
无
【相关数据类型及接口】
无
OT_VGS_MIN_TASK_NUM
【说明】
定义VGS最小task数量。
【定义】
【注意事项】
无
【相关数据类型及接口】
无
OT_VGS_MAX_NODE_NUM
【说明】
定义VGS最大node数量。
【定义】
【注意事项】
无
【相关数据类型及接口】
无
OT_VGS_MIN_NODE_NUM
【说明】
定义VGS最小node数量。
【定义】
【注意事项】
无
【相关数据类型及接口】
无
OT_VGS_CLUT_LEN
【说明】
定义CLUT颜色表的长度。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_VGS_TASK_PRIVATE_DATA_LEN
【说明】
定义私有数据长度。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_VGS_STITCH_NUM
【说明】
定义水平拼接的最大图像数量。
【定义】
【注意事项】
Hi3516CV610和Hi3511CV100不支持。
【相关数据类型及接口】
OT_VGS_IP_NUM
【说明】
定义VGS IP个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VGS0
【说明】
定义VGS IP0。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VGS_MAX_SOLID_RECT_COVER_NUM
【说明】
定义Online 任务中的最大实心矩形Cover数量。
【定义】
Hi3519DV500:
Hi3511CV100:
Hi3516CV610:
【注意事项】
无。
【相关数据类型及接口】
OT_VGS_MAX_HOLLOW_RECT_COVER_NUM
【说明】
定义Online 任务中的最大空心矩形Cover数量。
【定义】
Hi3511CV100:
【注意事项】
- Hi3519DV500 空心矩形是用Corner_rect实现的,online任务中,空心矩形Cover与Corner_rect的数量和最大为OT_VGS_MAX_CORNER_RECT_NUM。
- Hi3511CV100空心矩形是用空心Quad实现的,online任务中,空心矩形Cover和空心Quad数量和最大为1。
- Hi3516CV610不支持。
【相关数据类型及接口】
OT_VGS_MAX_RECT_COVER_NUM
【说明】
定义Online 任务中的最大矩形Cover数量。
【定义】
#define OT_VGS_MAX_RECT_COVER_NUM (OT_VGS_MAX_SOLID_RECT_COVER_NUM + OT_VGS_MAX_HOLLOW_RECT_COVER_NUM)
【注意事项】
无。
【相关数据类型及接口】
OT_VGS_MAX_QUAD_COVER_NUM
【说明】
定义Online 任务中的最大任意四边形Cover数量。
【定义】
【注意事项】
Hi3516CV610不支持。
【相关数据类型及接口】
OT_VGS_MAX_COVER_NUM
【说明】
定义Online 任务中的最大Cover数量。
【定义】
Hi3519DV500:
Hi3516CV610:
Hi3511CV100:
【注意事项】
无。
【相关数据类型及接口】
OT_VGS_MAX_OSD_NUM
【说明】
定义Online 任务中的最大OSD数量。
【定义】
【注意事项】
Hi3516CV610不支持。
【相关数据类型及接口】
OT_VGS_MAX_CORNER_RECT_NUM
【说明】
定义Online 任务中的最大Corner_rect数量。
【定义】
【注意事项】
Hi3516CV610和Hi3511CV100不支持。
【相关数据类型及接口】
OT_VGS_MAX_MOSAIC_NUM
【说明】
定义Online 任务中的最大Mosaic数量。
【定义】
Hi3519DV500:
Hi3511CV100:
【注意事项】
Hi3516CV610不支持。
【相关数据类型及接口】
ot_vgs_handle
【说明】
定义VGS job的句柄。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_vgs_task_attr
【说明】
定义VGS task的属性。
【定义】
typedef struct {
ot_video_frame_info img_in;
ot_video_frame_info img_out;
td_u64 private_data[OT_VGS_TASK_PRIVATE_DATA_LEN];
td_u32 reserved;
} ot_vgs_task_attr;
【成员】
【注意事项】
输入和输出图像属性需要满足相关约束。
【相关数据类型及接口】
ot_video_frame_info
ot_vgs_stitch_task_attr
【说明】
定义VGS 拼接task的属性。
【定义】
typedef struct {
ot_video_frame_info img_in[OT_VGS_STITCH_NUM];
ot_video_frame_info img_out;
td_u64 private_data[OT_VGS_TASK_PRIVATE_DATA_LEN];
td_u32 reserved;
} ot_vgs_stitch_task_attr;
【成员】
【注意事项】
- 输入和输出图像属性需要满足相关约束。
- Hi3516CV610和Hi3511CV100不支持。
【相关数据类型及接口】
ot_vgs_line
【说明】
定义VGS画线操作的相关配置。
【定义】
typedef struct {
ot_point start_point;
ot_point end_point;
td_u32 thick;
td_u32 color;
} ot_vgs_line;
【成员】
【注意事项】
- 画线操作时,如果起始坐标和结束坐标的X坐标相同,则起始坐标和结束坐标的Y坐标不变,X坐标分别向右增加线的宽度。如果起始坐标和结束坐标的X坐标不相同,则X坐标不变,起始坐标和结束坐标的Y坐标分别向下增加线的宽度。
- 画线可以部分或者全部超出目标图像。
-
画线颜色为RGB模式,R、G、B分别对应位域如下:
31 23 15 7 0
|--------------|--------R------|--------G------|--------B------|
【相关数据类型及接口】
ot_point
ot_vgs_osd_inverted_color
【说明】
定义OSD反色模式类型。
【定义】
typedef enum {
OT_VGS_OSD_INVERTED_COLOR_NONE = 0,
OT_VGS_OSD_INVERTED_COLOR_RGB,
OT_VGS_OSD_INVERTED_COLOR_ALPHA,
OT_VGS_OSD_INVERTED_COLOR_ALL,
OT_VGS_OSD_INVERTED_COLOR_BUTT
} ot_vgs_osd_inverted_color;
【成员】
【注意事项】
Hi3516CV610和Hi3511CV100不支持。
【相关数据类型及接口】
无
ot_vgs_osd
【说明】
定义VGS上OSD的配置。
【定义】
typedef struct {
ot_rect rect;
td_u32 bg_color;
ot_pixel_format pixel_format;
td_phys_addr_t phys_addr;
td_u32 stride;
td_u32 bg_alpha;
td_u32 fg_alpha;
td_u32 clut[OT_VGS_CLUT_LEN];
ot_vgs_osd_inverted_color osd_inverted_color;
} ot_vgs_osd;
【成员】
clut [OT_VGS_CLUT_LEN] |
|
【注意事项】
- OSD区域可以部分或者全部超出目标图像,但起始点坐标不能为负。
- Hi3511CV100不支持反色模式。
- Hi3516CV610不支持。
【相关数据类型及接口】
ot_vgs_aspect_ratio
【说明】
定义VGS 幅形比信息。
【定义】
【成员】
【注意事项】
Hi3516CV610不支持。
【相关数据类型及接口】
ot_border
【说明】
定义VGS 视频边框信息。
【定义】
typedef struct {
td_u32 top_width;
td_u32 bottom_width;
td_u32 left_width;
td_u32 right_width;
td_u32 color;
} ot_border;
【成员】
【注意事项】
仅Hi3511CV100支持。
【相关数据类型及接口】
ot_vgs_scale_coef_mode
【说明】
定义VGS缩放系数模式的配置。
【定义】
typedef enum {
OT_VGS_SCALE_COEF_NORM = 0,
OT_VGS_SCALE_COEF_TAP2,
OT_VGS_SCALE_COEF_TAP4,
OT_VGS_SCALE_COEF_TAP6,
OT_VGS_SCALE_COEF_TAP8,
OT_VGS_SCALE_COEF_BUTT
} ot_vgs_scale_coef_mode;
【成员】
【注意事项】
- 使用4阶、6阶、8阶缩放系数时,输入输出图像高度比例需设置为1/4,宽度不变。
- Hi3519DV500只支持OT_VGS_SCALE_COEF_NORM模式。
【相关数据类型及接口】
ot_vgs_online
【说明】
定义VGS在线任务的配置。
【定义】
typedef struct {
td_bool crop_en;
ot_rect crop_rect;
td_u32 mosaic_num;
ot_mosaic mosaic[OT_VGS_MAX_MOSAIC_NUM];
td_u32 cover_num;
ot_cover cover[OT_VGS_MAX_COVER_NUM];
td_u32 corner_rect_num;
ot_corner_rect_attr corner_rect_attr;
ot_corner_rect corner_rect[OT_VGS_MAX_CORNER_RECT_NUM];
td_u32 osd_num;
ot_vgs_osd osd[OT_VGS_MAX_OSD_NUM];
td_bool aspect_ratio_en;
ot_vgs_aspect_ratio aspect_ratio;
td_bool border_en;
ot_border border;
td_bool mirror_en;
td_bool flip_en;
ot_vgs_scale_coef_mode scale_coef_mode;
} ot_vgs_online;
【成员】
Mosaic的数量。取值范围:[0, OT_VGS_MAX_MOSAIC_NUM] |
|
Cover的数量。取值范围:[0, OT_VGS_MAX_COVER_NUM] |
|
Corner_rect的数量。取值范围:[0, OT_VGS_MAX_CORNER_RECT_NUM] |
|
OSD的数量。取值范围:[0, OT_VGS_MAX_OSD_NUM] |
|
【注意事项】
scale_coef_mode只支持OT_VGS_SCALE_COEF_NORM模式。
【相关数据类型及接口】
ot_vgs_ver_split_attr
【说明】
定义垂直分块属性。
【定义】
typedef struct {
ot_size in;
ot_size out;
ot_pixel_format pixel_format;
td_phys_addr_t buf_phys_addr;
td_u32 buf_size;
} ot_vgs_ver_split_attr;
【成员】
【注意事项】
帧像素格式当前仅支持sp420。
【相关数据类型及接口】
错误码
VGS API错误码如表1所示。
表 1 VGS API错误码
【注意事项】
宏定义OT_ERR_VGS_BUF_FULL未使用,保留。