视频图形子系统¶
概述¶
VGS是视频图形子系统,全称为Video Graphics Sub-System。支持对一幅输入图像进行处理,如进行缩放、像素格式转换、视频存储格式转换、压缩/解压、Cover、OSD、Mosaic、画线、旋转、亮度和统计、Corner_rect、拼接等处理。
功能描述¶
基本概念¶
job
VGS管理task的结构,一个job里可以包含多个task,VGS保证task按照添加到job的顺序执行,并且保证一个job里的所有task一次性提交硬件执行。用户可以在加载VGS ko时设置模块参数(g_max_vgs_job)来设置VGS支持的最大job数。job数取值范围为[20,400],默认为128。
task
对一幅图像完成具体的一个或多个操作,比如打OSD、缩放或像素格式转换等。用户可以在加载VGS ko时设置模块参数(g_max_vgs_task)来设置VGS支持的最大task数。task数取值范围为[20,800],默认为200。
node
VGS硬件的最小执行单位,一个task对应一个或多个node。node中包含硬件工作需要的信息,比如源图像地址,目标图像地址,操作类型等,并按照硬件要求的形式组织。用户可以在加载VGS ko时设置模块参数(g_max_vgs_node)来设置VGS支持的最大node数。node数取值范围为[20,800],默认为200。
HANDLE
任务句柄,标识一个job。
功能描述¶
VGS的功能主要有缩放、OSD、Cover、Mosaic、画线、像素格式转换、视频存储格式转换、压缩/解压、旋转、亮度和统计、Corner_rect、拼接、低功耗策略。
缩放
VGS支持对一幅图像进行缩放,最大支持图像宽高均放大16倍,最大支持图像宽高均缩小15倍。支持单分量(Y)缩放。
OSD
VGS支持在一幅图像上叠加一张位图,可设置位图是否反色,支持批量打OSD。
注意:
需打多个OSD(批量打OSD)时,内部是通过提交多个task来实现,每个task使用上一个task打完OSD的图像作为当前task的源图像进行OSD处理。
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100不支持反色。
Cover
VGS支持对一幅图像进行遮挡操作,遮挡区域形状可以是矩形或者任意四边形,遮挡区域颜色为纯色,支持批量打Cover。
注意:
需打多个Cover(批量打Cover)时,内部是通过提交多个task来实现,每个task使用上一个task打完Cover的图像作为当前task的源图像进行打Cover处理。
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100不支持实心任意四边形,只支持空心任意四边形和实心矩形。
Mosaic
VGS支持对一幅图像进行打Mosaic操作,Mosaic块大小有8x8、16x16、32x32、64x64四种选择,Mosaic区域形状为矩形,每个Mosaic块为纯色,支持批量打Mosaic。
注意:需要打多个Mosaic(批量打Mosaic)时,内部是通过提交多个task来实现,每个task使用上一个task打完Mosaic的图像作为当前task的源图像进行打Mosaic处理。
Corner_rect
VGS支持对一幅图像进行叠加Corner_rect操作,Corner_rect类型可以角框和实线框,支持批量打Corner_rect。
注意:
需要打多个Corner_rect(批量打Corner_rect)时,内部是通过提交多个task来实现,每个task使用上一个task打完Corner_rect的图像作为当前task的源图像进行打Corner_rect处理。批量打Corner_rect时,每个Corner_rect颜色和类型是一样的。
仅SS928V100支持。
拼接
VGS支持对最多4幅图像进行水平拼接操作,图像数量可设置。
注意:
拼接输入的图像的压缩类型、宽高、像素格式等信息需要保持一致。不支持对紧凑段压缩图像进行拼接。
仅SS928V100支持。
画线
VGS支持对一幅图像进行画线操作,支持批量画线。
注意:
画线操作时,如果起始坐标和结束坐标的X坐标相同,则起始坐标和结束坐标的Y坐标不变,X坐标分别向右增加线的宽度。
画线操作时,如果起始坐标和结束坐标的X坐标不相同,则X坐标不变,起始坐标与结束坐标的Y坐标分别向下方延伸线的宽度(即X坐标不变,Y坐标向下增加线宽)。
像素格式转换
VGS支持的输入输出像素格式包括semi-planar 420、semi-planar 422和单分量(Y)。支持semi-planar 420与semi-planar 422之间的格式转换,支持semi-planar 420、semi-planar 422到单分量(Y)格式的转换,做像素格式转换时,支持UV先后顺序可调整。
视频存储格式转换
VGS支持Tile格式转为linear格式。
压缩/解压
VGS支持linear格式下semi-planar 422、semi-planar 420和单分量(Y)格式的压缩/解压。支持Tile格式下semi-planar 420格式的解压缩。
亮度和统计
统计图像的指定区域亮度信息之和。支持批量统计。
旋转
VGS支持0、90、180和270度的旋转。
低功耗策略
VGS模块使用低功耗策略,在VGS没有工作时VGS时钟是关闭的,这时候手动读写VGS模块的寄存器可能会有读写错误或者卡死的现象;可通过设置模块参数(g_save_power_en)的值来开启(g_save_power_en=1)或关闭(g_save_power_en=0)低功耗策略,仅SS626V100支持该模块参数。
表 1 SS528V100 VGS硬件规格
规格点 |
描述 |
|---|---|
视频输入数据格式 |
1、支持linear和Tile格式。 2、支持输入紧凑段压缩、非紧凑段压缩、行压缩、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格式输入。 4、只支持8 bit YUV。 |
输入图像分辨率及对齐要求 |
1、最小支持:32x32。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,Linear格式stride 16对齐。Tile格式stride 64对齐。 注意: 要进行Mosaic处理时,输入图像宽度不能小于64。 |
视频输出数据格式 |
1、只支持linear格式。 2、支持输出紧凑段压缩、非紧凑段压缩、行压缩图像。 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、只支持8 bit YUV。 |
输出图像分辨率及对齐要求 |
1、最小支持:4x4。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,stride 16对齐。 |
缩放能力 |
1、水平、垂直支持16倍放大。 2、水平、垂直支持15倍缩小。 3、当输入图像宽度大于2688且输出为非紧凑段压缩时,只支持10倍缩小。 |
表 2 SS625V100 VGS硬件规格
规格点 |
描述 |
|---|---|
视频输入数据格式 |
1、支持linear和Tile格式。 2、支持输入紧凑段压缩、非紧凑段压缩、行压缩、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格式输入。 4、只支持8 bit YUV。 |
输入图像分辨率及对齐要求 |
1、最小支持:32x32。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐(在ss_mpi_vgs_add_scale_task和ss_mpi_vgs_add_online_task接口中支持linear非压缩奇数宽高图像输入),Linear格式stride 16对齐。Tile格式stride 64对齐。 注意: 要进行Mosaic处理时,输入图像宽度不能小于64。 |
视频输出数据格式 |
1、只支持linear格式。 2、支持输出紧凑段压缩、非紧凑段压缩、行压缩图像。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、只支持8 bit YUV。 |
输出图像分辨率及对齐要求 |
1、最小支持:4x4。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,stride 16对齐。 |
缩放能力 |
1、水平、垂直支持16倍放大。 2、水平、垂直支持15倍缩小。 3、当输入图像宽度大于2688且输出为非紧凑段压缩时,只支持10倍缩小。 |
表 3 SS524V100 VGS硬件规格
规格点 |
描述 |
|---|---|
视频输入数据格式 |
1、支持linear和Tile格式。 2、支持输入紧凑段压缩、非紧凑段压缩、行压缩、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格式输入。 4、只支持8 bit YUV。 |
输入图像分辨率及对齐要求 |
1、最小支持:32x32。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,Linear格式stride 16对齐。Tile格式stride 64对齐。 注意: 要进行Mosaic处理时,输入图像宽度不能小于64。 |
视频输出数据格式 |
1、只支持linear格式。 2、支持输出紧凑段压缩、非紧凑段压缩、行压缩图像。 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、只支持8 bit YUV。 |
输出图像分辨率及对齐要求 |
1、最小支持:4x4。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,stride 16对齐。 |
缩放能力 |
1、水平、垂直支持16倍放大。 2、水平、垂直支持15倍缩小。 3、当输入图像宽度大于2688且输出为非紧凑段压缩时,只支持10倍缩小。 |
表 4 SS522V101 VGS硬件规格
规格点 |
描述 |
|---|---|
视频输入数据格式 |
1、支持linear和Tile格式。 2、支持输入紧凑段压缩、非紧凑段压缩、行压缩、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格式输入。 4、支持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。 5、只支持8 bit YUV。 |
输入图像分辨率及对齐要求 |
1、最小支持:32x32。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,Linear格式stride 16对齐。Tile格式stride 64对齐。 注意: 要进行Mosaic处理时,输入图像宽度不能小于64。 |
视频输出数据格式 |
1、只支持linear格式。 2、支持输出紧凑段压缩、非紧凑段压缩、行压缩图像。 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、只支持8 bit YUV。 |
输出图像分辨率及对齐要求 |
1、最小支持:4x4。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,stride 16对齐。 |
缩放能力 |
1、水平、垂直支持16倍放大。 2、水平、垂直支持15倍缩小。 3、当输入图像宽度大于2688且输出为非紧凑段压缩时,只支持10倍缩小。 |
表 5 SS928V100 VGS硬件规格
规格点 |
描述 |
|---|---|
视频输入数据格式 |
1、支持linear和Tile格式。 2、支持输入紧凑段压缩、非紧凑段压缩、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格式输入。 4、只支持8 bit YUV。 |
输入图像分辨率及对齐要求 |
1、最小支持:32x32。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,Linear格式stride 32对齐。Tile格式stride 64对齐。 注意: 要进行Mosaic处理时,输入图像宽度不能小于64。仅缩放时,最小支持到8x6。 |
视频输出数据格式 |
1、只支持linear格式。 2、支持输出紧凑段压缩、非紧凑段压缩。 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、支持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。 5、只支持8 bit YUV。 注意:
|
输出图像分辨率及对齐要求 |
1、最小支持:4x4。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,stride 32对齐。 注意: 仅缩放时,最小支持到2x2。 |
缩放能力 |
1、支持16倍放大。 2、支持30倍缩小。 3、当输入图像CROP后宽度大于8192(2*4096)且输出为非压缩时,只支持15倍缩小。 |
表 6 SS626V100 VGS硬件规格
规格点 |
描述 |
|---|---|
视频输入数据格式 |
1、支持linear和Tile格式。 2、支持输入紧凑段压缩、非紧凑段压缩、行压缩、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格式输入。 4、只支持8 bit YUV。 |
输入图像分辨率及对齐要求 |
1、最小支持:32x32。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,Linear格式stride 16对齐。Tile格式stride 64对齐。 注意: 要进行Mosaic处理时,输入图像宽度不能小于64。 |
视频输出数据格式 |
1、只支持linear格式。 2、支持输出紧凑段压缩、非紧凑段压缩、行压缩图像。 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、只支持8 bit YUV。 |
输出图像分辨率及对齐要求 |
1、最小支持:4x4。 2、最大支持:16384x8192。 3、宽度和高度均为2像素对齐,stride 16对齐。 |
缩放能力 |
1、水平、垂直支持16倍放大。 2、水平、垂直支持15倍缩小。 3、当输入图像CROP后宽度大于3840且输出为非紧凑段压缩时,只支持14倍缩小。 |
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_begin_job¶
【描述】
启动一个job。
【语法】
td_s32 ss_mpi_vgs_begin_job(ot_vgs_handle *handle);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
用以返回HANDLE。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ot_common_vgs.h、ss_mpi_vgs.h
库文件:libss_mpi.a
【注意】
可一次启动多个job,但必须判断ss_mpi_vgs_begin_job函数返回成功后才能使用handle返回的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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已经启动的job的HANDLE。 |
输入 |
task |
VGS task属性指针。 |
输入 |
mode |
缩放系数模式,可选择普通、2阶、4阶、6阶、8阶缩放系数。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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时,建议只做非压缩图像的缩小任务,否则可能会导致图像异常。
支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
只支持普通系数。
SS528V100/SS625V100/SS524V100/SS522V101 输入宽度大于2688时,不支持行解压和紧凑段解压,也不支持紧凑段压缩或行压缩输出;输出宽度大于3072时,不支持紧凑段压缩输出。
SS928V100 输入宽度大于4096时,不支持紧凑段解压输入,也不支持紧凑段压缩输出。输出宽度大于4096时,不支持紧凑段压缩输出。
SS928V100 当宽(高)缩小倍数大于15时,输入宽(高)需4像素对齐。
SS626V100 输入宽度大于3072时,不支持紧凑段解压输入,输入宽度大于3840时,不支持行解压输入;输出宽度大于3072时,不支持紧凑段压缩输出。
【举例】
请参见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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已启动job的HANDLE。 |
输入 |
task |
VGS task属性指针。 |
输入 |
line |
VGS画线属性配置结构体数组。 |
输入 |
array_size |
VGS画线数目,范围:[1, 100] |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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不能再被循环利用。
做批量画线任务时,输入输出压缩类型、像素格式保持不变。压缩类型不是紧凑段压缩时,输入输出图像为同一块buffer。压缩类型为紧凑段压缩时,输入输出图像必须使用不同的buffer,而且一次只能画一个。
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100如果是压缩图像输入,只支持画横线和竖线。压缩图像输入,画线功能实际上是由Cover功能实现,因此效果和非压缩图像效果略有不同。
支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
只支持linear格式输入。
SS528V100/SS625V100/SS524V100/SS522V101 不支持亮度单分量像素格式。
SS528V100/SS625V100/SS524V100/SS522V101 输入宽度大于2688时,不支持行解压和紧凑段解压,也不支持紧凑段压缩或行压缩输出;输出宽度大于3072时,不支持紧凑段压缩输出。
SS928V100 输入宽度大于4096时,不支持紧凑段解压输入,也不支持紧凑段压缩输出。
SS626V100输入宽度大于3072时,不支持紧凑段解压输入,输入宽度大于3840时,不支持行解压输入;输出宽度大于3072时,不支持紧凑段压缩输出。
【举例】
请参见 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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已启动job的HANDLE。 |
输入 |
task |
VGS task属性指针。 |
输入 |
cover |
Cover属性配置结构体数组。 |
输入 |
array_size |
Cover的数目,范围:[1, 100] |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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,而且一次只能画一个。
支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
Cover起始坐标及宽高2对齐。坐标及宽高取值范围:
水平X:[-16384,16382],垂直Y:[-8192,8190],宽:[2,16384],高:[2,8192]
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100只支持实心矩形和空心任意四边形。空心任意四边形4个点需要顺序设置(顺时针或逆时针)。
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100空心四边形的边框范围为[2,14],SS928V100边框范围为[2,16]。边框2对齐。
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100不支持压缩图像画空心任意四边形,支持压缩图像画空心矩形框。
SS528V100/SS625V100/SS524V100/SS522V101输入宽度大于2688时,不支持行解压和紧凑段解压,也不支持紧凑段压缩或行压缩输出;输出宽度大于3072时,不支持紧凑段压缩输出。
SS928V100输入宽度大于4096时,不支持紧凑段解压输入,也不支持紧凑段压缩输出。
SS626V100输入宽度大于3072时,不支持紧凑段解压输入,输入宽度大于3840时,不支持行解压输入;输出宽度大于3072时,不支持紧凑段压缩输出。
SS528V100/SS625V100/SS524V100/SS522V101 任意四边形cover输入输出图像不支持单分量。
只支持linear格式。
【举例】
请参见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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已启动job的HANDLE。 |
输入 |
task |
VGS task属性指针。 |
输入 |
osd |
OSD属性配置结构体数组 |
输入 |
array_size |
OSD的数目,范围: [1, 100] |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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,而且一次只能画一个。
支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
SS528V100/SS625V100/SS524V100/SS522V101输入宽度大于2688时,不支持行解压和紧凑段解压,也不支持紧凑段压缩或行压缩输出;输出宽度大于3072时,不支持紧凑段压缩输出。
SS928V100 输入宽度大于4096时,不支持紧凑段解压输入,也不支持紧凑段压缩输出。
SS626V100输入宽度大于3072时,不支持紧凑段解压输入,输入宽度大于3840时,不支持行解压输入;输出宽度大于3072时,不支持紧凑段压缩输出。
只支持linear格式。
【举例】
请参见 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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已创建job的HANDLE。 |
输入 |
task |
VGS task属性指针。 |
输入 |
angle |
旋转角度。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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不能再被循环利用。
做旋转任务时,需要申请输入图像buffer和输出图像buffer。
旋转不支持压缩写出。
旋转的输入输出像素格式只支持semi-planar 420、单分量(Y),且不支持像素格式转换。
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100输入视频格式只支持linear、TILE,输出视频格式只支持linear。SS928V100旋转仅支持linear格式输入和linear格式输出。
支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100的旋转不支持行解压和紧凑段解压。
SS928V100的旋转输入仅支持非紧凑段压缩和非压缩。
【举例】
请参见 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[]);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已创建job的HANDLE。 |
输入 |
task |
VGS task属性指针。 |
输入 |
luma_rect |
亮度和区域数组首地址。 |
输入 |
array_size |
亮度和区域数量,范围: [1, 100] |
输入 |
luma_data |
亮度和写出数组首地址(用户态虚拟地址) |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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不能再被循环利用。
做获取亮度和任务时,只需要申请输入图像buffer。
VGS只检查task的输入属性,不检查task的输出属性。
亮度和区域必须在输入图像内,且起始点及宽高均要求2像素对齐。
支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
SS528V100/SS625V100/SS524V100/SS522V101 输入宽度大于2688时,不支持行解压和紧凑段解压;输出宽度大于3072时,不支持紧凑段压缩输出。
SS928V100 输入宽度大于4096时,不支持紧凑段解压输入。
SS928V100 亮度和区域大小最小为2x2,最大为8192x8192。
SS626V100 输入宽度大于3072时,不支持紧凑段解压输入,输入宽度大于3840时,不支持行解压输入。
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 亮度和区域大小最小为2x2,最大为16384x8192。
【举例】
请参见 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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已启动job的HANDLE。 |
输入 |
task |
VGS task属性指针。 |
输入 |
mosaic |
Mosaic属性配置结构体数组。 |
输入 |
array_size |
Mosaic的数目,范围:[1, 100] |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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,而且一次只能画一个。
支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
Mosaic起始坐标及宽4对齐,高2对齐。坐标及宽高取值范围:水平X:[-8192,16380],垂直Y:[-8192,8190],宽:[8,8192],高:[8,8192]。
SS928V100只支持宽:[8, 8192]
SS528V100/SS625V100/SS524V100/ SS522V101只支持8x8,16x16,32x32 Mosaic Block。
SS928V100只支持16x16,32x32,64x64 Mosaic Block。
SS626V100支持8x8,16x16,32x32,64x64 Mosaic Block。
SS528V100/SS625V100/SS524V100/SS522V101 输入宽度大于2688时,不支持行解压和紧凑段解压,也不支持紧凑段压缩或行压缩输出;输出宽度大于3072时,不支持紧凑段压缩输出。
SS928V100 输入宽度大于4096时,不支持紧凑段解压输入。
SS626V100输入宽度大于3072时,不支持紧凑段解压输入,输入宽度大于3840时,不支持行解压输入;输出宽度大于3072时,不支持紧凑段压缩输出。
只支持linear格式输入。
【举例】
请参见 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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已启动job的HANDLE。 |
输入 |
task |
VGS task属性指针。 |
输入 |
corner_rect |
Corner_rect 属性配置结构体数组。 ot_corner_rect 请参考“系统控制”章节。 |
输入 |
corner_rect_attr |
Corner_rect公共属性。 ot_corner_rect_attr请参考“系统控制”章节。 |
输入 |
array_size |
Corner_rect的数目,范围:[1, 100] |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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,而且一次只能画一个。
支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
Corner_rect的类型可分为实线框(OT_CORNER_RECT_TYPE_FULL_LINE)或角框(OT_CORNER_RECT_TYPE_CORNER)。
Corner_rect起始坐标及宽高2对齐。坐标及宽高取值范围:
水平X:[0,16382],垂直Y:[0,8190],宽:[2,16384],高:[2,8192]。线宽范围为[2,16],线宽2对齐。水平线长(hor_len)不大于Corner_rect的宽,竖直线长(ver_len)不大于Corner_rect的高。SS928V100只支持宽:[2,8192]
SS928V100在输入图像宽度大于4096时,水平线长(hor_len)不能大于248。
SS928V100 输入宽度大于4096时,不支持紧凑段解压输入。
批量处理时,每个Corner_rect的颜色、类型等属性(corner_rect_attr)都一样。
只支持linear格式。
仅SS928V100支持此接口。
【举例】
请参见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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已启动job的HANDLE。 |
输入 |
task |
VGS拼接 task属性指针。 |
输入 |
pic_num |
拼接图像的数目,范围:[1, 4] |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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和虚拟地址,但用户需要保证物理连续的内存大小足够。
做拼接任务时,各输入图像的压缩类型、像素格式,宽高大小需要一样。输出图像的宽度是各输入图像宽之和,输出图像高与输入图像高相同,不支持缩放。
不支持像素格式转换,即输出图像的像素格式需与输入图像的一致。
仅SS928V100支持此接口。
拼接输入图像宽高取值范围:宽:[32,4096],高:[32,8192]
输入输出图像不支持紧凑段压缩。
只支持linear格式。
【举例】
请参见ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_add_online_task¶
【描述】
往一个已经启动的job里添加在线任务,叠加OSD/Cover/Mosaic/Corner_rect、Crop、Mirror/Filp和缩放功能可以在同一个任务中处理。
【语法】
td_s32 ss_mpi_vgs_add_online_task(ot_vgs_handlehandle, const ot_vgs_task_attr*task, const ot_vgs_online*online);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已经启动的job的HANDLE。 |
输入 |
task |
VGS task属性指针。 |
输入 |
online |
在线任务属性。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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时,建议只做非压缩图像的缩小任务,否则可能会导致图像异常。
当设置紧凑段压缩写出时,不支持mirror或flip。当设置行压缩写出时,不支持mirror。
支持非VB内存的物理地址,用户只需配置正确的物理地址即可,无需配置PoolId和虚拟地址,但用户需要保证物理连续的内存大小足够。
任务执行顺序为,Crop->Mosaic->Cover->Corner_rect->OSD->Scale/Mirror/Flip。整个任务只占用一张图像的性能消耗。
Cover/Mosaic/Corner_rect/OSD数量不要超过数组的大小。
所有Mosaic的块大小相同,以最后一个参数有效的Mosaic的块大小为准。
Crop时,宽高和坐标必须2对齐,裁剪区域宽高不能小于32,不能大于原图。
仅SS928V100/SS626V100支持此接口。
对于SS928V100,Cover的数量范围:OT_COVER_RECT类型最多8个,OT_COVER_QUAD类型最多1个。
对于SS626V100,Cover的数量范围:OT_COVER_RECT类型最多4个,不支持OT_COVER_QUAD类型。
【举例】
请参见ss_mpi_vgs_begin_job的举例。
ss_mpi_vgs_end_job¶
【描述】
提交一个job。
【语法】
td_s32 ss_mpi_vgs_end_job(ot_vgs_handle handle);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已启动job的HANDLE。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件: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。
【语法】
td_s32 ss_mpi_vgs_cancel_job(ot_vgs_handle handle);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
表示一个已启动job的HANDLE。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ot_common_vgs.h、ss_mpi_vgs.h
库文件:libss_mpi.a
【注意】
handle标识的job必须是已经启动的job。
【举例】
请参见ss_mpi_vgs_begin_job举例。
数据类型¶
VGS模块相关数据类型定义如下:
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_VGS1:定义VGS IP1。
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:定义反色模式类型。
ot_vgs_osd:定义VGS上OSD的配置。
ot_vgs_scale_coef_mode:定义VGS缩放系数模式的配置。
ot_vgs_online:定义VGS在线任务的配置。
OT_VGS_CLUT_LEN¶
【说明】
定义Clut颜色表的长度。
【定义】
#define OT_VGS_CLUT_LEN 16
【注意事项】
无。
【相关数据类型及接口】
OT_VGS_TASK_PRIVATE_DATA_LEN¶
【说明】
定义私有数据长度。
【定义】
#define OT_VGS_TASK_PRIVATE_DATA_LEN 4
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VGS_STITCH_NUM¶
【说明】
定义水平拼接的最大图像数量。
【定义】
#define OT_VGS_STITCH_NUM 4
【注意事项】
无。
【相关数据类型及接口】
OT_VGS_IP_NUM¶
【说明】
定义VGS IP个数。
【定义】
SS528V100/SS625V100/SS524V100/SS522V101:
#define OT_VGS_IP_NUM 1
SS928V100/SS626V100:
#define OT_VGS_IP_NUM 2
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VGS0¶
【说明】
定义VGS IP0。
【定义】
SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100:
#define OT_VGS0 0
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VGS1¶
【说明】
定义VGS IP1。
【定义】
SS528V100/SS625V100//SS524V100/SS522V101:
无。
SS928V100/SS626V100:
#define OT_VGS1 1
【注意事项】
无。
【相关数据类型及接口】
无。
OT_VGS_MAX_COVER_NUM¶
【说明】
定义Online 任务中的最大Cover数量。
【定义】
SS928V100:
#define OT_VGS_MAX_COVER_NUM 9
SS626V100:
#define OT_VGS_MAX_COVER_NUM 4
【注意事项】
仅SS928V100/SS626V100支持。
【相关数据类型及接口】
OT_VGS_MAX_OSD_NUM¶
【说明】
定义Online 任务中的最大OSD数量。
【定义】
SS928V100/SS626V100:
#define OT_VGS_MAX_OSD_NUM 1
【注意事项】
仅SS928V100/SS626V100支持。
【相关数据类型及接口】
OT_VGS_MAX_CORNER_RECT_NUM¶
【说明】
定义Online 任务中的最大Corner_rect数量。
【定义】
#define OT_VGS_MAX_CORNER_RECT_NUM 32
【注意事项】
仅SS928V100支持。
【相关数据类型及接口】
OT_VGS_MAX_MOSAIC_NUM¶
【说明】
定义Online 任务中的最大Mosaic数量。
【定义】
SS928V100:
#define OT_VGS_MAX_MOSAIC_NUM 4
SS626V100:
#define OT_VGS_MAX_MOSAIC_NUM 1
【注意事项】
仅SS928V100/SS626V100支持。
【相关数据类型及接口】
ot_vgs_handle¶
【说明】
定义VGS job的句柄。
【定义】
typedef td_s32 ot_vgs_handle;
【注意事项】
无。
【相关数据类型及接口】
无。
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;
【成员】
成员名称 |
描述 |
|---|---|
img_in |
输入图像属性。 ot_video_frame_info请参考“系统控制”章节。 |
img_out |
输出图像属性。 |
private_data |
与task相关的私有数据,VGS不会使用和修改其中的数据。 |
reserved |
保留项。 |
【注意事项】
输入和输出图像属性需要满足相关约束。
【相关数据类型及接口】
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;
【成员】
成员名称 |
描述 |
|---|---|
img_in |
输入图像属性数组,最多4张图像。 |
img_out |
输出图像属性。 |
private_data |
与task相关的私有数据,VGS不会使用和修改其中的数据。 |
reserved |
保留项。 |
【注意事项】
输入和输出图像属性需要满足相关约束。
【相关数据类型及接口】
ot_vgs_line¶
【说明】
定义VGS画线操作的相关配置。
【定义】
typedef struct {
ot_point start_point;
ot_point end_point;
td_u32 thick;
td_u32 color;
} ot_vgs_line;
【成员】
成员名称 |
描述 |
|---|---|
start_point |
线的起始点坐标。坐标值均要求2对齐,取值范围: SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100: 水平位置X:[-16384, 16382] 垂直位置Y:[-8192, 8190] |
end_point |
线的结束点坐标。坐标值均要求2对齐,取值范围: SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100: 水平位置X:[-16384, 16384] 垂直位置Y:[-8192, 8192] |
thick |
线的宽度,2像素对齐。 SS528V100/SS625V100/SS524V100/SS522V101/SS626V100取值范围:[2,14] SS928V100取值范围:[2,16] |
color |
线的颜色,RGB888格式,取值范围:[0x0, 0xFFFFFF] |
【注意事项】
画线操作时,如果起始坐标和结束坐标的X坐标相同,则起始坐标和结束坐标的Y坐标不变,X坐标分别向右增加线的宽度。如果起始坐标和结束坐标的X坐标不相同,则X坐标不变,起始坐标和结束坐标的Y坐标分别向下增加线的宽度。
画线可以部分或者全部超出目标图像。
起始点和结束点不能重合。
画线颜色为RGB模式,R、G、B分别对应位域如下:
31 23 15 7 0
|--------------|--------R------|--------G------|--------B------|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 不支持压缩图像画斜线。压缩图像只能画竖线或横线。
【相关数据类型及接口】
ot_point
ot_vgs_osd_inverted_color¶
【说明】
定义反色模式类型。
【定义】
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;
【成员】
成员名称 |
描述 |
|---|---|
OT_VGS_OSD_INVERTED_COLOR_NONE |
不反色。 |
OT_VGS_OSD_INVERTED_COLOR_RGB |
仅对RGB反色。 |
OT_VGS_OSD_INVERTED_COLOR_ALPHA |
仅对alpha反色。 |
OT_VGS_OSD_INVERTED_COLOR_ALL |
对RGB和alpha反色。 |
【注意事项】
仅SS928V100支持,其它解决方案设置不生效。
【相关数据类型及接口】
无
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;
【成员】
成员名称 |
描述 |
|---|---|
rect |
OSD的起始坐标及宽高。位置和宽高值均要求2对齐。 取值范围: 水平位置X:[0, 16382] 垂直位置Y:[0, 8190] 宽度:[2, 16384],SS928V100只支持:[2,8192] 高度:[2, 8192] |
bg_color |
保留参数。 |
pixel_format |
OSD的像素格式: 支持ARGB1555,ARGB4444,ARGB8888,Clut2,Clut4格式 |
phys_addr |
OSD图像的物理地址。 |
stride |
OSD的stride。 |
bg_alpha |
像素格式为ARGB1555时,OSD的背景alpha值,取值范围:[0, 255] |
fg_alpha |
像素格式为ARGB1555时,OSD的前景alpha值,取值范围:[0, 255] |
clut [OT_VGS_CLUT_LEN] |
OSD像素格式为Clut4或Clut2时的颜色值。Clut2使用4个颜色值。Clut4使用16个颜色值。 |
osd_inverted_color |
反色模式。 |
【注意事项】
OSD区域可以部分或者全部超出目标图像,但起始点坐标不能为负。
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100不支持OSD反色,也无需设置osd_inverted_color,同时不做异常参数检查。
【相关数据类型及接口】
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;
【成员】
成员名称 |
描述 |
|---|---|
OT_VGS_SCALE_COEF_NORM |
普通缩放系数,水平、垂直方向任意比例缩放。 |
OT_VGS_SCALE_COEF_TAP2 |
2阶缩放系数,水平、垂直方向任意比例缩放。 |
OT_VGS_SCALE_COEF_TAP4 |
4阶缩放系数,垂直方向缩小4倍,水平方向4阶滤波。 |
OT_VGS_SCALE_COEF_TAP6 |
6阶缩放系数,垂直方向缩小4倍,水平方向6阶滤波。 |
OT_VGS_SCALE_COEF_TAP8 |
8阶缩放系数,垂直方向缩小4倍,水平方向8阶滤波。 |
【注意事项】
使用4阶、6阶、8阶缩放系数时,输入输出图像高度比例需设置为1/4,宽度不变。
SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100只支持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 mirror_en;
td_bool flip_en;
ot_vgs_scale_coef_mode scale_coef_mode;
} ot_vgs_online;
【成员】
成员名称 |
描述 |
|---|---|
crop_en |
Crop是否使能。 |
crop_rect |
Crop功能的配置。 |
mosaic_num |
Mosaic的数量。取值范围:[0, OT_VGS_MAX_MOSAIC_NUM] |
mosaic |
Mosaic功能参数配置。 |
cover_num |
Cover的数量。取值范围:[0, OT_VGS_MAX_COVER_NUM] |
cover |
Cover功能参数配置。 |
corner_rect_num |
Corner_rect的数量。取值范围:[0, OT_VGS_MAX_CORNER_RECT_NUM] |
corner_rect_attr |
Corner_rect功能公共参数。 |
corner_rect |
Corner_rect功能参数配置。 |
osd_num |
OSD的数量。取值范围:[0, OT_VGS_MAX_OSD_NUM] |
osd |
OSD功能参数配置。 |
mirror_en |
Mirror是否使能。 |
flip_en |
Flip是否使能。 |
scale_coef_mode |
缩放模式的参数配置。 |
【注意事项】
scale_coef_mode只支持OT_VGS_SCALE_COEF_NORM模式。
仅SS928V100/SS626V100支持。
【相关数据类型及接口】
错误码¶
VGS API错误码如下所示。
表 1 VGS API错误码
错误代码 |
宏定义 |
描述 |
|---|---|---|
0xa02d8016 |
OT_ERR_VGS_BUF_EMPTY |
VGS的job,task或node节点已经使用完毕 |
0xa02d8007 |
OT_ERR_VGS_ILLEGAL_PARAM |
VGS参数设置无效 |
0xa02d800a |
OT_ERR_VGS_NULL_PTR |
输入参数空指针错误 |
0xa02d800c |
OT_ERR_VGS_NOT_SUPPORT |
操作不支持 |
0xa02d800d |
OT_ERR_VGS_NOT_PERM |
操作不允许 |
0xa02d8015 |
OT_ERR_VGS_NO_BUF |
分配内存失败 |
0xa02d8018 |
OT_ERR_VGS_NOT_READY |
系统未初始化 |
0xa02d8017 |
OT_ERR_VGS_BUF_FULL |
没有剩余BUF |
【注意事项】
宏定义OT_ERR_VGS_BUF_FULL未使用,保留。