跳转至

系统控制

概述

系统控制根据芯片特性,完成硬件各个部件的复位、基本初始化工作,同时负责完成MPP(Media Process Platform媒体处理平台)系统各个业务模块的初始化、去初始化以及管理MPP系统各个业务模块的工作状态、提供当前MPP系统的版本信息、提供大块物理内存管理等功能。

应用程序启动MPP业务前,必须完成MPP系统初始化工作。同理,应用程序退出MPP业务后,也要完成MPP系统去初始化工作,释放资源。

重要概念

低延时

低延时指图像写出指定的行数到DDR后,前端模块上报中断,把图像发给后端模块处理,可以减少通路延时,且前后端模块采用特定机制保证图像是先写后读,不会出现读图像错误。

须知:

  • 各模块低延时开启会与一些特定功能组合存在冲突,具体开启的方法及对应的限制参考各模块章节中相关的低延时描述。
  • Hi3519DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100支持低延时,支持的模块请见表1,未在列表中的模块不支持低延时。

表 1 支持低延时的模块列表

支持低延时的模块

描述

是否支持

Hi3519DV500

Hi3516CV610/Hi3516CV608

Hi3511CV100

VI

输出低延时

支持

支持

不支持

MCF

输入、输出低延时

支持

不支持

-

VPSS

输入、输出低延时

支持

仅支持输出低延时

支持

VGS

输入、输出低延时

支持

仅支持输入低延时

支持

VO

输入低延时

支持

不支持

-

VDEC

输入、输出低延时

仅支持输出低延时

不支持

支持

VENC

输入、输出低延时

支持

支持

支持

功能描述

视频缓存池

视频缓存池主要向媒体业务提供大块物理内存管理功能,负责内存的分配和回收,充分发挥内存缓存池的作用,让物理内存资源在各个媒体处理模块中合理使用。

一组大小相同、物理地址连续的缓存块组成一个视频缓存池。必须在系统初始化之前配置公共视频缓存池。根据业务的不同,公共缓存池的数量、缓存块的大小和数量不同。

所有的视频输入通道都可以从公共视频缓存池中获取视频缓存块用于保存采集的图像,如图1中所示VI从公共视频缓存池B中获取视频缓存块Bm,缓存块Bm经 VI发送给VPSS,输入缓存块Bm经过VPSS处理之后被释放回公共视频缓存池。假设VPSS通道的工作模式是USER,则VPSS通道0从公共视频缓存池B中获取缓存块Bi作为输出图像缓存buffer发送给VENC,VPSS通道1从公共视频缓存池B中获取缓存块Bk作为输出图像缓存buffer发送给VO,Bi经VENC编码完之后释放回公共视频缓存池,Bk经VO显示完之后释放回公共视频缓存池。

图 1 典型的公共视频缓存池数据流图

不同类型的视频缓存池大小计算请参考代码ot_buffer.h,详细使用说明参见视频缓存池大小计算接口”。

系统绑定

MPP提供系统绑定接口(ss_mpi_sys_bind),即通过数据接收者绑定数据源来建立两者之间的关联关系(只允许数据接收者绑定数据源)。绑定后,数据源生成的数据将自动发送给接收者。目前MPP支持的绑定关系如表1所示。

表 1 MPP支持的绑定关系

数据源

数据接收者

备注

VI

VO

Hi3511CV100不支持

VENC

-

VPSS

PCIV

VI(虚拟PIPE)

VPSS

VO

Hi3511CV100不支持

VENC

-

PCIV

VPSS

AVS

Hi3511CV100不支持

VI(虚拟PIPE)

-

VDEC

VPSS

  • Hi3516CV610/Hi3516CV608不支持
  • Hi3511CV100不支持VO

VO

VENC

PCIV

VI(虚拟PIPE)

VO(WBC)

VO

Hi3516CV610/Hi3516CV608/Hi3511CV100不支持

VENC

VPSS

PCIV

VI(虚拟PIPE)

AVS

VPSS

Hi3516CV610/Hi3516CV608/Hi3511CV100不支持

VENC

VO

PCIV

VI(虚拟PIPE)

AI

AENC

Hi3511CV100不支持

AO

ADEC

AO

Hi3511CV100不支持

MCF

VO

Hi3516CV610/Hi3516CV608/Hi3511CV100不支持

VENC

VPSS

VI(虚拟PIPE)

VENC

UVC

-

VENC

Hi3519DV500/Hi3516DV500/Hi3511CV100不支持

VI和VPSS工作模式

VI和VPSS各自的工作模式分为在线,离线,工作模式说明如表1所示。

表 1 VI和VPSS的工作模式说明

模式

VI_CAP与VI_PROC

VI_PROC与VPSS

在线模式

VI_CAP与VI_PROC之间在线数据流传输,此模式下VI_CAP不会写出RAW数据到DDR,而是直接把数据流送给VI_PROC。

VI_PROC与VPSS之间的在线数据流传输,在此模式下VI_PROC不会写出YUV数据到DDR,而是直接把数据流送给VPSS。

离线模式

VI_CAP写出RAW数据到DDR,然后VI_PROC从DDR读取RAW数据进行后处理。

VI_PROC写出YUV数据到DDR,然后VPSS从DDR读取YUV数据进行后处理;离线模式下可通过配置VI FMU模式,达到省内存,省延时的效果。

Hi3519DV500/Hi3516DV500不支持 VI离线VPSS在线此种模式,可以用VI离线VPSS离线模式加FMU直通模式(Hi3516CV610/Hi3516CV608 不支持FMU模式),达到同样的效果。

Hi3511CV100 仅支持OT_VI_ONLINE_VPSS_OFFLINE和OT_VI_ONLINE_VPSS_ONLINE模式,不支持FMU模式。

PIPE可以设置成多种工作模式,情况如下。

  • 第0个PIPE可以有4种模式:

    • VI在线VPSS离线
    • VI在线VPSS在线
    • VI离线VPSS离线
    • VI离线VPSS在线
  • 其他PIPE可以有VI离线VPSS离线、VI离线VPSS在线2种模式:

    • 当第0个PIPE为VI离线VPSS在线时,绑定的其他PIPE只能设置VI离线VPSS在线。
    • 当第0个PIPE为VI离线VPSS离线时,绑定的其他PIPE只能设置VI离线VPSS离线。
    • 当第0个PIPE为VI在线VPSS在线时,不支持使用其他PIPE。
    • 当第0个PIPE为VI在线VPSS离线时,绑定的其他PIPE只能设置VI离线VPSS离线。
  • PIPE在不同的工作模式下可以进行切换,此时VI需要重建,情况如下:

    • VI在线模式不能切换到VI离线模式。
    • VI离线模式不能切换到VI在线模式。

说明:

  • 本文档中出现的“VI在线/离线”是指VI_CAP与VI_PROC之间的在线/离线模式。
  • 本文档中出现的“VPSS在线/离线”是指VI_PROC与VPSS之间的在线/离线模式。

VI的PIPE工作模式请见表2、表3所示。

表 2 Hi3519DV500 VI PIPE工作模式

PIPE ID

0

1

2

3

模式分布1

在线

离线

离线

离线

模式分布2

离线

离线

离线

离线

表 3 Hi3516CV610/Hi3516CV608 VI PIPE工作模式

PIPE ID

0

1

模式分布1

在线

离线

模式分布2

离线

离线

说明:

对于Hi3519DV500/Hi3516CV610系列/Hi3516CV608,当PIPE0为在线时,其他PIPE的离线模式只能用来获取PIPE FRAME,其他功能都不能使用,即不能使用VI_PROC的功能。 当使用VI在线VPSS在线模式时,启动业务时要求先启动VI业务,再启动VPSS业务;销毁业务时要求先销毁VPSS业务,再销毁VI业务。

VI AIISP模式

VI的AIISP模式分为四种:Default模式、AIDRC、AIDM、AI3DNR模式,默认为Default模式。

VI离线模式下统一使用Default模式,AIISP功能由VI内部自适应配置,且每路pipe分别可配。

详见ss_mpi_sys_set_vi_aiisp_mode接口描述。

  • Hi3516CV610/Hi3516CV608仅支持Default模式。
  • Hi3511CV100不支持 VI AIISP模式配置。

logmpp日志

系统运行日志信息记录在logmpp文件中,运行异常时可通过查看日志文件进行问题定位,查看命令为cat /dev/logmpp。注意不要在多个窗口同时查看,否则会出现log信息错乱。

API参考

系统控制实现MPP(Media Process Platform)系统初始化、系统绑定解绑、获取MPP版本号、视频缓存池初始化、创建视频缓存池等功能。

该功能模块提供以下MPI:

ss_mpi_sys_set_cfg

【描述】

配置系统控制参数。

【语法】

td_s32 ss_mpi_sys_set_cfg(const ot_mpp_sys_cfg *sys_cfg);

【参数】

参数名称

描述

输入/输出

sys_cfg

系统控制参数指针。

静态属性(指只能在系统未初始化、未启用设备或通道时,才能设置的属性)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 只有在MPP整个系统处于未初始化状态,才可调用此函数配置MPP系统,否则会配置失败。
  • 此接口功能暂时无效。

【举例】

无。

【相关主题】

ot_mpp_sys_cfg

ss_mpi_sys_get_cfg

【描述】

获取系统控制参数。

【语法】

td_s32 ss_mpi_sys_get_cfg(ot_mpp_sys_cfg *sys_cfg);

【参数】

参数名称

描述

输入/输出

sys_cfg

系统控制参数指针。

静态属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

必须先调用ss_mpi_sys_set_cfg成功后才能获取配置。

【举例】

无。

【相关主题】

ss_mpi_sys_set_cfg

ss_mpi_sys_init

【描述】

初始化MPP系统。包括视频输入输出、视频编解码、视频叠加区域、视频处理、图形处理等模块都会被初始化。

【语法】

td_s32 ss_mpi_sys_init(td_void);

【参数】

无。

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 由于MPP系统的正常运行依赖于缓存池,因此需要先调用ss_mpi_vb_init初始化缓存池,再初始化MPP系统,否则会导致业务运行异常。
  • 如果多次初始化,仍会返回成功,但实际上系统不会对MPP的运行状态有任何影响。
  • 只要有一个进程进行初始化即可,不需要所有的进程都做系统初始化的操作。

【举例】

无。

【相关主题】

ss_mpi_vb_exit

ss_mpi_sys_exit

【描述】

去初始化MPP系统。包括视频输入输出、视频编解码、视频叠加区域、视频处理、图形处理等模块都会被销毁或者禁用。

【语法】

td_s32 ss_mpi_sys_exit(td_void);

【参数】

无。

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 去初始化时,如果有阻塞在MPI上的用户进程,调用ss_mpi_sys_exit会唤醒该阻塞进程,如果没有成功唤醒,则去初始化会失败。如果所有阻塞在MPI上的调用都返回,则可以成功去初始化。
  • 可以反复去初始化,不返回失败。

【举例】

无。

【相关主题】

ss_mpi_vb_init

ss_mpi_sys_bind

【描述】

数据源到数据接收者绑定接口。

【语法】

td_s32 ss_mpi_sys_bind(const ot_mpp_chn *src_chn, const ot_mpp_chn *dst_chn);

【参数】

参数名称

描述

输入/输出

src_chn

源通道指针。

输入

dst_chn

目的通道指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_bind.h、ss_mpi_sys_bind.h
  • 库文件:libss_mpi_sysbind.a

【注意】

  • 系统目前支持的绑定关系,请参见表1。
  • 同一个数据源可以绑定多个不同的数据接收者,最大数量为OT_MAX_BIND_DST_NUM。
  • 同一个数据接收者只能绑定一个数据源。
  • 绑定是指数据源和数据接收者建立关联关系。绑定后,数据源生成的数据将自动发送给接收者。
  • VDEC作为数据源,是以通道为发送者,向其他模块发送数据,用户将设备号置为0,SDK不检查输入的设备号。
  • VI作为数据源,是以设备(pipe)、通道(chn)为发送者,向其他模块发送数据;作为数据接收者时,以设备(pipe)、通道(chn)为接收者。
  • VI作为数据接收者时,设备(pipe)必须是虚拟pipe,数据接收者为物理pipe时接收端没有数据流。
  • VO作为数据源发送回写(WBC)数据时,是以设备为发送者,向其他模块发送数据,用户将通道号置为0,SDK不检查输入的通道号。
  • VPSS作为数据接收者,是以设备(GROUP)、通道(PIPE)为接收者。
  • 若VENC工作在非OT_VENC_PIC_RECV_MULTI模式下,VENC作为数据接收者时,是以通道号为接收者,接收其他模块发过来的数据,设备号仅支持为0。若VENC工作在OT_VENC_PIC_RECV_MULTI模式下,用户需要配置设备号,此时设备号实际用于指定输入源,可以使用OT_VENC_RECV_SRC0、OT_VENC_RECV_SRC1、OT_VENC_RECV_SRC2、OT_VENC_RECV_SRC3宏进行输入源指定。
  • AVS作为数据接收者,是以设备(GROUP)、通道(PIPE)为接收者。
  • MCF作为数据接收者,是以设备(GROUP)、通道(PIPE)为接收者。
  • 其他情况均需指定设备号和通道号。
  • VENC 作为源绑定UVC时,VENC设备号需要设置为0。VENC作为源缩小输出后绑定另外一路VENC编码时,源设备号需要设置为1,目的设备号设置为0。
  • 不支持重复绑定同一个数据源和数据接收者。
  • 若未调用ss_mpi_sys_init接口,模块将无法绑定。

【举例】

无。

【相关主题】

ss_mpi_sys_unbind

ss_mpi_sys_unbind

【描述】

数据源到数据接收者解绑定接口。

【语法】

td_s32 ss_mpi_sys_unbind(const ot_mpp_chn *src_chn, const ot_mpp_chn *dst_chn);

【参数】

参数名称

描述

输入/输出

src_chn

源通道指针。

输入

dst_chn

目的通道指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_bind.h、ss_mpi_sys_bind.h
  • 库文件:libss_mpi_sysbind.a

【注意】

  • dst_chn如果找不到绑定的源通道,则直接返回成功。如果找到了绑定的源通道,但是绑定的源通道和src_chn不匹配,则返回失败。
  • 若未调用ss_mpi_sys_init接口,模块将无法进行解绑。

【举例】

无。

【相关主题】

ss_mpi_sys_bind

ss_mpi_sys_get_bind_by_dst

【描述】

获取此通道上绑定的源通道的信息。

【语法】

td_s32 ss_mpi_sys_get_bind_by_dst(const ot_mpp_chn *dst_chn, ot_mpp_chn *src_chn);

【参数】

参数名称

描述

输入/输出

src_chn

源通道指针。

输出

dst_chn

目的通道指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_bind.h、ss_mpi_sys_bind.h
  • 库文件:libss_mpi_sysbind.a

【注意】

若未调用ss_mpi_sys_init接口,模块将无法进行绑定获取。

【举例】

无。

【相关主题】

ss_mpi_sys_get_bind_by_src

【描述】

根据源获取绑定的目标。

【语法】

td_s32 ss_mpi_sys_get_bind_by_src(const ot_mpp_chn *src_chn, ot_mpp_bind_dst *bind_dst);

【参数】

参数名称

描述

输入/输出

src_chn

源通道指针。

输入

bind_dst

绑定的目的指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_bind.h、ss_mpi_sys_bind.h
  • 库文件:libss_mpi_sysbind.a

【注意】

若未调用ss_mpi_sys_init接口,模块将无法进行绑定获取。

【举例】

无。

【相关主题】

ss_mpi_sys_get_version

【描述】

获取MPP的版本号。

【语法】

td_s32 ss_mpi_sys_get_version(ot_mpp_version *version);

【参数】

参数名称

描述

输入/输出

version

版本号描述指针。

动态属性(指在任何时刻都可以设置的属性)。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_get_chip_id

【描述】

获取当前芯片的ID。

【语法】

td_s32 ss_mpi_sys_get_chip_id(td_u32 *chip_id);

【参数】

参数名称

描述

输入/输出

chip_id

芯片ID指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

td_s32 ret;
td_u32 chip_id;
ret = ss_mpi_sys_get_chip_id(&chip_id);
if (TD_SUCCESS != ret) {
    return ret;
}
printf("chip id is %#x\n", chip_id);

【相关主题】

无。

ss_mpi_sys_get_unique_id

【描述】

获取当前芯片的unique ID (芯片唯一码)。

【语法】

ss_mpi_sys_get_unique_id(ot_unique_id *unique_id);

【参数】

参数名称

描述

输入/输出

unique_id

芯片unique ID数据结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

无。

【相关主题】

无。

ss_mpi_sys_get_custom_code

【描述】

获取当前芯片的custom code。

【语法】

td_s32 ss_mpi_sys_get_custom_code(td_u32 *custom_code);

【参数】

参数名称

描述

输入/输出

custom_code

芯片custom code指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

td_s32 ret;
td_u32 c_code;
ret = ss_mpi_sys_get_custom_code(&c_code);
if (TD_SUCCESS != ret)
{
    return ret;
}
printf("custom code is %#x\n", c_code);

【相关主题】

无。

ss_mpi_sys_get_cur_pts

【描述】

获取MPP的当前时间戳。

【语法】

td_s32 ss_mpi_sys_get_cur_pts(td_u64 *cur_pts);

【参数】

参数名称

描述

输入/输出

cur_pts

当前时间戳指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_init_pts_base

【描述】

初始化MPP的时间戳基准。

【语法】

td_s32 ss_mpi_sys_init_pts_base(td_u64 pts_base);

【参数】

参数名称

描述

输入/输出

pts_base

时间戳基准。单位:微秒。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

初始化时间戳基准会将当前系统的时间戳强制置成pts_base,与系统原有时间戳没有任何约束。因此,建议在媒体业务没有启动时(例如操作系统刚启动),调用这个接口。如果媒体业务已经启动,建议调用ss_mpi_sys_sync_pts进行时间戳微调。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_sync_pts

【描述】

同步MPP的时间戳。

【语法】

td_s32 ss_mpi_sys_sync_pts(td_u64 pts_base);

【参数】

参数名称

描述

输入/输出

pts_base

时间戳基准。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

对当前系统时间戳(微秒级)进行微调,微调后不会出现时间戳回退现象。在多片之间做同步时,由于单板的时钟源误差可能比较大,建议一秒钟进行一次时间戳微调。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_mmap

【描述】

memory存储映射接口。

【语法】

td_void *ss_mpi_sys_mmap(td_phys_addr_t phys_addr, td_u32 size);

【参数】

参数名称

描述

输入/输出

phys_addr

需映射的内存单元起始地址。

输入

size

映射的字节数。不能为0,且要小于0xFFFFF000。

输入

【返回值】

返回值

描述

0

无效地址。

非0

有效地址。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • open的节点是dev/mmz_userdev,在MMZ中实现映射非device类型(不可cache、可reorder)的DDR地址。
  • 对于输入的地址和size,需在单个(已分配的)mmz buffer的地址范围内。
  • 对应的解映射接口为ss_mpi_sys_munmap。
  • 用户态映射属性需要与内核态映射属性保持一致。

【举例】

无。

【相关主题】

ss_mpi_sys_munmap

ss_mpi_sys_mmap_cached

【描述】

存储映射接口,映射成cache属性。

【语法】

td_void *ss_mpi_sys_mmap_cached(td_phys_addr_t phys_addr, td_u32 size);

【参数】

参数名称

描述

输入/输出

phys_addr

需映射的内存单元起始地址。

输入

size

映射的字节数。不能为0。

输入

【返回值】

返回值

描述

0

无效地址。

非0

有效地址

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 对于输入的地址和size,需在单个(已分配的)mmz buffer的地址范围内。
  • 用户态映射属性需要与内核态映射属性保持一致。

【举例】

无。

【相关主题】

ss_mpi_sys_munmap

ss_mpi_sys_munmap

【描述】

存储反映射接口。

【语法】

td_s32 ss_mpi_sys_munmap(const td_void *virt_addr, td_u32 size);

【参数】

参数名称

描述

输入/输出

virt_addr

mmap后返回的地址。

输入

size

映射区的字节长度。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

等同于系统munmap函数。

【举例】

无。

【相关主题】

ss_mpi_sys_mmap

ss_mpi_sys_flush_cache

【描述】

刷新cache里的内容到内存并且使cache里的内容无效。

【语法】

td_s32 ss_mpi_sys_flush_cache(td_phys_addr_t phys_addr, td_void *virt_addr, td_u32 size);

【参数】

参数名称

描述

输入/输出

phys_addr

待操作数据的起始物理地址。

需要4字节对齐。

输入

virt_addr

待操作数据的起始虚拟地址指针。

必须为用户态地址,且不能为空。

虚拟地址必须为物理地址映射的地址。

输入

size

待操作数据的大小。

不能为0。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 当cache里的数据为最新数据时,为了保证不能直接访问cache的硬件(如ive)在访问内存时能够得到正确的数据,此时需要先调用此接口将cache里的内容更新到内存,这样,当硬件访问内存时,保证了数据的一致性和正确性。
  • 此接口应与ss_mpi_sys_mmap_cached或者ss_mpi_sys_mmz_alloc_cached接口配套使用。
  • 用户需要确保传入参数的合法性。

【相关主题】

ss_mpi_sys_mmap_cached

ss_mpi_sys_mmz_alloc

【描述】

在用户态分配MMZ内存。

【语法】

td_s32 ss_mpi_sys_mmz_alloc(td_phys_addr_t *phys_addr, td_void **virt_addr, const td_char *mmb, const td_char *zone, td_u32 len);

【参数】

参数名称

描述

输入/输出

phys_addr

物理地址指针。

输出

virt_addr

指向虚拟地址指针的指针。

输出

mmb

Mmb名称的字符串指针。

输入

zone

MMZ zone名称的字符串指针。

输入

len

内存块大小。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

MMZ分为许多区域(Zone),每个区域下有多个Mmb,调用此接口在MMZ的名为*zone的区域中分配一个名为*mmb的内存块,大小为len,并返回物理地址和用户态虚拟地址指针。如果MMZ中有名为anonymous的区域,*zone可设为NULL。如果*mmb设为NULL,创建的Mmb分块名为“<null>”。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_mmz_alloc_cached

【描述】

在用户态分配MMZ内存,该内存支持cache缓存。

【语法】

td_s32 ss_mpi_sys_mmz_alloc_cached(td_phys_addr_t *phys_addr, td_void **virt_addr, const td_char *mmb, const td_char *zone, td_u32 len);

【参数】

参数名称

描述

输入/输出

phys_addr

物理地址指针。

输出

virt_addr

指向虚拟地址指针的指针。

输出

mmb

Mmb名称的字符串指针。

输入

zone

MMZ zone名称的字符串指针。

输入

len

内存块大小。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 本接口与ss_mpi_sys_mmz_alloc接口的区别:通过本接口分配的内存支持cache缓存,对于频繁使用的内存,最好使用本接口分配内存,这样可以提高cpu读写的效率,提升系统性能,如用户在使用ive算子时,就存在大量数据频繁读写,此时使用此接口来分配内存,就能很好的提高cpu的效率。
  • 当cpu访问此接口分配的内存时,会将内存中的数据放在cache中,而硬件设备(如ive)只能访问物理内存,不能访问cache的内容,对于这种cpu和硬件会共同操作的内存,需调用ss_mpi_sys_flush_cache做好数据同步。

【举例】

无。

【相关主题】

ss_mpi_sys_mmz_free

【描述】

在用户态释放MMZ内存。

【语法】

td_s32 ss_mpi_sys_mmz_free(td_phys_addr_t phys_addr, const td_void *virt_addr);

【参数】

参数名称

描述

输入/输出

phys_addr

物理地址。

输入

virt_addr

虚拟地址指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 输入的地址必须为有效的物理地址,虚拟地址指针可以置为NULL。
  • 不能释放正在进行flush操作的内存,否则会引发不可预知的异常。

【举例】

无。

【相关主题】

ss_mpi_sys_mmz_alloc

ss_mpi_sys_set_mem_cfg

【描述】

配置内存参数,设置模块设备通道使用的MMZ区域名称。

【语法】

td_s32 ss_mpi_sys_set_mem_cfg(const ot_mpp_chn *mpp_chn, const td_char *mmz_name);

【参数】

参数名称

描述

输入/输出

mpp_chn

模块设备通道信息。

输入

mmz_name

MMZ区域名称。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 如无特殊说明,配置内存参数按照模块对应的通道设置。
  • 输入的MMZ区域名称不存在,接口也会返回成功,但在业务运行过程中分配内存会失败。所以为了保证内存分配正确,输入的MMZ区域名称必须从MMZ区域划分时的名称中选择。
  • 对VO模块做均分内存策略时,用户须保证同一设备号下的通道内存在同一个DDR上。如果不一致,SDK默认从该设备的通道0设置的DDR分配内存。
  • 对VFMW模块设置使用的MMZ内存,各个通道共用的MMZ内存通过vfmw设备0通道0来设置,包括vfmw(%d)_vdh_msg、vfmw_vdh_ext、vfmw_scd_msg。各个通道独立使用的MMZ内存通过vdec对应的通道设置。
  • VENC模块的vedu_hal内存通过venc设备0通道0设置,其他mmz内存通过venc对应的通道设置。
  • IVE模块不支持超过4G空间访问,请确保IVE输入输出内存在IVE对应的MMZ zone区域,不然会发生地址校验不通过的情况。若有指定IVE访问MMZ区域,那么只能访问从指定区域MMZ开始地址+(4G - 1)空间;若没有,那么只能访问的MMZ地址空间为MMZ匿名开始地址+(4G - 1)。
  • VDEC_ADAPT模块vdec_adp_proc和vdec_adp_vb内存是通过通道0设置,其他mmz内存根据对应的通道设置。

【举例】

无。

【相关主题】

ss_mpi_sys_get_mem_cfg

ss_mpi_sys_get_mem_cfg

【描述】

获取模块设备通道使用的MMZ区域名称。

【语法】

td_s32 ss_mpi_sys_get_mem_cfg(const ot_mpp_chn *mpp_chn, td_char *mmz_name);

【参数】

参数名称

描述

输入/输出

mpp_chn

模块设备通道信息。

输入

mmz_name

MMZ区域的名称。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

如果要获取的MMZ区域名称本身为null,则不检查入参mmz_name

【举例】

无。

【相关主题】

ss_mpi_sys_set_mem_cfg

ss_mpi_sys_query_mmz_status

【描述】

查询MMZ当前状态。

【语法】

td_s32 ss_mpi_sys_query_mmz_status(ot_sys_mmz_status *mmz_status);

【参数】

参数名称

描述

输入/输出

mmz_status

MMZ状态。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

无。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_close_fd

【描述】

关闭所有SYS打开的日志、系统Fd。

【语法】

td_s32 ss_mpi_sys_close_fd(td_void);

【参数】

无。

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

建议该接口在所有模块都禁用后使用。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_get_virt_mem_info

【描述】

根据虚拟地址获取对应的内存信息,包括物理地址及cached属性。

【语法】

td_s32 ss_mpi_sys_get_virt_mem_info(const td_void *virt_addr, ot_sys_virt_mem_info *mem_info);

【参数】

参数名称

描述

输入/输出

virt_addr

用户态虚拟地址。

输入

mem_info

虚拟地址对应的内存信息,含物理地址、cached属性等信息。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 输入必须为用户态虚拟地址。
  • 不支持跨进程使用。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_set_scale_coef_level

【描述】

设置VPSS模块和VGS模块的缩放系数等级。

【语法】

td_s32 ss_mpi_sys_set_scale_coef_level(const ot_scale_range *scale_range, const ot_scale_coef_level *scale_coef_level);

【参数】

参数名称

描述

输入/输出

scale_range

缩放系数所对应的缩放范围。

输入

scale_coef_level

缩放系数等级

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 各个缩放比例下的缩放系数等级默认值请参考ot_scale_coef_level结构体的注意事项。
  • 在保持缩放比例范围不变的情况下,增大缩放系数的等级时,会使该缩放比例范围的图像看起来更锐利,反之则更模糊。
  • 在保持缩放比例范围不变的情况下,增大缩放系数的等级时,会使得画面锯齿程度变严重,用户可根据需求进行选择。
  • OT_COEF_LEVEL_19仅支持配置为OT_SCALE_RANGE_18时的水平亮度或垂直亮度缩放系数。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_get_scale_coef_level

【描述】

获取VPSS和VGS缩放系数等级。

【语法】

td_s32 ss_mpi_sys_get_scale_coef_level(const ot_scale_range *scale_range, ot_scale_coef_level *scale_coef_level);

【参数】

参数名称

描述

输入/输出

scale_range

缩放系数所对应的缩放范围。

输入

scale_coef_level

缩放系数等级。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_set_time_zone

【描述】

设置时区信息。

【语法】

td_s32 ss_mpi_sys_set_time_zone(td_s32 time_zone);

【参数】

参数名称

描述

输入/输出

time_zone

时区,相对于UTC时间的偏移。

单位:秒。

取值范围:[-86400, 86400],对应为[-24, 24]小时。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 时区设置对JPEG DCF信息有效,设置后拍摄时间(UTC时间)将转换为本地时间。
  • UTC时间计算偏移之后,不能小于计算机起始时间(1970年1月1日0点)。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_get_time_zone

【描述】

获取时区信息。

【语法】

td_s32 ss_mpi_sys_get_time_zone(td_s32 *time_zone);

【参数】

参数名称

描述

输入/输出

time_zone

时区,相对于UTC时间的偏移。

单位:秒。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_set_gps_info

【描述】

设置GPS信息。

【语法】

td_s32 ss_mpi_sys_set_gps_info(const ot_gps_info *gps_info);

【参数】

参数名称

描述

输入/输出

gps_info

GPS信息

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 涉及敏感数据处理,用户在使用该接口时需要保证输入和输出数据的安全同时注意隐私保护,遵循当地法律法规。
  • GPS信息设置对JPEG DCF信息有效。

【举例】

无

【相关主题】

无

ss_mpi_sys_get_gps_info

【描述】

获取GPS信息。

【语法】

td_s32 ss_mpi_sys_get_gps_info(ot_gps_info *gps_info);

【参数】

参数名称

描述

输入/输出

gps_info

GPS信息

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

涉及敏感数据处理,用户在使用该接口时需要保证输入和输出数据的安全同时注意隐私保护,遵循当地法律法规。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_set_schedule_mode

【描述】

设置系统调度模式。

【语法】

td_s32 ss_mpi_sys_set_schedule_mode(const ot_schedule_mode *schedule_mode);

【参数】

参数名称

描述

输入/输出

schedule_mode

系统调度模式的指针。

