视频图形子系统

概述

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。

注意:

  • 不支持PACKAGE数据转换成PACKAGE数据。
  • 不支持同时进行输出PACKAGE格式和缩放。
  • 不支持同时进行压缩输入和PACKAGE格式输入。
  • 不支持同时进行压缩输出和PACKAGE格式输出。

输出图像分辨率及对齐要求

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

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_vgs_add_osd_task

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_stitch_task_attr

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_online

OT_VGS_MAX_OSD_NUM

【说明】

定义Online 任务中的最大OSD数量。

【定义】

SS928V100/SS626V100:

#define OT_VGS_MAX_OSD_NUM   1

【注意事项】

仅SS928V100/SS626V100支持。

【相关数据类型及接口】

ot_vgs_online

OT_VGS_MAX_CORNER_RECT_NUM

【说明】

定义Online 任务中的最大Corner_rect数量。

【定义】

#define OT_VGS_MAX_CORNER_RECT_NUM   32

【注意事项】

仅SS928V100支持。

【相关数据类型及接口】

ot_vgs_online

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_online

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_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;

【成员】

成员名称

描述

img_in

输入图像属性数组,最多4张图像。

img_out

输出图像属性。

private_data

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

reserved

保留项。

【注意事项】

输入和输出图像属性需要满足相关约束。

【相关数据类型及接口】

ss_mpi_vgs_add_stitch_task

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,同时不做异常参数检查。

【相关数据类型及接口】

ss_mpi_vgs_add_osd_task

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模式。

【相关数据类型及接口】

ss_mpi_vgs_add_scale_task

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支持。

【相关数据类型及接口】

ss_mpi_vgs_add_online_task

错误码

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未使用,保留。