跳转至

OSD(叠加显示)接口说明文档

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

1 概述

OSD 模块用于在视频流、显示画面或编码输出上叠加时间、字符串、位图、圆形等图形元素。系统最多支持 16 个 OSD 实例(osd_idx ∈ [0, 15]),每个实例可绑定到多个显示目标(VCAP / VPSS / VENC / DISP 等),绑定数最多 4 个。hi_mapi_osd_init 在内部会创建内容更新线程;若字体库已经初始化,还会额外创建时间字符串更新线程。典型调用流程:hi_mapi_osd_inithi_mapi_osd_set_attrhi_mapi_osd_start → (运行期通过 hi_mapi_osd_set_attr 动态更新内容)→ hi_mapi_osd_stophi_mapi_osd_deinit

2 接口总览

编号 接口 功能概述
1 hi_mapi_osd_init 初始化 OSD 模块,创建 OSD 内容更新线程;如字体库已初始化,还会创建时间 OSD 自动刷新线程。
2 hi_mapi_osd_deinit 去初始化 OSD 模块,停止所有 OSD 实例、销毁更新线程并释放资源。
3 hi_mapi_osd_set_attr 设置指定 OSD 实例的属性(包括显示目标、内容类型、颜色、位置等)。
4 hi_mapi_osd_get_attr 获取指定 OSD 实例的当前属性。
5 hi_mapi_osd_start 启动指定 OSD 实例:创建底层 region 并将其 attach 到所绑定的通道。
6 hi_mapi_osd_stop 停止指定 OSD 实例,将其从绑定通道 detach 并销毁 region。
7 hi_mapi_osd_batch batch_id 成组地切换一批 OSD 的显隐状态。

3 API 参考

1 hi_mapi_osd_init

【描述】 初始化 OSD 模块,创建 OSD 内容更新线程;如字体库已初始化,还会创建时间 OSD 自动刷新线程。

【语法】

td_s32 hi_mapi_osd_init(td_void);

【参数】 无

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_OSD_ENOT_INITED MAPI 系统尚未初始化。
HI_MAPI_OSD_ENOMEM 创建线程失败。

【需求】

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

【注意】

  • 重复调用:若已初始化,直接返回成功。
  • 必须先调用 hi_mapi_sys_init / hi_mapi_sys_media_init 等系统初始化函数。

【举例】 无

【相关主题】 hi_mapi_osd_deinit

2 hi_mapi_osd_deinit

【描述】 去初始化 OSD 模块,停止所有 OSD 实例、销毁更新线程并释放资源。

【语法】

td_s32 hi_mapi_osd_deinit(td_void);

【参数】 无

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_OSD_ENOT_INITED MAPI 系统未初始化,或 OSD 模块尚未初始化。

【需求】

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

【注意】 无

【举例】 无

【相关主题】 hi_mapi_osd_init

3 hi_mapi_osd_set_attr

【描述】 设置指定 OSD 实例的属性(包括显示目标、内容类型、颜色、位置等)。

【语法】

td_s32 hi_mapi_osd_set_attr(td_u32 osd_idx, const hi_mapi_osd_attr *osd_attr);

【参数】

参数名称 输入/输出 类型 描述
osd_idx 输入 td_u32 OSD 索引,范围 [0, 15]
osd_attr 输入 const hi_mapi_osd_attr * OSD 属性,不能为 NULL

hi_mapi_osd_attr 成员:

成员名称 描述
disp_num 绑定的显示目标个数,范围 [1, 4]
disp_attr 显示目标属性数组(HI_MAPI_OSD_MAX_DISP_CNT = 4)。
osd_content OSD 内容(类型、颜色,以及对应联合体成员)。

hi_mapi_osd_disp_attr 成员:

成员名称 描述
show 是否显示。
binded_mod 绑定模块(VCAP / VPSS / VENC / DISPSTITCH 在 HI3516CV610 不支持)。
mod_hdl 绑定模块的设备句柄。
chn_hdl 绑定模块的通道句柄。
fg_alpha 前景透明度。
bg_alpha 背景透明度。
coordinate_mod 坐标模式:HI_MAPI_OSD_COORDINATE_RATIO_COOR(比例坐标,范围 [0, 100])或 HI_MAPI_OSD_COORDINATE_ABS_COOR(绝对坐标,单位:像素)。
start_pos OSD 起点坐标。
attach_dest 仅 VENC 绑定时有效,指定 JPEG 附加目标。
batch_id 批控制 ID,用于 hi_mapi_osd_batch 成组显隐。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_OSD_ENULL_PTR osd_attr 为空指针;或 type = BITMAPbitmap_content.data 为空指针。
HI_MAPI_OSD_ENOT_INITED MAPI 系统或 OSD 模块未初始化。
HI_MAPI_OSD_EHANDLE_ILLEGAL osd_idx 越界。
HI_MAPI_OSD_EILLEGAL_PARAM disp_num 越界,或 binded_mod / coordinate_mod / attach_dest 非法,或绑定了不支持 CIRCLE 类型的 VENC/STITCH,或时间格式非法。
HI_MAPI_OSD_ENOFONT 类型为 TIMESTRING 时,字体库尚未初始化。

【需求】

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

【注意】

  • OSD 已 start 时仍可调用本接口:内容变更会在后台更新线程中异步应用。
  • 字符串 OSD 的字符串长度不得超过 HI_MAPI_MAX_STR_LEN(64 字节)。

【举例】 无

【相关主题】 hi_mapi_osd_get_attrhi_mapi_osd_start

4 hi_mapi_osd_get_attr

【描述】 获取指定 OSD 实例的当前属性。

【语法】

td_s32 hi_mapi_osd_get_attr(td_u32 osd_idx, hi_mapi_osd_attr *osd_attr);

【参数】

参数名称 输入/输出 类型 描述
osd_idx 输入 td_u32 OSD 索引,范围 [0, 15]
osd_attr 输出 hi_mapi_osd_attr * 接收 OSD 属性,不能为 NULL

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_OSD_EHANDLE_ILLEGAL osd_idx 越界。
HI_MAPI_OSD_ENULL_PTR osd_attr 为空指针。
HI_MAPI_OSD_ENOT_INITED MAPI 系统或 OSD 模块未初始化。
HI_MAPI_OSD_ENOT_PERM osd_idx 尚未通过 hi_mapi_osd_set_attr 设置过属性。

【需求】

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

【注意】 无

【举例】 无

【相关主题】 hi_mapi_osd_set_attr

5 hi_mapi_osd_start

【描述】 启动指定 OSD 实例:创建底层 region 并将其 attach 到所绑定的通道。

【语法】

td_s32 hi_mapi_osd_start(td_u32 osd_idx);

【参数】

参数名称 输入/输出 类型 描述
osd_idx 输入 td_u32 OSD 索引,范围 [0, 15]

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_OSD_EHANDLE_ILLEGAL osd_idx 越界。
HI_MAPI_OSD_ENOT_INITED MAPI 系统或 OSD 模块未初始化。
HI_MAPI_OSD_ENOT_PERM osd_idx 尚未 set_attr

【需求】

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

【注意】

  • 重复启动已启动的 OSD 直接返回成功。
  • 调用前必须先调用 hi_mapi_osd_set_attr

【举例】 无

【相关主题】 hi_mapi_osd_stophi_mapi_osd_set_attr

6 hi_mapi_osd_stop

【描述】 停止指定 OSD 实例,将其从绑定通道 detach 并销毁 region。

【语法】

td_s32 hi_mapi_osd_stop(td_u32 osd_idx);

【参数】

参数名称 输入/输出 类型 描述
osd_idx 输入 td_u32 OSD 索引,范围 [0, 15]

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_OSD_EHANDLE_ILLEGAL osd_idx 越界。
HI_MAPI_OSD_ENOT_INITED MAPI 系统或 OSD 模块未初始化。

【需求】

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

【注意】

  • 若 OSD 已经处于停止状态或未设置过属性,直接返回成功。

【举例】 无

【相关主题】 hi_mapi_osd_start

7 hi_mapi_osd_batch

【描述】 按 batch_id 成组地切换一批 OSD 的显隐状态。

【语法】

td_s32 hi_mapi_osd_batch(td_u32 batch_id, td_bool show);

【参数】

参数名称 输入/输出 类型 描述
batch_id 输入 td_u32 批控制 ID,对应 hi_mapi_osd_disp_attr.batch_id
show 输入 td_bool TD_TRUE 显示;TD_FALSE 隐藏。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_OSD_ENOT_INITED MAPI 系统或 OSD 模块未初始化。

【需求】

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

【注意】

  • 只会作用于已经 startdisp_attr[].batch_id == batch_id 的 OSD。
  • 若不存在任何匹配 batch_id 的 OSD,也返回成功(无操作)。