静态属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_video.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • Hi3519DV500/Hi3516DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100不支持此接口。
  • 必须在ss_mpi_sys_init后,所有的VDEC通道和所有的VPSS组创建前设置。
  • 设置OT_SCHEDULE_QUICK模式时,如果vdec帧存VB来源为OT_VB_SRC_PRIVATE时,接口返回不支持。
  • 当配置为快速模式(OT_SCHEDULE_QUICK)时,整个系统会存在一定的约束,具体请参考《MPP 媒体处理软件 V6.0 FAQ》的“Quick schedule注意事项”小节。

【举例】

无。

【相关主题】

ss_mpi_sys_get_schedule_mode

ss_mpi_sys_get_schedule_mode

【描述】

获取系统调度模式。

【语法】

td_s32 ss_mpi_sys_get_schedule_mode(ot_schedule_mode *schedule_mode);

【参数】

参数名称

描述

输入/输出

schedule_mode

系统调度模式的指针。

静态属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_video.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

Hi3519DV500/Hi3516DV500/Hi3516CV610/Hi3516CV608/Hi3511CV100不支持此接口。

【举例】

无。

【相关主题】

ss_mpi_sys_set_schedule_mode

ss_mpi_sys_set_vi_vpss_mode

【描述】

设置VI,VPSS工作模式。

【语法】

td_s32 ss_mpi_sys_set_vi_vpss_mode(const ot_vi_vpss_mode *vi_vpss_mode);

【参数】

参数名称

描述

输入/输出

vi_vpss_mode

VI,VPSS的工作模式

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

必须在ss_mpi_sys_init后,所有的VI PIPE和所有的VPSS组创建前设置。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_get_vi_vpss_mode

【描述】

获取VI,VPSS的工作模式。

【语法】

td_s32 ss_mpi_sys_get_vi_vpss_mode(ot_vi_vpss_mode *vi_vpss_mode);

【参数】

参数名称

描述

输入/输出

vi_vpss_mode

VI,VPSS的工作模式

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

无

【举例】

无。

【相关主题】

无。

ss_mpi_sys_set_vi_aiisp_mode

【描述】

设置VI AIISP模式。

【语法】

td_s32 ss_mpi_sys_set_vi_aiisp_mode(ot_vi_pipe vi_pipe, ot_vi_aiisp_mode aiisp_mode);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

取值范围:[0, OT_VI_MAX_PIPE_NUM)。

输入

aiisp_mode

VI AIISP模式

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 必须在ss_mpi_sys_init后,所有的VI PIPE和所有的VPSS组创建前设置。
  • 本接口不配置默认所有PIPE 为DEFAULT模式。
  • VI离线模式下只能配置Default模式。
  • VI在线且需要开启AIISP功能时,才需要配置AI模式;在线模式暂不支持AIISP功能。
  • Hi3516CV610/Hi3516CV608只能配置为Default模式。
  • Hi3511CV100不支持此接口。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_get_vi_aiisp_mode

【描述】

获取VI AIISP模式。

【语法】

td_s32 ss_mpi_sys_get_vi_aiisp_mode(ot_vi_pipe vi_pipe, ot_vi_aiisp_mode *aiisp_mode);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

取值范围:[0, OT_VI_MAX_PIPE_NUM)

输入

aiisp_mode

VI AIISP模式

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

Hi3511CV100不支持此接口。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_set_raw_frame_compress_param

【描述】

设置VI模块RAW数据的帧压缩比。

【语法】

td_s32 ss_mpi_sys_set_raw_frame_compress_param(const ot_raw_frame_compress_param *compress_param);

【参数】

参数名称

描述

输入/输出

compress_param

压缩参数

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

【举例】

无。

【相关主题】

无。

ss_mpi_sys_get_raw_frame_compress_param

【描述】

获取VI模块RAW数据的帧压缩比。

【语法】

td_s32 ss_mpi_sys_get_raw_frame_compress_param(ot_raw_frame_compress_param *compress_param);

【参数】

参数名称

描述

输入/输出

compress_param

压缩参数

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

Hi3511CV100不支持此接口。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_set_tuning_connect

【描述】

设置Tuning工具连接。

【语法】

td_s32 ss_mpi_sys_set_tuning_connect(td_s32 connect);

【参数】

参数名称

描述

输入/输出

connect

Tuning工具连接值

输入

0:不允许Tuning工具连接

1:允许Tuning工具连接

其它值:保留

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 保留值目前按0处理。
  • 第一次设置时可以设置为0或者1,其它任何情况下无论设置什么值内部都置为0。
  • SYS退出之后恢复默认值1。
  • connect为1时可正常接入PQTool等Tuning工具,connect为0时无法接入PQTool等Tuning工具。

【举例】

无

【相关主题】

无

ss_mpi_sys_get_tuning_connect

【描述】

获取Tuning工具连接。

【语法】

td_s32 ss_mpi_sys_get_tuning_connect(td_s32 *connect);

【参数】

参数名称

描述

输入/输出

connect

Tuning工具连接值

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_set_fmu_attr

【描述】

设置FMU信息。

【语法】

td_s32 ss_mpi_sys_set_fmu_attr(ot_fmu_id id, const ot_fmu_attr *fmu_attr);

【参数】

参数名称

描述

输入/输出

id

FMU id信息

输入

fmu_attr

FMU配置信息。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参考错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 不支持id为OT_FMU_ID_VI。
  • id为OT_FMU_ID_VPSS时,必须在ss_mpi_sys_init后,所有的VPSS Group和VENC Channel创建前设置。
  • id为OT_FMU_ID_VPSS且处于全在线模式时,卷绕空间取决于sensor消隐区大小,编码通道路数等,如果配置卷绕空间超过半帧还是会出现“malloc err”错误,说明消隐区太小,venc性能不足,此时不建议使用卷绕模式。
  • Hi3516CV610/Hi3516CV608/Hi3511CV100不支持此接口。

【举例】

无。

【相关主题】

ss_mpi_sys_get_fmu_attr

【描述】

获取FMU信息。

【语法】

td_s32 ss_mpi_sys_get_fmu_attr(ot_fmu_id id, ot_fmu_attr *fmu_attr);

【参数】

参数名称

描述

输入/输出

id

FMU id信息。

输入

fmu_attr

FMU配置信息。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参考错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

Hi3516CV610/Hi3516CV608/Hi3511CV100不支持此接口。

【举例】

无

【相关主题】

ss_mpi_sys_set_3dnr_pos

【描述】

设置3DNR所在位置。

【语法】

td_s32 ss_mpi_sys_set_3dnr_pos(ot_3dnr_pos_type pos);

【参数】

参数名称

描述

输入/输出

pos

3DNR所在位置。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参考错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 必须在ss_mpi_sys_init后,所有的VI PIPE和所有的VPSS Group创建前设置。
  • 若3DNR位置不在对应位置,该位置使能3DNR应返回失败。
  • Hi3516CV610/Hi3516CV608/Hi3511CV100不支持此接口。

【举例】

无

【相关主题】

ot_3dnr_pos_type

ss_mpi_sys_get_3dnr_pos

【描述】

获取3DNR所在位置。

【语法】

td_s32 ss_mpi_sys_get_3dnr_pos(ot_3dnr_pos_type *pos);

【参数】

参数名称

描述

输入/输出

pos

3DNR所在位置。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参考错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

Hi3516CV610/Hi3516CV608/Hi3511CV100不支持此接口。

【举例】

无

【相关主题】

ot_3dnr_pos_type

ss_mpi_sys_mem_share

【描述】

将handle对应的mmz buffer共享给特定的进程id。

【语法】

td_s32 ss_mpi_sys_mem_share(const td_void *mem_handle, td_s32 pid);

【参数】

参数名称

描述

输入/输出

mem_handle

mmz buffer对应的handle

输入

pid

进程id

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 只有分配mmz buffer的进程能注册共享,其它进程注册共享返回失败。
  • 分配mmz buffer的进程不需要被共享,如果pid参数是分配mmz buffer的进程id,接口返回失败。
  • 如果mmz buffer已经是全进程共享的状态,接口返回失败。
  • 1个mmz buffer最多可以允许5个进程id共享(包含分配该mmz buffer的进程id)。
  • 重复共享给同一个进程id,接口返回成功。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

无。

【相关主题】

ss_mpi_sys_mem_unshare

ss_mpi_sys_mem_unshare

【描述】

解除handle对应的mmz buffer对进程id的共享。

【语法】

td_s32 ss_mpi_sys_mem_unshare(const td_void *mem_handle, td_s32 pid);

【参数】

参数名称

描述

输入/输出

mem_handle

mmz buffer对应的handle

输入

pid

进程id

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 分配mmz buffer的进程可以解除对非分配mmz buffer的进程id的共享。
  • 被共享的进程只能解除对本进程id的共享。
  • 如果mmz buffer已经是全进程共享的状态,接口返回失败。
  • 重复解除对进程id的共享,接口返回失败。
  • 与ss_mpi_sys_mem_share接口配对使用。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

无。

【相关主题】

ss_mpi_sys_mem_share

ss_mpi_sys_mem_share_all

【描述】

将handle对应的mmz buffer以不限进程id的方式共享给所有进程。

【语法】

td_s32 ss_mpi_sys_mem_share_all(const td_void *mem_handle);

【参数】

参数名称

描述

输入/输出

mem_handle

mmz buffer对应的handle

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 只有分配mmz buffer的进程能注册共享,其它进程注册共享返回失败。
  • 重复共享给所有进程,接口返回成功。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

无。

【相关主题】

ss_mpi_sys_mem_unshare_all

ss_mpi_sys_mem_unshare_all

【描述】

解除handle对应的mmz buffer对所有进程的共享。

【语法】

td_s32 ss_mpi_sys_mem_unshare_all(const td_void *mem_handle);

【参数】

参数名称

描述

输入/输出

mem_handle

mmz buffer对应的handle

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 只有分配mmz buffer的进程可以解除对所有进程的共享。
  • 重复解除对所有进程的共享,接口返回成功。
  • 与ss_mpi_sys_mem_share_all接口配对使用。
  • 调用此接口解除对所有进程共享的状态之后,仍然保留原有对进程id的共享状态。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

无。

【相关主题】

ss_mpi_sys_mem_share_all

ss_mpi_sys_get_mem_info_by_handle

【描述】

通过handle获取mmz buffer的内存描述信息。

【语法】

td_s32 ss_mpi_sys_get_mem_info_by_handle(const td_void *mem_handle, ot_sys_mem_info *mem_info);

【参数】

参数名称

描述

输入/输出

mem_handle

mmz buffer对应的handle

输入

mem_info

mmz buffer的内存描述信息

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 只有分配mmz buffer的进程和被共享的进程可以通过handle获取mmz buffer的内存描述信息。
  • 此接口获取的内存描述信息中,offset的值固定为0。
  • 如果设置MMZ模块参数mem_process_isolation=0,参数合法即可获取mmz buffer的内存描述信息。

【举例】

无。

【相关主题】

ss_mpi_sys_get_mem_info_by_phys

【描述】

通过物理地址获取mmz buffer的内存描述信息。

【语法】

td_s32 ss_mpi_sys_get_mem_info_by_phys(td_phys_addr_t phys_addr, ot_sys_mem_info *mem_info);

【参数】

参数名称

描述

输入/输出

phys_addr

mmz buffer的物理地址。在buffer范围内的地址都可以,不一定是起始地址。

输入

mem_info

mmz buffer的内存描述信息

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

  • 只有分配mmz buffer的进程和被共享的进程可以通过物理地址获取mmz buffer的内存描述信息。
  • 如果设置MMZ模块参数mem_process_isolation=0,参数合法即可获取mmz buffer的内存描述信息。

【举例】

无。

【相关主题】

ss_mpi_sys_get_mem_info_by_virt

【描述】

通过用户态虚拟地址获取mmz buffer的内存描述信息。

【语法】

td_s32 ss_mpi_sys_get_mem_info_by_virt(const td_void *virt_addr, ot_sys_mem_info *mem_info);

【参数】

参数名称

描述

输入/输出

virt_addr

用户态虚拟地址。在buffer范围内的地址都可以,不一定是起始地址。

输入

mem_info

mmz buffer的内存描述信息

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys_mem.h、ss_mpi_sys_mem.h
  • 库文件:libss_mpi_sysmem.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_sys_get_vpss_venc_wrap_buf_line

【描述】

获取VPSS-VENC卷绕模式下的buffer像素行数。

【语法】

td_s32 ss_mpi_sys_get_vpss_venc_wrap_buf_line(const ot_vpss_venc_wrap_param *param, td_u32 *buf_line);

【参数】

参数名称

描述

输入/输出

param

计算卷绕buffer像素行数的参数。

输入

buf_line

卷绕buffer的像素行数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 仅Hi3516CV610/Hi3516CV608支持此接口。
  • 当存在多个卷绕组时,可按照各个组实际的码流情况调用此接口获取buf_line。然后根据buf_line和卷绕通道输出属性使用hi_buffer.h中的ot_comm_get_vpss_venc_wrap_buf_size接口计算出各个组的buf_size。接着取最大的buf_size分配一个公共卷绕VB。最后调用ss_mpi_vpss_set_chn_buf_wrap设置各个组的通道卷绕属性,其中buf_line使用各个组计算出的buf_line,buf_size取最大的buf_size。
  • buf_line行数与sensor时序、ISP中断配置sensor时间、VPSS性能、VENC性能等多方面因素有关,这里计算出来的buf_line是假设CPU每帧都能立即响应VPSS/VENC中断的前提下计算出来的理论值。实际业务场景中如果CPU不能每帧都立即响应VPSS/VENC中断,存在中断延迟等情况,客户需要以实际测试场景为准适当增大buf_line。
  • ISP是在中断中配置sensor的,有些sensor需要配置的信息较多,占用CPU较久,可能需要很大的buf_line才能支持低延时卷绕功能。如果用户希望可以把buf_line调节得更小一些,可以尝试下使用ISP底半部中断(参考《ISP开发参考》中接口ss_mpi_isp_set_mod_param)。或者缩短配置sensor的时间,比如通过I2C配置的sensor适当提高I2C速率(I2C提速可能会对有些使用I2C的设备兼容性有影响)。

【举例】

无。

【相关主题】

  • ss_mpi_vpss_set_chn_buf_wrap
  • ot_comm_get_vpss_venc_wrap_buf_size

ss_mpi_sys_get_vi_wrap_buffer_line

【描述】

获取VICAP-VPPROC离线卷绕模式下的buffer卷绕行数。

【语法】

td_s32 ss_mpi_sys_get_vi_wrap_buffer_line(const ot_vi_wrap_in_param *in_param, ot_vi_wrap_out_param *out_param);

【参数】

参数名称

描述

输入/输出

in_param

计算卷绕buffer卷绕行数的参数。

输入

out_param

卷绕buffer的卷绕行数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 仅Hi3516CV610/Hi3516CV608支持此接口。
  • buf_line行数与sensor时序、sensor路数及主从模式、VIPROC性能、VPSS性能、VENC性能等多方面因素有关,这里计算出来的buf_line是假设CPU每帧都能立即响应VI/VPSS/VENC中断的前提下计算出来的理论值。实际业务场景中如果CPU不能每帧都立即响应VI/VPSS/VENC中断,存在中断延迟等情况,客户需要以实际测试场景为准适当增大buf_line。

【举例】

无。

【相关主题】

  • ss_mpi_vi_set_pipe_buf_wrap_attr
  • ss_mpi_vi_get_pipe_buf_wrap_attr

ss_mpi_sys_start_sync_frame_rate_ctrl

【描述】

启动dst_chn的帧控与src_chn的帧控同步。

【语法】

td_s32 ss_mpi_sys_start_sync_frame_rate_ctrl(const ot_mpp_chn *src_chn, const ot_mpp_chn *dst_chn);

【参数】

参数名称

描述

输入/输出

src_chn

同步帧控源通道。

输入

dst_chn

同步帧控目的通道。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 调用接口前需创建src_chn与dst_chn对应通道。
  • src_chn仅支持mod_id为OT_ID_VI,且源帧控位置为pipe帧控,且该pipe绑定的dev已绑定了多个pipe。
  • dst_chn仅支持mod_id为OT_ID_VPSS的物理通道同步。
  • 一个dst_chn仅支持同步一个src_chn,不允许动态切换源通道。即切换dst_chn同步关系时,需要先调用ss_mpi_sys_stop_sync_frame_rate_ctrl接口停止当前同步关系。
  • 同步的pipe间的时序差异应在10ms以内,否则可能出现不可预期异常。
  • 原始帧率应低于60帧,否则可能会出现不可预期异常。
  • src_chn帧率控制的源帧率需要正确配置,否则可能会出现不可预期异常。
  • 从src_chn到dst_chn延迟过高时不可使用帧同步功能,延迟8帧以内可正常使用。可能影响延迟的原因:

    • 经过多级绑定
    • 超过处理能力导致积帧
    • 捞帧处理后再送帧不及时
  • 当前同步的pipe间的时序差异需要满足 src_chn对应的pipe晚于dst_chn对应的pipe。

  • 不建议对dst chn所在的VPSS grp做组上帧控,否则可能导致组帧控过滤后,剩余帧的帧时序差异不满足主pipe的要求,从而导致dst chn无流。
  • 该接口不支持重复调用。
  • Hi3511CV100不支持此接口。

【举例】

无。

【相关主题】

ss_mpi_sys_stop_sync_frame_rate_ctrl

ss_mpi_sys_stop_sync_frame_rate_ctrl

【描述】

停止dst_chn的帧控与src_chn的帧控同步。

【语法】

td_s32 ss_mpi_sys_stop_sync_frame_rate_ctrl(const ot_mpp_chn *src_chn, const ot_mpp_chn *dst_chn);

【参数】

参数名称

描述

输入/输出

src_chn

停止同步帧控源通道。

输入

dst_chn

停止同步帧控目的通道。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 调用接口前需创建src_chn与dst_chn对应通道,否则会打印错误信息。
  • src_chn仅支持mod_id为OT_ID_VI,且源帧控位置为pipe帧控。
  • dst_chn仅支持mod_id为OT_ID_VPSS的物理通道停止帧控同步。
  • Hi3511CV100不支持此接口。

【举例】

无。

【相关主题】

ss_mpi_sys_start_sync_frame_rate_ctrl

ss_mpi_vb_set_cfg

【描述】

设置MPP视频缓存池属性。

【语法】

td_s32 ss_mpi_vb_set_cfg(const ot_vb_cfg *vb_cfg);

【参数】

参数名称

描述

输入/输出

vb_cfg

视频缓存池属性指针。

静态属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 只能在系统处于未初始化的状态下,才可以设置缓存池属性,否则会返回失败。
  • video buf根据不同的应用场景需要不同的配置。配置规则参见视频缓存池 。
  • 公共缓存池中每个缓存块的大小应根据当前图像像素格式以及图像是否压缩而有所不同。具体分配大小请参考ot_vb_cfg结构体中的描述。

【举例】

无。

【相关主题】

ss_mpi_vb_get_cfg

ss_mpi_vb_get_cfg

【描述】

获取MPP视频缓存池属性。

【语法】

td_s32 ss_mpi_vb_get_cfg(ot_vb_cfg *vb_cfg);

【参数】

参数名称

描述

输入/输出

vb_cfg

视频缓存池属性指针。

静态属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

必须先调用ss_mpi_vb_set_cfg设置MPP视频缓存池属性,再获取属性。

【举例】

无。

【相关主题】

ss_mpi_vb_set_cfg

ss_mpi_vb_init

【描述】

初始化MPP视频公共缓存池。

【语法】

td_s32 ss_mpi_vb_init(td_void);

【参数】

无。

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 必须先调用ss_mpi_vb_set_cfg配置缓存池属性,再初始化缓存池,否则会失败。
  • 可反复初始化,不返回失败。

【举例】

无。

【相关主题】

ss_mpi_vb_exit

ss_mpi_vb_exit

【描述】

去初始化MPP视频公共缓存池。

【语法】

td_s32 ss_mpi_vb_exit(td_void);

【参数】

无。

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 必须先调用ss_mpi_sys_exit去初始化MPP系统,再去初始化公共缓存池,否则返回失败。
  • 可以反复去初始化,不返回失败。
  • 去初始化成功会清除先前对缓存池的配置。
  • 退出VB池之前请确保VB池里的任何VB都没有被占用,否则业务上存在VB泄漏的情况,在退出VB池之后,所有VB池会被强制销毁掉,同时logmpp会有报错提示。
  • 模块公共VB池需要先调用ss_mpi_vb_exit_mod_common_pool清除配置。

【举例】

无。

【相关主题】

ss_mpi_vb_init

ss_mpi_vb_create_pool

【描述】

创建一个用户视频缓存池。

【语法】

ot_vb_pool ss_mpi_vb_create_pool(ot_vb_pool_cfg *vb_pool_cfg);

【参数】

参数名称

描述

输入/输出

vb_pool_cfg

缓存池配置属性参数指针。

输入

【返回值】

返回值

描述

非OT_VB_INVALID_POOL_ID

有效的缓存池ID号。

OT_VB_INVALID_POOL_ID

创建缓存池失败,可能是参数非法或者保留内存不够。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_vb_destroy_pool

ss_mpi_vb_create_ext_pool

【描述】

创建一个虚拟视频缓存池,池里没有缓存块。

【语法】

ot_vb_pool ss_mpi_vb_create_ext_pool(const ot_vb_pool_cfg *vb_pool_cfg);

【参数】

参数名称

描述

输入/输出

vb_pool_cfg

缓存池配置属性参数指针。

输入

【返回值】

返回值

描述

非OT_VB_INVALID_POOL_ID

有效的缓存池ID号。

OT_VB_INVALID_POOL_ID

创建缓存池失败,可能是参数非法或者保留内存不够。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 此接口创建的缓存池是空的,VB不是在创建池子时分配的,而是来自外部,由外部程序分配。默认有分配附加信息内存。
  • 在用户添加了缓存块后,用户可以从池子中获取缓存块。
  • 虚拟视频缓存池可以作为模块的用户VB池。
  • vb_pool_cfg参数中,remap_mode参数无效,不需要配置,接口也不会检查。
  • 用户可以调用ss_mpi_vb_destroy_pool销毁缓存池。

【举例】

无。

【相关主题】

ss_mpi_vb_destroy_pool

【描述】

销毁一个视频缓存池。

【语法】

td_s32 ss_mpi_vb_destroy_pool(ot_vb_pool pool);

【参数】

参数名称

描述

输入/输出

pool

缓存池ID号。

取值范围:[0, OT_VB_MAX_POOLS)

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 销毁一个不存在的缓存池,则返回OT_ERR_VB_UNEXIST。
  • 在去初始化MPP缓存池时,所有的缓存池都将被销毁,包括用户态的缓存池。
  • [0, OT_VB_MAX_POOLS)范围内的缓存池ID号,包括公共缓存池、模块公共缓存池、模块私有缓存池等的ID号。请确保Pool为ss_mpi_vb_create_pool所创建的缓存池的ID号,否则会返回失败。
  • 默认支持异步销毁缓存池,销毁缓存池时,如果缓存块仍在占用状态,返回成功,当所有缓存块在空闲状态时,才真正销毁缓存池。
  • 销毁VB池与创建VB池(或创建虚拟VB池)的操作,需要在同一个进程中执行。

【举例】

无。

【相关主题】

ss_mpi_vb_create_pool

ss_mpi_vb_get_blk

【描述】

用户态获取一个缓存块。

【语法】

ot_vb_blk ss_mpi_vb_get_blk(ot_vb_pool pool, td_u64 blk_size, const td_char *mmz_name)

【参数】

参数名称

描述

输入/输出

pool

缓存池ID号。

取值范围:[0, OT_VB_MAX_POOLS)

输入

blk_size

缓存块大小。

取值范围:数据类型全范围,以byte为单位。

输入

mmz_name

缓存池所在DDR的名字。

输入

【返回值】

返回值

描述

非OT_VB_INVALID_HANDLE

有效的缓存块句柄。

OT_VB_INVALID_HANDLE

获取缓存块失败。

【错误码】

无。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 用户可以在创建一个缓存池之后,调用本接口从该缓存池中获取一个缓存块;即将第1个参数Pool设置为创建的缓存池ID;第2个参数blk_size须小于或等于创建该缓存池时指定的缓存块大小。从指定缓存池获取缓存块时,参数mmz_name无效。
  • 如果用户需要从任意一个公共缓存池中获取一块指定大小的缓存块,则可以将第1个参数Pool设置为无效ID号(OT_VB_INVALID_POOL_ID),将第2个参数blk_size设置为需要的缓存块大小,并指定要从哪个DDR上的公共缓存池获取缓存块。如果指定的DDR上并没有公共缓存池,那么将获取不到缓存块。如果mmz_name等于NULL,则表示在没有命名的DDR上的公共缓存池获取缓存块。
  • 公共缓存池主要用来存放VIU的捕获图像,因此,对公共缓存池的不当操作(如占用过多的缓存块)会影响MPP系统的正常运行。

【举例】

无。

【相关主题】

ss_mpi_vb_release_blk

ss_mpi_vb_release_blk

【描述】

用户态释放一个已经获取的缓存块。

【语法】

td_s32 ss_mpi_vb_release_blk(ot_vb_blk vb_blk);

【参数】

参数名称

描述

输入/输出

vb_blk

缓存块句柄。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

获取的缓存块使用完后,应该调用此接口释放缓存块。

【举例】

无。

【相关主题】

ss_mpi_vb_get_blk

ss_mpi_vb_insert_buf_to_ext_pool

【描述】

往虚拟视频缓存池里添加缓存块,此缓存块由用户自己分配,并且不在公共缓存池内。

【语法】

ot_vb_blk ss_mpi_vb_insert_buf_to_ext_pool(ot_vb_pool pool, td_phys_addr_t phys_addr, td_u64 size, td_bool is_filled);

【参数】

参数名称

描述

输入/输出

pool

缓存池ID号。

取值范围:[0, OT_VB_MAX_POOLS)。

输入

phys_addr

缓存块物理地址。

取值范围:有效的MMZ物理地址,256字节对齐。

输入

size

缓存块大小。

取值范围:不能超过4GB,以byte为单位。

输入

is_filled

该缓存块是否有数据。取值范围:[0,1]。

0:该缓存块没有数据,添加到虚拟缓存池后,处于空闲状态,可被获取。

1:该缓存块有数据,添加到虚拟缓存池后,处于占用状态(user占用),不可被获取。

输入

【返回值】

返回值

描述

非OT_VB_INVALID_HANDLE

有效的缓存块句柄。

OT_VB_INVALID_HANDLE

获取缓存块失败。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 缓存块内存由用户自己分配和管理。此接口只是把缓存块添加到虚拟视频缓存池中。
  • pool必须是虚拟视频缓存池的ID号。
  • 缓存块的大小必须和创建虚拟视频缓存池时指定的blk_size保持一致。
  • 不支持向虚拟视频缓存池重复添加同一块缓存块。
  • 缓存块添加到虚拟视频缓存池后,可以调用ss_mpi_vb_get_blk获取缓存块、调用ss_mpi_vb_release_blk释放缓存块。
  • 用户传递的物理地址需在有效的mmz地址范围内,且需要256字节对齐,接口会检查是否会存在地址冲突。
  • 虚拟视频缓存池里缓存块的物理地址没有做虚拟地址映射,如果用户需要使用虚拟地址,请自己调用map函数映射。
  • 用户可以调用ss_mpi_vb_delete_buf_from_ext_pool从缓存池里释放缓存块。释放后缓存块就不在缓存池里,用户如果需要再使用,需要再次调用此接口把缓存块增加到缓存池。
  • 用户可以调用ss_mpi_vb_inquire_user_cnt查询此缓存块是否被占用。
  • 用户添加缓存块和创建虚拟VB池的操作,需要在同一个进程中执行。

【举例】

无。

【相关主题】

ss_mpi_vb_delete_buf_from_ext_pool

【描述】

用户从虚拟视频缓存池中释放一个缓存块。

【语法】

td_s32 ss_mpi_vb_delete_buf_from_ext_pool(ot_vb_blk block, td_s32 milli_sec);

【参数】

参数名称

描述

输入/输出

block

缓存块句柄。

输入

milli_sec

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 应该调用此接口释放掉虚拟视频缓存池中不再使用的缓存块。
  • 此接口只能释放虚拟视频缓存池的缓存块。

【举例】

无。

【相关主题】

ss_mpi_vb_phys_addr_to_handle

【描述】

用户态通过缓存块的物理地址获取其句柄。

【语法】

ot_vb_blk ss_mpi_vb_phys_addr_to_handle(td_phys_addr_t phys_addr);

【参数】

参数名称

描述

输入/输出

phys_addr

缓存块物理地址。

输入

【返回值】

返回值

描述

非OT_VB_INVALID_HANDLE

有效的缓存池句柄。

OT_VB_INVALID_HANDLE

无效的缓存池句柄。

【错误码】

无。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

物理地址应该是从MPP视频缓存池中获取的有效缓存块的地址。

【举例】

无。

【相关主题】

无。

ss_mpi_vb_handle_to_phys_addr

【描述】

用户态获取一个缓存块的物理地址。

【语法】

td_phys_addr_t ss_mpi_vb_handle_to_phys_addr(ot_vb_blk vb_blk);

【参数】

参数名称

描述

输入/输出

vb_blk

缓存块句柄。

输入

【返回值】

返回值

描述

0

无效返回值,缓存块句柄非法。

非0

有效物理地址。

【错误码】

无。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

指定的缓存块应该是从MPP视频缓存池中获取的有效缓存块。

【举例】

无。

【相关主题】

无。

ss_mpi_vb_handle_to_pool_id

【描述】

用户态获取一个帧缓存块所在缓存池的ID。

【语法】

ot_vb_pool ss_mpi_vb_handle_to_pool_id(ot_vb_blk vb_blk);

【参数】

参数名称

描述

输入/输出

vb_blk

缓存块句柄。

输入

【返回值】

返回值

描述

非负数

有效的缓存池ID号。

负数

无效的缓存池ID号。

【错误码】

无。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

指定的缓存块应该是从MPP视频缓存池中获取的有效缓存块。

【举例】

无。

【相关主题】

无。

ss_mpi_vb_get_pool_info

【描述】

获取一个视频缓存池的信息。

【语法】

td_s32 ss_mpi_vb_get_pool_info(ot_vb_pool pool, ot_vb_pool_info *pool_info);

【参数】

参数名称

描述

输入/输出

pool

缓存池ID号。

取值范围:[0, OT_VB_MAX_POOLS)

输入

pool_info

