跳转至

SYS(系统管理)接口说明文档

文档版本 V1.1
修订日期 2026-08-21
代码基线 hi_aiot_solution 8.18
对应头文件 components/media/pipeline/include/hi_mapi_sys.h
类型定义 components/media/pipeline/include/hi_mapi_sys.hcomponents/media/pipeline/include/hi_mapi_comm_define.hinclude/adapt/*_adapt_define.h
适用模块 SYS / HI3516CV610

1 概述

SYS 模块负责 pipeline 的全局初始化、媒体子系统(VCAP/VPSS/VENC/ACAP/AENC/AO/DISP)的启动编排、MMZ 物理内存与 VB 视频块分配跟踪,以及模块之间的软/硬绑定维护。任何媒体操作之前必须先调用 hi_mapi_sys_inithi_mapi_sys_init_media

2 接口总览

编号 接口 功能概述
1 hi_mapi_sys_init 初始化系统模块,包含 LiteOS 与 Linux 之间的消息通道初始化;必须作为 MAPI 的第一个入口调用,HuaweiLite 与 Linux 双端的应用均需要调用。
2 hi_mapi_sys_deinit 反初始化系统模块,释放内部 bind 关系并调用 HAL 层 deinit。
3 hi_mapi_sys_get_default_media_attr 根据基础媒体属性 base_attr 推导并填充一个可直接使用的默认 media_attr(含 VI/VPSS 工作模式、VB 配置、VENC/ISP/Audio 默认参数),供 hi_mapi_sys_init_media 使用。
4 hi_mapi_sys_init_media 初始化媒体子系统,依次创建 VB 池、视频模块(VCAP/ISP/VPSS/VENC/DISP)、音频模块(ACAP/AENC/AO)、VB 分配跟踪上下文与 soft_bind 轮询线程。必须在 hi_mapi_sys_init 之后、任何模块接口(如 hi_mapi_vcap_*hi_mapi_vpss_*hi_mapi_venc_*hi_mapi_ao_*)之前调用。
5 hi_mapi_sys_deinit_media 反初始化媒体子系统,依次关闭 VENC、音频、VPSS、DISP、VCAP、VB 分配跟踪上下文、SYS media,并停止 soft_bind 轮询线程。
6 hi_mapi_sys_alloc_buffer 从 MMZ 分配一段物理连续内存,返回物理地址与虚拟地址。
7 hi_mapi_sys_free_buffer 释放由 hi_mapi_sys_alloc_buffer 分配的 MMZ 缓冲区。
8 hi_mapi_sys_flush_cache 对 cache 型 MMZ 缓冲区执行 cache 刷新(clean + invalidate),保证 CPU 与设备看到的数据一致。
9 hi_mapi_sys_get_video_block 从 VB 池申请一个视频块,返回其物理地址与 mmap 后的虚拟地址;与 hi_mapi_sys_release_video_block 配对使用。
10 hi_mapi_sys_release_video_block 释放由 hi_mapi_sys_get_video_block 申请的视频块,归还 VB 池。
11 hi_mapi_sys_register_font_attr 注册 OSD 字体库属性,包括字号(宽/高)与字符点阵回调;同一进程只能注册一次。
12 hi_mapi_sys_bind 将源通道(src)绑定到目标通道(dst)。内部维护一个 bind 表,同一 (src, dst) 重复绑定直接返回成功且不派发到底层 SDK;每个 dst 只能绑定一个 src。
13 hi_mapi_sys_unbind 解绑之前由 hi_mapi_sys_bind 建立的 (src, dst) 绑定。若该对未在内部 bind 表中,直接返回成功且不派发到底层 SDK。

3 API 参考

1 hi_mapi_sys_init

【描述】 初始化系统模块,包含 LiteOS 与 Linux 之间的消息通道初始化;必须作为 MAPI 的第一个入口调用,HuaweiLite 与 Linux 双端的应用均需要调用。

【语法】

td_s32 hi_mapi_sys_init(td_void);

【参数】 无。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 必须最先调用;hi_mapi_sys_bind/hi_mapi_sys_unbind 会在本接口内初始化内部 bind 关系表,调用失败则返回对应错误码。
  • hi_mapi_sys_deinit 配对使用。

【举例】 无

【相关主题】 hi_mapi_sys_deinithi_mapi_sys_init_media

2 hi_mapi_sys_deinit

【描述】 反初始化系统模块,释放内部 bind 关系表并调用 HAL 层 deinit。

【语法】

td_s32 hi_mapi_sys_deinit(td_void);

【参数】 无。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 必须先调用 hi_mapi_sys_deinit_media 释放媒体资源,再调用本接口。

【举例】 无

【相关主题】 hi_mapi_sys_init

3 hi_mapi_sys_get_default_media_attr

【描述】 根据基础媒体属性 base_attr 推导并填充一个可直接使用的默认 media_attr(含 VI/VPSS 工作模式、VB 配置、VENC/ISP/Audio 默认参数),供 hi_mapi_sys_init_media 使用。

【语法】

td_s32 hi_mapi_sys_get_default_media_attr(const hi_mapi_sys_base_attr *base_attr, hi_mapi_sys_media_attr *media_attr);

【参数】

参数名称 输入/输出 类型 描述
base_attr 输入 const hi_mapi_sys_base_attr * 基础属性指针,不能为 NULL。成员描述见下表。
media_attr 输出 hi_mapi_sys_media_attr * 输出的媒体属性,不能为 NULL

hi_mapi_sys_base_attr 成员:

成员名称 描述
vcap_dev_num VCAP 设备数,HI3516CV610 上取值范围 [0, 2]
vcap_reso_size[vcap_dev_num] 每个 VCAP 设备 sensor 输出分辨率(宽×高)。
vcap_online[vcap_dev_num] 每个 VCAP 设备是否 online 工作;多设备时必须全部为 TD_FALSE
raw_bit_width RAW 数据位宽(8/10/12/14/16)。
is_wdr 是否启用 WDR。
vpss_grp_num VPSS 组数,取值范围 [0, 6](HI3516CV610)。
vpss_chn_num 每组 VPSS 的通道数。
vpss_reso_size[vpss_grp_num][vpss_chn_num] 每路 VPSS 通道输出分辨率。
vpss_online[vpss_grp_num] 每路 VPSS 是否 online 工作。
vpss_wrap_en[vpss_grp_num] 每路 VPSS 通道 0 是否启用卷绕(wrap)省内存模式。
vi_wrap_en[vcap_dev_num] 每路 VI pipe 是否启用卷绕;双设备时两路必须相同。
sensor_full_lines_std[vcap_dev_num] sensor 标准帧总行数,用于 wrap buf_line 计算。
frame_rate[vcap_dev_num] sensor 帧率。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_SYS_ENULL_PTR base_attrmedia_attrNULL
HI_MAPI_SYS_EILLEGAL_PARAM vcap_dev_num > 2vpss_grp_num > 6,或 online/offline 组合不合法(双设备必须 offline;VCAP online + VPSS online 仅允许 vpss_grp_num == 1;若任一 vpss_online[i] 为真,则所有 vpss_online[i] 必须为真)。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 应在 hi_mapi_sys_init 之后、hi_mapi_sys_init_media 之前调用。
  • 双输入场景(vcap_dev_num > 1)下所有 vi_wrap_en[] 必须相同,否则返回 HI_MAPI_SYS_EILLEGAL_PARAM

【举例】 无

【相关主题】 hi_mapi_sys_init_mediahi_mapi_sys_base_attrhi_mapi_sys_media_attr

4 hi_mapi_sys_init_media

【描述】 初始化媒体子系统,依次创建 VB 池、视频模块(VCAP/ISP/VPSS/VENC/DISP)、音频模块(ACAP/AENC/AO)、VB 分配跟踪上下文与 soft_bind 轮询线程。必须在 hi_mapi_sys_init 之后、任何模块接口(如 hi_mapi_vcap_*hi_mapi_vpss_*hi_mapi_venc_*hi_mapi_ao_*)之前调用。

【语法】

td_s32 hi_mapi_sys_init_media(const hi_mapi_sys_media_attr *media_attr);

【参数】

参数名称 输入/输出 类型 描述
media_attr 输入 const hi_mapi_sys_media_attr * 媒体属性指针,不能为 NULL;通常由 hi_mapi_sys_get_default_media_attr 填充。

hi_mapi_sys_media_attr 成员:

成员名称 描述
media_config 媒体配置(vi_vpss_modevb_config)。
venc_mod_para VENC 低功耗模式参数(默认各 TD_TRUE)。
isp_mod_para ISP 工作模式参数(param_valid=TD_FALSE 时跳过 ISP 模式配置)。
audio_mod_para 音频配置(audio_bypass=TD_TRUE 则跳过音频初始化)。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_SYS_ENULL_PTR media_attrNULL
TD_SUCCESS(重复调用) 若媒体已初始化,直接返回成功(幂等)。
HI_MAPI_SYS_ENOTREADY soft_bind 互斥量初始化失败。
HI_MAPI_SYS_EBUSY soft_bind 轮询线程创建失败。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 必须在 hi_mapi_sys_init 之后调用。
  • 失败时会自动回滚已初始化的音频/视频/SYS media 资源。

【举例】 无

【相关主题】 hi_mapi_sys_deinit_mediahi_mapi_sys_get_default_media_attr

5 hi_mapi_sys_deinit_media

【描述】 反初始化媒体子系统,依次关闭 VENC、音频、VPSS、DISP、VCAP、VB 分配跟踪上下文、SYS media,并停止 soft_bind 轮询线程。

【语法】

td_s32 hi_mapi_sys_deinit_media(td_void);

【参数】 无。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
TD_SUCCESS(未初始化) 若媒体未初始化,直接返回成功(幂等)。
HI_MAPI_SYS_EBUSY 任意子模块 deinit 返回失败(best-effort,不会中断流程)。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 调用前应先 hi_mapi_sys_unbind 所有绑定并停止所有 VCAP/VPSS/VENC/ACAP/AENC/AO 设备。
  • 必须与 hi_mapi_sys_init_media 配对。

【举例】 无

【相关主题】 hi_mapi_sys_init_media

6 hi_mapi_sys_alloc_buffer

【描述】 从 MMZ 分配一段物理连续内存,返回物理地址与虚拟地址。

【语法】

td_s32 hi_mapi_sys_alloc_buffer(td_u64 *phy_addr, td_void **virt_addr, td_u32 buf_len, const td_char *buf_name,
    td_bool is_cache);

【参数】

参数名称 输入/输出 类型 描述
phy_addr 输出 td_u64 * 输出物理地址,不能为 NULL
virt_addr 输出 td_void ** 输出虚拟地址,不能为 NULL
buf_len 输入 td_u32 缓冲区长度,单位字节,必须 > 0
buf_name 输入 const td_char * 缓冲区名称(便于调试),不能为 NULL
is_cache 输入 td_bool 是否分配 cache 型内存;TD_TRUE 表示 cache,TD_FALSE 表示 non-cache。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_SYS_ENULL_PTR phy_addr/virt_addr/buf_name 任一为 NULL
HI_MAPI_SYS_ENOTREADY 媒体未初始化(hi_mapi_sys_init_media 未调用)。
HI_MAPI_SYS_EILLEGAL_PARAM buf_len == 0

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 必须与 hi_mapi_sys_free_buffer 配对。
  • 使用 cache 型内存时需配合 hi_mapi_sys_flush_cache 保证一致性。

【举例】 无

【相关主题】 hi_mapi_sys_free_bufferhi_mapi_sys_flush_cache

7 hi_mapi_sys_free_buffer

【描述】 释放由 hi_mapi_sys_alloc_buffer 分配的 MMZ 缓冲区。

【语法】

td_s32 hi_mapi_sys_free_buffer(td_u64 phy_addr, td_void *virt_addr, td_u32 buf_len);

【参数】

参数名称 输入/输出 类型 描述
phy_addr 输入 td_u64 缓冲区的物理地址。
virt_addr 输入 td_void * 缓冲区的虚拟地址,不能为 NULL
buf_len 输入 td_u32 缓冲区长度(当前版本未使用,保留参数)。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_SYS_ENULL_PTR virt_addrNULL
HI_MAPI_SYS_ENOTREADY 媒体未初始化。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 必须与 hi_mapi_sys_alloc_buffer 成对使用,物理/虚拟地址须一致。

【举例】 无

【相关主题】 hi_mapi_sys_alloc_buffer

8 hi_mapi_sys_flush_cache

【描述】 对 cache 型 MMZ 缓冲区执行 cache 刷新(clean + invalidate),保证 CPU 与设备看到的数据一致。

【语法】

td_s32 hi_mapi_sys_flush_cache(td_u64 phy_addr, td_void *virt_addr, td_u32 buf_len);

【参数】

参数名称 输入/输出 类型 描述
phy_addr 输入 td_u64 缓冲区的物理地址。
virt_addr 输入 td_void * 缓冲区的虚拟地址,不能为 NULL
buf_len 输入 td_u32 刷新长度,单位字节。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_SYS_ENULL_PTR virt_addrNULL
HI_MAPI_SYS_ENOTREADY 媒体未初始化。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 仅对 is_cache=TD_TRUE 分配的缓冲区有意义。

【举例】 无

【相关主题】 hi_mapi_sys_alloc_buffer

9 hi_mapi_sys_get_video_block

【描述】 从 VB 池申请一个视频块,返回其物理地址与 mmap 后的虚拟地址;与 hi_mapi_sys_release_video_block 配对使用。

【语法】

td_s32 hi_mapi_sys_get_video_block(td_handle *pool_hdl, td_u64 *phy_addr, td_void **vir_addr, td_u64 blk_size,
    const td_char *mmz_name);

【参数】

参数名称 输入/输出 类型 描述
pool_hdl 输入 td_handle * VB 池句柄指针,不能为 NULL(一般取已创建池句柄的地址)。
phy_addr 输出 td_u64 * 视频块物理地址,不能为 NULL
vir_addr 输出 td_void ** 视频块虚拟地址,不能为 NULL
blk_size 输入 td_u64 块大小,单位字节;必须不超过 td_u32 最大值。
mmz_name 输入 const td_char * 所在 DDR 的 MMZ 名字;可为 NULL 表示使用默认 MMZ。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_SYS_ENULL_PTR pool_hdl/phy_addr/vir_addr 任一为 NULL
HI_MAPI_SYS_ENOTREADY 媒体未初始化。
HI_MAPI_SYS_EILLEGAL_PARAM blk_size 超过上限,或 mmap 失败,或分配记录写入失败。
HI_MAPI_SYS_ENOMEM 分配记录节点内存申请失败。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 必须与 hi_mapi_sys_release_video_block 配对,phy_addr/vir_addr 必须一致。
  • hi_mapi_sys_deinit_media 会强制回收未释放的残留块。

【举例】 无

【相关主题】 hi_mapi_sys_release_video_block

10 hi_mapi_sys_release_video_block

【描述】 释放由 hi_mapi_sys_get_video_block 申请的视频块,归还 VB 池;与 hi_mapi_sys_get_video_block 配对使用。

【语法】

td_s32 hi_mapi_sys_release_video_block(td_u64 phy_addr, td_void *vir_addr);

【参数】

参数名称 输入/输出 类型 描述
phy_addr 输入 td_u64 视频块物理地址,必须非 0 且为当前持有的(get 后尚未 release)。
vir_addr 输入 td_void * 视频块虚拟地址,必须与 get 时返回的一致;不能为 NULL

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_SYS_ENULL_PTR vir_addrNULL
HI_MAPI_SYS_ENOTREADY 媒体未初始化。
HI_MAPI_SYS_EILLEGAL_PARAM phy_addr == 0,或该地址未被跟踪(未 get 或已 release),或 vir_addr 与记录不符。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 不得重复释放同一 phy_addr

【举例】 无

【相关主题】 hi_mapi_sys_get_video_block

11 hi_mapi_sys_register_font_attr

【描述】 注册 OSD 字体库属性,包括字号(宽/高)与字符点阵回调;同一进程只能注册一次。

【语法】

td_s32 hi_mapi_sys_register_font_attr(const hi_mapi_sys_font_attr *font_attr);

【参数】

参数名称 输入/输出 类型 描述
font_attr 输入 const hi_mapi_sys_font_attr * 字体属性指针,不能为 NULL

hi_mapi_sys_font_attr 成员:

成员名称 描述
font_width 字体宽度,单位像素,必须 > 0 且为 MAPI_FONT_BYTE_BITS(8)的整数倍。
font_height 字体高度,单位像素,必须 > 0
get_font_mod_cb 字符点阵获取回调,不能为 NULL

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_SYS_ENULL_PTR font_attrNULL,或 font_attr->get_font_mod_cbNULL
HI_MAPI_SYS_EILLEGAL_PARAM font_widthfont_height 为 0,或 font_width 不是 8 的倍数。
HI_MAPI_SYS_ENOT_PERM 已重复注册(每个进程仅可注册一次)。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 必须在 OSD 使用前完成注册,重复调用返回 HI_MAPI_SYS_ENOT_PERM

【举例】 无

【相关主题】 hi_mapi_sys_font_attr

12 hi_mapi_sys_bind

【描述】 将源通道(src)绑定到目标通道(dst)。内部维护一个 bind 表,同一 (src, dst) 重复绑定直接返回成功且不派发到底层 SDK;每个 dst 只能绑定一个 src。

【语法】

td_s32 hi_mapi_sys_bind(const hi_mapi_mpp_chn *src_chn, const hi_mapi_mpp_chn *dst_chn);

【参数】

参数名称 输入/输出 类型 描述
src_chn 输入 const hi_mapi_mpp_chn * 源通道描述符,不能为 NULL
dst_chn 输入 const hi_mapi_mpp_chn * 目标通道描述符,不能为 NULL

hi_mapi_mpp_chn 成员:

成员名称 描述
mod_id 模块 ID,必须在 bind 白名单内:HI_MAPI_MOD_VCAPHI_MAPI_MOD_VPSSHI_MAPI_MOD_VENCHI_MAPI_MOD_VDECHI_MAPI_MOD_DISPHI_MAPI_MOD_ACAPHI_MAPI_MOD_AENCHI_MAPI_MOD_ADECHI_MAPI_MOD_AO
dev_id 设备 ID,必须 >= 0
chn_id 通道 ID,必须 >= 0

【返回值】

返回值 描述
0 成功(含重复绑定)。
非0 失败,其值为错误码。
HI_MAPI_SYS_ENOTREADY 内部 bind 上下文未初始化(未调用 hi_mapi_sys_init)。
HI_MAPI_SYS_ENULL_PTR src_chndst_chnNULL
HI_MAPI_SYS_EILLEGAL_PARAM 通道 mod_id 不在白名单,或 dev_id < 0/chn_id < 0,或 src == dst
HI_MAPI_SYS_EBUSY dst_chn 已被其它 src 绑定,或 soft bind 条目数已满(最多 2 个 DISP 软绑定),或 bind 表已满(最多 64 个)。

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • 目标为 HI_MAPI_MOD_DISP 的绑定走软绑定路径:内部启动一个轮询线程周期从源取帧并下发到 DISP。
  • hi_mapi_sys_unbind 配对使用。

【举例】

hi_mapi_mpp_chn src, dst;
src.mod_id = HI_MAPI_MOD_VCAP;  src.dev_id = 0;  src.chn_id = 0;
dst.mod_id = HI_MAPI_MOD_VPSS;  dst.dev_id = 0;  dst.chn_id = 0;
ret = hi_mapi_sys_bind(&src, &dst);

【相关主题】 hi_mapi_sys_unbindhi_mapi_mpp_chn

13 hi_mapi_sys_unbind

【描述】 解绑之前由 hi_mapi_sys_bind 建立的 (src, dst) 绑定。若该对未在内部 bind 表中,直接返回成功且不派发到底层 SDK。

【语法】

td_s32 hi_mapi_sys_unbind(const hi_mapi_mpp_chn *src_chn, const hi_mapi_mpp_chn *dst_chn);

【参数】

参数名称 输入/输出 类型 描述
src_chn 输入 const hi_mapi_mpp_chn * 源通道描述符,不能为 NULL,字段约束同 hi_mapi_sys_bind
dst_chn 输入 const hi_mapi_mpp_chn * 目标通道描述符,不能为 NULL

【返回值】

返回值 描述
0 成功(含未绑定时直接返回成功)。
非0 失败,其值为错误码。
HI_MAPI_SYS_ENOTREADY 内部 bind 上下文未初始化。
HI_MAPI_SYS_ENULL_PTR src_chndst_chnNULL
HI_MAPI_SYS_EILLEGAL_PARAM 通道 mod_id 不在白名单,或 dev_id < 0/chn_id < 0

【需求】

  • 头文件:hi_mapi_sys.h
  • 库文件:libhi_mapi.so

【注意】

  • hi_mapi_sys_bind 配对使用;hi_mapi_sys_deinit 时会一次性 flush 所有绑定。

【举例】

hi_mapi_mpp_chn src, dst;
src.mod_id = HI_MAPI_MOD_VCAP;  src.dev_id = 0;  src.chn_id = 0;
dst.mod_id = HI_MAPI_MOD_VPSS;  dst.dev_id = 0;  dst.chn_id = 0;
(void)hi_mapi_sys_unbind(&src, &dst);

【相关主题】 hi_mapi_sys_bind

4 数据类型

1 hi_mapi_sys_base_attr

【说明】 描述媒体子系统的基础属性,包含 VCAP / VPSS 的设备数、分辨率、在线模式、VB 卷绕、sensor 帧率等信息,由 hi_mapi_sys_get_default_media_attr 根据它推导出一套可用的 media_attr

【定义】

typedef struct {
    td_u32       vcap_dev_num;
    hi_mapi_size vcap_reso_size[HI_MAPI_VCAP_MAX_DEV_NUM];
    td_bool      vcap_online[HI_MAPI_VCAP_MAX_DEV_NUM];
    td_u32       raw_bit_width;
    td_bool      is_wdr;

    td_u32       vpss_grp_num;
    td_u32       vpss_chn_num;
    hi_mapi_size vpss_reso_size[HI_MAPI_VPSS_MAX_NUM][HI_MAPI_VPSS_CHN_MAX_NUM];
    td_bool      vpss_online[HI_MAPI_VPSS_MAX_NUM];
    td_bool      vpss_wrap_en[HI_MAPI_VPSS_MAX_NUM];
    td_bool      vi_wrap_en[HI_MAPI_VCAP_MAX_DEV_NUM];
    td_u32       sensor_full_lines_std[HI_MAPI_VCAP_MAX_DEV_NUM];
    td_u32       frame_rate[HI_MAPI_VCAP_MAX_DEV_NUM];
} hi_mapi_sys_base_attr;

数组维度在 HI3516CV610 上解析为:HI_MAPI_VCAP_MAX_DEV_NUM = 2HI_MAPI_VPSS_MAX_NUM = 6HI_MAPI_VPSS_CHN_MAX_NUM = 5

【成员】

成员名称 描述
vcap_dev_num 使用的 VCAP 设备数量,范围 [1, 2]
vcap_reso_size[i] i 个 VCAP 设备的 sensor 输出分辨率(宽 × 高,单位像素),i ∈ [0, 1]
vcap_online[i] i 个 VCAP 设备是否在线模式,HI_TRUE 在线 / HI_FALSE 离线。
raw_bit_width RAW 数据位宽,单位 bit,常用取值 8 / 10 / 12 / 14 / 16
is_wdr 是否启用 WDR(宽动态),HI_TRUE 启用 / HI_FALSE 禁用。
vpss_grp_num 使用的 VPSS group 数量,范围 [0, 6]
vpss_chn_num 每个 VPSS group 使用的通道数量,范围 [0, 5]
vpss_reso_size[i][j] i 个 group 第 j 个通道的输出分辨率,i ∈ [0, 5]j ∈ [0, 4]
vpss_online[i] i 个 VPSS group 是否在线模式。
vpss_wrap_en[i] i 个 VPSS group 的通道 0 是否启用卷绕(buffer wrap)。
vi_wrap_en[i] i 个 VCAP 设备的 VI pipe 是否启用卷绕(仅 offline 模式有效)。
sensor_full_lines_std[i] i 个 sensor 的总行高(含 VBlank),单位行。
frame_rate[i] i 个 VCAP 设备的 sensor 输出帧率,单位 fps。

【注意事项】

  • 数组下标按 CV610 实际维度使用,越界将返回 HI_MAPI_SYS_ARRAY_OUT_BOUNDS
  • is_wdr = HI_TRUE 时需保证 raw_bit_width 与 sensor WDR 模式匹配。

【相关数据类型及接口】 hi_mapi_sizehi_mapi_sys_media_attrhi_mapi_sys_get_default_media_attrhi_mapi_sys_init_media

2 hi_mapi_sys_media_config

【说明】 描述媒体初始化所需的 VI/VPSS 工作模式与 VB 池配置。

【定义】

typedef struct {
    hi_mapi_sys_vi_vpss_mode vi_vpss_mode;
    hi_mapi_sys_vb_config    vb_config;
} hi_mapi_sys_media_config;

【成员】

成员名称 描述
vi_vpss_mode VI / VPSS 在线-离线工作模式数组,长度 HI_MAPI_VI_VPSS_MAX_MODE_NUM = 4;每个元素取值参见 hi_mapi_vi_vpss_modeVI_OFFLINE_VPSS_OFFLINE / VI_OFFLINE_VPSS_ONLINE / VI_ONLINE_VPSS_OFFLINE / VI_ONLINE_VPSS_ONLINE / VI_PARALLEL_VPSS_OFFLINE / VI_PARALLEL_VPSS_PARALLEL)。
vb_config 视频缓冲池配置;max_pool_cnt 范围 (0, 96]comm_pool 数组长度 HI_MAPI_VB_MAX_COMMON_POOLS = 16;每个池条目含 blk_sizeblk_cntremap_modemmz_name[32]

【注意事项】

  • hi_mapi_sys_get_default_media_attr 会根据 hi_mapi_sys_base_attr 自动填充本结构,应用层通常无需手工构造。

【相关数据类型及接口】 hi_mapi_sys_vi_vpss_modehi_mapi_sys_vb_confighi_mapi_sys_vb_pool_confighi_mapi_sys_media_attrhi_mapi_sys_init_media

3 hi_mapi_sys_media_attr

【说明】 聚合媒体子系统初始化所需的全部参数(VI/VPSS 模式、VB 配置、VENC/ISP/音频工作模式),作为 hi_mapi_sys_init_media 的入参。

【定义】

typedef struct {
    hi_mapi_sys_media_config  media_config;
    hi_mapi_sys_venc_mode_param venc_mod_para;
    hi_mapi_isp_param_mode    isp_mod_para;
    hi_mapi_audio_param_mode  audio_mod_para;
} hi_mapi_sys_media_attr;

【成员】

成员名称 描述
media_config VI/VPSS 工作模式与 VB 池配置,参见 hi_mapi_sys_media_config
venc_mod_para VENC 模块低功耗模式参数,参见 hi_mapi_sys_venc_mode_param
isp_mod_para ISP 模块工作模式参数,参见 hi_mapi_isp_param_mode
audio_mod_para 音频模块旁路与 VQE 配置,参见 hi_mapi_audio_param_mode

【注意事项】 无

【相关数据类型及接口】 hi_mapi_sys_media_confighi_mapi_sys_venc_mode_paramhi_mapi_isp_param_modehi_mapi_audio_param_modehi_mapi_sys_init_mediahi_mapi_sys_get_default_media_attr

4 hi_mapi_sys_venc_mode_param

【说明】 描述 VENC 模块各编码格式的低功耗模式参数。

【定义】

typedef struct {
    td_u32 h264e_low_power_mode;
    td_u32 h265e_low_power_mode;
    td_u32 svac3e_low_power_mode;
} hi_mapi_sys_venc_mode_param;

【成员】

成员名称 描述
h264e_low_power_mode H.264 编码低功耗模式,取值范围 [0, 2]
h265e_low_power_mode H.265 编码低功耗模式,取值范围 [0, 2]
svac3e_low_power_mode SVAC3 编码低功耗模式,取值范围 [0, 2]

【注意事项】 无

【相关数据类型及接口】 hi_mapi_sys_media_attrhi_mapi_sys_init_media

5 hi_mapi_isp_param_mode

【说明】 描述 ISP 模块的工作模式参数(参数有效性、快速启动、中断底半部)。

【定义】

typedef struct {
    td_bool param_valid;
    td_bool quick_start;
    td_bool int_bottom_half;
} hi_mapi_isp_param_mode;

【成员】

成员名称 描述
param_valid 参数是否有效,HI_TRUE 使用本结构中的参数 / HI_FALSE 使用默认值。
quick_start 是否启用 ISP 快速启动,HI_TRUE 启用 / HI_FALSE 禁用。
int_bottom_half 是否启用中断底半部处理,HI_TRUE 启用 / HI_FALSE 禁用。

【注意事项】 无

【相关数据类型及接口】 hi_mapi_sys_media_attrhi_mapi_sys_init_media

6 hi_mapi_audio_param_mode

【说明】 描述音频模块的旁路与 VQE(语音质量增强)配置。

【定义】

typedef struct {
    td_bool              audio_bypass;
    hi_mapi_audio_vqe_attr vqe_attr;
} hi_mapi_audio_param_mode;

【成员】

成员名称 描述
audio_bypass 音频旁路开关,HI_TRUE 启用旁路(不经过 VQE) / HI_FALSE 正常处理。
vqe_attr VQE 配置,包含 talk_vqe_attr.open_mask(对讲 VQE 掩码)与 ao_vqe_attr.open_mask(AO VQE 掩码),掩码位定义参见关键常量中音频 VQE 掩码常量。

【注意事项】 无

【相关数据类型及接口】 hi_mapi_audio_vqe_attrhi_mapi_audio_talk_vqe_attrhi_mapi_audio_ao_vqe_attrhi_mapi_sys_media_attrhi_mapi_sys_init_media

7 hi_mapi_sys_font_attr

【说明】 描述 OSD 字体库属性,包括字号与字符点阵回调。同一进程只能注册一次。

【定义】

typedef struct {
    td_u32                       font_width;
    td_u32                       font_height;
    hi_mapi_sys_get_font_mod_cb  get_font_mod_cb;
} hi_mapi_sys_font_attr;

其中回调类型定义为:

typedef td_s32 (*hi_mapi_sys_get_font_mod_cb)(const td_char *character,
                                              td_u8       **font_mod,
                                              td_s32       *font_mod_len);

【成员】

成员名称 描述
font_width 字体宽度,单位像素。
font_height 字体高度,单位像素。
get_font_mod_cb 字符点阵回调:输入 UTF-8 字符 character,返回点阵数据指针 font_mod 与长度 font_mod_len(字节),成功返回 0,失败返回非 0

【注意事项】

  • hi_mapi_sys_register_font_attr 同一进程只能注册一次,重复注册将返回错误。
  • 回调函数必须线程安全。

【相关数据类型及接口】 hi_mapi_sys_register_font_attrhi_mapi_osd_init

5 错误码

模块编号 mod=0,错误码基址 0xA3008000

错误代码 宏定义 描述
0xA3008018 HI_MAPI_SYS_ESAFEFUNC_OPERATE_FAIL 安全函数操作失败。
0xA300801B HI_MAPI_SYS_ARRAY_OUT_BOUNDS 数组越界。
0xA300801C HI_MAPI_SYS_VALUE_OVERFLOW 值溢出。