【举例】 无

【相关主题】 hi_mapi_osd_set_attr

4 数据类型

1 hi_mapi_osd_attach_dest

【说明】 定义 OSD 在 JPEG 编码中的叠加目标枚举,用于指定 OSD 叠加到主码流或多图片文件(MPF)的哪一部分。

【定义】

typedef enum {
    HI_MAPI_ATTACH_JPEG_MAIN = 0,
    HI_MAPI_ATTACH_JPEG_MPF0,
    HI_MAPI_ATTACH_JPEG_MPF1,
    HI_MAPI_ATTACH_JPEG_BUTT
} hi_mapi_osd_attach_dest;

【成员】

成员名称 描述
HI_MAPI_ATTACH_JPEG_MAIN 叠加到 JPEG 主图(值为 0)。
HI_MAPI_ATTACH_JPEG_MPF0 叠加到 MPF 图片 0(值为 1)。
HI_MAPI_ATTACH_JPEG_MPF1 叠加到 MPF 图片 1(值为 2)。
HI_MAPI_ATTACH_JPEG_BUTT 枚举上界哨兵,不可使用。

【注意事项】 仅在绑定模块为 VENC 时有效。

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

2 hi_mapi_osd_type

【说明】 定义 OSD 内容类型枚举,决定 OSD 显示时间、字符串、位图或圆形。

【定义】

typedef enum {
    HI_MAPI_OSD_TYPE_TIME   = 0,
    HI_MAPI_OSD_TYPE_STRING,
    HI_MAPI_OSD_TYPE_BITMAP,
    HI_MAPI_OSD_TYPE_CIRCLE,
    HI_MAPI_OSD_TYPE_BUTT
} hi_mapi_osd_type;

【成员】

成员名称 描述
HI_MAPI_OSD_TYPE_TIME 时间 OSD(值为 0),使用 hi_mapi_osd_time_content
HI_MAPI_OSD_TYPE_STRING 字符串 OSD(值为 1),使用 hi_mapi_str_content
HI_MAPI_OSD_TYPE_BITMAP 位图 OSD(值为 2),使用 hi_mapi_osd_bitmap
HI_MAPI_OSD_TYPE_CIRCLE 圆形 OSD(值为 3),使用 hi_mapi_osd_circle_content
HI_MAPI_OSD_TYPE_BUTT 枚举上界哨兵,不可使用。

【注意事项】 无

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

3 hi_mapi_osd_time_fmt

【说明】 定义 OSD 时间显示格式枚举。

【定义】

typedef enum {
    HI_MAPI_OSD_TIMEFMT_YMD24H = 0,
    HI_MAPI_OSD_TIMEFMT_BUTT
} hi_mapi_osd_time_fmt;

【成员】

成员名称 描述
HI_MAPI_OSD_TIMEFMT_YMD24H 年-月-日 24 小时制格式(值为 0),例如 2017-03-10 23:00:59
HI_MAPI_OSD_TIMEFMT_BUTT 枚举上界哨兵,不可使用。

【注意事项】 无

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

4 hi_mapi_osd_bind_mod

【说明】 定义 OSD 绑定的目标模块枚举。

【定义】

typedef enum {
    HI_MAPI_OSD_BINDMOD_VCAP   = 0,
    HI_MAPI_OSD_BINDMOD_VPSS,
    HI_MAPI_OSD_BINDMOD_STITCH,
    HI_MAPI_OSD_BINDMOD_VENC,
    HI_MAPI_OSD_BINDMOD_DISP,
    HI_MAPI_OSD_BINDMOD_BUTT
} hi_mapi_osd_bind_mod;

【成员】

成员名称 描述
HI_MAPI_OSD_BINDMOD_VCAP 绑定到 VCAP 模块(值为 0)。
HI_MAPI_OSD_BINDMOD_VPSS 绑定到 VPSS 模块(值为 1)。
HI_MAPI_OSD_BINDMOD_STITCH 绑定到 STITCH 拼接模块(值为 2)。
HI_MAPI_OSD_BINDMOD_VENC 绑定到 VENC 模块(值为 3)。
HI_MAPI_OSD_BINDMOD_DISP 绑定到 DISP 模块(值为 4)。
HI_MAPI_OSD_BINDMOD_BUTT 枚举上界哨兵,不可使用。

【注意事项】 无

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

5 hi_mapi_osd_coordinate_mod

【说明】 定义 OSD 坐标模式枚举,决定 OSD 起始位置使用比例坐标还是绝对坐标。