缓存池的信息。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

必须输入合法的缓存池ID。

【举例】

无。

【相关主题】

无。

ss_mpi_vb_init_mod_common_pool

【描述】

初始化模块公共视频缓存池。

【语法】

td_s32 ss_mpi_vb_init_mod_common_pool(ot_vb_uid vb_uid);

【参数】

参数名称

描述

输入/输出

vb_uid

使用模块公共视频缓存池的模块ID。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 当前公共视频缓存池仅适用于VDEC模块。
  • 必须先调用ss_mpi_vb_init进行公共视频缓存池初始化。
  • 必须先调用ss_mpi_vb_set_mod_pool_cfg配置缓存池属性,再初始化缓存池,否则会失败。
  • 可反复初始化,不返回失败。
  • VDEC模块公共池仅在解码帧存分配方式使用模块公共VB池时才需要创建。

【举例】

无。

【相关主题】

ss_mpi_vb_exit_mod_common_pool

ss_mpi_vb_exit_mod_common_pool

【描述】

退出模块公共视频缓存池。

【语法】

td_s32 ss_mpi_vb_exit_mod_common_pool(ot_vb_uid vb_uid);

【参数】

参数名称

描述

输入/输出

vb_uid

使用模块公共视频缓存池的模块ID。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 必须在ss_mpi_vb_exit之前调用该接口,否则返回失败。
  • 可以反复退出,不返回失败。
  • 退出后会清除先前对模块公共视频缓存池的配置。
  • 退出模块公共VB池时,如果VB被占用,返回成功,当所有VB在空闲状态时,才真正销毁模块公共VB池的资源。

【举例】

无。

【相关主题】

ss_mpi_vb_init_mod_common_pool

ss_mpi_vb_set_mod_pool_cfg

【描述】

设置模块公共视频缓存池属性。

【语法】

td_s32 ss_mpi_vb_set_mod_pool_cfg(ot_vb_uid vb_uid, const ot_vb_cfg *vb_cfg);

【参数】

参数名称

描述

输入/输出

vb_uid

使用模块公共视频缓存池的模块ID。

输入

vb_cfg

模块公共视频缓存池属性指针。

静态属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 模块公共视频缓存池的配置根据实际需要配置,否则会造成内存浪费。
  • 如果模块VB已创建,再次配置返回错误码OT_ERR_VB_BUSY。

【举例】

无。

【相关主题】

ss_mpi_vb_get_mod_pool_cfg

ss_mpi_vb_get_mod_pool_cfg

【描述】

获取模块公共视频缓存池属性。

【语法】

td_s32 ss_mpi_vb_get_mod_pool_cfg(ot_vb_uid vb_uid, ot_vb_cfg *vb_cfg);

【参数】

参数名称

描述

输入/输出

vb_uid

使用模块公共视频缓存池的模块ID。

输入

vb_cfg

模块公共视频缓存池属性指针。

静态属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

必须先调用ss_mpi_vb_set_mod_pool_cfg设置模块公共视频缓存池属性,再获取属性。

【举例】

无。

【相关主题】

ss_mpi_vb_set_mod_pool_cfg

ss_mpi_vb_inquire_user_cnt

【描述】

查询缓存块使用计数信息。

【语法】

td_s32 ss_mpi_vb_inquire_user_cnt(ot_vb_blk vb_blk);

【参数】

参数名称

描述

输入/输出

vb_blk

缓存块句柄。

输入

【返回值】

返回值

描述

OT_VB_INVALID_HANDLE

查询失败。

非OT_VB_INVALID_HANDLE

缓存块使用计数值。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

无。

ss_mpi_vb_get_supplement_addr

【描述】

获取VB block内存的辅助信息。

【语法】

td_s32 ss_mpi_vb_get_supplement_addr(ot_vb_blk vb_blk, ot_video_supplement *supplement);

【参数】

参数名称

描述

输入/输出

vb_blk

缓存块句柄。

输入

supplement

VB block内存的辅助信息。

如闪光帧类型、DCF信息等。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

supplement保存的DCF地址信息为内核态虚拟地址。

【举例】

无

【相关主题】

无

ss_mpi_vb_set_supplement_cfg

【描述】

设置VB内存的附加信息。

【语法】

td_s32 ss_mpi_vb_set_supplement_cfg(const ot_vb_supplement_cfg *supplement_cfg);

【参数】

参数名称

描述

输入/输出

supplement_cfg

VB内存附加信息控制结构体。

用于附加信息分配内存。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 当前支持设置以下4种VB内存附加信息,分别为:

    • DCF信息。对应结构体ot_jpeg_dcf,对应的MASK为OT_VB_SUPPLEMENT_JPEG_MASK。
    • 图像运动信息。无对应的结构体,对应的MASK为OT_VB_SUPPLEMENT_MOTION_DATA_MASK。
    • DNG信息。对应结构体为ot_dng_image_dynamic_info,对应的MASK为OT_VB_SUPPLEMENT_DNG_MASK。
    • BNR信息。无对应结构体,对应的MASK为OT_VB_SUPPLEMENT_BNR_MOT_MASK。
  • 无对应结构体的内存附加信息仅提供给内部使用。

  • 需要在ss_mpi_vb_init前调用此接口,附加信息才能生效。

【举例】

无

【相关主题】

ss_mpi_vb_get_supplement_cfg

ss_mpi_vb_get_supplement_cfg

【描述】

获取VB内存的附加信息。

【语法】

td_s32 ss_mpi_vb_get_supplement_cfg(ot_vb_supplement_cfg *supplement_cfg);

【参数】

参数名称

描述

输入/输出

supplement_cfg

VB内存附加信息控制结构体。

用于附加信息分配内存。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_vb_set_supplement_cfg

ss_mpi_vb_get_common_pool_id

【描述】

获取公共VB池的pool id。

【语法】

td_s32 ss_mpi_vb_get_common_pool_id(ot_vb_common_pools_id *pools_id);

【参数】

参数名称

描述

输入/输出

pools_id

当前所有公共VB池的pool id

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_vb_get_mod_common_pool_id

【描述】

获取模块公共VB池的pool id。

【语法】

td_s32 ss_mpi_vb_get_mod_common_pool_id(ot_vb_uid vb_uid, ot_vb_common_pools_id *pools_id);

【参数】

参数名称

描述

输入/输出

vb_uid

使用模块公共VB池的模块ID

输入

pools_id

模块公共VB池的pool id

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_vb_pool_share

【描述】

将pool id对应的VB池共享给特定的进程id。

【语法】

td_s32 ss_mpi_vb_pool_share(ot_vb_pool pool, td_s32 pid);

【参数】

参数名称

描述

输入/输出

pool

视频缓存池ID号。

取值范围:[0, OT_VB_MAX_POOLS)

输入

pid

进程id

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 只有创建VB池的进程能注册共享,其它进程注册共享返回失败。
  • 创建VB池的进程不需要被共享,如果pid参数是创建VB池的进程id,接口返回失败。
  • 如果VB池已经是全进程共享的状态,接口返回失败。
  • 1个VB池最多可以允许5个进程id共享(包含创建该VB池的进程id)。
  • 重复共享给同一个进程id,接口返回成功。
  • 如果是VB池的缓存块做共享给进程id的操作,等同于VB池共享给进程id。
  • 不支持虚拟VB池。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

无。

【相关主题】

ss_mpi_vb_pool_unshare

ss_mpi_vb_pool_unshare

【描述】

解除pool id对应的VB池对进程id的共享。

【语法】

td_s32 ss_mpi_vb_pool_unshare(ot_vb_pool pool, td_s32 pid);

【参数】

参数名称

描述

输入/输出

pool

视频缓存池ID号。

取值范围:[0, OT_VB_MAX_POOLS)

输入

pid

进程id

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 创建VB池的进程可以解除对非创建VB池的进程id的共享。
  • 被共享的进程只能解除对本进程id的共享。
  • 如果VB池已经是全进程共享的状态,接口返回失败。
  • 重复解除对进程id的共享,接口返回失败。
  • 如果是VB池的缓存块做解除对进程id的共享操作,等同于VB池解除对进程id的共享。
  • 与ss_mpi_vb_pool_share接口配对使用。
  • 不支持虚拟VB池。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

无。

【相关主题】

ss_mpi_vb_pool_share

ss_mpi_vb_pool_share_all

【描述】

将pool id对应的VB池以不限进程id的方式共享给所有进程。

【语法】

td_s32 ss_mpi_vb_pool_share_all(ot_vb_pool pool);

【参数】

参数名称

描述

输入/输出

pool

视频缓存池ID号。

取值范围:[0, OT_VB_MAX_POOLS)

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 只有创建VB池的进程能注册共享,其它进程注册共享返回失败。
  • 重复共享给所有进程,接口返回成功。
  • 不支持虚拟VB池。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

无。

【相关主题】

ss_mpi_vb_pool_unshare_all

ss_mpi_vb_pool_unshare_all

【描述】

解除pool id对应的VB池对所有进程的共享。

【语法】

td_s32 ss_mpi_vb_pool_unshare_all(ot_vb_pool pool);

【参数】

参数名称

描述

输入/输出

pool

视频缓存池ID号。

取值范围:[0, OT_VB_MAX_POOLS)

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_vb.h、ss_mpi_vb.h
  • 库文件:libss_mpi.a

【注意】

  • 只有创建VB池的进程可以解除对所有进程的共享。
  • 重复解除对所有进程的共享,接口返回成功。
  • 与ss_mpi_vb_pool_share_all接口配对使用。
  • 调用此接口解除对所有进程共享的状态之后,仍然保留原有对进程id的共享状态。
  • 不支持虚拟VB池。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

无。

【相关主题】

ss_mpi_vb_pool_share_all

ss_mpi_log_set_level_cfg

【描述】

设置日志等级。

【语法】

td_s32 ss_mpi_log_set_level_cfg(const ot_log_level_cfg *level_cfg);

【参数】

参数名称

描述

输入/输出

level_cfg

日志等级信息结构体。

输入

【返回值】

返回值

描述

0

成功。

非0

失败。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h、ot_debug.h
  • 库文件:libss_mpi.a

【注意】

  • 当level_cfg中的成员mod_name设置为字符串“all”时,将设置全部模块的日志等级。否则,只设定mod_id指定的模块的日志等级。
  • 只能设置芯片支持的模块日志级别,否则将导致失败。

【举例】

无。

【相关主题】

ss_mpi_log_get_level_cfg

ss_mpi_log_get_level_cfg

【描述】

获取日志等级。

【语法】

td_s32 ss_mpi_log_get_level_cfg(ot_log_level_cfg *level_cfg);

【参数】

参数名称

描述

输入/输出

level_cfg

日志等级信息结构体。

输入、输出

【返回值】

返回值

描述

0

成功。

非0

失败。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h、ot_debug.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_log_set_level_cfg

ss_mpi_log_set_wait_flag

【描述】

设置读取日志时等待标志。

【语法】

td_s32 ss_mpi_log_set_wait_flag(td_bool flag);

【参数】

参数名称

描述

输入/输出

flag

读取日志时是否等待的标志。

输入

【返回值】

返回值

描述

0

成功。

非0

失败。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h、ot_debug.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

无。

ss_mpi_log_read

【描述】

读取日志。

【语法】

td_s32 ss_mpi_log_read(td_char *buf, td_u32 size);

【参数】

参数名称

描述

输入/输出

buf

用于存放日志的内存指针。

输出

size

读取日志的大小。

输入

【返回值】

返回值

描述

大于等于0

成功读取的日志的大小。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h、ot_debug.h
  • 库文件:libss_mpi.a

【注意】

在加载ot_base.ko时,可以通过设置模块参数“logmpp_show=0”来关闭logmpp信息打印。关闭logmpp后,调用该接口会出现读取不到日志的情况。

【举例】

无。

【相关主题】

无。

ss_mpi_log_close

【描述】

关闭日志文件。

【语法】

td_void ss_mpi_log_close(td_void);

【参数】

无。

【返回值】

无。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h、ot_debug.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

无。

ss_mpi_sys_set_dump_debug_attr

【描述】

设置系统的存帧调试属性。

【语法】

td_s32 ss_mpi_sys_set_dump_debug_attr(const ot_sys_dump_debug_attr *attr);

【参数】

参数名称

描述

输入/输出

attr

存帧调试属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

  • 仅Hi3516CV610/Hi3516CV608支持此接口。
  • 此接口仅用于调试,不建议商用。当用户业务无足够VB(如64M DDR)进行存图以调试图像质量时,可使用此接口来复用编码参考帧来辅助存图。
  • 存图位置仅支持VI物理pipe和VPSS物理chn。
  • 此接口使用时需要与其它接口配合使用,使用方法如下:

    • 使用此接口前,需要停止并重置所有编码通道。调用ss_mpi_venc_stop_chn和ss_mpi_venc_reset_chn(具体请参考视频编码章节)。
    • 选择存图位置,使能dump debug属性,此时SYS内部会从编码获取通道下的最大参考帧用于存图。
    • 若存图位置在VPSS,关闭通道,关闭通道低延时、通道卷绕,并将通道属性中的深度设置为1、压缩模式设置为非压,最后打开通道。若存图位置在VI,关闭pipe低延时,并将pipe属性中的压缩模式设置为非压缩模式。
    • 若存图位置在VPSS,使用ss_mpi_vpss_get_chn_frame(具体请参视频处理子系统章节)获取帧,yuv图存文件后释放帧。若存图位置在VI,使用ss_mpi_vi_get_pipe_frame(具体请参视频输入章节)获取帧,raw图存文件后释放帧。
    • 关闭dump debug属性。
    • 使用ss_mpi_venc_start_chn(具体请参考视频编码章节)恢复编码通道。
  • 若编码的参考帧不满足dump vb大小的要求,则无法正常存图。

  • 此接口一开一关为一个完整存图流程,不支持在使能后动态修改dump debug属性。

【举例】

无。

【相关主题】

ss_mpi_sys_get_dump_debug_attr

ss_mpi_sys_get_dump_debug_attr

【描述】

获取系统的存帧调试属性。

【语法】

td_s32 ss_mpi_sys_get_dump_debug_attr(ot_sys_dump_debug_attr *attr);

【参数】

参数名称

描述

输入/输出

attr

存帧调试属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值参见错误码。

【需求】

  • 头文件:ot_common_sys.h、ss_mpi_sys.h
  • 库文件:libss_mpi.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_sys_set_dump_debug_attr

数据类型

基本数据类型

基本数据类型定义如下:

公共数据类型

typedef unsigned char           td_uchar;
typedef unsigned char           td_u8;
typedef unsigned short          td_u16;
typedef unsigned int            td_u32;
typedef unsigned long           td_ulong;
typedef char                    td_char;
typedef signed char             td_s8;
typedef short                   td_s16;
typedef int                     td_s32;
typedef long                    td_slong;
typedef float                   td_float;
typedef double                  td_double;
typedef void                    td_void;
typedef unsigned long long  td_u64;
typedef long long           td_s64;
#ifdef CONFIG_PHYS_ADDR_BIT_WIDTH_64
    typedef unsigned long long  td_phys_addr_t;
#else
    typedef unsigned int        td_phys_addr_t;
#endif
typedef td_u32                  td_handle;
typedef uintptr_t               td_uintptr_t;
typedef unsigned int            td_fr32;
typedef td_u32          ot_vb_pool;
typedef td_u32                  ot_vb_blk;
typedef enum {
    TD_FALSE = 0,
    TD_TRUE  = 1,
} td_bool;
#ifndef NULL
    #define NULL    0L
#endif
#define TD_NULL     0L
#define TD_SUCCESS  0
#define TD_FAILURE  (-1)
typedef td_s32 ot_ai_chn;
typedef td_s32 ot_ao_chn;
typedef td_s32 ot_aenc_chn;
typedef td_s32 ot_adec_chn;
typedef td_s32 ot_audio_dev;
typedef td_s32 ot_vi_dev;
typedef td_s32 ot_vi_pipe;
typedef td_s32 ot_vi_way;
typedef td_s32 ot_vi_chn;
typedef td_s32 ot_vi_grp;
typedef td_s32 ot_vo_dev;
typedef td_s32 ot_vo_layer;
typedef td_s32 ot_vo_chn;
typedef td_s32 ot_vo_wbc;
typedef td_s32 ot_gfx_layer;
typedef td_s32 ot_venc_chn;
typedef td_s32 ot_vdec_chn;
typedef td_s32 ot_ive_handle;
typedef td_s32 ot_fd_chn;
typedef td_s32 ot_md_chn;
typedef td_s32 ot_isp_dev;
typedef td_s32 ot_blk_dev;
typedef td_s32 ot_sensor_id;
typedef td_s32 ot_mipi_dev;
typedef td_s32 ot_slave_dev;
typedef td_s32 ot_svp_nnie_handle;
typedef td_s32 ot_svp_dsp_handle;
typedef td_s32 ot_svp_alg_chn;
typedef td_s32 ot_svp_mau_handle;
typedef td_s32 ot_vpss_grp;
typedef td_s32 ot_vpss_grp_pipe;
typedef td_s32 ot_vpss_chn;
typedef td_s32 ot_avs_grp;
typedef td_s32 ot_avs_pipe;
typedef td_s32 ot_avs_chn;
typedef td_s32 ot_mcf_grp;
typedef td_s32 ot_mcf_pipe;
typedef td_s32 ot_mcf_chn;
typedef td_s32 ot_vda_chn;
typedef td_s32 ot_pciv_chn;
/* 无效的通道号、无效的WAY号、无效的设备号、无效的句柄号、无效的PoolID、无效handle*/
#define OT_INVALID_CHN (-1)
#define OT_INVALID_WAY (-1)
#define OT_INVALID_LAYER (-1)
#define OT_INVALID_DEV (-1)
#define OT_INVALID_HANDLE (-1)
#define OT_INVALID_VALUE (-1)
#define OT_INVALID_TYPE (-1)
#define OT_VB_INVALID_POOL_ID             (-1U)
#define OT_VB_INVALID_HANDLE              (-1U)
/* 最大的公共视频缓存池个数 */
#define OT_VB_MAX_COMMON_POOLS              16
/* 最大的模块视频缓存池个数 */
#define OT_VB_MAX_MOD_COMMON_POOLS          16
/* VB附加信息JPEG DCF MASK */
#define OT_VB_SUPPLEMENT_JPEG_MASK 0x1
/* VB附加信息MOTION DATA MASK */
#define OT_VB_SUPPLEMENT_MOTION_DATA_MASK 0x2
/* VB附加信息DNG MASK */
#define OT_VB_SUPPLEMENT_DNG_MASK         0x4
/* VB附加信息BNR MOT MASK */
#define OT_VB_SUPPLEMENT_BNR_MOT_MASK   0x8
/* MMZ名字长度 */
#define OT_MAX_MMZ_NAME_LEN             32
/* 定义变量的首地址按8Bytes对齐的宏ATTRIBUTE */
#define OT_ALIGN_NUM 8
#define ATTRIBUTE __attribute__((aligned (OT_ALIGN_NUM)))
/* 定义指针变量高32位清零的宏COMPAT_POINTER */
#define OT_COMPAT_POINTER(ptr, type) \
    do { \
        td_u32 dest_addr_ = (td_u32) (td_uintptr_t)ptr; \
        ptr = (type)( td_uintptr_t) dest_addr_; \
    } while (0)

【注意事项】

Linux系统下,如果是内核态64位、用户态32位系统架构的应用场景,指针变量在内核态和用户态的长度是不一样的,在内核态是64bit长度,用户态是32bit长度,如果用户态指针指向的内存里面的数据需要与内核态有交互,则需要把用户态指针变量传递到内核态之后把高32bit的值清0,还原出一个真正的用户态指针。

OT_VB_MAX_POOLS

【说明】

最大的视频缓存池个数。

【定义】

Hi3519DV500:

#define  OT_VB_MAX_POOLS      256

Hi3516CV610/Hi3516CV608:

#define  OT_VB_MAX_POOLS      96

Hi3511CV100:

#define  OT_VB_MAX_POOLS      512

【注意事项】

无。

【相关数据类型及接口】

无。

OT_MAX_COLOR_COMPONENT

【说明】

定义颜色分量个数。

【定义】

#define OT_MAX_COLOR_COMPONENT             2

【注意事项】

无。

【相关数据类型及接口】

无。

OT_QUAD_POINT_NUM

【说明】

定义不规则四边形的坐标点个数。

【定义】

#define OT_QUAD_POINT_NUM                  4

【注意事项】

无。

【相关数据类型及接口】

无。

ot_mod_id

【说明】

定义模块ID枚举类型。

【定义】

typedef enum {
    OT_ID_MEM    = 0,
    OT_ID_VB      = 1,
    OT_ID_SYS     = 2,
    OT_ID_RGN     = 3,
    OT_ID_BASE    = 4,
    OT_ID_VDEC    = 5,
    OT_ID_AVS     = 6,
    OT_ID_VPSS    = 7,
    OT_ID_VENC    = 8,
    OT_ID_SVP     = 9,
    OT_ID_H264E   = 10,
    OT_ID_JPEGE   = 11,
    OT_ID_H265E   = 13,
    OT_ID_JPEGD   = 14,
    OT_ID_VO      = 15,
    OT_ID_VI      = 16,
    OT_ID_DIS     = 17,
    OT_ID_CHNL    = 18,
    OT_ID_RC      = 19,
    OT_ID_AIO     = 20,
    OT_ID_AI      = 21,
    OT_ID_AO      = 22,
    OT_ID_AENC    = 23,
    OT_ID_ADEC    = 24,
    OT_ID_VPU    = 25,
    OT_ID_PCIV    = 26,
    OT_ID_PCIVFMW = 27,
    OT_ID_ISP      = 28,
    OT_ID_IVE      = 29,
    OT_ID_USER    = 30,
    OT_ID_PROC    = 33,
    OT_ID_LOG     = 34,
    OT_ID_VFMW    = 35,
    OT_ID_GDC     = 37,
    OT_ID_PHOTO   = 38,
    OT_ID_FB      = 39,
    OT_ID_HDMI    = 40,
    OT_ID_VOIE    = 41,
    OT_ID_TDE     = 42,
    OT_ID_HDR      = 43,
    OT_ID_PRORES  = 44,
    OT_ID_VGS     = 45,
    OT_ID_VCA     = 46,
    OT_ID_FD      = 47,
    OT_ID_OD      = 48,
    OT_ID_LPR      = 50,
    OT_ID_SVP_NNIE     = 51,
    OT_ID_SVP_DSP      = 52,
    OT_ID_DPU_RECT     = 53,
    OT_ID_DPU_MATCH    = 54,
    OT_ID_MOTIONSENSOR = 55,
    OT_ID_MOTIONFUSION = 56,
    OT_ID_GYRODIS      = 57,
    OT_ID_PM           = 58,
    OT_ID_SVP_ALG      = 59,
    OT_ID_IVP          = 60,
    OT_ID_MCF          = 61,
    OT_ID_SVP_MAU      = 62,
    OT_ID_VDA           = 63,
    OT_ID_VPP           = 64,
    OT_ID_KCF           = 65,
    OT_ID_PQP          = 66,
    OT_ID_NPUDEV      = 67,
    OT_ID_AICPU        = 68,
    OT_ID_NPUDFX      = 69,
    OT_ID_TSFW        = 70,
    OT_ID_CIPHER       = 71,
    OT_ID_KLAD         = 72,
    OT_ID_KEYSLOT      = 73,
    OT_ID_OTP          = 74,
    OT_ID_VDEC_ADAPT   = 75,
    OT_ID_DCC          = 76,
    OT_ID_VDEC_SERVER  = 77,
    OT_ID_VFMW_MDC     = 78,
    OT_ID_VB_LOG     = 79,
    OT_ID_MCF_CALIBRATION = 80,
    OT_ID_SVP_NPU      = 81,
    OT_ID_HNR          = 82,
    OT_ID_SNAP         = 83,
    OT_ID_LOG_MDC      = 84,
    OT_ID_VENC_SVR     = 85,
    OT_ID_AB  = 86,
    OT_ID_VO_DEV       = 87,
    OT_ID_IRQ          = 88,
    OT_ID_AIISP        = 89,
    OT_ID_UVC          = 90,
    OT_ID_VI_RGBW      = 91,
    OT_ID_ACODEC       = 92,
    OT_ID_SVAC3E       = 93,
    OT_ID_MIPIRX       = 94,
    OT_ID_AIDETECT     = 95,
    OT_ID_DEVSTAT      = 96,
    OT_ID_PSFM         = 97,
    OT_ID_UVC_HOST     = 98,
    OT_ID_VSIPS        = 99,
    OT_ID_BUTT,
} ot_mod_id;

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_payload_type

【说明】

定义音视频净荷类型枚举。

【定义】

typedef enum {
        OT_PT_PCMU          = 0,
        OT_PT_1016          = 1,
        OT_PT_G721          = 2,
        OT_PT_GSM           = 3,
        OT_PT_G723          = 4,
        OT_PT_DVI4_8K       = 5,
        OT_PT_DVI4_16K      = 6,
        OT_PT_LPC           = 7,
        OT_PT_PCMA          = 8,
        OT_PT_G722          = 9,
        OT_PT_S16BE_STEREO  = 10,
        OT_PT_S16BE_MONO    = 11,
        OT_PT_QCELP         = 12,
        OT_PT_CN            = 13,
        OT_PT_MPEGAUDIO     = 14,
        OT_PT_G728          = 15,
        OT_PT_DVI4_3        = 16,
        OT_PT_DVI4_4        = 17,
        OT_PT_G729          = 18,
        OT_PT_G711A         = 19,
        OT_PT_G711U         = 20,
        OT_PT_G726          = 21,
        OT_PT_G729A         = 22,
        OT_PT_LPCM          = 23,
        OT_PT_CelB          = 25,
        OT_PT_JPEG          = 26,
        OT_PT_CUSM          = 27,
        OT_PT_NV            = 28,
        OT_PT_PICW          = 29,
        OT_PT_CPV           = 30,
        OT_PT_H261          = 31,
        OT_PT_MPEGVIDEO     = 32,
        OT_PT_MPEG2TS       = 33,
        OT_PT_H263          = 34,
        OT_PT_SPEG          = 35,
        OT_PT_MPEG2VIDEO    = 36,
        OT_PT_AAC           = 37,
        OT_PT_WMA9STD       = 38,
        OT_PT_HEAAC         = 39,
        OT_PT_PCM_VOICE     = 40,
        OT_PT_PCM_AUDIO     = 41,
        OT_PT_MP3           = 43,
        OT_PT_ADPCMA        = 49,
        OT_PT_AEC           = 50,
        OT_PT_X_LD          = 95,
        OT_PT_H264          = 96,
        OT_PT_D_GSM_HR      = 200,
        OT_PT_D_GSM_EFR     = 201,
        OT_PT_D_L8          = 202,
        OT_PT_D_RED         = 203,
        OT_PT_D_VDVI        = 204,
        OT_PT_D_BT656       = 220,
        OT_PT_D_H263_1998   = 221,
        OT_PT_D_MP1S        = 222,
        OT_PT_D_MP2P        = 223,
        OT_PT_D_BMPEG       = 224,
        OT_PT_MP4VIDEO      = 230,
        OT_PT_MP4AUDIO      = 237,
        OT_PT_VC1           = 238,
        OT_PT_JVC_ASF       = 255,
        OT_PT_D_AVI         = 256,
        OT_PT_DIVX3         = 257,
        OT_PT_AVS           = 258,
        OT_PT_REAL8         = 259,
        OT_PT_REAL9         = 260,
        OT_PT_VP6           = 261,
        OT_PT_VP6F          = 262,
        OT_PT_VP6A          = 263,
        OT_PT_SORENSON      = 264,
        OT_PT_H265          = 265,
        OT_PT_VP8           = 266,
        OT_PT_MVC           = 267,
        OT_PT_PNG           = 268,
        OT_PT_AMR           = 1001,
        OT_PT_MJPEG         = 1002,
        OT_PT_AMRWB         = 1003,
        OT_PT_PRORES        = 1006,
        OT_PT_OPUS          = 1007,
        OT_PT_SVAC3         = 1008,
        OT_PT_BUTT
    } ot_payload_type;

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

  • ot_venc_chn_attr
  • ot_vdec_chn_attr
  • ot_vdec_chn_status
  • ot_vdec_chn_param
  • ot_vdec_protocol_param
  • ot_aenc_chn_attr
  • ot_adec_chn_attr

ot_vb_uid

【说明】

定义视频缓存池的模块ID枚举类型。

【定义】

typedef enum {
    OT_VB_UID_VI = 0,
    OT_VB_UID_VO,
    OT_VB_UID_VGS,
    OT_VB_UID_VENC,
    OT_VB_UID_VDEC,
    OT_VB_UID_H265E,
    OT_VB_UID_H264E,
    OT_VB_UID_VPSS,
    OT_VB_UID_DIS,
    OT_VB_UID_USER,
    OT_VB_UID_PCIV,
    OT_VB_UID_VFMW,
    OT_VB_UID_GDC,
    OT_VB_UID_AVS,
    OT_VB_UID_DPU_RECT,
    OT_VB_UID_DPU_MATCH,
    OT_VB_UID_MCF,
    OT_VB_UID_VDA,
    OT_VB_UID_VPP,
    OT_VB_UID_AIISP,
    OT_VB_UID_COMMON,
    OT_VB_UID_UVC,
    OT_VB_UID_SVAC3E,
    OT_VB_UID_UVC_HOST,
    OT_VB_UID_BUTT,
} ot_vb_uid;

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_op_mode

【说明】

定义操作模式枚举。

【定义】

typedef enum  {
    OT_OP_MODE_AUTO   = 0,
    OT_OP_MODE_MANUAL = 1,
    OT_OP_MODE_BUTT
} ot_op_mode;

【成员】

成员名称

描述

OT_OP_MODE_AUTO

自动模式,一般此模式使用程序内部的默认参数。

OT_OP_MODE_MANUAL

手动模式,一般此模式使用用户配置的参数。

【注意事项】

无。

【相关数据类型及接口】

ot_venc_cu_pred

ot_rotation

【说明】

定义旋转角度枚举。

【定义】

typedef enum  {
    OT_ROTATION_0   = 0,
    OT_ROTATION_90  = 1,
    OT_ROTATION_180 = 2,
    OT_ROTATION_270 = 3,
    OT_ROTATION_BUTT
} ot_rotation;

【成员】

成员名称

描述

OT_ROTATION_0

不旋转,旋转0度。

OT_ROTATION_90

旋转90度。

OT_ROTATION_180

旋转180度。

OT_ROTATION_270

旋转270度。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_vb_src

【说明】

定义VB来源选择。

【定义】

typedef enum  {
    OT_VB_SRC_COMMON  = 0,
    OT_VB_SRC_MOD  = 1,
    OT_VB_SRC_PRIVATE = 2,
    OT_VB_SRC_USER    = 3,
    OT_VB_SRC_BUTT
} ot_vb_src;

【成员】

成员名称

描述

OT_VB_SRC_COMMON

来自公共VB池。

OT_VB_SRC_MOD

来自模块VB池。

OT_VB_SRC_PRIVATE

来自私有VB池。

OT_VB_SRC_USER

来自用户指定VB池。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_point

【说明】

定义坐标信息结构体。

【定义】

typedef struct {
    td_s32 x;
    td_s32 y;
} ot_point;

【成员】

成员名称

描述

x

横坐标。

y

纵坐标。

【注意事项】

无。

【相关数据类型及接口】

  • ot_rgn_overlay_chn_attr
  • ot_rgn_quadrangle
  • ot_rgn_bmp_update
  • ot_vgs_draw_line
  • ot_vgs_quadrangle_cover

ot_size

【说明】

定义大小信息结构体。

【定义】

typedef struct {
    td_u32 width;
    td_u32 height;
} ot_size;

【成员】

成员名称

描述

width

宽度。

height

高度。

【注意事项】

无。

【相关数据类型及接口】

  • ot_rgn_overlay_attr
  • ot_rgn_overlayex_attr
  • ot_rgn_canvas_info
  • ot_venc_mpf_cfg
  • ot_vi_chn_attr
  • ot_vo_wbc_attr
  • ot_vo_video_layer_attr

ot_rect

【说明】

定义矩形区域信息结构体。

【定义】

typedef struct {
    td_s32 x;
    td_s32 y;
    td_u32 width;
    td_u32 height;
} ot_rect;

【成员】

成员名称

描述

x

横坐标。

y

纵坐标。

width

宽度。

height

高度。

【注意事项】

无。

【相关数据类型及接口】

  • ot_rgn_mosaic_chn_attr
  • ot_rgn_mosaicex_chn_attr
  • ot_venc_roi_attr
  • ot_venc_sse_rgn
  • ot_vgs_osd
  • ot_vi_chn_attr
  • ot_cover
  • ot_mosaic
  • ot_crop_info
  • ot_aspect_ratio
  • ot_vo_video_layer_attr
  • ot_vo_chn_attr
  • ot_vpss_crop_info

ot_coord

【说明】

定义坐标模式。

【定义】

typedef enum {
    OT_COORD_ABS = 0,
    OT_COORD_RATIO,
    OT_COORD_BUTT
} ot_coord;

【成员】

成员名称

描述

OT_COORD_ABS

绝对坐标。

OT_COORD_RATIO

相对坐标。

【注意事项】

相对坐标,即坐标值是以与当前图像宽高的比率来表示,具体比率转换以实际使用接口为准。

【相关数据类型及接口】

  • ot_rgn_cover_chn_attr
  • ot_vpss_crop_info

ot_border

【说明】

定义边框属性结构体。

【定义】

typedef struct {
    td_u32 top_width;
    td_u32 bottom_width;
    td_u32 left_width;
    td_u32 right_width;
    td_u32 color;
} ot_border;

【成员】

成员名称

描述

top_width

边框顶部宽度,以像素为单位。

bottom_width

边框底部宽度,以像素为单位。

left_width

边框左边宽度,以像素为单位。

right_width

边框右边宽度,以像素为单位。

color

边框颜色,颜色格式为rgb888,u32的低24bit为有效位。‎

【注意事项】

无

【相关数据类型及接口】

ot_vo_border

ot_cover

【说明】

定义cover属性结构体。

【定义】

typedef struct {
    ot_cover_type              type;
    union {
        ot_rect_cover          rect_attr;
        ot_quad_cover          quad_attr;
    };
    td_u32                     color;
} ot_cover;

【成员】

成员名称

描述

type

Cover类型

rect_attr

矩形结构

quad_attr

任意四边形结构

color

cover颜色 格式为RGB888

【注意事项】

无。

【相关数据类型及接口】

ot_cover_type

【说明】

cover类型枚举。

【定义】

typedef enum {
    OT_COVER_RECT = 0,
    OT_COVER_QUAD,
    OT_COVER_BUTT
} ot_cover_type;

【成员】

成员名称

描述

OT_COVER_RECT

矩形

OT_COVER_QUAD

任意四边形

【注意事项】

无

【相关数据类型及接口】

ot_rect_cover

【说明】

定义矩形Cover属性结构体。

【定义】

typedef struct {
    td_bool        is_solid;
    td_u32         thick;
    ot_rect        rect;
} ot_rect_cover;

【成员】

成员名称

描述

is_solid

是否实心

thick

空心线宽,取值范围为[OT_RGN_COVEREX_MIN_THICK, OT_RGN_COVEREX_MAX_THICK],要求以2对齐。

具体请参考“区域管理”章节。

rect

矩形区域信息

【注意事项】

无。

【相关数据类型及接口】

ot_cover

ot_quad_cover

【说明】

定义不规则四边形Cover属性结构体。

【定义】

typedef struct {
    td_bool        is_solid;
    td_u32         thick;
    ot_point       point[OT_QUAD_POINT_NUM];
} ot_quad_cover

【成员】

成员名称

描述

is_solid

是否实心

thick

空心线宽,取值范围为[OT_RGN_COVEREX_MIN_THICK, OT_RGN_COVEREX_MAX_THICK],要求以2对齐。具体请参考“区域管理”章节。

point

任意四边形坐标

【注意事项】

任意四边形的四个点坐标不可以设置为同一点或者同一直线上。

【相关数据类型及接口】

ot_cover

ot_mosaic

【说明】

定义mosaic属性结构体。

【定义】

typedef struct {
    ot_mosaic_blk_size blk_size;
    ot_rect            rect;   /* RW; The rectangle area. */
} ot_mosaic;

【成员】

成员名称

描述

blk_size

Mosaic块大小

rect

矩形坐标

【注意事项】

无。

【相关数据类型及接口】

无。

ot_mosaic_blk_size

【说明】

Mosaic 块大小枚举。

【定义】

typedef enum  {
    OT_MOSAIC_BLK_SIZE_4 = 0, /* block size 4*4 of MOSAIC */
    OT_MOSAIC_BLK_SIZE_8, /* block size 8*8 of MOSAIC */
    OT_MOSAIC_BLK_SIZE_16,    /* block size 16*16 of MOSAIC */
    OT_MOSAIC_BLK_SIZE_32,    /* block size 32*32 of MOSAIC */
    OT_MOSAIC_BLK_SIZE_64,    /* block size 64*64 of MOSAIC */
    OT_MOSAIC_BLK_SIZE_128,   /* block size 128*128 of MOSAIC */
    OT_MOSAIC_BLK_SIZE_BUTT
} ot_mosaic_blk_size; 

【成员】

成员名称

描述

OT_MOSAIC_BLK_SIZE_4

4x4大小Mosaic块

OT_MOSAIC_BLK_SIZE_8

8x8大小Mosaic块

OT_MOSAIC_BLK_SIZE_16

16x16大小Mosaic块

OT_MOSAIC_BLK_SIZE_32

32x32大小Mosaic块

OT_MOSAIC_BLK_SIZE_64

64x64大小Mosaic块

OT_MOSAIC_BLK_SIZE_128

128x128大小Mosaic块

【注意事项】

无

【相关数据类型及接口】

无

ot_corner_rect_type

【说明】

定义corner_rect形状枚举。

【定义】

typedef enum{
    OT_CORNER_RECT_TYPE_CORNER = 0,
    OT_CORNER_RECT_TYPE_FULL_LINE,
    OT_CORNER_RECT_TYPE_BUTT
}ot_corner_rect_type;

【成员】

成员名称

描述

OT_CORNER_RECT_TYPE_CORNER

角框

OT_CORNER_RECT_TYPE_FULL_LINE

线框

【注意事项】

无。

【相关数据类型及接口】

ot_corner_rect_attr

ot_corner_rect

【说明】

定义corner_rect位置结构体。

【定义】

typedef struct {
    ot_rect      rect;
    td_u32       hor_len;
    td_u32       ver_len;
    td_u32       thick;
} ot_corner_rect;

【成员】

成员名称

描述

rect

起始位置及宽高信息,参考ot_rect结构体描述。

hor_len

角框水平线长。

ver_len

角框竖直线长。

thick

角框线宽。

【注意事项】

无。

【相关数据类型及接口】

ot_corner_rect_attr

【说明】

定义corner_rect属性结构体。

【定义】

typedef struct {
    ot_corner_rect_type    corner_rect_type;
    td_u32                 color;
} ot_corner_rect_attr;

【成员】

成员名称

描述

corner_rect_type

定义角框形状。

color

定义角框颜色。

【注意事项】

无。

【相关数据类型及接口】

ot_crop_info

【说明】

定义CROP属性结构体。

【定义】

typedef struct {
    td_bool enable;
    ot_rect  rect;
} ot_crop_info;

【成员】

成员名称

描述

enable

Crop使能开关。

rect

Crop起始位置与宽高信息。

【注意事项】

无。

【相关数据类型及接口】

  • ot_venc_chn_param
  • ss_mpi_vo_set_video_layer_crop
  • ss_mpi_vo_get_video_layer_crop

ot_frame_rate_ctrl

【说明】

定义帧率控制结构体。

【定义】

typedef struct {
    td_s32  src_frame_rate;        /* RW; source frame rate */
    td_s32  dst_frame_rate;        /* RW; dest frame rate */
} ot_frame_rate_ctrl;

【成员】

成员名称

描述

src_frame_rate

源帧率,即输入帧率。

取值范围-1或[1, 240]

dst_frame_rate

目的帧率,即输出帧率。

取值范围:[-1, src_frame_rate]

【注意事项】

无。

【相关数据类型及接口】

  • ot_venc_chn_param
  • ot_vpss_grp_attr
  • ot_vpss_chn_attr
  • ot_mcf_chn_attr
  • ot_mcf_grp_attr

ot_video_display_mode

【说明】

定义视频显示模式枚举。

【定义】

typedef enum  {
    OT_VIDEO_DISPLAY_MODE_PREVIEW  = 0,
    OT_VIDEO_DISPLAY_MODE_PLAYBACK = 1,
    OT_VIDEO_DISPLAY_MODE_BUTT
} ot_video_display_mode;

【成员】

成员名称

描述

OT_VIDEO_DISPLAY_MODE_PREVIEW

预览模式。

OT_VIDEO_DISPLAY_MODE_PLAYBACK

回放模式。

【注意事项】

无。

【相关数据类型及接口】

  • ss_mpi_vdec_set_display_mode
  • ss_mpi_vdec_get_display_mode

ot_rotation_view_type

【说明】

定义旋转的视野模式。

【定义】

typedef enum {
   OT_ROTATION_VIEW_TYPE_ALL      = 0, /* View all source Image,no lose*/
   OT_ROTATION_VIEW_TYPE_TYPICAL  = 1, /* View from rotation Image with source size,same lose*/
   OT_ROTATION_VIEW_TYPE_INSIDE   = 2, /* View with no black section,all  in dest Image*/
   OT_ROTATION_VIEW_TYPE_BUTT,
} ot_rotation_view_type;

【成员】

成员名称

描述

OT_ROTATION_VIEW_TYPE_ALL

全模式,保留所有的图像,无图像视野损失,但随着旋转角度改变带来较多的黑边。

OT_ROTATION_VIEW_TYPE_TYPICAL

典型模式,用原有视野截取旋转后图像,会有部分图像损失,也会留有一定量的黑边。

OT_ROTATION_VIEW_TYPE_INSIDE

无黑边模式,在旋转后图中选取无黑边的视野大小

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

ot_free_rotation_attr

ot_free_rotation_attr

【说明】

定义任意角度旋转属性。

【定义】

typedef struct {
    ot_rotation_view_type view_type;
    td_u32    angle;
    td_s32    center_x_offset;
    td_s32    center_y_offset;
    ot_size   dst_size;
} ot_free_rotation_attr;

【成员】

成员名称

描述

view_type

任意角度旋转的旋转模式,裁剪模式、全模式和典型模式。

angle

旋转的角度。任意角度旋转时范围:[0, 360];高精度任意角度旋转时范围:[0, 36000]。

center_x_offset

旋转中心点相对图像中心点水平偏移。仅典型模式支持。范围:[-511, 511]

center_y_offset

旋转中心点相对图像中心点垂直偏移。仅典型模式支持。范围:[-511, 511]

dst_size

旋转后的得到的图像大小,如果旋转后截取图像大小相对dst_size有变化,会对图像进行缩放处理。范围:[120x88, 8192x8192]。

【注意事项】

  • center_x_offset/ center_y_offset仅典型模式支持。
  • 高精度任意角度旋转,单位:0.01°。

【相关数据类型及接口】

ot_rotation_view_type

ot_rotation_type

【说明】

定义旋转类型。

【定义】

typedef enum {
    OT_ROTATION_ANG_FIXED = 0,
    OT_ROTATION_ANG_FREE,
    OT_ROTATION_ANG_FREE_HP,
    OT_ROTATION_ANG_BUTT
} ot_rotation_type;

【成员】

成员名称

描述

OT_ROTATION_ANG_FIXED

固定角度旋转。

OT_ROTATION_ANG_FREE

任意角度旋转。

OT_ROTATION_ANG_FREE_HP

高精度任意角度旋转。

【注意事项】

无。

【相关数据类型及接口】

ot_rotation_attr

ot_rotation_attr

【说明】

定义通道旋转属性。

【定义】

typedef struct {
    td_bool                  enable;
    ot_rotation_type    rotation_type;
    union {
        ot_rotation          rotation_fixed;
        ot_free_rotation_attr       rotation_free;
    };
} ot_rotation_attr;

【成员】

成员名称

描述

enable

控制旋转使能开关

rotation_type

旋转类型。

rotation_fixed

固定角度旋转属性,rotation_type为OT_ROTATION_ANG_FIXED时才生效。

rotation_free

任意角度旋转属性,rotation_type为OT_ROTATION_ANG_FREE或OT_ROTATION_ANG_FREE_HP时才生效。

【注意事项】

设置相应旋转时,需要打开使能开关enable。

【相关数据类型及接口】

ot_frame_flag

【说明】

定义帧的类型。

【定义】

typedef enum  {
    OT_FRAME_FLAG_SNAP_FLASH  = 0x1 << 0,
    OT_FRAME_FLAG_SNAP_CUR    = 0x1 << 1,
    OT_FRAME_FLAG_SNAP_REF    = 0x1 << 2,
    OT_FRAME_FLAG_SNAP_END    = 0x1 << 3,
    OT_FRAME_FLAG_MIRROR      = 0x1 << 4,
    OT_FRAME_FLAG_FLIP        = 0x1 << 5,
    OT_FRAME_FLAG_DGAIN_BYPASS = 0x1 << 6,
    OT_FRAME_FLAG_OUTPUT_NONE = 0x1 << 7,
    OT_FRAME_FLAG_USER_SEND_DISCARD = 0x1 << 8,
    OT_FRAME_FLAG_ROTATION_90       = 0x1 << 9,
    OT_FRAME_FLAG_ROTATION_270      = 0x1 << 10,
    OT_FRAME_FLAG_SVC_FLAG          = 0x1 << 11,
    OT_FRAME_FLAG_NR_DISCARD        = 0x1 << 12,
    OT_FRAME_FLAG_DUMP_DEBUG_DISCARD = 0x1 << 13,
    OT_FRAME_FLAG_BUTT
} ot_frame_flag;

【成员】

成员名称

描述

OT_FRAME_FLAG_SNAP_FLASH

拍照时是否开启闪光灯。

OT_FRAME_FLAG_SNAP_CUR

拍照的有效数据帧。

OT_FRAME_FLAG_SNAP_REF

拍照帧的参考帧。

OT_FRAME_FLAG_SNAP_END

连拍的最后一张帧数据标识。

OT_FRAME_FLAG_MIRROR

mirror标识。

OT_FRAME_FLAG_FLIP

flip标识。

OT_FRAME_FLAG_DGAIN_BYPASS

isp dgain bypass功能标识。

OT_FRAME_FLAG_USER_SEND_DISCARD

发送帧丢帧,重复送帧功能标识。

OT_FRAME_FLAG_ROTATION_90

90度旋转标识。

OT_FRAME_FLAG_ROTATION_270

270度旋转标识。

OT_FRAME_FLAG_SVC_FLAG

智能检测标识。

OT_FRAME_FLAG_NR_DISCARD

3DNR延时模式PTS校正标识。

OT_FRAME_FLAG_DUMP_DEBUG_DISCARD

存帧调试时的丢帧标识。

OT_FRAME_FLAG_OUTPUT_NONE

保留标识。

【注意事项】

OT_FRAME_FLAG_USER_SEND_DISCARD标识仅VI支持,用于重复送帧功能,涉及接口ss_mpi_vi_send_pipe_yuv、ss_mpi_vi_send_pipe_raw、ss_mpi_vi_set_pipe_user_pic。

【相关数据类型及接口】

无。

OT_SRC_LENS_COEF_NUM

【说明】

镜头畸变表相关系数个数。

【定义】

#define OT_SRC_LENS_COEF_NUM    9

【注意事项】

无

【相关数据类型及接口】

无

OT_DST_LENS_COEF_NUM

【说明】

镜头畸变表相关系数个数。

【定义】

#define OT_DST_LENS_COEF_NUM    14

【注意事项】

无

【相关数据类型及接口】

无

OT_DIS_PRIVATE_NUM

【说明】

私有通道信息传输数目。

【定义】

#define OT_DIS_PRIVATE_NUM    9

【注意事项】

无

【相关数据类型及接口】

无

OT_DIS_MOTIONDATA_NUM

【说明】

防抖运动信息组数。

【定义】

#define OT_DIS_MOTIONDATA_NUM    9

【注意事项】

无

【相关数据类型及接口】

无

OT_DIS_POINT_NUM

【说明】

查询防抖坐标点个数。

【定义】

#define OT_DIS_POINT_NUM    10

【注意事项】

无

【相关数据类型及接口】

无

ot_dis_motion_data

【说明】

定义防抖运动信息。

【定义】

typedef struct {
    td_s64 motion_data[OT_DIS_MOTIONDATA_NUM];
} ot_dis_motion_data;

【成员】

成员名称

描述

motion_data

防抖运动信息。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_dis_motion_info

【说明】

定义防抖运动信息配置。

【定义】

typedef struct {
    td_bool valid;
    ot_dis_motion_data data;
} ot_dis_motion_info;

【成员】

成员名称

描述

valid

使能防抖信息是否有效

data

防抖运动信息

【注意事项】

无。

【相关数据类型及接口】

无。

ot_dst_point_info

【说明】

定义防抖后输出坐标点信息。

【定义】

typedef struct {
    td_s32 point_num;
    ot_point point[OT_DIS_POINT_NUM];
} ot_dst_point_info;

【成员】

成员名称

描述

point_num

防抖后偏移的坐标点数量。

取值范围:[0, OT_DIS_POINT_NUM]。

point

坐标点信息。

当输出的坐标点超出宽高之后,默认输出[-1, -1]。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_dis_motion_data_info

【说明】

定义防抖运动信息和坐标偏移信息。

【定义】

typedef struct {
    ot_dis_motion_info gme_motion_data;
    ot_dis_motion_info fliter_motion_data;
    ot_dst_point_info dst_point_info;
    td_s32 private_data[OT_DIS_PRIVATE_NUM];
} ot_dis_motion_data_info;

【成员】

成员名称

描述

gme_motion_data

GME运动信息

fliter_motion_data

滤波运动信息

dst_point_info

输出坐标点信息

private_data

通道私有信息

【注意事项】

GMEDIS防抖场景,GME运动信息gme_motion_data和滤波运动信息fliter_motion_data可以通过fliter_motion_data的valid判断是否可用。

【相关数据类型及接口】

无。

ot_ldc_v1_attr

【说明】

定义OT_LDC_V1版本的镜头畸变校正属性。

【定义】

typedef struct {
    td_bool    aspect;
    td_s32     x_ratio;
    td_s32     y_ratio;
    td_s32     xy_ratio;
    td_s32 center_x_offset;
    td_s32 center_y_offset;
    td_s32 distortion_ratio;
} ot_ldc_v1_attr;

【成员】

成员名称

描述

aspect

畸变校正类型。

aspect=0:不保持幅形比;

aspect=1:保持幅形比。

x_ratio

水平视场角大小,aspect=0有效;

其值为水平视场角介于最小视场角和最大视场角之间的一个比例。

y_ratio

垂直视场角大小,aspect=0有效;

其值为垂直视场角介于最小视场角和最大视场角之间的一个比例。

xy_ratio

整体视场角大小,包括水平视场角和垂直视场角,aspect=1有效;

其值为整体视场角介于最小视场角和最大视场角之间的一个比例。

center_x_offset

畸变中心点相对图像中心点水平偏移。

center_y_offset

畸变中心点相对图像中心点垂直偏移。

distortion_ratio

畸变程度。当开启展宽(Spread)时候,LDC的distortion_ratio取值范围只能为[0, 500]。

【注意事项】

  • center_x_offset取值范围:[-511, 511]
  • center_y_offset取值范围:[-511, 511];同时矫正中心点须落在图像内。
  • distortion_ratio取值范围:[-300, 500],其中[-300, 0)对应枕形模式畸变的畸变率,[0, 500]对应桶形模式畸变的畸变率。
  • x_ratio、y_ratio取值范围参考《GDC调试指南》。

【相关数据类型及接口】

无。

ot_distortion_mode

【说明】

定义DIS_LDC的镜头畸变模型。

【定义】

typedef enum {
    OT_DIST_STANDARD_PINHOLE = 0,
    OT_DIST_RATIONAL_PINHOLE,
    OT_DIST_FISHEYE,
    OT_DIST_MODE_BUTT,
} ot_distortion_mode;

【成员】

成员名称

描述

OT_DIST_STANDARD_PINHOLE

标准针孔模型。

OT_DIST_RATIONAL_PINHOLE

有理多项式针孔模型。

OT_DIST_FISHEYE

鱼眼模型。

【注意事项】

  • 当前DIS_LDC不支持鱼眼模型。
  • 有理多项式针孔模型只能在GYRO_ADVANCE防抖模式下使用。

【相关数据类型及接口】

无。

ot_dis_ldc_attr

【说明】

定义防抖场景下镜头畸变校正属性。

【定义】

typedef struct {
    td_s32 focal_len_x;
    td_s32 focal_len_y;
    td_s32 coord_shift_x;
    td_s32 coord_shift_y;
    ot_distortion_mode distortion_mode;
    td_s32 src_calibration_ratio[OT_SRC_LENS_COEF_NUM];
    td_s32 dst_calibration_ratio[OT_DST_LENS_COEF_NUM];
    td_s32 max_du;
} ot_dis_ldc_attr;

【成员】

成员名称

描述

focal_len_x

水平方向镜头有效焦距。

参数范围:[6400, 117341700].

focal_len_y

垂直方向镜头有效焦距。

参数范围:[6400, 117341700].

coord_shift_x

光心X坐标。

参数范围:[35* Width,65* Width], Width为图像宽

coord_shift_y

光心Y坐标。

参数范围:[35* Height,65* Height], Height为图像高。

distortion_mode

镜头畸变模型,当前支持标准针孔模型和有理多项式针孔模型。

默认使用标准针孔模型。

src_calibration_ratio

镜头畸变系数,共18个参数。

其中[0]固定为1*10^5,为畸变率的浮点数精度,[8]的范围为[0,32*10^5],其他成员范围均为[-16*10^5, 16*10^5]。

镜头畸变模型为标准针孔模型时,只有前9个参数生效,其中[1]表示k1,[2]表示k2,[3]表示k3。

镜头畸变模型为有理多项式针孔模型时,只有前12个参数生效,其中[1] [2] [3]同标准针孔模型,[9]表示k4, [10]表示k5,[11]表示k6。

参数需要根据标定结果进行合理配置。

dst_calibration_ratio

镜头畸变系数,共14个参数。

其中[12]、[13]的范围为[0, 16*10^5],其他成员范围均为[-16*10^5, 16*10^5]。

参数需要根据标定结果进行合理配置。

max_du

镜头畸变系数。参数范围:[0,1<<20]。

【注意事项】

  • DIS_LDC功能不能与LDC功能同时使用。

  • 如果经过缩放后输入分辨率存在变化,则需要按照比例对镜头畸变校正属性进行转换,以4K转换为1080P为例:

focal_len_x' = focal_len_x * 1920 / 3840

focal_len_y' = focal_len_y * 1080 / 2160

coord_shift_x' = coord_shift_x * 1920 / 3840

coord_shift_y' = coord_shift_y * 1080 / 2160

其中,focal_len_x、focal_len_y、coord_shift_x、coord_shift_y属于4K参数,focal_len_x'、focal_len_y'、coord_shift_x'、coord_shift_y'属于1080P参数。

【相关数据类型及接口】

无。

ot_ldc_v2_attr

【说明】

定义OT_LDC_V2版本的镜头畸变校正属性。

【定义】

typedef struct {
    td_bool    aspect;
    td_s32     x_ratio;
    td_s32     y_ratio;
    td_s32     xy_ratio;
    td_s32 focal_len_x;
    td_s32 focal_len_y;
    td_s32 coord_shift_x;
    td_s32 coord_shift_y;
    td_s32 src_calibration_ratio[OT_SRC_LENS_COEF_NUM];
    td_s32 src_calibration_ratio_next[OT_SRC_LENS_COEF_NUM];
    td_u32 coef_intp_ratio;
} ot_ldc_v2_attr;

【成员】

成员名称

描述

aspect

畸变校正类型。

aspect=0:不保持幅形比;

aspect=1:保持幅形比。

x_ratio

水平视场角大小,aspect=0有效;

其值为水平视场角介于最小视场角和最大视场角之间的一个比例。

y_ratio

垂直视场角大小,aspect=0有效;

其值为垂直视场角介于最小视场角和最大视场角之间的一个比例。

xy_ratio

整体视场角大小,包括水平视场角和垂直视场角,aspect=1有效;

其值为整体视场角介于最小视场角和最大视场角之间的一个比例。

focal_len_x

水平方向镜头有效焦距。

参数范围:[6400,3276700] .

focal_len_y

垂直方向镜头有效焦距。

参数范围:[6400, 3276700].

coord_shift_x

光心X坐标。

参数范围:[35* Width,65* Width], Width为图像宽

coord_shift_y

光心Y坐标。

参数范围:[35* Height,65* Height], Height为图像高。

src_calibration_ratio

镜头畸变系数,其中[0]固定为1*10^5,[4],[5],[6],[7]固定为0,[8]固定为3200000,其他成员范围均为[-16*10^5, 16*10^5]。

src_calibration_ratio_next

镜头畸变系数,其中[0]固定为1*10^5,[4],[5],[6],[7]固定为0,[8]固定为3200000,其他成员范围均为[-16*10^5, 16*10^5]。

coef_intp_ratio

镜头畸变系数。参数范围:[0,32768]。

【注意事项】

x_ratio、y_ratio取值范围参考《GDC调试指南》。

如果输入分辨率存在变化,则需要按照比例对镜头畸变校正属性进行转换,以4K转换为1080P为例:

focal_len_x' = focal_len_x * 1920 / 3840

focal_len_y' = focal_len_y * 1080 / 2160

coord_shift_x' = coord_shift_x * 1920 / 3840

coord_shift_y' = coord_shift_y * 1080 / 2160

其中,focal_len_x、focal_len_y、coord_shift_x、coord_shift_y属于4K参数,focal_len_x'、focal_len_y'、coord_shift_x'、coord_shift_y'属于1080P参数。

【相关数据类型及接口】

无。

ot_ldc_view_type

【说明】

定义OT_LDC_V3版本的视角类型。

【定义】

typedef enum {
    OT_LDC_VIEW_TYPE_ALL = 0,
    OT_LDC_VIEW_TYPE_CROP = 1,
    OT_LDC_VIEW_TYPE_BUTT
} ot_ldc_view_type;

【成员】

成员名称

描述

OT_LDC_VIEW_TYPE_ALL

完整视角类型

OT_LDC_VIEW_TYPE_CROP

裁剪视角类型

【注意事项】

  • 完整视角类型:使用视角缩放但是x轴和y轴相对独立,这将保证宽高,但角落图像内容可能丢失。
  • 裁剪视角类型:不使用视角缩放,这将丢失部分边缘和角落图像内容。

【相关数据类型及接口】

无

ot_ldc_v3_attr

【说明】

定义OT_LDC_V3版本的镜头畸变校正属性。

【定义】

typedef struct {
    ot_ldc_view_type view_type;
    td_s32 center_x_offset;
    td_s32 center_y_offset;
    td_s32 distortion_ratio;
    td_s32 min_ratio;
} ot_ldc_v3_attr;

【成员】

成员名称

描述

view_type

视角类型。

view_type=0:全模式;

view_type=1:裁剪模式。

center_x_offset

畸变中心点相对图像中心点水平偏移。

center_y_offset

畸变中心点相对图像中心点垂直偏移。

distortion_ratio

畸变程度。

min_ratio

最小比例:在裁剪模式下进行畸变矫正时,移除周围黑色区域。

【注意事项】

  • center_x_offset绝对值取值范围:[0, min(128, width*0.08)],其中width为图像宽度。
  • center_y_offset绝对值取值范围:[0, min(128, height*0.08)],其中height为图像高度。
  • distortion_ratio取值范围:[-300, 300],其中[-300, 0)对应枕形模式畸变的畸变率,[0, 300]对应桶形模式畸变的畸变率。
  • min_ratio取值范围:[-300, 300]

【相关数据类型及接口】

无

ot_ldc_version

【说明】

定义LDC版本。

【定义】

typedef enum  {
    OT_LDC_V1 = 0,
    OT_LDC_V2 = 1,
    OT_LDC_V3 = 2,
    OT_LDC_VERSION_BUTT
} ot_ldc_version;

【成员】

成员名称

描述

OT_LDC_V1

OT_LDC_V1版本

OT_LDC_V2

OT_LDC_V2版本

OT_LDC_V3

OT_LDC_V3版本

【注意事项】

无。

【相关数据类型及接口】

无。

ot_ldc_attr

【说明】

定义镜头畸变校正属性结构体。

【定义】

typedef struct {
    td_bool enable;
    ot_ldc_version ldc_version;
    union {
        ot_ldc_v1_attr ldc_v1_attr;
        ot_ldc_v2_attr ldc_v2_attr;
        ot_ldc_v3_attr ldc_v3_attr;
     };
} ot_ldc_attr;