【定义】

typedef enum {
    HI_MAPI_OSD_COORDINATE_RATIO_COOR = 0,
    HI_MAPI_OSD_COORDINATE_ABS_COOR   = 1
} hi_mapi_osd_coordinate_mod;

【成员】

成员名称 描述
HI_MAPI_OSD_COORDINATE_RATIO_COOR 比例坐标(值为 0),start_pos 的 x/y 为千分比(0–1000)。
HI_MAPI_OSD_COORDINATE_ABS_COOR 绝对坐标(值为 1),start_pos 的 x/y 为像素值。

【注意事项】 无

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

6 hi_mapi_osd_pixel_fmt

【说明】 定义 OSD 位图像素格式枚举。

【定义】

typedef enum {
    HI_MAPI_OSD_PIXEL_FMT_RGB1555 = 0,
    HI_MAPI_OSD_PIXEL_FMT_BUTT
} hi_mapi_osd_pixel_fmt;

【成员】

成员名称 描述
HI_MAPI_OSD_PIXEL_FMT_RGB1555 RGB 1555 格式(值为 0),每像素 16 bit(1 bit alpha + 5 bit R + 5 bit G + 5 bit B)。
HI_MAPI_OSD_PIXEL_FMT_BUTT 枚举上界哨兵,不可使用。

【注意事项】 无

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

7 hi_mapi_osd_bitmap

【说明】 定义 OSD 位图数据,包含像素格式、宽高及位图数据地址。

【定义】

typedef struct {
    hi_mapi_pixel_format pixel_format;
    td_u32               width;
    td_u32               height;
    td_void             *data;
} hi_mapi_osd_bitmap;

【成员】

成员名称 描述
pixel_format 位图像素格式(枚举 hi_mapi_pixel_format,参见公共数据类型)。
width 位图宽度,单位像素。
height 位图高度,单位像素。
data 位图数据地址(须对齐)。

【注意事项】

  • data 地址须满足硬件对齐要求。
  • 位图数据格式须与 pixel_format 一致。

【相关数据类型及接口】 hi_mapi_pixel_format公共数据类型)、hi_mapi_osd_contenthi_mapi_osd_set_attr

8 hi_mapi_osd_time_content

【说明】 定义时间 OSD 的内容属性,包含时间格式、字号及背景颜色。

【定义】

typedef struct {
    hi_mapi_osd_time_fmt time_fmt;
    hi_mapi_size         font_size;
    td_u32               bg_color;
} hi_mapi_osd_time_content;

【成员】

成员名称 描述
time_fmt 时间显示格式(枚举 hi_mapi_osd_time_fmt)。
font_size 字体大小(类型 hi_mapi_size),单位像素。
bg_color 背景颜色,RGB 格式。

【注意事项】 无

【相关数据类型及接口】 hi_mapi_osd_time_fmthi_mapi_size公共数据类型)、hi_mapi_osd_contenthi_mapi_osd_set_attr

9 hi_mapi_osd_circle_content

【说明】 定义圆形 OSD 的内容属性,包含宽高(外接矩形)。

【定义】

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

【成员】

成员名称 描述
width 圆形外接矩形宽度,单位像素。
height 圆形外接矩形高度,单位像素。

【注意事项】 无

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

10 hi_mapi_osd_content

【说明】 定义 OSD 的内容,包含类型、颜色及对应类型的联合体数据。

【定义】

typedef struct {
    hi_mapi_osd_type type;
    td_u32           color;
    union {
        hi_mapi_osd_time_content   time_content;
        hi_mapi_str_content        str_content;
        hi_mapi_osd_circle_content circle_content;
        hi_mapi_osd_bitmap         bitmap_content;
    };
} hi_mapi_osd_content;

【成员】

成员名称 描述
type OSD 内容类型(枚举 hi_mapi_osd_type),决定联合体中哪个成员有效。
color OSD 前景颜色,RGB 格式。
time_content typeHI_MAPI_OSD_TYPE_TIME 时有效,时间 OSD 属性。
str_content typeHI_MAPI_OSD_TYPE_STRING 时有效,字符串内容(类型 hi_mapi_str_content,定义于 hi_mapi_comm_define.h)。
circle_content typeHI_MAPI_OSD_TYPE_CIRCLE 时有效,圆形属性。
bitmap_content typeHI_MAPI_OSD_TYPE_BITMAP 时有效,位图数据。