【成员】

成员名称

描述

enable

控制LDC使能开关

ldc_version

LDC版本

ldc_v1_attr

镜头畸变校正属性,ldc_version为OT_LDC_V1时才生效。

ldc_v2_attr

镜头畸变校正属性,ldc_version为OT_LDC_V2时才生效。

ldc_v3_attr

镜头畸变校正属性,ldc_version为OT_LDC_V3时才生效。

【注意事项】

设置LDC属性时,需要打开使能开关enable。

【相关数据类型及接口】

无。

ot_spread_attr

【说明】

定义展宽属性的相关配置。

【定义】

typedef struct {
    td_bool enable;
    td_u32 spread_coef;
} ot_spread_attr;

【成员】

成员名称

描述

enable

关闭或打开展宽功能。当开启展宽(Spread)时,LDC的distortion_ratio取值范围只能为 [0, 500],即只支持LDC的桶形模式。

spread_coef

展宽系数。取值范围:[0, 18]。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_jpeg_dcf

【说明】

JPEG图片使用的DCF信息。

【定义】

typedef struct {
    td_u8           capture_time[OT_DCF_CAPTURE_TIME_LENGTH];
    td_bool         flash;
    td_u32          digital_zoom_ratio;
    ot_isp_dcf_info  isp_dcf_info;
} ot_jpeg_dcf;

【成员】

成员名称

描述

capture_time

Jpeg图片拍摄的时间。

flash

Jpeg照片拍摄的时候是否有闪光灯。

digital_zoom_ratio

Jpeg照片拍摄的时候的数码缩放倍数。

isp_dcf_info

DCF其他信息,ot_isp_dcf_info具体请参考《ISP 开发参考》。

【注意事项】

无。

【相关数据类型及接口】

ot_isp_dcf_info

OT_DCF_CAPTURE_TIME_LENGTH

【说明】

Jpeg图片拍摄的时间长度。

【定义】

#define OT_DCF_CAPTURE_TIME_LENGTH             20

【成员】

无

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_fswdr_mode

【说明】

定义frame switch wdr 模式。

【定义】

typedef enum {
    OT_ISP_FSWDR_NORMAL_MODE          = 0x0,
    OT_ISP_FSWDR_LONG_FRAME_MODE      = 0x1,
    OT_ISP_FSWDR_AUTO_LONG_FRAME_MODE = 0x2,
    OT_ISP_FSWDR_MODE_BUTT
}ot_isp_fswdr_mode;

【成员】

成员名称

描述

OT_ISP_FSWDR_NORMAL_MODE

WDR NORMAL模式。

OT_ISP_FSWDR_LONG_FRAME_MODE

WDR长帧模式。

OT_ISP_FSWDR_AUTO_LONG_FRAME_MODE

WDR自动长帧模式。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_isp_frame_info

【说明】

ISP的实时信息。

【定义】