【注意事项】

  • 联合体成员按 type 取值选择使用,不可同时设置多个。

【相关数据类型及接口】 hi_mapi_osd_typehi_mapi_osd_time_contenthi_mapi_str_contenthi_mapi_comm_define.h)、hi_mapi_osd_circle_contenthi_mapi_osd_bitmaphi_mapi_osd_attrhi_mapi_osd_set_attrhi_mapi_osd_get_attr

11 hi_mapi_osd_disp_attr

【说明】 定义单个 OSD 实例的显示属性,包含显隐、绑定模块、透明度、坐标模式及位置等。

【定义】

typedef struct {
    td_bool                  show;
    hi_mapi_osd_bind_mod     binded_mod;
    td_handle                mod_hdl;
    td_handle                chn_hdl;
    td_u32                   fg_alpha;
    td_u32                   bg_alpha;
    hi_mapi_osd_coordinate_mod coordinate_mod;
    hi_mapi_point            start_pos;
    hi_mapi_osd_attach_dest  attach_dest;
    td_u32                   batch_id;
} hi_mapi_osd_disp_attr;

【成员】

成员名称 描述
show 是否显示:TD_TRUE 显示,TD_FALSE 隐藏。
binded_mod 绑定目标模块(枚举 hi_mapi_osd_bind_mod)。
mod_hdl 绑定模块句柄(如 VCAP pipe 句柄、VPSS 组句柄、DISP 句柄等)。
chn_hdl 绑定通道句柄(如 pipe 通道句柄、窗口句柄、VENC 通道句柄等)。
fg_alpha 前景透明度,取值范围 [0, 255],0 为全透明,255 为不透明。
bg_alpha 背景透明度,取值范围 [0, 255]
coordinate_mod 坐标模式(枚举 hi_mapi_osd_coordinate_mod),决定 start_pos 为比例坐标或绝对坐标。
start_pos OSD 起始位置(类型 hi_mapi_point),含义由 coordinate_mod 决定。
attach_dest JPEG 叠加目标(枚举 hi_mapi_osd_attach_dest),仅绑定 VENC 时有效。
batch_id 批处理 ID,用于 hi_mapi_osd_batch 成组切换显隐状态。

【注意事项】

  • binded_modmod_hdlchn_hdl 为静态属性,OSD 启动后不可更改。
  • fg_alpha / bg_alpha 取值 0 表示完全透明,255 表示完全不透明。

【相关数据类型及接口】 hi_mapi_osd_bind_modhi_mapi_osd_coordinate_modhi_mapi_point公共数据类型)、hi_mapi_osd_attach_desthi_mapi_osd_attrhi_mapi_osd_set_attrhi_mapi_osd_get_attrhi_mapi_osd_batch

12 hi_mapi_osd_attr

【说明】 定义 OSD 实例的完整属性,包含显示数量、各显示属性及 OSD 内容。

【定义】

typedef struct {
    td_u32               disp_num;
    hi_mapi_osd_disp_attr disp_attr[HI_MAPI_OSD_MAX_DISP_CNT];
    hi_mapi_osd_content  osd_content;
} hi_mapi_osd_attr;

【成员】

成员名称 描述
disp_num 实际使用的显示属性数量,取值范围 [1, HI_MAPI_OSD_MAX_DISP_CNT]HI_MAPI_OSD_MAX_DISP_CNT = 4(CV610)。
disp_attr[] 显示属性数组,数组大小为 HI_MAPI_OSD_MAX_DISP_CNT(4),每个元素描述一路显示目标上的 OSD 属性。
osd_content OSD 内容(类型 hi_mapi_osd_content),包含类型、颜色及具体内容数据。

【注意事项】

  • disp_num 不得超过 HI_MAPI_OSD_MAX_DISP_CNT(4)。
  • OSD 实例总数上限 HI_MAPI_OSD_MAX_CNT 为 16(CV610),实例索引 osd_idx 取值范围 [0, 15]

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

5 错误码

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

错误代码 宏定义 描述
0xA30B8002 HI_MAPI_OSD_EHANDLE_ILLEGAL 通道号无效。
0xA30B8003 HI_MAPI_OSD_EILLEGAL_PARAM 参数非法。
0xA30B8006 HI_MAPI_OSD_ENULL_PTR 空指针。
0xA30B8009 HI_MAPI_OSD_ENOT_PERM 操作未授权。
0xA30B800C HI_MAPI_OSD_ENOMEM 内存分配失败。