typedef struct {
    td_u32      iso;
    td_u32      exposure_time[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u32      isp_dgain[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u32      again[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u32      dgain[OT_ISP_WDR_MAX_FRAME_NUM];
    ot_isp_fswdr_mode fs_wdr_mode;
    td_u32      fe_id[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u32      ratio[3];
    td_u32      isp_nr_strength;
    td_u32      f_number;
    td_u32      sensor_id;
    td_u32      sensor_mode;
    td_u32      hmax_times;
    td_u32      vmax;
    td_u32      vc_num;
    td_u32      wb_gain[OT_ISP_WB_GAIN_NUM];
    td_u16      ccm[OT_ISP_CAP_CCM_NUM];
    td_u32      exposure_distance[OT_ISP_WDR_MAX_FRAME_NUM - 1];
    td_s32      sync_id;
    td_u32      blc_sync_id;
    td_bool     dgain_agamma_en;
} ot_isp_frame_info;

【成员】

成员名称

描述

iso

当前sensor模拟增益*sensor数字增益*ISP数字增益*100。

exposure_time

曝光时间,单位是微秒(us)。

isp_dgain

ISP数字增益。

again

Sensor的模拟增益。

dgain

Sensor的数字增益。

fs_wdr_mode

frame switch wdr 模式。

fe_id

fe通道号。

ratio

多帧合成WDR相邻2帧默认曝光比。

isp_nr_strength

ISP的NR强度。当前未支持,默认值为0。

f_number

当前使用的镜头的F值。

sensor_id

当前使用的sensorID。

sensor_mode

当前使用的sensor序列模式。

hmax_times

当前使用的sensor对应读出一行的时间,单位是纳秒(ns)。

vmax

sensor每帧实际生效的总行数,单位是行。

vc_num

当前采集的帧的序列号。当前未支持,默认值为0。

wb_gain

白平衡增益参数。

ccm

CCM矩阵参数。

exposure_distance

wdr模式下曝光行差。

具体请参考《ISP 开发参考》2.3小节

sync_id

BE同步参数id,用于匹配同步参数。

blc_sync_id

BE同步FE黑电平id,用于匹配FE黑电平。

dgain_agamma_en

Hi3519DV500不支持

【注意事项】

无。

【相关数据类型及接口】

无。

ot_isp_hdr_info

【说明】

ISP的HDR信息。

【定义】

typedef struct {
    td_u32 color_temp;
    td_u16 ccm[9];
    td_u8  saturation;
} ot_isp_hdr_info;

【成员】

成员名称

描述

color_temp

色温

ccm

颜色矩阵

saturation

饱和度

【注意事项】

无。

【相关数据类型及接口】

无。

ot_isp_attach_info

【说明】

ISP的attach信息。

【定义】

typedef struct {
    ot_isp_hdr_info  isp_hdr;
    td_u32 iso;
    td_u32 init_iso;
    td_u8 sns_wdr_mode;
} ot_isp_attach_info;

【成员】

成员名称

描述

isp_hdr

Hdr相关的配置信息

iso

当前系统的iso信息

init_iso

初始的iso信息

sns_wdr_mode

Sensor的工作模式,指linear模式还是wdr模式

【注意事项】

无。

【相关数据类型及接口】

无。

ot_isp_colorgammut_info

【说明】

ISP的色域信息。

【定义】

typedef struct {
    ot_color_gamut color_gamut;
} ot_isp_colorgammut_info;

【成员】

成员名称

描述

color_gamut

颜色域信息

【注意事项】

无。

【相关数据类型及接口】

无。

ot_dng_rational

【说明】

定义DNG的无符号除法结构体。

【定义】

typedef struct {
    td_u32 numerator;
    td_u32 denominator;
} ot_dng_rational;

【成员】

成员名称

描述

numerator

分子

denominator

分母

【注意事项】

无。

【相关数据类型及接口】

无。

ot_dng_image_dynamic_info

【说明】

DNG格式的动态信息。

【定义】

typedef struct {
    td_u32 black_level[OT_ISP_BAYER_CHN];
    ot_dng_rational as_shot_neutral[OT_CFACOLORPLANE];
    td_double ad_noise_profile[OT_DNG_NP_SIZE];
} ot_dng_image_dynamic_info;

【成员】

成员名称

描述

black_level

黑电平

as_shot_neutral

白平衡系数

ad_noise_profile

噪声特性表

【注意事项】

获取到的black_level是12bit对应的黑电平。

【相关数据类型及接口】

无

OT_ISP_BAYER_CHN

【说明】

BAYER通道数

【定义】

#define OT_ISP_BAYER_CHN                4

【成员】

无

【注意事项】

无

【相关数据类型及接口】

无

OT_CFACOLORPLANE

【说明】

滤色阵列的颜色分量

【定义】

#define OT_CFACOLORPLANE                3

【成员】

无

【注意事项】

无

【相关数据类型及接口】

无

OT_DNG_NP_SIZE

【说明】

DNG NP大小

【定义】

#define OT_DNG_NP_SIZE                 6

【成员】

无

【注意事项】

无

【相关数据类型及接口】

无

ot_pmf_attr

【说明】

定义PMF属性的相关配置。

【定义】

typedef struct {
    td_bool enable; /* RW; Range [0,1]; Whether or not pmf is enable */
    ot_size dst_size;
    td_s64 pmf_coef[OT_GDC_COMMON_COEF_NUM]; /* RW;  PMF coefficient of gdc */
} ot_pmf_attr;

【成员】

成员名称

描述

enable

pmf 功能使能开关。

dst_size

输出图像大小。

pmf_coef

PMF矫正系数。

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

【注意事项】

无。

【相关数据类型及接口】

  • ss_mpi_vpss_set_grp_pmf
  • ss_mpi_vpss_get_grp_pmf

ot_fov_attr

【说明】

定义视场角矫正属性。

【定义】

typedef struct {
    td_bool enable; /* RW; Range [0,1]; Whether or not fov is enable */
    td_s64 fov_coef[OT_GDC_COMMON_COEF_NUM]; /* RW; matrix for match the two */
} ot_fov_attr;

【成员】

成员名称

描述

enable

视场角使能开关。

fov_coef

视场角矫正pmf系数。

【注意事项】

视场角矫正pmf系数范围:

  • range of coef[0] is [314572, 1782578]
  • range of coef[1] is [-734002, 734002]
  • range of coef[2] is [-2147483647, 2147483646]
  • range of coef[3] is [-734002, 734002]
  • range of coef[4] is [314572, 1782578]
  • range of coef[5] is [-2147483647, 2147483646]
  • range of coef[6] is [-52, 208]
  • range of coef[7] is [-52, 208]
  • range of coef[8] is 1048576

【相关数据类型及接口】

  • ss_mpi_vpss_set_grp_fov
  • ss_mpi_vpss_get_grp_fov

ot_lut_cell_size

【说明】

定义单元格大小。

【定义】

typedef enum {
    OT_LUT_CELL_SIZE_16,
    OT_LUT_CELL_SIZE_32,
    OT_LUT_CELL_SIZE_64,
    OT_LUT_CELL_SIZE_128,
    OT_LUT_CELL_SIZE_256,
    OT_LUT_CELL_SIZE_BUTT
} ot_lut_cell_size;

【成员】

成员名称

描述

OT_LUT_CELL_SIZE_16

单元格大小为16像素。

OT_LUT_CELL_SIZE_32

单元格大小为32像素。

OT_LUT_CELL_SIZE_64

单元格大小为64像素。

OT_LUT_CELL_SIZE_128

单元格大小为128像素。

OT_LUT_CELL_SIZE_256

单元格大小为256像素。

【注意事项】

无。

【相关数据类型及接口】

ot_gdc_param

【说明】

定义gdc属性。

【定义】

typedef struct {
    ot_size          in_size;   /* gdc input size, default: grp_attr.max_width, grp_attr.max_height */
    ot_lut_cell_size cell_size; /* gdc function cell size, default:OT_LUT_CELL_SIZE_16 */
} ot_gdc_param;

【成员】

成员名称

描述

in_size

视频处理子系统中GDC输入图像大小。宽高的范围是W[120,8192],H[88,8192]。

默认为视频处理子系统组的最大图像宽高,配置几何畸变参数前需先配置实际输入图像宽高。

cell_size

GDC默认单元格大小。

【注意事项】

无。

【相关数据类型及接口】

  • ss_mpi_vpss_set_grp_gdc_param
  • ss_mpi_vpss_get_grp_gdc_param

ot_lut

【说明】

定义LUT查找表导入模式。

【定义】

typedef struct {
    ot_size          in_size;       /* lut in size */
    ot_size          out_size;      /* lut out size */
    ot_lut_cell_size cell_size;     /* lut cell size */
    td_phys_addr_t   lut_phys_addr; /* phys addr of lut */
    td_u32           lut_len;       /* length of lut */
} ot_lut;

【成员】

成员名称

描述

in_size

输入图像宽高。

out_size

输出图像宽高。

cell_size

单元格大小。

lut_phys_addr

lut查找表有效数据存放物理地址。表格每一行数据需按照stride排列,可按照ss_gdc_get_lut_buf_stride根据图像输出宽与单元格大小计算。

lut_len

lut_phys_addr中存放lut查找表格数据大小。

【注意事项】

无。

【相关数据类型及接口】

ot_lut_attr

ot_lut_mode

【说明】

定义LUT查找表导入模式。

【定义】

typedef enum {
    OT_LUT_CONNECT_MODE,
    OT_LUT_FUSION_MODE,
    OT_LUT_MODE_BUTT
} ot_lut_mode;

【成员】

成员名称

描述

OT_LUT_CONNECT_MODE

两张表格为串联模式。

OT_LUT_FUSION_MODE

两张表格为融合模式。

【注意事项】

无。

【相关数据类型及接口】

ot_lut_attr

ot_lut_attr

【说明】

定义LUT查找表参数配置。

【定义】

typedef struct {
    td_bool     pre_lut_en;  /* RW; Range [0,1]; Whether or not the pre lut is enable */
    ot_lut      pre_lut;     /* RW; pre lut */
    td_bool     post_lut_en; /* RW; Range [0,1]; Whether or not the post lut is enable */
    ot_lut      post_lut;    /* RW; post lut */
    ot_lut_mode lut_mode;    /* RW; lut mode */
    td_u32      ratio;       /* RW; range: [0, 32768]; fusion ratio of two lut */
} ot_lut_attr;

【成员】

成员名称

描述

pre_lut_en

是否导入前表开关。

不支持只开前表。

pre_lut

前表配置参数。

post_lut_en

是否导入后表开关。

post_lut

后表配置参数。

lut_mode

前表与后表导入模式。在融合模式下,前表与后表导入,且输入输出分辨率、单元格大小需一致。

ratio

两张表格的融合比,仅融合模式下生效。

【注意事项】

无。

【相关数据类型及接口】

  • ss_mpi_vpss_set_grp_lut
  • ss_mpi_vpss_get_grp_lut
  • ss_mpi_gdc_add_lut_task

ot_blend_param

【说明】

融合拼接融合区域属性。

【定义】

typedef struct {
    td_u32  blend_position; /* RW; blend position */
    td_u32  blend_range;  /* RW; blend range */
} ot_blend_param;

【成员】

成员名称

描述

blend_position

融合区域坐标,融合范围的起始点,取值范围在融合区域之内。

blend_range

融合区域大小,最大值为融合区域最大值。blend_position和blend_range之和不大于overlap(融合区域),融合区域最大值为512。

【注意事项】

无。

【相关数据类型及接口】

ot_stitch_blend_param

ot_stitch_blend_param

【说明】

融合拼接属性。

【定义】

typedef struct {
    td_u32  buf_num; /* RW; Range [0, 5]; buffer number of blend area */
    ot_blend_param blend_param[OT_GDC_MAX_STITCH_NUM - 1]; /* RW; param of stitch blend */
} ot_stitch_blend_param;

【成员】

成员名称

描述

buf_num

融合使用buf个数。 硬拼时可以设置为0,融合拼接时必须大于0。不支持动态修改。

blend_param

融合区域属性。

【注意事项】

无。

【相关数据类型及接口】

  • ss_mpi_vpss_set_grp_stitch_blend_param
  • ss_mpi_vpss_get_grp_stitch_blend_param

ot_stitch_mode

【说明】

定义拼接模式。

【定义】

typedef enum {
    OT_STITCH_BLEND,
    OT_STITCH_NOBLEND_VER,
    OT_STITCH_NOBLEND_HOR,
    OT_STITCH_NOBLEND_QR,
    OT_STITCH_BUTT
} ot_stitch_mode;

【成员】

成员名称

描述

OT_STITCH_BLEND

融合拼接模式。

OT_STITCH_NOBLEND_VER

垂直硬拼模式。

OT_STITCH_NOBLEND_HOR

水平硬拼模式。

OT_STITCH_NOBLEND_QR

田字形硬拼模式。

【注意事项】

无。

【相关数据类型及接口】

ot_stitch_attr

ot_stitch_luma_sync_param

【说明】

拼接亮度同步属性。

【定义】

typedef struct {
    td_s32 isp_pipe[OT_GDC_MAX_STITCH_NUM]; /* W; isp pipe of bind stitch in pipe */
    td_u32 milli_sec; /* W; Range [100, 10000]; sync time interval, millisecond */
    td_u8 smooth_strength; /* W; Range [1, 16]; vertical filter window size */
    td_u8 shading_adjust_threshold; /* W; Range [0, 255]; shading gain range */
} ot_stitch_luma_sync_param;

【成员】

成员名称

描述

isp_pipe

拼接pipe输入对应的isp_pipe数组。每个isp_pipe的取值范围: [0, OT_ISP_MAX_PIPE_NUM)。

milli_sec

拼接亮度同步时间间隔(ms)。取值范围: [100, 10000]。

smooth_strength

垂直滤波窗口大小。取值范围: [1, 16]。该值越大,亮度校正表垂直滤波窗口越大,过渡越平滑。但是该规律无法适用于原始场景中,拼缝垂直方向不同位置亮度分布不均匀的情况。

shading_adjust_threshold

增益可调节限制范围。取值范围: [0, 255]。值越大增益上下限可调幅度越大,可校正亮度差异过大的区域,但校正表越不均匀,此时需相应调大smooth_strength以避免亮暗条纹现象。

【注意事项】

  • 如果配置了sys绑定,isp_pipe参数不会被使用。
  • 如果未配置sys绑定,将会使用isp_pipe参数调整对应isp_pipe图像,请保证与拼接输入pipe一一对应。
  • 拼接同步模式OT_VI_STITCH_CFG_MODE_SYNC下,不支持亮度一致性功能。
  • 亮度一致性功能只支持lut查找表矫正的拼接模式。
  • 开启亮度一致性功能时,会强制使能Mesh Shading算法。
  • 开启亮度一致性功能后,Mesh Shading相关参数会内部配置,不支持手动修改。
  • 调节亮度一致性的参数时,需要先终止数据流,改变参数之后,再开启数据流。
  • 拼接亮度同步时间间隔配置较短时CPU占用率比较高,当前建议一般场景同步时间配置为1000ms,此时拼缝处画面大幅变化时矫正所需时间可能会较长。

【相关数据类型及接口】

ss_mpi_vpss_start_grp_stitch_luma_sync

ot_stitch_correction_mode

【说明】

定义拼接矫正模式。

【定义】

typedef enum {
    OT_STITCH_CORRECTION_CYLINDRICAL,
    OT_STITCH_CORRECTION_LUT,
    OT_STITCH_CORRECTION_BUTT
} ot_stitch_correction_mode;

【成员】

成员名称

描述

OT_STITCH_CORRECTION_CYLINDRICAL

柱面投影矫正模式。

OT_STITCH_CORRECTION_LUT

lut查找表矫正模式。

【注意事项】

无。

【相关数据类型及接口】

ot_stitch_correction_attr

ot_cylindrical_attr

【说明】

定义拼接柱面投影矫正参数。

【定义】

typedef struct {
    td_bool pmf_enable; /* RW; Range [0, 1]; Whether or not pmf is enable */
    td_s64  pmf_coef[OT_GDC_COMMON_COEF_NUM]; /* RW; PMF coefficient of gdc */
    td_s32  center_x_offset; /* RW; offset of x */
    td_s32  center_y_offset; /* RW; offset of y */
    td_u32  ratio;           /* RW: ratio of cylindrical projection */
    ot_size dst_size;        /* RW: destination size of stitch pipe */
} ot_cylindrical_attr;

【成员】

成员名称

描述

pmf_enable

pmf 功能使能开关。

pmf_coef

pmf矫正系数。范围没有限制。

center_x_offset

中心点x方向偏移。范围 [-511, 511]

center_y_offset

中心点y方向偏移。范围 [-511, 511]

ratio

柱面投影矫正比例。范围 [0, 500] 拼接使用桶形矫正

dst_size

拼接矫正输出图像大小,为多路实际拼接输出大小,涉及overlap。

  • Hi3516DV500支持不超过1080p
  • Hi3519DV500无限制

【注意事项】

Hi3519DV500支持此接口。

【相关数据类型及接口】

ot_stitch_correction_attr

ot_stitch_correction_attr

【说明】

定义拼接矫正模式参数。

【定义】

typedef union {
    /* attribute of cylindrical mode. AUTO:ot_stitch_correction_mode: OT_STITCH_CORRECTION_CYLINDRICAL; */
    ot_cylindrical_attr cylindrical_attr;
    /* attribute of lut mode. AUTO:ot_stitch_correction_mode: OT_STITCH_CORRECTION_LUT; */
    ot_lut              lut;
} ot_stitch_correction_attr;

【成员】

成员名称

描述

cylindrical_attr

柱面投影矫正参数。

lut

lut查找表矫正参数。

【注意事项】

无。

【相关数据类型及接口】

ot_stitch_attr

ot_stitch_attr

【说明】

定义拼接矫正参数。

【定义】

typedef struct {
    td_bool         enable; /* RW; Range [0, 1]; Whether or not stitch is enable */
    td_u32          pipe_num; /* RW; Range [2, 4]; stitch pipe number */
    td_bool         sync_pipe_en; /* RW; Range [0, 1]; sync pipe with pts or not */
    ot_stitch_mode  stitch_mode; /* RW; stitch mode: blend/noblend_ver/noblend_hor/noblend_qr
 */
    ot_point        overlap_point[OT_GDC_MAX_STITCH_NUM][2]; /* RW; start and end position of overlap area */
    ot_stitch_correction_mode correction_mode; /* RW; correction mode: cylindrical/lut */
    ot_stitch_correction_attr correction_attr[OT_GDC_MAX_STITCH_NUM]; /* RW; attribute of correction */
} ot_stitch_attr;

【成员】

成员名称

描述

enable

拼接功能使能开关。

pipe_num

拼接路数。参数范围:[2, 4]

sync_pipe_en

多路拼接pts同步使能开关。

stitch_mode

拼接模式。

overlap_point

融合拼接时拼接区域点范围。不超过输入矫正图片宽度区域。参考【注意事项】

correction_mode

拼接矫正模式。

correction_attr

拼接矫正参数。

【注意事项】

  • 使能拼接后,拼接路数、拼接区域点范围不支持动态修改。
  • 融合拼接时第一个拼接区域的点需为0点,最后一个拼接区域的点需为图像宽。
  • 融合拼接时overlap_point点y值需要设置为0,overlap_point[0][1].x表示拼接融合区域的位置,是相对于每一路的相对坐标,例如对一路宽为1920的图像,设置overlap_point[1][0].x=20,overlap_point[1][1].x=1890,表示其左端融合区域宽为20-0=20像素,右端融合区域宽为1920-1890=30像素。
  • 两路的输入图像的重叠区域需要设置一样大,例如overlap_point[1][0].x=20,overlap_point[0][1].x=1920 -20,左重叠区域大小 left overlap=1920-overlap_point[0][1].x=20,右重叠区域大小right overlap=overlap_point[1][0].x=20。
  • 每一个拼接块内的拼接区域的图像高需相等。
  • 融合拼接时,每个融合拼接块宽高需相等。
  • overlap_point值与vgs做融合任务时输入宽的范围有关,融合区域不能超出vgs输入限制。

【相关数据类型及接口】

  • ss_mpi_vpss_set_grp_stitch
  • ss_mpi_vpss_get_grp_stitch

ot_fmu_mode

【说明】

定义FMU模式枚举。

【定义】

typedef enum {
    OT_FMU_MODE_OFF,
    OT_FMU_MODE_WRAP,
    OT_FMU_MODE_DIRECT,
    OT_FMU_MODE_BUTT
} ot_fmu_mode;

【成员】

成员名称

描述

OT_FMU_MODE_OFF

FMU OFF模式,即常规离线模式。

OT_FMU_MODE_WRAP

FMU卷绕模式,使用DRAM空间进行卷绕。

OT_FMU_MODE_DIRECT

FMU直通模式,使用SRAM空间进行卷绕。

【注意事项】

无

【相关数据类型及接口】

  • ss_mpi_vi_set_chn_fmu_mode
  • ss_mpi_vi_get_chn_fmu_mode
  • ss_mpi_vpss_set_chn_fmu_mode
  • ss_mpi_vpss_get_chn_fmu_mode

ot_nr_param_auto_v1

【说明】

定义Hi3519DV500的3DNR自动模式参数。

【定义】

typedef struct {
    td_u32 param_num;
    td_u32 ATTRIBUTE *iso;
    ot_nr_v1 ATTRIBUTE *nr_param;
} ot_nr_param_auto_v1;

【成员】

成员名称

描述

param_num

3DNR自动模式配置标准参数个数。

取值范围:[1, 16]

iso

3DNR自动模式ISO数组指针。

ISO值的取值范围:[100, 3276800],且数组中的ISO值是递增的。

设置时,表示存放iso参数的内存指针。

获取时,表示接收iso参数的内存指针,该内存大小应该大于等于sizeof(td_u32)*param_num(注意:这里param_num表示设置时的param_num)。

nr_param

NR自动模式标准参数数组指针。ot_nr_v1的定义见《Hi3519DV500/Hi3516DV500 3DNR参数配置说明》。

设置时,表示存放nr_param参数的内存指针。

获取时,表示接收nr_param参数的内存指针,该内存大小应该大于等于sizeof(ot_nr_v1)*param_num(注意:这里param_num表示设置时的param_num)。

【注意事项】

  • 此结构体用于Hi3519DV500。
  • iso和nr_param指向的数组成员个数都必须与param_num一致。
  • iso与nr_param存在一一对应关系。param_num、ISO值与nr_param参数为动态参数,用户可根据需求自由配置,其中最大组合数目不得大于16,ISO值必须从小到大配置,范围为[100, 3276800]。
  • 如图像实际ISO值超出用户配置的ISO边界值,按边界值计算。
  • 使用自动模式时,不管设置还是获取,用户必须根据3DNR自动模式配置标准参数的个数申请相应大小的内存。
  • 业务运行过程中,如果VPSS获取的ISO值处于某一区间内,实际配置的3DNR参数为该区间左值对应的标准参数与右值对应的标准参数进行差值运算所得。

【相关数据类型及接口】

ot_nr_norm_param_v1

ot_nr_param_manual_v1

【说明】

定义Hi3519DV500的3DNR手动模式参数。

【定义】

typedef struct {
    ot_nr_v1 nr_param;
} ot_nr_param_manual_v1;

【成员】

成员名称

描述

nr_param

3DNR接口的标准参数。ot_nr_v1的定义见《Hi3519DV500/Hi3516DV500 3DNR参数配置说明》。

【注意事项】

此结构体用于Hi3519DV500。

【相关数据类型及接口】

ot_nr_norm_param_v1

ot_nr_norm_param_v1

【说明】

定义Hi3519DV500的3DNR标准参数。

【定义】

typedef struct {
    ot_op_mode op_mode;
    ot_nr_param_manual_v1 nr_manual;
    ot_nr_param_auto_v1 nr_auto;
} ot_nr_norm_param_v1;

【成员】

成员名称

描述

op_mode

3DNR选择模式。

nr_manual

3DNR手动模式的标准参数。

nr_auto

3DNR自动模式的标准参数。

【注意事项】

此结构体用于Hi3519DV500。

【相关数据类型及接口】

无

ot_nr_param_auto_v2

【说明】

定义Hi3516CV610/Hi3516CV608的3DNR自动模式参数。

【定义】

typedef struct {
    td_u32 param_num;
    td_u32 ATTRIBUTE *iso;
    ot_nr_v2 ATTRIBUTE *nr_param;
} ot_nr_param_auto_v2;

【成员】

成员名称

描述

param_num

3DNR自动模式配置标准参数个数。

取值范围:[1, 16]

iso

3DNR自动模式ISO数组指针。

ISO值的取值范围:[100, 3276800],且数组中的ISO值是递增的。

设置时,表示存放iso参数的内存指针。

获取时,表示接收iso参数的内存指针,该内存大小应该大于等于sizeof(td_u32)*param_num(注意:这里param_num表示设置时的param_num)。

nr_param

NR自动模式标准参数数组指针。ot_nr_v2的定义见《Hi3516CV610╱Hi3516CV608 3DNR参数配置说明》。

设置时,表示存放nr_param参数的内存指针。

获取时,表示接收nr_param参数的内存指针,该内存大小应该大于等于sizeof(ot_nr_v2)*param_num(注意:这里param_num表示设置时的param_num)。

【注意事项】

  • 此结构体用于Hi3516CV610/Hi3516CV608。
  • iso和nr_param指向的数组成员个数都必须与param_num一致。
  • iso与nr_param存在一一对应关系。param_num、ISO值与nr_param参数为动态参数,用户可根据需求自由配置,其中最大组合数目不得大于16,ISO值必须从小到大配置,范围为[100, 3276800]。
  • 如图像实际ISO值超出用户配置的ISO边界值,按边界值计算。
  • 使用自动模式时,不管设置还是获取,用户必须根据3DNR自动模式配置标准参数的个数申请相应大小的内存。
  • 业务运行过程中,如果VPSS获取的ISO值处于某一区间内,实际配置的3DNR参数为该区间左值对应的标准参数与右值对应的标准参数进行差值运算所得。

【相关数据类型及接口】

ot_nr_norm_param_v2

ot_nr_param_manual_v2

【说明】

定义Hi3516CV610/Hi3516CV608 的3DNR手动模式参数。

【定义】

typedef struct {
    ot_nr_v2 nr_param;
} ot_nr_param_manual_v2;

【成员】

成员名称

描述

nr_param

3DNR接口的标准参数。ot_nr_v2的定义见《Hi3516CV610╱Hi3516CV608 3DNR参数配置说明》。

【注意事项】

此结构体用于Hi3516CV610/Hi3516CV608 。

【相关数据类型及接口】

ot_nr_norm_param_v2

ot_nr_norm_param_v2

【说明】

定义Hi3516CV610/Hi3516CV608的3DNR标准参数。

【定义】

typedef struct {
    ot_op_mode op_mode;
    ot_nr_param_manual_v2 nr_manual;
    ot_nr_param_auto_v2 nr_auto;
} ot_nr_norm_param_v2;

【成员】

成员名称

描述

op_mode

3DNR选择模式。

nr_manual

3DNR手动模式的标准参数。

nr_auto

3DNR自动模式的标准参数。

【注意事项】

此结构体用于Hi3516CV610/Hi3516CV608。

【相关数据类型及接口】

无

ot_nr_version

【说明】

3DNR版本枚举。

【定义】

typedef enum {
    OT_NR_V1 = 1,
    OT_NR_V2 = 2,
    OT_NR_BUTT
} ot_nr_version;

【成员】

对于3DNR接口:

成员名称

描述

OT_NR_V1

用于Hi3519DV500的3DNR标准参数。

OT_NR_V2

用于Hi3516CV610/Hi3516CV608的3DNR标准参数。

【注意事项】

无

【相关数据类型及接口】

无

ot_3dnr_param

【说明】

定义3DNR标准参数属性。

【定义】

typedef struct {
    ot_nr_version        nr_version;
    union {
         ot_nr_norm_param_v1 nr_norm_param_v1;
         ot_nr_norm_param_v2 nr_norm_param_v2;
    };
} ot_3dnr_param;

【成员】

成员名称

描述

nr_version

3DNR接口版本枚举。

nr_norm_param_v1

Hi3519DV500的3DNR标准参数。

nr_norm_param_v2

Hi3516CV610/Hi3516CV608的3DNR标准参数。

【注意事项】

无。

【相关数据类型及接口】

  • ss_mpi_vpss_set_grp_3dnr_param
  • ss_mpi_vi_set_pipe_3dnr_param
  • ss_mpi_vpss_get_grp_3dnr_param
  • ss_mpi_vi_get_pipe_3dnr_param

ot_nr_type

【说明】

定义3DNR类型枚举。

【定义】

typedef enum {
    OT_NR_TYPE_VIDEO_NORM = 0,
    OT_NR_TYPE_SNAP_NORM,
    OT_NR_TYPE_VIDEO_SPATIAL,
    OT_NR_TYPE_VIDEO_ENHANCED,
    OT_NR_TYPE_BUTT
} ot_nr_type;

【成员】

成员名称

描述

OT_NR_TYPE_VIDEO_NORM

视频3DNR类型。

OT_NR_TYPE_SNAP_NORM

抓拍3DNR类型。

OT_NR_TYPE_VIDEO_SPATIAL

视频纯空域3DNR类型。

OT_NR_TYPE_VIDEO_ENHANCED

视频3DNR增强类型。

【注意事项】

  • Hi3519DV500仅支持OT_NR_TYPE_VIDEO_NORM、OT_NR_TYPE_SNAP_NORM和OT_NR_TYPE_VIDEO_SPATIAL。
  • Hi3516CV610/Hi3516CV608仅支持OT_NR_TYPE_VIDEO_NORM和OT_NR_TYPE_VIDEO_SPATIAL。
  • 用户送帧处理场景,如果不是持续送画面内容连续的YUV,建议使用3DNR OT_NR_TYPE_VIDEO_SPATIAL模式。此模式仅做空域处理,不分配参考帧内存。
  • 抓拍场景,建议使用OT_NR_TYPE_SNAP_NORM模式。此模式仅做空域处理,不分配参考帧内存,仅处理ss_mpi_snap_trigger_pipe触发的抓拍帧,抓拍相关描述参考《抓拍 使用指南》。
  • VI在线模式下且3DNR在VI时,或VI_VPSS全在线模式下且3DNR在VPSS时,使用OT_NR_TYPE_SNAP_NORM模式,抓拍特殊处理不生效,会正常写出所有帧,建议该模式在离线下使用。

【相关数据类型及接口】

ot_3dnr_attr

ot_nr_motion_mode

【说明】

定义3DNR运动矢量模式。

【定义】

typedef enum {
    OT_NR_MOTION_MODE_NORM = 0,              /* Normal. */
    OT_NR_MOTION_MODE_COMPENSATION,          /* Motion compensate. */
    OT_NR_MOTION_MODE_BUTT
} ot_nr_motion_mode;

【成员】

成员名称

描述

OT_NR_MOTION_MODE_NORM

普通模式。

OT_NR_MOTION_MODE_COMPENSATION

带运动补偿的运动矢量模式。

【注意事项】

Hi3519DV500/Hi3516CV610/Hi3516CV608只支持OT_NR_MOTION_MODE_NORM类型。

【相关数据类型及接口】

ot_3dnr_attr

ot_3dnr_attr

【说明】

定义3DNR属性。

【定义】

typedef struct {
    td_bool                    enable;
    ot_nr_type   nr_type;        /* RW; 3DNR type. */
    ot_compress_mode  compress_mode;  /* RW; Reference frame compression mode. */
    ot_nr_motion_mode nr_motion_mode; /* RW; 3DNR motion compensate mode. */
    td_u32 nr_motion_depth; /* RW; 3DNR motion buffer size. */
} ot_3dnr_attr;

【成员】

成员名称

描述

enable

3DNR功能使能开关。

nr_type

3DNR类型。

compress_mode

参考帧压缩类型。

nr_motion_mode

3DNR运动矢量模式。

nr_motion_depth

3DNR运动信息缓存数量。

【注意事项】

  • 开3DNR时,压缩格式只支持帧压缩和非压缩,而且压缩方式不能动态改变。
  • 开3DNR时,不支持动态修改通道像素格式;通道出raw格式时,不支持开3DNR。
  • nr_type支持动态修改。
  • nr_motion_depth可以配置为0或[3,8],默认值为0,此时没有缓存池,无法获取运动信息。当配置为[3,8]时,预留2个缓存供逻辑读写使用,用户可以获取的缓存数量实际为[1,6]。
  • nr_motion_depth不支持动态修改。仅在3dnr切换为开启时才能修改,不支持在3dnr开启后修改。

【相关数据类型及接口】

  • ss_mpi_vpss_set_grp_3dnr_attr
  • ss_mpi_vi_set_pipe_3dnr_attr
  • ss_mpi_vpss_get_grp_3dnr_attr
  • ss_mpi_vi_get_pipe_3dnr_attr

ot_aiseg_point_delta

【说明】

定义点模式下的图像中某个智能分割多边形相邻点的坐标差值集合结构体。

【定义】

typedef struct {
    td_s16  delta_x;
    td_s16  delta_y;
} ot_aiseg_point_delta;

【成员】

成员名称

描述

delta_x

图像中某个智能分割多边形相邻点的横坐标差值,取值范围:[-255, 255]。

delta_y

图像中某个智能分割多边形相邻点的纵坐标差值,取值范围:[-255, 255]。

【注意事项】

  • 该数据结构仅Hi3511CV100支持。在多片互联传输场景,该数据结构将随单独的补丁包提供给主控芯片,以用于支持多片传输。主控芯片范围请参考《多片互联传输开发指南》。
  • delta_x和delta_y其中一个超出取值范围,VENC将丢弃该点数据,强制编码为delta_x=0和delta_y=0。

【相关数据类型及接口】

ot_aiseg_point

ot_aiseg_point

【说明】

定义点模式下的图像中某个智能分割多边形的点信息结构体。

【定义】

typedef struct {
    td_u8   prob;
    td_u8   point_num;
    td_u16  base_point_x;
    td_u16  base_point_y;
} ot_aiseg_point;

【成员】

成员名称

描述

prob

表示一个智能分割区域的类别概率值,值为0表示不生效,无概率值信息;其他值表示的概率值可由使用者自行定义,建议1表示概率值1%,100表示概率值100%,n表示概率值n%。

point_num

表示一个智能分割多边形的除基点外的点个数。

base_point_x

表示一个智能分割多边形的初始点的横坐标。

base_point_y

表示一个智能分割多边形的初始点的纵坐标。

【注意事项】

  • 1*ot_aiseg_point和 point_num *ot_aiseg_point_delta表示一个目标物体的分割点信息,在可变附属信息vb中连续存储。
  • 该数据结构仅Hi3511CV100支持。在多片互联传输场景,该数据结构将随单独的补丁包提供给主控芯片,以用于支持多片传输。主控芯片范围请参考《多片互联传输开发指南》。

【相关数据类型及接口】

ot_aiseg_point_category

【说明】

定义点模式下的图像中某个智能分割区域的类别信息结构体。

【定义】

typedef struct {
    td_u8  category;
    td_u8  aiseg_num;
} ot_aiseg_point_category;

【成员】

成员名称

描述

category

表示一个智能分割区域的类别信息。

aiseg_num

表示当前图像的某类智能分割目标的个数。

【注意事项】

  • 1*ot_aiseg_point_category和aiseg_num* 单个目标物体,表示某个类别的分割点信息,在可变附属信息vb中连续存储。
  • 单个目标物体的表示请参考ot_aiseg_point。
  • 该数据结构仅Hi3511CV100支持。在多片互联传输场景,该数据结构将随单独的补丁包提供给主控芯片,以用于支持多片传输。主控芯片范围请参考《多片互联传输开发指南》。

【相关数据类型及接口】

ot_aiseg_point_info

【说明】

定义点模式下的图像中语义分割点的信息结构体。

【定义】

typedef struct {
    td_u32   size;
    td_bool  prob_enable;
    td_u8    category_num;
} ot_aiseg_point_info;

【成员】

成员名称

描述

size

表示语义分割点信息大小,包括此size变量的大小。不支持将该值设置为0。

prob_enable

表示当前图像的智能分割信息是否包含概率信息。

category_num

表示当前图像的智能分割目标类别个数,取值范围:[0, 31]。

【注意事项】

  • 1*ot_aiseg_point_info和category_num* 某个类别分割点信息,表示当前图像的所有分割点信息,在可变附属信息vb中连续存储。
  • 某个类别分割点信息表示请参考ot_aiseg_point_category。
  • 该数据结构仅Hi3511CV100支持。在多片互联传输场景,该数据结构将随单独的补丁包提供给主控芯片,以用于支持多片传输。主控芯片范围请参考《多片互联传输开发指南》。
  • 若用户传输的category_num大于31,VENC将仅取前31个category。

【相关数据类型及接口】

ot_aiseg_point_category

ot_aiseg_rect

【说明】

定义框模式下的图像中某个智能分割四边形的坐标信息结构体。

【定义】

typedef struct {
    td_u8   prob;
    td_u16  left;
    td_u16  top;
    td_u16  width;
    td_u16  height;
} ot_aiseg_rect;

【成员】

成员名称

描述

prob

表示一个智能分割四边形的类别概率值,值为0表示不生效,无概率值信息;其他值表示的概率值可由使用者自行定义,建议1表示概率值1%,100表示概率值100%,n表示概率值n%。

left

表示智能分割四边形的左上角横坐标值。

top

表示智能分割四边形的左上角纵坐标值。

width

表示智能分割四边形的宽。

height

表示智能分割四边形的高。

【注意事项】

该数据结构仅Hi3511CV100支持。在多片互联传输场景,该数据结构将随单独的补丁包提供给主控芯片,以用于支持多片传输。主控芯片范围请参考《多片互联传输开发指南》。

【相关数据类型及接口】

ot_aiseg_rect_category

ot_aiseg_rect_category

【说明】

定义框模式下的图像中某个智能分割区域的类别信息结构体。

【定义】

typedef struct {
    td_u8  category;
    td_u8  aiseg_num;
} ot_aiseg_rect_category;

【成员】

成员名称

描述

category

表示一个智能分割区域的类别信息。

aiseg_num

表示当前图像的某类智能分割目标的个数。

【注意事项】

  • 1*ot_aiseg_rect_category和aiseg_num* ot_aiseg_rect,表示某类别的框信息,在可变附属信息vb中连续存储。
  • 该数据结构仅Hi3511CV100支持。在多片互联传输场景,该数据结构将随单独的补丁包提供给主控芯片,以用于支持多片传输。主控芯片范围请参考《多片互联传输开发指南》。

【相关数据类型及接口】

ot_aiseg_rect_info

【说明】

定义框模式下的图像中语义分割框的信息结构体。

【定义】

typedef struct {
    td_u32   size;
    td_bool  prob_enable;
    td_u8    category_num;
} ot_aiseg_rect_info;

【成员】

成员名称

描述

size

表示语义分割框的信息大小,包括此size变量的大小。不支持将该值设置为0。

prob_enable

表示当前图像的智能分割信息是否包含概率信息。

category_num

表示当前图像的智能分割目标类别个数,取值范围:[0, 31]。

【注意事项】

  • ot_aiseg_rect_info和category_num 某类别的框信息,表示当前图像所有类别的框信息,在可变附属信息vb中连续存储。
  • 某类别的框信息表示请参考ot_aiseg_rect_category。
  • 该数据结构仅Hi3511CV100支持。在多片互联传输场景,该数据结构将随单独的补丁包提供给主控芯片,以用于支持多片传输。主控芯片范围请参考《多片互联传输开发指南》。
  • 若用户传输的category_num大于31,VENC将仅取前31个category。

【相关数据类型及接口】

ot_aiseg_rect_category

ot_aiseg_map_info

【说明】

定义图模式下的图像中语义分割图的信息结构体。

【定义】

typedef struct {
    td_u16  map_width;
    td_u16  map_height;
    td_u8  map_class_num;
    td_u8  map_label[OT_AISEG_MAX_CLASS_NUM];
    td_u8  map_value[OT_AISEG_MAX_CLASS_NUM];
} ot_aiseg_map_info;

【成员】

成员名称

描述

map_width

表示语义分割图的宽度。

map_height

表示语义分割图的高度。

map_class_num

表示当前图像的智能分割目标类别个数。

map_label[OT_AISEG_MAX_CLASS_NUM]

表示当前智能分割图的第i类的标签。

map_value[OT_AISEG_MAX_CLASS_NUM]

表示当前智能分割图的第i类的标签map_label[i]的映射值。

【注意事项】

该数据结构仅Hi3511CV100支持。在多片互联传输场景,该数据结构将随单独的补丁包提供给主控芯片,以用于支持多片传输。主控芯片范围请参考《多片互联传输开发指南》。

【相关数据类型及接口】

无

OT_AISEG_MAX_CLASS_NUM

【说明】

智能分割图的像素最大类别个数。

【定义】

#define OT_AISEG_MAX_CLASS_NUM              255

【成员】

无

【注意事项】

该宏定义仅Hi3511CV100支持。在多片互联传输场景,该数据结构将随单独的补丁包提供给主控芯片,以用于支持多片传输。主控芯片范围请参考《多片互联传输开发指南》。

【相关数据类型及接口】

ot_aiseg_map_info

OT_GDC_COMMON_COEF_NUM

【说明】

矫正系数的参数个数。

【定义】

#define OT_GDC_COMMON_COEF_NUM                 9

【成员】

无

【注意事项】

无

【相关数据类型及接口】

OT_GDC_MAX_STITCH_NUM

【说明】

最大拼接路数。

【定义】

#define OT_GDC_MAX_STITCH_NUM                 4

【成员】

无

【注意事项】

无

【相关数据类型及接口】

OT_NR_S_IDX_LEN

【说明】

空域NR强度数组长度。

【定义】

#define OT_NR_S_IDX_LEN                 17

【成员】

无

【注意事项】

无

【相关数据类型及接口】

ot_3dnr_param

OT_FMU_MIN_PAGE_NUM

【说明】

最小卷绕空间页表个数。

【定义】

#define OT_FMU_MIN_PAGE_NUM                 4

【成员】

无

【注意事项】

无

【相关数据类型及接口】

ot_fmu_attr

OT_FMU_MAX_Y_PAGE_NUM

【说明】

最大亮度卷绕空间页表个数。

【定义】

#define OT_FMU_MAX_Y_PAGE_NUM      512

【成员】

无

【注意事项】

无

【相关数据类型及接口】

ot_fmu_attr

OT_FMU_MAX_C_PAGE_NUM

【说明】

最大色度卷绕空间页表个数。

【定义】

#define OT_FMU_MAX_C_PAGE_NUM      256

【成员】

无

【注意事项】

无

【相关数据类型及接口】

ot_fmu_attr

ot_zoom_attr

【说明】

定义vpss grp 裁剪放大属性。

【定义】

typedef struct {
    td_bool enable; /* RW; Range: [0, 1]; Zoom enable. */
    ot_coord mode;  /* RW; Coordinate mode of zoom. */
    ot_rect rect;   /* RW; Zoom rectangular. */
} ot_zoom_attr;

【成员】

成员名称

描述

enable

裁剪放大功能使能开关。

mode

裁剪种类,相对或绝对裁剪

rect

裁剪的位置信息

【注意事项】

只支持绝对或相对裁剪

【相关数据类型及接口】

  • ss_mpi_vpss_set_grp_zoom_in_window
  • ss_mpi_vpss_get_grp_zoom_in_window

系统控制数据类型

系统控制相关数据类型定义如下:

OT_MAX_BIND_DST_NUM

【说明】

定义绑定目标的最大个数。

【定义】

Hi3519DV500:

#define OT_MAX_BIND_DST_NUM         6

Hi3516CV610/Hi3516CV608/Hi3511CV100:

#define OT_MAX_BIND_DST_NUM         4

【注意事项】

无。

【相关数据类型及接口】

无。

OT_MAX_VERSION_NAME_LEN

【说明】

定义版本名称的最大长度。

【定义】

#define OT_MAX_VERSION_NAME_LEN    96

【注意事项】

无。

【相关数据类型及接口】

无。

OT_MAX_MOD_NAME_LEN

【说明】

定义模块名称的最大长度。

【定义】

#define OT_MAX_MOD_NAME_LEN    16

【注意事项】

无。

【相关数据类型及接口】

无。

OT_UNIQUE_ID_NUM

【说明】

定义unique ID长度。

【定义】

#define OT_UNIQUE_ID_NUM     6

【注意事项】

无。

【相关数据类型及接口】

无。

ot_mpp_sys_cfg

【说明】

定义MPP系统控制属性结构体。

【定义】

typedef struct {
    td_u32 align;
} ot_mpp_sys_cfg;

【成员】

成员名称

描述

align

整个系统中使用图像的stride字节对齐数,保留功能,暂未生效。

取值范围:[0, 1024],其中0为自动模式,即使用系统默认的stride对齐。

静态属性。

【注意事项】

  • align 为0时stride对齐使用自动模式,对齐要求跟随系统。
  • align 为非0时使用指定的stride对齐。
  • 当align 小于芯片要求的stride对齐时,系统分配buffer和计算stride还是以芯片要求stride对齐为准。
  • 当align不等于芯片要求的stride对齐倍数时,系统分配buffer和计算stride向上对齐到芯片要求stride对齐的倍数。

例:align设置为48,芯片要求32对齐时,系统分配buffer和计算stride时使用64对齐。

【相关数据类型及接口】

ss_mpi_sys_set_cfg

ot_mpp_chn

【说明】

定义模块设备通道结构体。

【定义】

typedef struct {
    ot_mod_id    mod_id;
    td_s32      dev_id;
    td_s32      chn_id;
} ot_mpp_chn;

【成员】

成员名称

描述

mod_id

模块号。

dev_id

设备号。

chn_id

通道号。

【注意事项】

无。

【相关数据类型及接口】

ot_mpp_bind_dst

【说明】

定义MPP系统绑定目的信息结构体。

【定义】

typedef struct {
    td_u32 num;
    ot_mpp_chn mpp_chn[OT_MAX_BIND_DST_NUM];
} ot_mpp_bind_dst;

【成员】

成员名称

描述

num

通过SYS绑定的目的数目。

mpp_chn

通过SYS绑定的目的模块通道信息结构体。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_sys_get_bind_by_src

ot_mpp_version

【说明】

定义MPP版本描述结构体。

【定义】

typedef struct {
    td_char version[OT_MAX_VERSION_NAME_LEN];
} ot_mpp_version;

【成员】

成员名称

描述

version

版本描述字符串。

比如“OT_VERSION=V1.0.4.0”

【注意事项】

无

【相关数据类型及接口】

ss_mpi_sys_get_version

ot_sys_virt_mem_info

【说明】

定义虚拟内存信息结构体。

【定义】

typedef struct {
    td_phys_addr_t phys_addr;
    td_bool is_cached;
} ot_sys_virt_mem_info;

【成员】

成员名称

描述

phys_addr

虚拟地址对应物理地址。

is_cached

是否为cached映射。

【注意事项】

无

【相关数据类型及接口】

ss_mpi_sys_get_virt_mem_info

ot_sys_mem_info

【说明】

定义mmz buffer的内存描述信息结构体。

【定义】

typedef struct {
    td_phys_addr_t phys_addr;
    td_u64 offset;
    td_void *mem_handle;
} ot_sys_mem_info;

【成员】

成员名称

描述

phys_addr

mmz buffer的起始物理地址。

offset

当前查询的地址基于起始phys_addr的偏移。

mem_handle

mmz buffer对应的handle。

【注意事项】

无

【相关数据类型及接口】

ot_sys_mmz_status

【说明】

定义MMZ相关状态的结构体。

【定义】

typedef struct {
    td_u32 mmz_total;
    td_u32 mmz_free;
} ot_sys_mmz_status;

【成员】

成员名称

描述

mmz_total

mmz总内存,单位KB。

mmz_free

mmz剩余可用内存,单位KB。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_sys_query_mmz_status

ot_unique_id

【说明】

定义unique ID结构体。

【定义】

typedef struct{
    td_u32 id[OT_UNIQUE_ID_NUM];
} ot_unique_id;

【成员】

成员名称

描述

id

unique ID,共OT_UNIQUE_ID_NUM个word长度。

【注意事项】

无

【相关数据类型及接口】

ss_mpi_sys_get_unique_id

ot_scale_range_type

【说明】

定义VPSS和VGS的缩放比例范围的枚举类型。

【定义】

typedef enum  {
    OT_SCALE_RANGE_0 = 0, /* scale range <   8/64 */
    OT_SCALE_RANGE_1, /* scale range >=  8/64 */
    OT_SCALE_RANGE_2, /* scale range >= 10/64 */
    OT_SCALE_RANGE_3, /* scale range >= 15/64 */
    OT_SCALE_RANGE_4, /* scale range >= 19/64 */
    OT_SCALE_RANGE_5, /* scale range >= 24/64 */
    OT_SCALE_RANGE_6, /* scale range >= 29/64 */
    OT_SCALE_RANGE_7, /* scale range >= 33/64 */
    OT_SCALE_RANGE_8, /* scale range >= 35/64 */
    OT_SCALE_RANGE_9, /* scale range >= 38/64 */
    OT_SCALE_RANGE_10, /* scale range >= 42/64 */
    OT_SCALE_RANGE_11, /* scale range >= 45/64 */
    OT_SCALE_RANGE_12, /* scale range >= 48/64 */
    OT_SCALE_RANGE_13, /* scale range >= 51/64 */
    OT_SCALE_RANGE_14, /* scale range >= 53/64 */
    OT_SCALE_RANGE_15, /* scale range >= 55/64 */
    OT_SCALE_RANGE_16, /* scale range >= 57/64 */
    OT_SCALE_RANGE_17, /* scale range >= 60/64 */
    OT_SCALE_RANGE_18, /* scale range >  1     */
    OT_SCALE_RANGE_BUTT,
} ot_scale_range_type;

【成员】

无

【注意事项】

无

【相关数据类型及接口】

ot_coef_level

【说明】

定义VPSS和VGS缩放系数等级的枚举类型。

【定义】

typedef enum  {
    OT_COEF_LEVEL_0 = 0, /* coefficient level 0 */
    OT_COEF_LEVEL_1, /* coefficient level 1 */
    OT_COEF_LEVEL_2, /* coefficient level 2 */
    OT_COEF_LEVEL_3, /* coefficient level 3 */
    OT_COEF_LEVEL_4, /* coefficient level 4 */
    OT_COEF_LEVEL_5, /* coefficient level 5 */
    OT_COEF_LEVEL_6, /* coefficient level 6 */
    OT_COEF_LEVEL_7, /* coefficient level 7 */
    OT_COEF_LEVEL_8, /* coefficient level 8 */
    OT_COEF_LEVEL_9, /* coefficient level 9 */
    OT_COEF_LEVEL_10, /* coefficient level 10 */
    OT_COEF_LEVEL_11, /* coefficient level 11 */
    OT_COEF_LEVEL_12, /* coefficient level 12 */
    OT_COEF_LEVEL_13, /* coefficient level 13 */
    OT_COEF_LEVEL_14, /* coefficient level 14 */
    OT_COEF_LEVEL_15, /* coefficient level 15 */
    OT_COEF_LEVEL_16, /* coefficient level 16 */
    OT_COEF_LEVEL_17, /* coefficient level 17 */
    OT_COEF_LEVEL_18, /* coefficient level 18 */
    OT_COEF_LEVEL_19, /* coefficient level 19 */
    OT_COEF_LEVEL_BUTT,
} ot_coef_level;

【成员】

无

【注意事项】

无

【相关数据类型及接口】

ot_scale_range

【说明】

定义VPSS和VGS的水平和垂直缩放比例范围的结构体。

【定义】

typedef struct {
    ot_scale_range_type hor;
    ot_scale_range_type ver;
} ot_scale_range;

【成员】

成员名称

描述

hor

水平缩放比例范围。

ver

垂直缩放比例范围。

【注意事项】

无

【相关数据类型及接口】

ot_scale_coef_level

【说明】

定义VPSS和VGS水平亮度、水平色度、垂直亮度、垂直色度的缩放系数等级的结构体。

【定义】

typedef struct {
    ot_coef_level hor_luma; /* horizontal luminance   coefficient level */
    ot_coef_level hor_chroma; /* horizontal chrominance coefficient level */
    ot_coef_level ver_luma; /* vertical   luminance   coefficient level */
    ot_coef_level ver_chroma; /* vertical   chrominance coefficient level */
} ot_scale_coef_level;

【成员】

成员名称

描述

hor_luma

水平亮度的缩放系数等级。

取值范围[OT_COEF_LEVEL_0,OT_COEF_LEVEL_19]。

hor_chroma

水平色度的缩放系数等级。

取值范围[OT_COEF_LEVEL_0,OT_COEF_LEVEL_18]。

ver_luma

垂直亮度的缩放系数等级。

取值范围[OT_COEF_LEVEL_0,OT_COEF_LEVEL_19]。

ver_chroma

垂直色度的缩放系数等级。

取值范围[OT_COEF_LEVEL_0,OT_COEF_LEVEL_18]。

【注意事项】

各缩放比例下默认的缩放系数等级表,如表1所示。

表 1 各缩放比例下默认缩放参数等级表

缩放比例

水平亮度

水平色度

垂直亮度

垂直色度

SR_0

CL_0

CL_0

CL_0

CL_0

SR_1

CL_1

CL_1

CL_1

CL_1

SR_2

CL_2

CL_2

CL_2

CL_2

SR_3

CL_3

CL_3

CL_3

CL_3

SR_4

CL_6

CL_4

CL_4

CL_6

SR_5

CL_6

CL_5

CL_5

CL_5

SR_6

CL_8

CL_12

CL_9

CL_12

SR_7

CL_8

CL_12

CL_9

CL_12

SR_8

CL_8

CL_12

CL_9

CL_12

SR_9

CL_9

CL_9

CL_9

CL_9

SR_10

CL_10

CL_10

CL_10

CL_10

SR_11

CL_11

CL_11

CL_11

CL_11

SR_12

CL_12

CL_12

CL_12

CL_12

SR_13

CL_13

CL_13

CL_13

CL_13

SR_14

CL_14

CL_14

CL_14

CL_14

SR_15

CL_15

CL_15

CL_15

CL_15

SR_16

CL_16

CL_16

CL_16

CL_16

SR_17

CL_17

CL_17

CL_17

CL_17

SR_18

CL_18

CL_18

CL_18

CL_18

注:(SR_x表示OT_ SCALE_RANGE_x,CL_x表示OT_ COEF_LEVEL_x)

【相关数据类型及接口】

ot_vb_pool_type

【说明】

定义视频缓存池类型枚举类型。

【定义】

typedef enum {
    OT_VB_POOL_TYPE_COMMON = 0,
    OT_VB_POOL_TYPE_PRIVATE,
    OT_VB_POOL_TYPE_MODULE,
    OT_VB_POOL_TYPE_USER,
    OT_VB_POOL_TYPE_BUTT
} ot_vb_pool_type;

【成员】

成员名称

描述

OT_VB_POOL_TYPE_COMMON

公共VB池。

OT_VB_POOL_TYPE_PRIVATE

私有VB池。

OT_VB_POOL_TYPE_MODULE

模块公共VB池。

OT_VB_POOL_TYPE_USER

用户VB池。

【注意事项】

无

【相关数据类型及接口】

无

ot_vb_pool_info

【说明】

定义视频缓存池信息结构体。

【定义】

typedef struct {
    td_u32 blk_cnt;
    td_u64 blk_size;
    td_u64 pool_size;
    td_phys_addr_t pool_phy_addr;
    ot_vb_remap_mode remap_mode;
} ot_vb_pool_info;

【成员】

成员名称

描述

blk_cnt

每个缓存池的缓存块个数。

blk_size

缓存块大小,以Byte为单位。

pool_size

缓存池大小,以Byte为单位。

pool_phy_addr

缓存池首地址。

remap_mode

VB的内核态虚拟地址映射模式。

【注意事项】

无

【相关数据类型及接口】

无

ot_vb_cfg

【说明】

定义视频缓存池属性结构体。

【定义】

typedef struct {
    td_u32 max_pool_cnt;
    ot_vb_pool_cfg common_pool[OT_VB_MAX_COMMON_POOLS];
} ot_vb_cfg;

【成员】

成员名称

描述

max_pool_cnt

整个系统中可容纳的缓存池个数。

取值范围:(0, OT_VB_MAX_POOLS]

静态属性。

保留,目前内部固定取值OT_VB_MAX_POOLS。

common_pool

公共缓存池属性结构体。

静态属性。

【注意事项】

  • blk_size等于0或blk_cnt等于0,则对应的缓存池不会被创建。
  • 建议整个结构体先memset为0再按需赋值。

【相关数据类型及接口】

ss_mpi_vb_set_cfg

ot_vb_pool_cfg

【说明】

定义视频缓存池属性结构体。

【定义】

typedef struct {
    td_u64 blk_size;
    td_u32 blk_cnt;
    ot_vb_remap_mode remap_mode;
    td_char mmz_name[OT_MAX_MMZ_NAME_LEN];
} ot_vb_pool_cfg;

【成员】

成员名称

描述

blk_size

缓存块大小,以Byte为单位。

blk_cnt

每个缓存池的缓存块个数。

取值范围:[0, 10240]

remap_mode

VB的内核态虚拟地址映射模式。

mmz_name

当前缓存池从哪个MMZ区域分配内存。

【注意事项】

  • 每个缓存块的大小blk_size应根据当前图像宽高、像素格式、数据位宽、是否压缩等来计算。详细计算方法请参见视频缓存池大小计算接口和代码ot_buffer.h里面各种格式的图像存储计算公式。
  • 分配VB时会对blk_size进行256对齐操作。
  • 该缓存池是从空闲MMZ内存中分配,一个缓存池包含若干个大小相同的缓存块。如果该缓存池的大小超过了保留内存中的空闲空间,则创建缓存池会失败。
  • 用户需保证输入的DDR名字已经存在,如果输入不存在DDR的名字,会造成分不到内存。如果数组mmz_name 被memset为0则表示在没有命名的DDR中创建缓存池。
  • 用户需保证输入的blk_cnt范围合法,如果输入blk_cnt超出范围,创建缓存池会失败。

【相关数据类型及接口】

ot_vb_remap_mode

【说明】

定义VB内核态虚拟地址映射模式。

【定义】

typedef enum {
    OT_VB_REMAP_MODE_NONE = 0,
    OT_VB_REMAP_MODE_NOCACHE = 1,
    OT_VB_REMAP_MODE_CACHED = 2,
    OT_VB_REMAP_MODE_BUTT
} ot_vb_remap_mode;

【成员】

成员名称

描述

OT_VB_REMAP_MODE_NONE

VB不映射内核态虚拟地址。

OT_VB_REMAP_MODE_NOCACHE

VB映射nocache属性的内核态虚拟地址。

OT_VB_REMAP_MODE_CACHED

VB映射cached属性的内核态虚拟地址。

【注意事项】

无

【相关数据类型及接口】

无

ot_vb_common_pools_id

【说明】

定义公共VB池ID的结构体。

【定义】

typedef struct {
    td_u32 pool_cnt;
    ot_vb_pool pool[OT_VB_MAX_COMMON_POOLS];
} ot_vb_common_pools_id;

【成员】

成员名称

描述

pool_cnt

整个系统中公共VB池的个数。

取值范围:(0, OT_VB_MAX_COMMON_POOLS]

pool

公共VB池ID号的数组。

【注意事项】

无。

【相关数据类型及接口】

ot_log_level_cfg

【说明】

定义日志等级信息结构体。

【定义】

typedef struct {
    ot_mod_id  mod_id;
    td_s32  level;
    td_char mod_name[OT_MAX_MOD_NAME_LEN];
} ot_log_level_cfg;

【成员】

成员名称

描述

mod_id

模块的ID。

level

日志等级。取值范围:[0, 7]

mod_name

模块的名字。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_vi_vpss_mode_type

【说明】

定义VI PIPE和VPSS组的工作模式。

【定义】

typedef enum {
    OT_VI_OFFLINE_VPSS_OFFLINE = 0,
    OT_VI_OFFLINE_VPSS_ONLINE,
    OT_VI_ONLINE_VPSS_OFFLINE,
    OT_VI_ONLINE_VPSS_ONLINE,
    OT_VI_PARALLEL_VPSS_OFFLINE,
    OT_VI_PARALLEL_VPSS_PARALLEL,
    OT_VI_VPSS_MODE_BUTT
} ot_vi_vpss_mode_type;

【成员】

成员名称

描述

OT_VI_OFFLINE_VPSS_OFFLINE

VI离线,VPSS离线。

OT_VI_OFFLINE_VPSS_ONLINE

VI离线,VPSS在线。

OT_VI_ONLINE_VPSS_OFFLINE

VI在线,VPSS离线。

OT_VI_ONLINE_VPSS_ONLINE

VI在线,VPSS在线。

OT_VI_PARALLEL_VPSS_OFFLINE

VI并行,VPSS离线。

OT_VI_PARALLEL_VPSS_PARALLEL

VI并行,VPSS并行。

【注意事项】

OT_VI_OFFLINE_VPSS_ONLINE,OT_VI_ONLINE_VPSS_ONLINE模式下VI PIPE编号与VPSS GROUP号一一对应,数据从VI PIPE流动到VPSS GROUP,不需要软件设定绑定关系。

【相关数据类型及接口】

无

ot_vi_vpss_mode

【说明】

定义VI各个PIPE和VPSS各个组的工作模式。

【定义】

typedef struct {
    ot_vi_vpss_mode_type mode[OT_VI_MAX_PIPE_NUM];
} ot_vi_vpss_mode;

【成员】

成员名称

描述

mode

VI各个PIPE和VPSS各个组的工作模式。

OT_VI_MAX_PIPE_NUM具体请参考“视频输入”章节。

【注意事项】

  • Hi3519DV500只支持OT_VI_OFFLINE_VPSS_OFFLINE,OT_VI_ONLINE_VPSS_OFFLINE,OT_VI_ONLINE_VPSS_ONLINE三种模式。
  • Hi3511CV100只支持OT_VI_ONLINE_VPSS_OFFLINE,OT_VI_ONLINE_VPSS_ONLINE两种模式。
  • 当设置OT_VI_OFFLINE_VPSS_ONLINE、OT_VI_ONLINE_VPSS_ONLINE时,对应VI PIPE pipe_id和VPSS组 grp_id必须保持一致。

【相关数据类型及接口】

ot_vi_aiisp_mode

【说明】

定义VI模块AIISP模式。

【定义】

typedef enum {
    OT_VI_AIISP_MODE_DEFAULT=0,
    OT_VI_AIISP_MODE_AIDRC,
    OT_VI_AIISP_MODE_AIDM,
    OT_VI_AIISP_MODE_AI3DNR,
    OT_VI_AIISP_MODE_BUTT
} ot_vi_aiisp_mode;

【成员】

成员名称

描述

OT_VI_AIISP_MODE_DEFAULT

AIISP普通模式。

  • VI_ONLINE模式下表示不开启AIISP功能;
  • VI_OFFLINE模式下表示自适应模式,可自由开启AIISP各个功能。AIISP各功能参考AIISP文档。

OT_VI_AIISP_MODE_AIDRC

AIDRC模式,VI_ONLINE模式下使用AIDRC功能,需先配置本模式。

OT_VI_AIISP_MODE_AIDM

AIDM模式,VI_ONLINE模式下使用AIDM功能,需先配置本模式。

OT_VI_AIISP_MODE_AI3DNR

AI3DNR模式,VI_ONLINE模式下使用AI3DNR功能,需先配置本模式。

【注意事项】

无

【相关数据类型及接口】

ot_ext_chn_src_type

【说明】

定义扩展通道的图像来源。

【定义】

typedef enum {
    OT_EXT_CHN_SRC_TYPE_TAIL = 0,
    OT_EXT_CHN_SRC_TYPE_BEFORE_FISHEYE,
    OT_EXT_CHN_SRC_TYPE_HEAD,
    OT_EXT_CHN_SRC_TYPE_BUTT
} ot_ext_chn_src_type;

【成员】

成员名称

描述

OT_EXT_CHN_SRC_TYPE_TAIL

扩展通道的图像来自物理通道后处理(DIS,LDC,SPREAD,CoverEx,LUMA,OVERLAYEx,Fisheye等)后的图像。

OT_EXT_CHN_SRC_TYPE_BEFORE_FISHEYE

扩展通道的图像来自物理通道后处理FISHEYE前的图像。

OT_EXT_CHN_SRC_TYPE_HEAD

扩展通道的图像来自物理通道后处理(DIS,LDC,SPREAD等)前的图像。

【注意事项】

当前只支持OT_EXT_CHN_SRC_TYPE_TAIL和OT_EXT_CHN_SRC_TYPE_HEAD。如果设置OT_EXT_CHN_SRC_TYPE_BEFORE_FISHEYE,效果与OT_EXT_CHN_SRC_TYPE_TAIL相同。

【相关数据类型及接口】

无

ot_raw_frame_compress_param

【说明】

定义VI模块RAW数据的压缩比。

【定义】

typedef struct {
    td_u32 comp_ratio_10_bit;
    td_u32 comp_ratio_12_bit;
    td_u32 comp_ratio_14_bit;
} ot_raw_frame_compress_param;

【成员】

成员名称

描述

comp_ratio_10_bit

VI 10bit RAW数据的压缩比。

comp_ratio_12_bit

VI 12bit RAW数据的压缩比。

comp_ratio_14_bit

VI 14bit RAW数据的压缩比。

【解决方案差异】

解决方案类型

压缩比范围

Hi3519DV500

comp_ratio_10_bit:范围[1000, 4500]:默认值2000

comp_ratio_12_bit:范围[1000, 3700]:默认值2000

comp_ratio_14_bit:范围[1000, 3300]:默认值2000

Hi3516CV610/Hi3516CV608

comp_ratio_10_bit:范围[1000, 4500]:默认值2000

comp_ratio_12_bit:范围[1000, 3700]:默认值2000

comp_ratio_14_bit:范围[1000, 3300]:默认值2000

Hi3511CV100

不支持

【注意事项】

  • 这里的压缩比是放大了1000倍,即压缩比=(输入大小/输出大小)*1000。
  • 当压缩比发生变化的时候,所需要的VB大小是不一样的,可以通过ot_common_get_pic_buf_cfg函数计算VB大小。
  • 当设置的压缩比超过默认值时,由于压缩算法的原因,可能会导致视觉上可见的损失,因而,为了保证压缩效果,建议用户设置的值不要超过默认值。

【相关数据类型及接口】

ot_3dnr_pos_type

【说明】

定义3DNR位置类型枚举。

【定义】

typedef enum {
    OT_3DNR_POS_VI,
    OT_3DNR_POS_VPSS,
    OT_3DNR_POS_BUTT
} ot_3dnr_pos_type;

【成员】

成员名称

描述

OT_3DNR_POS_VI

3DNR位置在VI。

OT_3DNR_POS_VPSS

3DNR位置在VPSS。

【注意事项】

无。

【相关数据类型及接口】

ot_fmu_id

【说明】

定义FMU ID枚举。

【定义】

typedef enum {
    OT_FMU_ID_VI,
    OT_FMU_ID_VPSS,
    OT_FMU_ID_BUTT
} ot_fmu_id;

【成员】

成员名称

描述

OT_FMU_ID_VI

VI作为Master的FMU,Slave为VPSS。

OT_FMU_ID_VPSS

VPSS作为Master的FMU,Slave为VEDU/JPEG。

【注意事项】

无。

【相关数据类型及接口】

ot_fmu_attr

【说明】

定义FMU配置属性结构体。

【定义】

typedef struct {
    td_bool wrap_en;
    td_u32  page_num;
} ot_fmu_attr;

【成员】

成员名称

描述

wrap_en

是否开启卷绕空间。

1: 开启

0: 关闭

page_num

FMU卷绕空间亮度空间页表个数。

fmu_id为OT_FMU_ID_VI时,取值范围:[OT_FMU_MIN_PAGE_NUM, OT_FMU_MAX_Y_PAGE_NUM]

fmu_id为OT_FMU_ID_VPSS时,取值范围:[OT_FMU_MIN_PAGE_NUM * 2, OT_FMU_MAX_Y_PAGE_NUM +OT_FMU_MAX_C_PAGE_NUM]

【注意事项】

  • 存在卷绕通道时,必须开启WRAP空间。
  • 单个page的大小为32K Byte。
  • page_num提供了单路时最小卷绕空间的计算,配置时需要根据视频缓存池大小计算接口中ot_common_get_fmu_wrap_page_num公式计算大小,并在存在多路卷绕时,在支持的大小范围内适当留出余量。

【相关数据类型及接口】

ot_vpss_venc_wrap_param

【说明】

定义VPSS-VENC卷绕参数结构体。

【定义】

typedef struct {
    td_bool all_online;         /* vi-vpss all online or not */
    /*
    * input frame rate of VIPROC(linear/frame mode WDR is the sensor frame rate,
    * and the line mode WDR is the frame rate after synthesis)
    */
    td_u32 frame_rate;
    td_u32 full_lines_std;      /* total height of sensor, include of VBlank */
    ot_size large_stream_size;  /* VENC large stream Size */
    ot_size small_stream_size;  /* VENC small stream Size */
} ot_vpss_venc_wrap_param;

【成员】

成员名称

描述

all_online

是否是全在线模式,即OT_VI_ONLINE_VPSS_ONLINE模式。

取值范围:[0, 1]

frame_rate

VIPROC的输入帧率(linear/帧模式WDR是sensor帧率, 行模式WDR是合成之后的帧率)。

取值范围:大于0。

full_lines_std

包括消隐区的sensor采集图像高度。

取值范围:大于0,且不能小于或等于大码流高度。

large_stream_size

编码大码流分辨率,同时也是VPSS通道0输出的分辨率。

取值范围:大于0。

small_stream_size

编码小码流分辨率,VPSS除通道0之外的其他非卷绕通道对接编码码流的分辨率。如果无小码流可以将分辨率设置成0。

取值范围:小于大码流分辨率。

【注意事项】

  • 当VPSS通道0卷绕功能开启时,建议其他非卷绕通道最多绑定1路H264/H265/SVAC3编码。若存在多路小码流,则small_stream_size可设置为面积(宽x高)最大的那一路。
  • full_lines_std为包含消隐区的总图像高度,由sensor配置决定。如果无法确定sensor的消隐区大小,VI线性模式输入时建议配置为valid_height+vfb_height+vbb_height(参考Proc调试信息VI章节),VI WDR模式输入时建议配置为valid_height+(vfb_height+vbb_height)/n(n为WDR合成帧数量)。

【相关数据类型及接口】

ss_mpi_sys_get_vpss_venc_wrap_buf_line

ot_vi_wrap_in_param

【说明】

定义VICAP-VIPROC离线卷绕参数结构体。

【定义】

typedef struct {
    td_u32 pipe_num;
    td_bool is_slave;
    ot_vi_pipe_wrap_param wrap_param[OT_VI_MAX_PHYS_PIPE_NUM];
} ot_vi_wrap_in_param;

【成员】

成员名称

描述

pipe_num

接入的pipe路数。

取值范围:[1, 2]

is_slave

sensor工作模式是否为从模式。

1: 是

0: 否

wrap_param

pipe卷绕参数。

OT_VI_MAX_PHYS_PIPE_NUM具体请参考“视频输入”章节。

【注意事项】

仅Hi3516CV610/Hi3516CV608支持。

【相关数据类型及接口】

ss_mpi_sys_get_vi_wrap_buffer_line

ot_vi_pipe_wrap_param

【说明】

定义VI PIPE卷绕参数结构体。

【定义】

typedef struct {
    ot_size pipe_size;                                  /* vi set pipe attr size */
    td_u32 full_lines_std;                            /* total height of sensor, include of VBlank */
    td_u32 frame_rate_100x;                      /* 100 times of sensor frame rate */
    ot_vi_slave_wrap_param slave_param; /* vi offline vpss online mode effect param */
} ot_vi_pipe_wrap_param;

【成员】

成员名称

描述

pipe_size

输入图像宽高。

取值范围:

宽度:[OT_VI_PIPE_OFFLINE_MIN_WIDTH, OT_VI_PIPE_OFFLINE_MAX_WIDTH]

高度:[OT_VI_PIPE_OFFLINE_MIN_HEIGHT, OT_VI_PIPE_OFFLINE_MAX_HEIGHT]

具体请参见“视频输入”章节

full_lines_std

包括消隐区的sensor采集图像高度。

取值范围:[pipe_size.height, OT_VI_PIPE_OFFLINE_MAX_WIDTH]

OT_VI_PIPE_OFFLINE_MAX_WIDTH具体请参见“视频输入”章节

frame_rate_100x

VIPROC处理帧率的100倍。

取值范围:(0, 24000]

slave_param

vi离线vpss在线模式卷绕参数。

【注意事项】

  • 仅Hi3516CV610/Hi3516CV608支持。
  • full_lines_std为包含消隐区的总图像高度,由sensor配置决定。如无法确定sensor的消隐区大小,建议配置为valid_height+vfb_height+vbb_height(参考Proc调试信息VI章节)。

【相关数据类型及接口】

ot_vi_slave_wrap_param

【说明】

定义VI PIPE卷绕参数结构体。

【定义】

typedef struct {
    td_bool vi_vpss_online;      /* vi-vpss mode is online or not */
    td_bool vpss_venc_wrap;    /* vpss-venc mode is wrap or not */
    ot_size vpss_chn0_size;      /* vpss chn0 size */
   ot_size large_stream_size; /* VENC large stream Size */
   ot_size small_stream_size; /* VENC small stream Size */
} ot_vi_slave_wrap_param;

【成员】

成员名称

描述

vi_vpss_online

vi-vpss是否在线

1:是

0:否

vpss_venc_wrap

vpss-venc是否卷绕

1:是

0:否

vpss_chn0_size

vpss通道0输出宽高,vi-vpss在线时配置。

取值范围:(0, 4096]

large_stream_size

编码大码流分辨率,同时也是VPSS通道0输出的分辨率,vi-vpss在线,vpss-venc卷绕时配置。

取值范围:(0, 4096]

small_stream_size

编码小码流分辨率。如果无小码流可以将分辨率设置成0x0,vi-vpss在线,vpss-venc卷绕时配置。

取值范围:[0, large_stream_size]

【注意事项】

  • 仅Hi3516CV610/Hi3516CV608支持。
  • vi_vpss_online值为0时,vpss_venc_wrap、vpss_chn0_size、large_stream_size、small_stream_size可以不配置;vpss_venc_wrap值为0时,large_stream_size、small_stream_size可以不配置。
  • 参数默认pipe0路为第一路,当pipe_num为1时,只校验wrap_param[0]的参数是否为有效值,不校验wrap_param[1]的参数,输出wrap_param[0]的卷绕行有效。

【相关数据类型及接口】

ot_vi_wrap_out_param

【说明】

定义VICAP-VIPROC离线卷绕输出卷绕行数。

【定义】

typedef struct {
    td_u32 buf_line[OT_VI_MAX_PHYS_PIPE_NUM];
} ot_vi_wrap_out_param;

【成员】

成员名称

描述

buf_line

输出卷绕行数。

OT_VI_MAX_PHYS_PIPE_NUM具体请参考 "视频输入"章节。

【注意事项】

仅Hi3516CV610/Hi3516CV608支持。

【相关数据类型及接口】

ss_mpi_sys_get_vi_wrap_buffer_line

ot_sys_dump_debug_attr

【说明】

定义系统的存帧调试属性。

【定义】

typedef struct {
    td_bool enable;
    ot_mpp_chn dump_pos;
} ot_sys_dump_debug_attr;

【成员】

成员名称

描述

enable

使能开关。默认关闭。

dump_pos

需要存帧的位置。

mod_id仅支持设置为OT_ID_VI或OT_ID_VPSS。

mod_id设置为OT_ID_VI时,dev_id取值范围为[0, OT_VI_MAX_PHYS_PIPE_NUM),chn_id固定为0。mod_id设置为OT_ID_VPSS时,dev_id取值范围为[0, OT_VPSS_MAX_GRP_NUM),chn_id取值范围为[0, OT_VPSS_MAX_PHYS_CHN_NUM)。

【注意事项】

  • 仅Hi3516CV610/Hi3516CV608支持。
  • dump_pos仅支持设置为VI物理pipe和VPSS物理chn。

【相关数据类型及接口】

ss_mpi_sys_set_dump_debug_attr

ss_mpi_sys_get_dump_debug_attr

视频公共类型

视频公共数据类型定义如下:

OT_GPS_EXPRESS_NUM

【说明】

定义GPS经纬度数据个数。

【定义】

#define OT_GPS_EXPRESS_NUM   3

【注意事项】

无。

【相关数据类型及接口】

无。

OT_GPS_GRP_NUM

【说明】

定义GPS经纬度维度。

【定义】

#define OT_GPS_GRP_NUM   2

【注意事项】

无。

【相关数据类型及接口】

无。

OT_MAX_PRIVATE_DATA_NUM

【说明】

最大私有数据数目。

【定义】

#define  OT_MAX_PRIVATE_DATA_NUM     2

【注意事项】

无。

【相关数据类型及接口】

无。

OT_MAX_USER_DATA_NUM

【说明】

最大用户数据数目。

【定义】

#define  OT_MAX_USER_DATA_NUM      2

【注意事项】

无。

【相关数据类型及接口】

无。

OT_ISP_WB_GAIN_NUM

【说明】

WB颜色通道数。

【定义】

#define  OT_ISP_WB_GAIN_NUM      4

【注意事项】

无。

【相关数据类型及接口】

无。

OT_ISP_CAP_CCM_NUM

【说明】

颜色校正矩阵大小。

【定义】

#define  OT_ISP_CAP_CCM_NUM      9

【注意事项】

无。

【相关数据类型及接口】

无。

ot_aspect_ratio_type

【说明】

定义幅型比类型。

【定义】

typedef enum  {
    OT_ASPECT_RATIO_NONE   = 0,        /* full screen */
    OT_ASPECT_RATIO_AUTO   = 1,        /* ratio no change, 1:1*/
    OT_ASPECT_RATIO_MANUAL = 2,        /* ratio manual set */
    OT_ASPECT_RATIO_BUTT
} ot_aspect_ratio_type;

【成员】

成员名称

描述

OT_ASPECT_RATIO_NONE

无幅型比。

OT_ASPECT_RATIO_AUTO

自动模式。

OT_ASPECT_RATIO_MANUAL

手动模式。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_aspect_ratio

【说明】

定义幅型比信息。

【定义】

typedef struct {
    ot_aspect_ratio_type mode;          /* aspect ratio mode: none/auto/manual */
    td_u32         bg_color;      /* background color, RGB 888 */
    ot_rect         video_rect;     /* valid in ASPECT_RATIO_MANUAL mode */
} ot_aspect_ratio;

【成员】

成员名称

描述

mode

幅型比类型。

bg_color

幅型比背景颜色。

video_rect

幅型比视频区域。

【注意事项】

无。

【相关数据类型及接口】

ot_pixel_format

【说明】

定义像素格式类型。

【定义】

typedef enum {
    OT_PIXEL_FORMAT_RGB_444 = 0,
    OT_PIXEL_FORMAT_RGB_555,
    OT_PIXEL_FORMAT_RGB_565,
    OT_PIXEL_FORMAT_RGB_888,

    OT_PIXEL_FORMAT_BGR_444,
    OT_PIXEL_FORMAT_BGR_555,
    OT_PIXEL_FORMAT_BGR_565,
    OT_PIXEL_FORMAT_BGR_888,

    OT_PIXEL_FORMAT_ARGB_1555,
    OT_PIXEL_FORMAT_ARGB_4444,
    OT_PIXEL_FORMAT_ARGB_8565,
    OT_PIXEL_FORMAT_ARGB_8888,
    OT_PIXEL_FORMAT_ARGB_2BPP,
    OT_PIXEL_FORMAT_ARGB_CLUT2,
    OT_PIXEL_FORMAT_ARGB_CLUT2_2X2,
    OT_PIXEL_FORMAT_ARGB_CLUT2_4X4,
    OT_PIXEL_FORMAT_ARGB_CLUT4,
    OT_PIXEL_FORMAT_ARGB_CLUT4_2X2,
    OT_PIXEL_FORMAT_ARGB_CLUT4_4X4,

    OT_PIXEL_FORMAT_ABGR_1555,
    OT_PIXEL_FORMAT_ABGR_4444,
    OT_PIXEL_FORMAT_ABGR_8565,
    OT_PIXEL_FORMAT_ABGR_8888,

    OT_PIXEL_FORMAT_RGB_BAYER_8BPP,
    OT_PIXEL_FORMAT_RGB_BAYER_10BPP,
    OT_PIXEL_FORMAT_RGB_BAYER_12BPP,
    OT_PIXEL_FORMAT_RGB_BAYER_14BPP,
    OT_PIXEL_FORMAT_RGB_BAYER_16BPP,

    OT_PIXEL_FORMAT_RGB_BAYER_16BPP_H10,
    OT_PIXEL_FORMAT_RGB_BAYER_16BPP_H12,
    OT_PIXEL_FORMAT_RGB_BAYER_16BPP_H14,

    OT_PIXEL_FORMAT_RGB_BAYER_16BPP_L10,
    OT_PIXEL_FORMAT_RGB_BAYER_16BPP_L12,
    OT_PIXEL_FORMAT_RGB_BAYER_16BPP_L14,

    OT_PIXEL_FORMAT_YVU_PLANAR_422,
    OT_PIXEL_FORMAT_YVU_PLANAR_420,
    OT_PIXEL_FORMAT_YVU_PLANAR_444,

    OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422,
    OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420,
    OT_PIXEL_FORMAT_YVU_SEMIPLANAR_444,

    OT_PIXEL_FORMAT_YUV_SEMIPLANAR_422,
    OT_PIXEL_FORMAT_YUV_SEMIPLANAR_420,
    OT_PIXEL_FORMAT_YUV_SEMIPLANAR_444,

    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,

    OT_PIXEL_FORMAT_YUV_400,
    OT_PIXEL_FORMAT_UV_420,

    /* SVP data format */
    OT_PIXEL_FORMAT_BGR_888_PLANAR,
    OT_PIXEL_FORMAT_HSV_888_PACKAGE,
    OT_PIXEL_FORMAT_HSV_888_PLANAR,
    OT_PIXEL_FORMAT_LAB_888_PACKAGE,
    OT_PIXEL_FORMAT_LAB_888_PLANAR,
    OT_PIXEL_FORMAT_S8C1,
    OT_PIXEL_FORMAT_S8C2_PACKAGE,
    OT_PIXEL_FORMAT_S8C2_PLANAR,
    OT_PIXEL_FORMAT_S8C3_PLANAR,
    OT_PIXEL_FORMAT_S16C1,
    OT_PIXEL_FORMAT_U8C1,
    OT_PIXEL_FORMAT_U16C1,
    OT_PIXEL_FORMAT_S32C1,
    OT_PIXEL_FORMAT_U32C1,
    OT_PIXEL_FORMAT_U64C1,
    OT_PIXEL_FORMAT_S64C1,

    /*
     * AD data format for raw pipe
     * When MIPI is connected, VI Pipe receives package yuv422 (actual data) in raw16 format
     * When BT656 is connected, VI Pipe receives package yuv422 in raw8 format, the number of line
     * direction pixels is doubled, eg: 3840*1080(raw8) indicate 1920*1080(package yuv422)
     */
    OT_PIXEL_FORMAT_RGB_BAYER_16BPP_INDICATE_YUYV_PACKAGE_422,
    OT_PIXEL_FORMAT_RGB_BAYER_8BPP_INDICATE_UYVY_PACKAGE_422,
    OT_PIXEL_FORMAT_BUTT
} ot_pixel_format;

【成员】

无。

【注意事项】

无。

【相关数据类型及接口】

  • ot_rgn_overlayex_attr
  • ot_rgn_canvas_info
  • ot_vdec_pic_param
  • ot_vgs_osd
  • ot_vi_pipe_attr
  • ot_vi_chn_attr
  • ot_video_frame
  • ot_vo_video_layer_attr
  • ot_bmp
  • ot_vo_wbc_attr
  • ot_vpss_grp_attr
  • ot_vpss_chn_attr
  • ot_mcf_grp_attr
  • ot_mcf_chn_attr

ot_video_field

【说明】

定义视频图像帧场类型。

【定义】

typedef enum  {
    OT_VIDEO_FIELD_TOP         = 1,    /* even field */
    OT_VIDEO_FIELD_BOTTOM      = 2,    /* odd field */
    OT_VIDEO_FIELD_INTERLACED  = 3,    /* two interlaced fields */
    OT_VIDEO_FIELD_FRAME       = 4,    /* frame */
    OT_VIDEO_FIELD_BUTT
} ot_video_field;

【成员】

成员名称

描述

OT_VIDEO_FIELD_TOP

顶场类型。

OT_VIDEO_FIELD_BOTTOM

底场类型。

OT_VIDEO_FIELD_INTERLACED

两场间插类型。

OT_VIDEO_FIELD_FRAME

帧类型。

【注意事项】

无。

【相关数据类型及接口】

ot_video_frame

ot_color_gamut

【说明】

定义色域范围枚举。

【定义】

typedef enum  {
    OT_COLOR_GAMUT_BT601 = 0,
    OT_COLOR_GAMUT_BT709,
    OT_COLOR_GAMUT_BT2020,
    OT_COLOR_GAMUT_USER,
    OT_COLOR_GAMUT_BUTT
} ot_color_gamut;

【成员】

成员名称

描述

OT_COLOR_GAMUT_BT601

BT601色域

OT_COLOR_GAMUT_BT709

BT709色域。

OT_COLOR_GAMUT_BT2020

BT2020色域。

OT_COLOR_GAMUT_USER

用户自定义的色域,非标准色域。

【注意事项】

  • 各个色域范围的绿、蓝、红、白点坐标如下:

ColorGamut

Primary

Green

Blue

Red

White

BT601

(0.29, 0.60)

(0.15, 0.06)

(0.64, 0.33)

(0.3127, 0.3290)

BT709

(0.300, 0.600)

(0.150, 0.060)

(0.640, 0.330)

(0.3127, 0.3290)

BT2020

(0.170, 0.797)

(0.131, 0.046)

(0.708, 0.292)

(0.3127, 0.3290)

【相关数据类型及接口】

无。

ot_dynamic_range

【说明】

定义动态范围枚举。

【定义】

typedef enum  {
    OT_DYNAMIC_RANGE_SDR8 = 0,
    OT_DYNAMIC_RANGE_SDR10,
    OT_DYNAMIC_RANGE_HDR10,
    OT_DYNAMIC_RANGE_HLG,
    OT_DYNAMIC_RANGE_SLF,
    OT_DYNAMIC_RANGE_XDR,
    OT_DYNAMIC_RANGE_BUTT
} ot_dynamic_range;

【成员】

成员名称

描述

OT_DYNAMIC_RANGE_SDR8

8bit数据的标准动态范围。

OT_DYNAMIC_RANGE_SDR10

10bit数据的标准动态范围。

OT_DYNAMIC_RANGE_HDR10

10bit数据的高动态范围。

OT_DYNAMIC_RANGE_HLG

HLG标准高动态范围。

OT_DYNAMIC_RANGE_SLF

暂时无效。

OT_DYNAMIC_RANGE_XDR

10bit数据,算法处理的一个中间类型数据,用户无需关心。

【注意事项】

  • 各个动态范围对应的曲线如下:

Dynamic Range

Transfer Characteristic

SDR8/SDR10

V = α * Lc0.45 − (α − 1) for 1 >= Lc >= β

V = 4.500 * Lc for β > Lc >= 0

HDR10

V = ( ( c1 + c2 * Lcn ) ÷ ( 1 + c3 * Lc n ) )m for all values of Lc

c1 = c3 − c2 + 1 = 3424 ÷ 4096 = 0.8359375

c2 = 32 * 2413 ÷ 4096 = 18.8515625

c3 = 32 * 2392 ÷ 4096 = 18.6875

m = 128 * 2523 ÷ 4096 = 78.84375

n = 0.25 * 2610 ÷ 4096 = 0.1593017578125

for which Lc equal to 1 for peak white is ordinarily intended to correspond to a reference output luminance level of 10000 candelas per square metre

HLG

V = a * Ln( 12 * Lc − b ) + c for 1 >= Lc > 1 ÷ 12

V = Sqrt( 3 ) * Lc0.5 for 1 ÷ 12 >= Lc >= 0

a = 0.17883277, b = 0.28466892, c = 0.55991073

【相关数据类型及接口】

无。

ot_data_bit_width

【说明】

定义数据位宽枚举。

【定义】

typedef enum  {
    OT_DATA_BIT_WIDTH_8 = 0,
    OT_DATA_BIT_WIDTH_10,
    OT_DATA_BIT_WIDTH_12,
    OT_DATA_BIT_WIDTH_14,
    OT_DATA_BIT_WIDTH_16,
    OT_DATA_BIT_WIDTH_32,
    OT_DATA_BIT_WIDTH_64,
    OT_DATA_BIT_WIDTH_BUTT
} ot_data_bit_width;

【成员】

成员名称

描述

OT_DATA_BIT_WIDTH_8

8 bit数据位宽。

OT_DATA_BIT_WIDTH_10

10 bit数据位宽。

OT_DATA_BIT_WIDTH_12

12 bit数据位宽。

OT_DATA_BIT_WIDTH_14

14 bit数据位宽。

OT_DATA_BIT_WIDTH_16

16 bit数据位宽。

OT_DATA_BIT_WIDTH_32

32 bit数据位宽。

OT_DATA_BIT_WIDTH_64

64 bit数据位宽。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_video_supplement_misc

【说明】

定义视频扩展补充信息结构体。

【定义】

typedef struct {
    td_s16              offset_top;
    td_s16              offset_left;
    td_s16              offset_bottom;
    td_s16              offset_right;
    td_u32              max_luma;
    td_u32              min_luma;
    td_u64              private_data[OT_MAX_PRIVATE_DATA_NUM];
    td_phys_addr_t      variable_info_phys_addr;
} ot_video_supplement_misc;

【成员】

成员名称

描述

offset_top

图像顶部剪裁宽度。

offset_left

图像左侧剪裁宽度。

offset_bottom

图像底部剪裁宽度。

offset_right

图像右侧剪裁宽度。

max_luma

显示图像的最大亮度。

min_luma

显示图像的最小亮度。

private_data

私有数据。

variable_info_phys_addr

可变附属信息的VB的物理地址。VB头部存储请参考ot_video_variable_info_addr结构体。

【注意事项】

无。

【相关数据类型及接口】

ot_video_supplement

ot_video_supplement

【说明】

定义视频图像帧补充信息。

【定义】

typedef struct {
    td_phys_addr_t    misc_info_phys_addr;
    td_phys_addr_t    jpeg_dcf_phys_addr;
    td_phys_addr_t    isp_info_phys_addr;
    td_phys_addr_t    low_delay_phys_addr;
    td_phys_addr_t    bnr_mot_phys_addr;
    td_phys_addr_t    motion_data_phys_addr;
    td_phys_addr_t    frame_dng_phys_addr;
    td_phys_addr_t    aiisp_phys_addr;
    td_void* ATTRIBUTE misc_info_virt_addr;
    td_void* ATTRIBUTE jpeg_dcf_virt_addr; 
    td_void* ATTRIBUTE isp_info_virt_addr; 
    td_void* ATTRIBUTE low_delay_virt_addr; 
    td_void* ATTRIBUTE bnr_mot_virt_addr;
    td_void* ATTRIBUTE motion_data_virt_addr;
    td_void* ATTRIBUTE frame_dng_virt_addr;
    td_void* ATTRIBUTE aiisp_virt_addr;
} ot_video_supplement;

【成员】

成员名称

描述

misc_info_phys_addr

视频扩展信息的物理地址

jpeg_dcf_phys_addr

Jpeg DCF信息的物理地址。

isp_info_phys_addr

ISP辅助信息的物理地址。

low_delay_phys_addr

低延时信息物理地址。

bnr_mot_phys_addr

BNR信息物理地址。

motion_data_phys_addr

运动数据物理地址。

frame_dng_phys_addr

DNG信息的物理地址。

aiisp_phys_addr

AIISP辅助信息的物理地址。

misc_info_virt_addr

视频扩展信息的虚拟地址

jpeg_dcf_virt_addr

Jpeg DCF信息的虚拟地址

内核态虚拟地址。

isp_info_virt_addr

ISP辅助信息的内核态虚拟地址。

内核态虚拟地址。

low_delay_virt_addr

低延时信息虚拟地址。

内核态虚拟地址。

bnr_mot_virt_addr

BNR信息虚拟地址。

内核态虚拟地址。

motion_data_virt_addr

运动数据虚拟地址。

内核态虚拟地址。

frame_dng_virt_addr

DNG格式信息的虚拟地址。

内核态虚拟地址。

aiisp_virt_addr

AIISP辅助信息的虚拟地址。

内核态虚拟地址。

【注意事项】

无。

【相关数据类型及接口】

ot_video_frame

ot_video_frame

【说明】

定义视频原始图像帧结构。

【定义】

typedef struct {
    td_u32              width;
    td_u32              height;
    ot_video_field       field;
    ot_pixel_format      pixel_format;
    ot_video_format      video_format;
    ot_compress_mode     compress_mode;
    ot_dynamic_range     dynamic_range;
    ot_color_gamut       color_gamut;
    td_u32              header_stride[OT_MAX_COLOR_COMPONENT];
    td_u32              stride[OT_MAX_COLOR_COMPONENT];
    td_phys_addr_t     header_phys_addr[OT_MAX_COLOR_COMPONENT];
    td_phys_addr_t     phys_addr[OT_MAX_COLOR_COMPONENT];
    td_void* ATTRIBUTE  header_virt_addr[OT_MAX_COLOR_COMPONENT];
    td_void* ATTRIBUTE  virt_addr[OT_MAX_COLOR_COMPONENT];
    td_u32              time_ref;
    td_u64              pts;
    td_u64              user_data[OT_MAX_USER_DATA_NUM];
    td_u32              frame_flag; /* frame_flag, can be OR operation. */
    ot_video_supplement  supplement;
} ot_video_frame;

【成员】

成员名称

描述

width

图像宽度。

height

图像高度。

field

帧场模式。

pixel_format

视频图像像素格式。

video_format

视频图像格式。

compress_mode

视频压缩模式。

dynamic_range

动态范围。

color_gamut

色域范围。

header_stride

图像压缩头跨距。

stride

图像数据跨距。

header_phys_addr

压缩头物理地址

header_virt_addr

压缩头虚拟地址。

内核态虚拟地址。

phys_addr

图像数据物理地址。

virt_addr

图像数据虚拟地址。

内核态虚拟地址。

time_ref

图像帧序列号。

pts

图像时间戳。

user_data

用户数据

frame_flag

当前帧的标记,使用ot_frame_flag里面的值标记,可以按位或操作。

supplement

图像的补充信息。

【注意事项】

数据图像内存默认仅支持VB内存,支持非VB内存的接口会在对应接口处添加特殊说明。

【相关数据类型及接口】

无。

ot_video_frame_info

【说明】

定义视频图像帧信息结构体。

【定义】

typedef struct {
    ot_video_frame video_frame;
    td_u32        pool_id;
    ot_mod_id      mod_id;
} ot_video_frame_info;

【成员】

成员名称

描述

video_frame

视频图像帧。

pool_id

视频缓存池ID。

mod_id

当前帧数据是由哪一个模块写出的。

【注意事项】

无。

【相关数据类型及接口】

ot_video_frame

ot_video_variable_info_addr

【说明】

定义记录各类可变附属信息物理地址信息结构体。

【定义】

typedef struct {
    td_phys_addr_t   svc_rect_phys_addr;
    td_phys_addr_t   venc_user_rc_phys_addr;
    td_phys_addr_t   mosaic_phys_addr;
    td_phys_addr_t   aiseg_point_phys_addr;
    td_phys_addr_t   aiseg_rect_phys_addr;
    td_phys_addr_t   user_data_phys_addr;
} ot_video_variable_info_addr;

【成员】

成员名称

描述

svc_rect_phys_addr

指向智能检测目标ot_venc_svc_rect_info结构体的vb地址

venc_user_rc_phys_addr

指向用户码控信息结构体ot_venc_user_rc_info的vb地址。

mosaic_phys_addr

指向马赛克map模式的参数结构体ot_venc_mosaic_map的vb地址。

aiseg_point_phys_addr

指向点模式下的图像中语义分割点的信息结构体ot_aiseg_point_info的vb地址。

aiseg_rect_phys_addr

指向框模式下的图像中语义分割框的信息结构体ot_aiseg_rect_info的vb地址。

user_data_phys_addr

指向用户数据数组的vb地址。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_vb_calc_cfg

【说明】

定义视频图像帧各部分数据大小配置信息结构体。

【定义】

typedef struct {
    td_u32 vb_size;
    td_u32 head_stride;
    td_u32 head_size;
    td_u32 head_y_size;
    td_u32 main_stride;
    td_u32 main_size;
    td_u32 main_y_size;
} ot_vb_calc_cfg;

【成员】

成员名称

描述

vb_size

视频图像帧总大小。

head_stride

视频图像帧压缩头stride

head_size

视频图像帧压缩头总大小

head_y_size

视频图像帧亮度压缩头大小

main_stride

视频图像帧主体数据stride

main_size

视频图像帧主体数据总大小

main_y_size

视频图像帧主体数据亮度大小

【注意事项】

无。

【相关数据类型及接口】

ot_video_frame

ot_bmp

【说明】

定义位图图像信息结构。

【定义】

typedef struct {
    ot_pixel_format  pixel_format;  /* bitmap's pixel format */
    td_u32 width;               /* bitmap's width */
    td_u32 height;              /* bitmap's height */
    td_void* ATTRIBUTE data;      /* address of bitmap's data */
} ot_bmp;

【成员】

成员名称

描述

pixel_format

位图像素格式。

width

位图宽度。

height

位图高度。

data

位图数据。

用户态虚拟地址。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_video_format

【说明】

定义视频格式结构体。

【定义】

typedef enum  {
    OT_VIDEO_FORMAT_LINEAR = 0,       /* nature video line */
    OT_VIDEO_FORMAT_TILE_64x16,       /* tile cell: 64pixel x 16line */
    OT_VIDEO_FORMAT_TILE_16x8,        /* tile cell: 16pixel x 8line */
    OT_VIDEO_FORMAT_TILE_32x4,        /* tile cell: 32pixel x 4line */
    OT_VIDEO_FORMAT_BUTT
} ot_video_format;

【成员】

成员名称

描述

OT_VIDEO_FORMAT_LINEAR

线性存储的视频格式。

OT_VIDEO_FORMAT_TILE_64x16

TILE格式存储的视频格式,其中tile的块大小为64像素宽,16行像素高。

OT_VIDEO_FORMAT_TILE_16x8

TILE格式存储的视频格式,其中tile的块大小为16像素宽,8行像素高。

OT_VIDEO_FORMAT_TILE_32x4

TILE格式存储的视频格式,其中tile的块大小为32像素宽,4行像素高。

【注意事项】

无

ot_compress_mode

【说明】

定义视频压缩数据格式结构体。

【定义】

typedef enum  {
    OT_COMPRESS_MODE_NONE = 0,
    OT_COMPRESS_MODE_SEG,
    OT_COMPRESS_MODE_SEG_COMPACT, 
    OT_COMPRESS_MODE_TILE,
    OT_COMPRESS_MODE_LINE,
    OT_COMPRESS_MODE_FRAME,
    OT_COMPRESS_MODE_FMAP,
    OT_COMPRESS_MODE_BUTT
} ot_compress_mode;

【成员】

成员名称

描述

OT_COMPRESS_MODE_NONE

非压缩的视频格式。

OT_COMPRESS_MODE_SEG

(非紧凑)段压缩的视频格式,按256 bytes为一段进行压缩。

OT_COMPRESS_MODE_SEG_COMPACT

紧凑段压缩的视频格式,按256 bytes为一段进行紧凑压缩。

OT_COMPRESS_MODE_TILE

Tile压缩的视频格式,按照Tile为一段进行压缩。

OT_COMPRESS_MODE_LINE

行压缩的视频格式,按照一行为一段进行压缩。

OT_COMPRESS_MODE_FRAME

帧压缩的视频格式,以一帧为单位进行压缩。

OT_COMPRESS_MODE_FMAP

FMAP压缩的视频格式,以一行为单位进行压缩。

【注意事项】

无。

ot_vb_supplement_cfg

【说明】

定义VB附加信息结构体。

【定义】

typedef struct {
    td_u32 supplement_cfg;
} ot_vb_supplement_cfg;

【成员】

成员名称

描述

supplement_cfg

附加信息控制。

【注意事项】

当前支持4种附加信息,具体请参考ss_mpi_vb_set_supplement_cfg接口描述。

【相关数据类型及接口】

ot_gps_info

【说明】

定义GPS信息结构体。

【定义】

typedef struct {
    td_char gps_latitude_ref;
    td_u32 gps_latitude[OT_GPS_EXPRESS_NUM][OT_GPS_GRP_NUM];
    td_char gps_longitude_ref;
    td_u32 gps_longitude[OT_GPS_EXPRESS_NUM][OT_GPS_GRP_NUM];
    td_u8 gps_altitude_ref;
    td_u32 gps_altitude[OT_GPS_GRP_NUM];
} ot_gps_info;

【成员】

成员名称

描述

gps_latitude_ref

GPS纬度参考。取值’N’或’S’,默认值为’N’。

gps_latitude

GPS纬度坐标。形式为度、分、秒三维,每一纬度数值表达包含分子分母两部分,每维数组中第一位数为分子,第二位数为分母,分母必须大于0,例如{dd/1, mm/1, ss/1}。默认值为{0/1,0/1,0/1},表示0度0分0秒。

gps_longitude_ref

GPS经度参考。取值’E’或’W’,默认值为’E’。

gps_longitude

GPS经度坐标。形式为度、分、秒三维,每一纬度数值表达包含分子分母两部分,每维数组中第一位数为分子,第二位数为分母,分母必须大于0,例如{dd/1, mm/1, ss/1}。默认值为{0/1,0/1,0/1},表示0度0分0秒。

gps_altitude_ref

GPS高度参考。取值0或1,默认值为0。

0:海平面参考,海平面向上;

1:海平面参考,海平面向下。

gps_altitude

GPS高度坐标。数值表达包含分子分母两部分,数组中第一位数为分子,第二位数为分母,分母必须大于0,例如hh/1。默认值为0/1,表示0米。

单位为米。

【注意事项】

无。

【相关数据类型及接口】

ot_frame_interrupt_type

【说明】

定义帧中断类型的枚举。

【定义】

typedef enum  {
    OT_FRAME_INTERRUPT_START,
    OT_FRAME_INTERRUPT_EARLY,
    OT_FRAME_INTERRUPT_EARLY_END,
    OT_FRAME_INTERRUPT_EARLY_EARLY,
    OT_FRAME_INTERRUPT_BUTT,
} ot_frame_interrupt_type;

【成员】

成员名称

描述

OT_FRAME_INTERRUPT_START

使用帧起始中断准备和发送。

OT_FRAME_INTERRUPT_EARLY

使用帧提前上报中断准备,帧起始中断发送。

OT_FRAME_INTERRUPT_EARLY_END

使用帧提前上报中断准备,帧完成中断发送。

OT_FRAME_INTERRUPT_EARLY_EARLY

使用帧提前上报中断准备和发送。

【注意事项】

OT_FRAME_INTERRUPT_EARLY_EARLY模式只推荐在VI-VO的低延迟场景使用,会存在VB被改写覆盖的风险。

【相关数据类型及接口】

无。

ot_frame_interrupt_attr

【说明】

定义帧中断属性结构体。

【定义】

typedef struct {
    ot_frame_interrupt_type interrupt_type;
    td_u32 early_line;
} ot_frame_interrupt_attr;

【成员】

成员名称

描述

interrupt_type

帧中断类型的枚举。

early_line

延时行号。

最小值为0,最大值小于图像高度。

【注意事项】

当interrupt_type为OT_FRAME_INTERRUPT_START时,early_line无效。

【相关数据类型及接口】

无。

ot_data_rate

【说明】

定义设备的速率的枚举。

【定义】

typedef enum {
    OT_DATA_RATE_X1 = 0,
    OT_DATA_RATE_X2,
    OT_DATA_RATE_BUTT
} ot_data_rate;

【成员】

成员名称

描述

OT_DATA_RATE_X1

一拍一像素。

OT_DATA_RATE_X2

一拍二像素。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_wdr_mode

【说明】

定义WDR工作模式的枚举。

【定义】

typedef enum {
    OT_WDR_MODE_NONE = 0,
    OT_WDR_MODE_BUILT_IN,
    OT_WDR_MODE_QUADRA,
    OT_WDR_MODE_2To1_LINE,
    OT_WDR_MODE_2To1_FRAME,
    OT_WDR_MODE_3To1_LINE,
    OT_WDR_MODE_3To1_FRAME,
    OT_WDR_MODE_4To1_LINE,
    OT_WDR_MODE_4To1_FRAME,
    OT_WDR_MODE_BUTT,
} ot_wdr_mode;

【成员】

成员名称

描述

OT_WDR_MODE_NONE

线性模式。

OT_WDR_MODE_BUILT_IN

Sensor合成WDR模式。

OT_WDR_MODE_QUADRA

QUADRA WDR模式。

OT_WDR_MODE_2To1_LINE

2帧合成行WDR模式。

OT_WDR_MODE_2To1_FRAME

2帧合成帧WDR模式。

OT_WDR_MODE_3To1_LINE

3帧合成行WDR模式。

OT_WDR_MODE_3To1_FRAME

3帧合成帧WDR模式。

OT_WDR_MODE_4To1_LINE

4帧合成行WDR模式。

OT_WDR_MODE_4To1_FRAME

4帧合成帧WDR模式。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_isp_config_info

【说明】

定义ISP配置信息。

【定义】

typedef struct {
    td_u32 iso;
    td_u32 isp_dgain;
    td_u32 exposure_time;
    td_u32 white_balance_gain[OT_ISP_WB_GAIN_NUM];
    td_u32 color_temperature;
    td_u16 cap_ccm[OT_ISP_CAP_CCM_NUM];
} ot_isp_config_info;

【成员】

成员名称

描述

iso

曝光ISO值。

isp_dgain

ISP的数字增益。

exposure_time

曝光时间。

white_balance_gain

R、Gr、Gb、B四颜色通道的增益,16bit精度表示。

color_temperature

当前检测的色温值。

cap_ccm

颜色还原矩阵。为3*3矩阵。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_low_delay_info

【说明】

定义视频低延时信息结构体。

【定义】

typedef struct {
    td_bool  enable;
    td_u32  line_cnt;
    td_bool  one_buf_en;
} ot_low_delay_info

【成员】

成员名称

描述

enable

低延时使能开关

line_cnt

低延时输出行号,最小值为16,最大值不超过图像高度,不建议设置行号太接近图像高度。

one_buf_en

是否开启one buffer

【注意事项】

无。

【相关数据类型及接口】

无。

ot_schedule_mode

【说明】

定义调度模式的枚举。

【定义】

typedef enum {
    OT_SCHEDULE_NORMAL = 0,
    OT_SCHEDULE_QUICK,
    OT_SCHEDULE_BUTT
} ot_schedule_mode;

【成员】

成员名称

描述

OT_SCHEDULE_NORMAL

正常调度模式。

OT_SCHEDULE_QUICK

快速调度模式。

【注意事项】

当配置为快速调度模式(OT_SCHEDULE_QUICK)时,整个系统会存在一定约束,具体请参考《MPP 媒体处理软件 V6.0 FAQ》的1.9 “Quick schedule注意事项”。

【相关数据类型及接口】

ot_scale_coef_type

【说明】

定义缩放系数类型的枚举。

【定义】

typedef enum {
    OT_SCALE_COEF_TYPE_NORMAL,
    OT_SCALE_COEF_TYPE_BILINEAR,
    OT_SCALE_COEF_TYPE_MEAN,
    OT_SCALE_COEF_TYPE_BUTT
} ot_scale_coef_type;

【成员】

成员名称

描述

OT_SCALE_COEF_TYPE_NORMAL

正常缩放系数类型。

OT_SCALE_COEF_TYPE_BILINEAR

双线性缩放系数类型。

OT_SCALE_COEF_TYPE_MEAN

均值缩放系数类型,仅Hi3516CV610支持。

【注意事项】

当配置为OT_SCALE_COEF_TYPE_NORMAL时,采用ss_mpi_sys_set_scale_coef_level接口配置后生成的缩放系数对图像进行缩放;配置为OT_SCALE_COEF_TYPE_BILINEAR时,采用双线性插值;配置为OT_SCALE_COEF_TYPE_MEAN时,采用均值滤波,适用于图像缩小场景求取亮度和。

【相关数据类型及接口】

ot_nr_motion_info

【说明】

定义3DNR运动信息。

【定义】

typedef struct {
    td_phys_addr_t motion_phys_addr;
    td_u8 *ATTRIBUTE motion_virt_addr;
    td_u32 size;
    td_u32 stride;
    td_u32 width;
    td_u32 height;
    td_u32 pixel_bits;
} ot_nr_motion_info;

【成员】

成员名称

描述

motion_phys_addr

物理地址。

motion_virt_addr

用户态虚拟地址。

size

大小。

stride

对齐。

width

宽度。

height

高度。

pixel_bits

像素位深。

【注意事项】

  • motion_virt_addr是用户态映射好的虚拟地址,可以直接访问。
  • 一个4*4宏块的运动信息占2bit,值越大表示越静止。

【相关数据类型及接口】

  • ss_mpi_vi_get_pipe_3dnr_motion_info
  • ss_mpi_vi_release_pipe_3dnr_motion_info

错误码

系统控制错误码

系统控制API错误码如表1所示。

表 1 系统控制API错误码

错误代码

宏定义

描述

0xa0028007

OT_ERR_SYS_ILLEGAL_PARAM

参数设置无效

0xa002800a

OT_ERR_SYS_NULL_PTR

空指针错误

0xa002800c

OT_ERR_SYS_NOT_SUPPORT

不支持的功能

0xa002800d

OT_ERR_SYS_NOT_PERM

操作不允许

0xa0028014

OT_ERR_SYS_NO_MEM

分配内存失败,如系统内存不足

0xa0028018

OT_ERR_SYS_NOT_READY

系统控制属性未配置

0xa0028022

OT_ERR_SYS_BUSY

系统忙

系统内存错误码

系统内存API错误码如表1所示。

表 1 系统内存API错误码

错误代码

宏定义

描述

0xa0008007

OT_ERR_MEM_ILLEGAL_PARAM

参数设置无效

0xa000800a

OT_ERR_MEM_NULL_PTR

空指针错误

0xa000800d

OT_ERR_MEM_NOT_PERM

操作不允许

0xa0008018

OT_ERR_MEM_NOT_READY

系统内存未准备好

0xa0008022

OT_ERR_MEM_BUSY

系统内存忙

视频缓存池错误码

视频缓存池API错误码如表1所示。

表 1 视频缓存池API错误码

错误代码

宏定义

描述

0xa0018007

OT_ERR_VB_ILLEGAL_PARAM

参数设置无效

0xa0018009

OT_ERR_VB_UNEXIST

视频缓存池不存在

0xa001800a

OT_ERR_VB_NULL_PTR

参数空指针错误

0xa001800c

OT_ERR_VB_NOT_SUPPORT

操作不支持

0xa001800d

OT_ERR_VB_NOT_PERM

操作不允许

0xa0018014

OT_ERR_VB_NO_MEM

分配内存失败

0xa0018015

OT_ERR_VB_NO_BUF

分配缓存失败

0xa0018018

OT_ERR_VB_NOT_READY

系统控制属性未配置

0xa0018022

OT_ERR_VB_BUSY

系统忙

0xa0018023

OT_ERR_VB_SIZE_NOT_ENOUGH

VB块大小不够

各模块支持的输入/输出数据格式和压缩模式

Hi3519DV500各模块输出支持的数据格式和压缩模式

模块

输出支持的数据格式

输出支持的压缩模式

VI for YUV

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

OT_VIDEO_FORMAT_LTILE_32x4

OT_COMPRESS_MODE_TILE

VI for RAW

--

OT_COMPRESS_MODE_LINE

OT_COMPRESS_MODE_FRAME

VPSS

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

VGS

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

OT_VIDEO_FORMAT_LTILE_32x4

OT_COMPRESS_MODE_TILE

GDC

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

VDEC for H264/H265

OT_VIDEO_FORMAT_TILE_64x16

不支持压缩

VDEC for JPEG

OT_VIDEO_FORMAT_LINEAR

不支持压缩

TDE

OT_VIDEO_FORMAT_LINEAR

不支持压缩

MCF

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

Hi3519DV500各模块输入支持的数据格式和压缩模式

模块

输入支持的数据格式

输入支持的压缩模式

VI for YUV

OT_VIDEO_FORMAT_LINEAR

不支持压缩

VI for RAW

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_LINE

OT_COMPRESS_MODE_FRAME

VPSS

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

OT_VIDEO_FORMAT_TILE_64x16

不支持压缩

OT_VIDEO_FORMAT_TILE_32x4

OT_COMPRESS_MODE_TILE

VGS

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

OT_VIDEO_FORMAT_TILE_64x16

不支持压缩

OT_VIDEO_FORMAT_TILE_32x4

OT_COMPRESS_MODE_TILE

GDC

OT_VIDEO_FORMAT_LINEAR

不支持压缩

OT_VIDEO_FORMAT_TILE_32x4

OT_COMPRESS_MODE_TILE

VO

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

OT_VIDEO_FORMAT_TILE_64x16

不支持压缩

VENC

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

TDE

OT_VIDEO_FORMAT_LINEAR

不支持压缩

GFBG

OT_VIDEO_FORMAT_LINEAR

不支持压缩

MCF

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

Hi3516CV610/Hi3516CV608各模块输入/输出支持的数据格式和压缩模式

模块

输入支持的数据格式

输入支持的压缩模式

输出支持的数据格式

输出支持的压缩模式

VI for YUV

OT_VIDEO_FORMAT_LINEAR

不支持压缩

OT_VIDEO_FORMAT_LINEAR

不支持压缩

VI for RAW

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_LINE

--

OT_COMPRESS_MODE_LINE

OT_COMPRESS_MODE_FRAME

OT_COMPRESS_MODE_FRAME

VPSS

OT_VIDEO_FORMAT_LINEAR

不支持压缩

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG_COMPACT

OT_VIDEO_FORMAT_TILE_64x16

不支持压缩

VGS

OT_VIDEO_FORMAT_LINEAR

不支持压缩

OT_VIDEO_FORMAT_LINEAR

不支持压缩

VENC

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG_COMPACT

OT_VIDEO_FORMAT_LINEAR

不支持压缩

Hi3511CV100各模块输入/输出支持的数据格式和压缩模式

模块

输入支持的数据格式

输入支持的压缩模式

输出支持的数据格式

输出支持的压缩模式

VI

OT_VIDEO_FORMAT_LINEAR

不支持压缩

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

VPSS

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

OT_COMPRESS_MODE_SEG_COMPACT

OT_VIDEO_FORMAT_TILE_64x16

OT_COMPRESS_MODE_TILE

VGS

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

OT_COMPRESS_MODE_SEG_COMPACT

VENC

OT_VIDEO_FORMAT_LINEAR

OT_COMPRESS_MODE_SEG

OT_COMPRESS_MODE_SEG_COMPACT

-

-

OT_VIDEO_FORMAT_TILE_64x16

OT_COMPRESS_MODE_TILE

VDEC

-

-

OT_VIDEO_FORMAT_TILE_64x16

OT_COMPRESS_MODE_TILE

OT_VIDEO_FORMAT_LINEAR

不支持压缩

视频缓存池大小计算接口

须知:

Hi3519DV500当图像宽度小于等于256且是紧凑段压缩时,通过ot_common_get_pic_buf_size接口获取到的内存大小与非紧凑段压缩大小相等。 Hi3519DV500分配MCF场景所需buffer时,如果mono路不是亮度单分量图像,则需使用ot_vpss_get_mcf_color_buf_size计算buffer大小。

表 1 ot_buffer.h中视频缓存池大小计算接口简介

视频缓存池大小计算接口

接口简介

ot_common_get_pic_buf_cfg

一般linear格式的YUV或者raw数据缓存池配置

ot_common_get_pic_buf_size

一般linear格式的YUV或者raw数据缓存池大小

ot_vi_get_raw_buf_cfg_with_compress_ratio

raw数据根据压缩率获取缓存池配置

ot_aibnr_get_pic_buf_size

aibnr使用的帧数据缓存池大小

ot_aidrc_get_in_buf_size

aidrc使用的输入数据缓存池大小,仅Hi3519DV500支持

ot_aidrc_get_out_buf_size

aidrc使用的输出数据缓存池大小,仅Hi3519DV500支持

ot_ai3dnr_get_pic_buf_size

ai3dnr使用的帧数据缓存池大小,仅Hi3519DV500支持

ot_vdec_get_pic_buf_size

VDEC输出的YUV帧存缓存池,仅Hi3519DV500/Hi3511CV100支持

ot_vdec_get_tmv_buf_size

VDEC输出的Tmv数据缓存池,仅Hi3519DV500/Hi3511CV100支持

ot_venc_get_pic_info_buf_size

VENC Picture信息VB大小,支持帧节省模式计算

ot_venc_get_pic_buf_size

VENC Picture VB大小,支持帧节省模式计算

ot_venc_get_qpmap_size

qpmap映射表大小

ot_venc_get_qpmap_stride

qpmap映射表stride

ot_venc_get_roimap_size

roi map映射表大小

ot_venc_get_roimap_stride

roi map映射表stride

ot_venc_get_skip_weight_size

skip weight映射表大小

ot_venc_get_skip_weight_stride

skip weight映射表stride

ot_venc_get_mosaic_map_size

mosaic map映射表大小

ot_venc_get_mosaic_map_stride

mosaic map映射表stride

ot_venc_get_svc_mask_size

svc mask表大小

ot_vpss_get_mcf_color_buf_size

MCF场景彩色通路VPSS通道VB大小,仅Hi3519DV500支持

ot_vpss_get_mcf_mono_buf_size

MCF场景黑白通路VPSS通道VB大小,仅Hi3519DV500支持

ot_gdc_get_lut_buf_stride

GDC lut表stride,仅Hi3519DV500支持

ot_common_get_fmu_wrap_page_num

FMU卷绕空间页表个数,仅Hi3519DV500支持

ot_comm_get_vpss_venc_wrap_buf_size

vpss和venc卷绕空间大小,仅Hi3516CV610/Hi3516CV608支持