跳转至

VENC(视频编码)接口说明文档

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

1 概述

VENC 模块负责将 YUV 视频帧编码为 H.264 / H.265 / JPEG / MJPEG / SVAC3 码流。平台 HI3516CV610 最多支持 8 路编码通道(通道号 0~7),每路通道在调用 hi_mapi_venc_init 后独立运行,内部由数据线程通过 select 轮询 SDK fd 拉取码流并通过注册的回调函数上报。所有 API 调用前必须先完成 media 系统初始化(g_venc_ctx.venc_inited == TD_TRUE)。

2 接口总览

编号 接口 功能概述
1 hi_mapi_venc_get_default_attr 根据基础属性(编码类型、分辨率、码率等)派生出一套可用的默认编码属性。
2 hi_mapi_venc_init 初始化指定通道的视频编码实例(创建 SDK 编码通道并启动内部数据线程)。
3 hi_mapi_venc_deinit 去初始化指定通道的视频编码实例(停止编码、销毁 SDK 通道、停止数据线程)。
4 hi_mapi_venc_register_callback 为指定 VENC 通道注册码流数据回调。回调在内部数据线程拉取到码流后被调用。
5 hi_mapi_venc_un_register_callback 注销指定 VENC 通道上已注册的码流数据回调。
6 hi_mapi_venc_start 启动指定 VENC 通道的编码接收。
7 hi_mapi_venc_stop 停止指定 VENC 通道的编码接收并复位通道。
8 hi_mapi_venc_set_attr 设置指定 VENC 通道的编码属性(含编码类型属性与码率控制属性)。
9 hi_mapi_venc_get_attr 获取指定 VENC 通道当前的编码属性。
10 hi_mapi_venc_request_idr 请求指定 VENC 通道在下一帧编码 IDR 帧。
11 hi_mapi_venc_set_param 设置指定 VENC 通道的扩展属性(码率控制参数、GOP 模式、帧内刷新、帧率、分层 QP、丢帧策略等),通道运行中可动态调整。
12 hi_mapi_venc_get_param 获取指定 VENC 通道的扩展属性。命令及参数类型与 hi_mapi_venc_set_param 相同。
13 hi_mapi_venc_set_config 设置 VENC 通道的静态配置(在通道 init 之前调用)。支持按通道配置 RCN/REF 共享 buffer,也支持模块全局的 mini_buf_mode(按协议生效,忽略通道号)。
14 hi_mapi_venc_get_config 获取 VENC 通道的静态配置。RCN/REF 共享可在通道初始化前后读取;mini_buf_mode 为模块全局配置,只需 media 系统已初始化。
15 hi_mapi_venc_send_frame 向指定 VENC 通道主动发送一帧视频数据(替代绑定方式获取帧)。通道必须处于 started 状态。

3 API 参考

1 hi_mapi_venc_get_default_attr

【描述】 根据基础属性(编码类型、分辨率、码率等)派生出一套可用的默认编码属性。

【语法】

td_s32 hi_mapi_venc_get_default_attr(const hi_mapi_venc_base_attr *base_attr, hi_mapi_venc_attr *venc_attr);

【参数】

参数名称 输入/输出 类型 描述
base_attr 输入 const hi_mapi_venc_base_attr * 基础属性指针,用于推导默认编码属性。不可为 NULL
venc_attr 输出 hi_mapi_venc_attr * 编码属性输出指针,函数内部先清零再填充。不可为 NULL
成员名称(hi_mapi_venc_base_attr 描述
type 负载类型:HI_MAPI_PAYLOAD_TYPE_H264 / H265 / JPEG / MJPEG / SVAC3
width 编码图像宽度(像素)。H.264/H.265 上限 4096,JPEG 上限 16384。
height 编码图像高度(像素)。同 width 上限。
src_frame_rate 输入帧率,范围 [1, 240]。
dst_frame_rate 目标帧率,范围 [1, 240],不可大于 src_frame_rate
bit_rate 目标码率(kbps),仅 H.264/H.265/MJPEG 有效。
qfactor JPEG 量化因子 [1, 99],仅 JPEG 有效。
成员名称(hi_mapi_venc_attr 描述
payload_type_attr 编码类型属性,包含 type/width/height/buf_size/profile/scene_mode/by_frame 及按协议的联合成员。
rc_attr 码率控制属性,包含 rc_mode 及按模式的联合成员。

【返回值】

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

【需求】

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

【注意】

  • H.264 默认 profile = 1(Main Profile),其他协议默认 profile = 0
  • buf_size 默认 = width * height * 3 / 4
  • by_frame 默认为 TD_TRUE(帧模式)。
  • scene_mode 默认为 HI_MAPI_VENC_SCENE_MODE_NORMAL
  • JPEG 模式下仅填充 jpeg_attr.qfactor;非 JPEG 模式下填充 rc_attr 为 CBR 模式,stat_time = 1gop = dst_frame_rate * 5

【举例】无

【相关主题】 hi_mapi_venc_inithi_mapi_venc_set_attr


2 hi_mapi_venc_init

【描述】 初始化指定通道的视频编码实例(创建 SDK 编码通道并启动内部数据线程)。

【语法】

td_s32 hi_mapi_venc_init(td_handle venc_hdl, const hi_mapi_venc_attr *venc_attr);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。
venc_attr 输入 const hi_mapi_venc_attr * 编码属性指针。不可为 NULL

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENULL_PTR venc_attrNULL
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_EEXIST 该通道已初始化。
HI_MAPI_VENC_EILLEGAL_PARAM 属性校验失败(profile 越界或 JPEG 缩略图数量超限等)。

【需求】

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

【注意】

  • 必须先调用 media 系统初始化,再调用本接口。
  • 同一通道重复初始化会返回 EEXIST
  • 初始化成功后会创建内部数据拉取线程 pTVData_ChnX
  • rc_attr.rc_mode 非法(非 JPEG 且 >= HI_MAPI_VENC_RC_MODE_BUTT),会自动回退为 CBR。
  • 若创建通道或属性设置失败,内部会自动销毁通道并回滚。

【举例】无

【相关主题】 hi_mapi_venc_deinithi_mapi_venc_get_default_attr


3 hi_mapi_venc_deinit

【描述】 去初始化指定通道的视频编码实例(停止编码、销毁 SDK 通道、停止数据线程)。

【语法】

td_s32 hi_mapi_venc_deinit(td_handle venc_hdl);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_EBUSY 停止或销毁通道时存在子步骤失败(已尽力完成)。

【需求】

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

【注意】

  • 若通道处于 started 状态,内部会先调用 hi_mapi_venc_stop
  • 若通道未初始化,视为成功直接返回。
  • 内部会自动解绑所有指向本通道的源端绑定。

【举例】无

【相关主题】 hi_mapi_venc_init


4 hi_mapi_venc_register_callback

【描述】 为指定 VENC 通道注册码流数据回调。回调在内部数据线程拉取到码流后被调用。

【语法】

td_s32 hi_mapi_venc_register_callback(td_handle venc_hdl, const hi_mapi_venc_call_back *venc_cb);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。
venc_cb 输入 const hi_mapi_venc_call_back * 回调结构指针。不可为 NULL
成员名称(hi_mapi_venc_call_back 描述
proc_data_cb 码流数据回调函数指针,原型为 td_s32 (*)(td_handle venc_hdl, hi_mapi_venc_data_attr *stream_data, td_void *private_data)
private_data 用户私有数据指针,原样透传给回调。可为 NULL

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENULL_PTR venc_cbNULL
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_ENOT_PERM 通道未初始化或所有回调槽位已满(最多 5 个)。

【需求】

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

【注意】

  • 必须先调用 hi_mapi_venc_init 完成通道初始化。
  • 相同函数指针 + 私有数据的回调重复注册视为成功(去重)。
  • 每个通道最多注册 HI_MAPI_VENC_CALLBACK_MAX_NUM = 5 个回调。

【举例】无

【相关主题】 hi_mapi_venc_un_register_callback


5 hi_mapi_venc_un_register_callback

【描述】 注销指定 VENC 通道上已注册的码流数据回调。

【语法】

td_s32 hi_mapi_venc_un_register_callback(td_handle venc_hdl, const hi_mapi_venc_call_back *venc_cb);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。
venc_cb 输入 const hi_mapi_venc_call_back * 要注销的回调结构指针,需与注册时的函数指针和私有数据完全一致。不可为 NULL

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENULL_PTR venc_cbNULL
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_ENOT_PERM 通道未初始化或未找到匹配的回调。

【需求】

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

【注意】 无

【举例】无

【相关主题】 hi_mapi_venc_register_callback


6 hi_mapi_venc_start

【描述】 启动指定 VENC 通道的编码接收。

【语法】

td_s32 hi_mapi_venc_start(td_handle venc_hdl, td_s32 frame_cnt);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。
frame_cnt 输入 td_s32 待编码帧数。传 HI_MAPI_VENC_LIMITLESS_FRAME_COUNT(-1)表示不自动停止;传正整数 N 表示编码 N 帧后自动停止。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_EILLEGAL_PARAM frame_cnt 非法(既非 -1 也非正数)。
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_ENOT_PERM 通道未初始化。

【需求】

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

【注意】

  • 必须先调用 hi_mapi_venc_init 完成通道初始化。
  • 若通道已处于 started 状态且 frame_cnt == -1,视为成功直接返回。

【举例】无

【相关主题】 hi_mapi_venc_stop


7 hi_mapi_venc_stop

【描述】 停止指定 VENC 通道的编码接收并复位通道。

【语法】

td_s32 hi_mapi_venc_stop(td_handle venc_hdl);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_ENOT_PERM 通道未初始化。

【需求】

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

【注意】

  • 若通道已经处于停止状态,视为成功直接返回。
  • 内部依次调用 SDK 的停止接收帧和复位通道。

【举例】无

【相关主题】 hi_mapi_venc_start


8 hi_mapi_venc_set_attr

【描述】 设置指定 VENC 通道的编码属性(含编码类型属性与码率控制属性)。

【语法】

td_s32 hi_mapi_venc_set_attr(td_handle venc_hdl, const hi_mapi_venc_attr *venc_attr);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。
venc_attr 输入 const hi_mapi_venc_attr * 编码属性指针。不可为 NULL

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENULL_PTR venc_attrNULL
HI_MAPI_VENC_EILLEGAL_PARAM 属性校验失败(profile 越界等)。
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_ENOT_PERM 通道未初始化。

【需求】

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

【注意】

  • 必须先完成通道初始化(hi_mapi_venc_init)。
  • 非 JPEG 模式下若 rc_mode >= HI_MAPI_VENC_RC_MODE_BUTT,会自动回退为 CBR。

【举例】无

【相关主题】 hi_mapi_venc_get_attr


9 hi_mapi_venc_get_attr

【描述】 获取指定 VENC 通道当前的编码属性。

【语法】

td_s32 hi_mapi_venc_get_attr(td_handle venc_hdl, hi_mapi_venc_attr *venc_attr);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。
venc_attr 输出 hi_mapi_venc_attr * 编码属性输出指针。不可为 NULL

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENULL_PTR venc_attrNULL
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化或通道未初始化。

【需求】

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

【注意】 无

【举例】无

【相关主题】 hi_mapi_venc_set_attr


10 hi_mapi_venc_request_idr

【描述】 请求指定 VENC 通道在下一帧编码 IDR 帧。

【语法】

td_s32 hi_mapi_venc_request_idr(td_handle venc_hdl);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_ENOT_PERM 通道未初始化或通道尚未启动编码。

【需求】

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

【注意】

  • 通道必须处于 started 状态(已调用 hi_mapi_venc_start),否则返回 ENOT_PERM

【举例】无

【相关主题】 hi_mapi_venc_start


11 hi_mapi_venc_set_param

【描述】 设置指定 VENC 通道的扩展属性(码率控制参数、GOP 模式、帧内刷新、帧率、分层 QP、丢帧策略等),通道运行中可动态调整。

【语法】

td_s32 hi_mapi_venc_set_param(td_handle venc_hdl, hi_mapi_venc_cmd cmd, const td_void *attr, td_u32 attr_len);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。
cmd 输入 hi_mapi_venc_cmd 扩展属性命令,决定 attr 的解释方式。
attr 输入 const td_void * 属性数据指针,具体类型由 cmd 决定。不可为 NULL
attr_len 输入 td_u32 attr 缓冲区长度(字节),必须 ≥ 对应结构体大小。

cmdattr 类型对应关系:

cmd attr 实际类型
HI_MAPI_VENC_CMD_H264_RC_ATTR_EX hi_mapi_venc_rc_param *
HI_MAPI_VENC_CMD_H265_RC_ATTR_EX hi_mapi_venc_rc_param *
HI_MAPI_VENC_CMD_MJPEG_RC_ATTR_EX hi_mapi_venc_rc_param *
HI_MAPI_VENC_CMD_GOP_MODE hi_mapi_venc_gop_attr *
HI_MAPI_VENC_CMD_INTRA_REFRESH hi_mapi_venc_intra_refresh *
HI_MAPI_VENC_CMD_FRAME_RATE hi_mapi_frame_rate_ctrl *
HI_MAPI_VENC_CMD_HIERARCHICAL_QP hi_mapi_venc_hierarchical_qp *
HI_MAPI_VENC_CMD_FRAMELOST_STRATEGY td_bool *(仅 H.264/H.265/MJPEG 有效)

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENULL_PTR attrNULL
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_ENOT_PERM 通道未初始化。
HI_MAPI_VENC_EILLEGAL_PARAM attr_len 不足、cmd 不受支持,或 FRAMELOST_STRATEGY 用于不支持的协议。

【需求】

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

【注意】

  • 必须先完成通道初始化。
  • HI_MAPI_VENC_CMD_FRAMELOST_STRATEGY 仅适用于 H.264/H.265/MJPEG 协议,其他协议调用返回 EILLEGAL_PARAM

【举例】无

【相关主题】 hi_mapi_venc_get_param


12 hi_mapi_venc_get_param

【描述】 获取指定 VENC 通道的扩展属性。命令及参数类型与 hi_mapi_venc_set_param 相同。

【语法】

td_s32 hi_mapi_venc_get_param(td_handle venc_hdl, hi_mapi_venc_cmd cmd, td_void *attr, td_u32 attr_len);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。
cmd 输入 hi_mapi_venc_cmd 扩展属性命令。
attr 输出 td_void * 属性数据输出指针。不可为 NULL
attr_len 输入 td_u32 attr 缓冲区长度(字节),必须 ≥ 对应结构体大小。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENULL_PTR attrNULL
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_ENOT_PERM 通道未初始化。
HI_MAPI_VENC_EILLEGAL_PARAM attr_len 不足、cmd 不受支持,或 FRAMELOST_STRATEGY 用于不支持的协议。

【需求】

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

【注意】

  • 参数语义与 hi_mapi_venc_set_param 相同。

【举例】无

【相关主题】 hi_mapi_venc_set_param


13 hi_mapi_venc_set_config

【描述】 设置 VENC 通道的静态配置(在通道 init 之前调用)。支持按通道配置 RCN/REF 共享 buffer,也支持模块全局的 mini_buf_mode(按协议生效,忽略通道号)。

【语法】

td_s32 hi_mapi_venc_set_config(td_handle venc_hdl, hi_mapi_venc_cfg_cmd cmd, const td_void *attr, td_u32 attr_len);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7];mini_buf_mode 类命令忽略该值。
cmd 输入 hi_mapi_venc_cfg_cmd 静态配置命令。
attr 输入 const td_void * 配置属性指针。不可为 NULL
attr_len 输入 td_u32 attr 缓冲区长度(字节),必须等于对应结构体大小。

cmdattr 类型对应关系:

cmd attr 实际类型 生效范围
HI_MAPI_VENC_CFG_RCN_REF_SHARE const hi_mapi_venc_rcn_ref_share_attr * 按通道
HI_MAPI_VENC_CFG_H264_MINI_BUF_MODE const hi_mapi_venc_mini_buf_mode_attr * 模块全局(H.264)
HI_MAPI_VENC_CFG_H265_MINI_BUF_MODE const hi_mapi_venc_mini_buf_mode_attr * 模块全局(H.265)
HI_MAPI_VENC_CFG_JPEG_MINI_BUF_MODE const hi_mapi_venc_mini_buf_mode_attr * 模块全局(JPEG/MJPEG)

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_ENULL_PTR attrNULL
HI_MAPI_VENC_EILLEGAL_PARAM cmd 越界或 attr_len 不匹配。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围(仅非 mini_buf 命令)。
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。
HI_MAPI_VENC_ENOT_PERM 通道已初始化(仅 RCN_REF_SHARE)。

【需求】

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

【注意】

  • HI_MAPI_VENC_CFG_RCN_REF_SHARE 必须在通道 init 之前调用,否则返回 ENOT_PERM
  • mini_buf_mode 命令为模块全局配置,忽略 venc_hdl,立即按协议写回 SDK mod_param 生效。
  • mini_buf_mode 值含义:0 禁用,1 启用。

【举例】无

【相关主题】 hi_mapi_venc_get_config


14 hi_mapi_venc_get_config

【描述】 获取 VENC 通道的静态配置。RCN/REF 共享可在通道初始化前后读取;mini_buf_mode 为模块全局配置,只需 media 系统已初始化。

【语法】

td_s32 hi_mapi_venc_get_config(td_handle venc_hdl, hi_mapi_venc_cfg_cmd cmd, td_void *attr, td_u32 attr_len);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7];mini_buf_mode 类命令忽略该值。
cmd 输入 hi_mapi_venc_cfg_cmd 静态配置命令,同 set_config
attr 输出 td_void * 配置属性输出指针。不可为 NULL
attr_len 输入 td_u32 attr 缓冲区长度(字节),必须等于对应结构体大小。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_ENULL_PTR attrNULL
HI_MAPI_VENC_EILLEGAL_PARAM cmd 越界或 attr_len 不匹配。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围(仅非 mini_buf 命令)。
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化。

【需求】

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

【注意】

  • RCN/REF 共享未被显式设置过,返回值来自 HAL 层默认值(hal_mapi_venc_get_rcn_ref_share_buf_mode())。

【举例】无

【相关主题】 hi_mapi_venc_set_config


15 hi_mapi_venc_send_frame

【描述】 向指定 VENC 通道主动发送一帧视频数据(替代绑定方式获取帧)。通道必须处于 started 状态。

【语法】

td_s32 hi_mapi_venc_send_frame(td_handle venc_hdl, const hi_mapi_frame_data *framedata, td_s32 timeout);

【参数】

参数名称 输入/输出 类型 描述
venc_hdl 输入 td_handle VENC 通道号,范围 [0, 7]。
framedata 输入 const hi_mapi_frame_data * 视频帧数据指针。不可为 NULL
timeout 输入 td_s32 超时时间(毫秒)。

【返回值】

返回值 描述
0 成功。
非0 失败,其值为错误码。
HI_MAPI_VENC_EHANDLE_ILLEGAL venc_hdl 超出范围。
HI_MAPI_VENC_ENULL_PTR framedataNULL
HI_MAPI_VENC_ENOT_INITED media 系统尚未初始化或通道未初始化。
HI_MAPI_VENC_ENOT_PERM 通道未启动(未调用 hi_mapi_venc_start)。

【需求】

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

【注意】

  • 通道必须处于 started 状态。
  • 每次成功发送后,内部 time_ref 自增 2(帧序号步长)。
  • hi_mapi_frame_data 中包含物理地址、虚拟地址、宽高、像素格式、时间戳等字段。

【举例】无

【相关主题】 hi_mapi_venc_starthi_mapi_venc_register_callback

4 数据类型

1 hi_mapi_venc_base_attr

【说明】 VENC 基础属性,用于 hi_mapi_venc_get_default_attr 中由调用方传入编码类型、分辨率、码率等基础参数以派生完整的 hi_mapi_venc_attr

【定义】

typedef struct {
    hi_mapi_payload_type type;
    td_u32 width;
    td_u32 height;
    td_u32 src_frame_rate;
    td_u32 dst_frame_rate;
    td_u32 bit_rate;
    td_u32 qfactor;
} hi_mapi_venc_base_attr;

【成员】

成员名称 描述
type 编码协议类型,详见 hi_mapi_payload_type(如 HI_MAPI_PAYLOAD_TYPE_H264/H265/JPEG/MJPEG)。
width 编码图像宽度,单位像素。
height 编码图像高度,单位像素。
src_frame_rate 输入帧率;取值范围 [1, 240]
dst_frame_rate 目标帧率;取值范围 [0.015625, 240],不可大于 src_frame_rate
bit_rate 码率,单位 kbps。
qfactor JPEG 图像质量因子;取值范围 [1, 99],仅 JPEG 编码时有效。

【注意事项】

  • 通过 hi_mapi_venc_get_default_attr 派生出完整的 hi_mapi_venc_attr,再按需修改。

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

2 hi_mapi_venc_scene_mode

【说明】 VENC 编码场景模式枚举。

【定义】

typedef enum {
    HI_MAPI_VENC_SCENE_MODE_NORMAL,
    HI_MAPI_VENC_SCENE_MODE_DV,
    HI_MAPI_VENC_SCENE_MODE_CAR,
    HI_MAPI_VENC_SCENE_MODE_BUTT,
} hi_mapi_venc_scene_mode;

【成员】

枚举值 描述
HI_MAPI_VENC_SCENE_MODE_NORMAL 普通场景模式。
HI_MAPI_VENC_SCENE_MODE_DV DV(数码摄像)场景模式。
HI_MAPI_VENC_SCENE_MODE_CAR 车载场景模式。
HI_MAPI_VENC_SCENE_MODE_BUTT 哨兵值,无效。

【注意事项】 无

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

3 hi_mapi_venc_h264_attr

【说明】 H.264 编码器协议特有属性(当前为空结构体,预留扩展)。

【定义】

typedef struct {
    /* to be extend */
} hi_mapi_venc_h264_attr;

【成员】 无

【注意事项】

  • 作为 hi_mapi_venc_payload_type_attr 联合体成员使用。

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

4 hi_mapi_venc_h265_attr

【说明】 H.265 编码器协议特有属性(当前为空结构体,预留扩展)。

【定义】

typedef struct {
    /* to be extend */
} hi_mapi_venc_h265_attr;

【成员】 无

【注意事项】

  • 作为 hi_mapi_venc_payload_type_attr 联合体成员使用。

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

5 hi_mapi_venc_svac3_attr

【说明】 SVAC 3.0 编码器协议特有属性(当前为空结构体,预留扩展)。

【定义】

typedef struct {
    /* to be extend */
} hi_mapi_venc_svac3_attr;

【成员】 无

【注意事项】

  • 作为 hi_mapi_venc_payload_type_attr 联合体成员使用。

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

6 hi_mapi_venc_pic_receive_mode

【说明】 JPEG 编码器图像接收模式枚举。

【定义】

typedef enum {
    HI_MAPI_VENC_PIC_RECEIVE_SINGLE = 0,
    HI_MAPI_VENC_PIC_RECEIVE_MULTI,
    HI_MAPI_VENC_PIC_RECEIVE_BUTT
} hi_mapi_venc_pic_receive_mode;

【成员】

枚举值 描述
HI_MAPI_VENC_PIC_RECEIVE_SINGLE 单帧接收模式。
HI_MAPI_VENC_PIC_RECEIVE_MULTI 多帧接收模式。
HI_MAPI_VENC_PIC_RECEIVE_BUTT 哨兵值,无效。

【注意事项】 无

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

7 hi_mapi_venc_jpeg_encode_mode

【说明】 JPEG 编码模式枚举。

【定义】

typedef enum {
    HI_MAPI_JPEG_ENCODE_ALL   = 0,
    HI_MAPI_JPEG_ENCODE_SNAP  = 1,
    HI_MAPI_JPEG_ENCODE_BUTT,
} hi_mapi_venc_jpeg_encode_mode;

【成员】

枚举值 描述
HI_MAPI_JPEG_ENCODE_ALL JPEG 通道启动后编码所有图片。
HI_MAPI_JPEG_ENCODE_SNAP JPEG 通道启动后仅编码抓拍图片。
HI_MAPI_JPEG_ENCODE_BUTT 哨兵值,无效。

【注意事项】 无

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

8 hi_mapi_venc_jpeg_attr

【说明】 JPEG 编码器协议特有属性,包含 DCF 支持、MPF 配置、图像质量因子等。

【定义】

typedef struct {
    td_bool                         enable_dcf;
    hi_mapi_venc_mpf_config         mpf_attr;
    td_u32                          qfactor;
    hi_mapi_venc_pic_receive_mode   receive_mode;
    hi_mapi_venc_jpeg_encode_mode   jpeg_encode_mode;
} hi_mapi_venc_jpeg_attr;

【成员】

成员名称 描述
enable_dcf 是否支持 DCF(Design rule for Camera File system);TD_TRUE 启用。
mpf_attr MPF(Multi-Picture Format)配置,详见 hi_mapi_venc_mpf_config
qfactor JPEG 图像质量因子;取值范围 [1, 99]
receive_mode 图像接收模式,详见 hi_mapi_venc_pic_receive_mode
jpeg_encode_mode JPEG 编码模式,详见 hi_mapi_venc_jpeg_encode_mode

【注意事项】

  • 作为 hi_mapi_venc_payload_type_attr 联合体成员使用。

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

9 hi_mapi_venc_mjpeg_attr

【说明】 MJPEG 编码器协议特有属性(当前为空结构体,预留扩展)。

【定义】

typedef struct {
} hi_mapi_venc_mjpeg_attr;

【成员】 无

【注意事项】

  • 作为 hi_mapi_venc_payload_type_attr 联合体成员使用。

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

10 hi_mapi_venc_mpf_config

【说明】 MPF(Multi-Picture Format)配置,用于 JPEG 多图片格式中缩略图的配置。

【定义】

typedef struct {
    td_u8        large_thumb_nail_num;
    hi_mapi_size large_thumb_nail_size[HI_MAPI_VENC_MPF_MAX_CNT];
} hi_mapi_venc_mpf_config;

【成员】

成员名称 描述
large_thumb_nail_num 大缩略图数量;取值范围 [0, 2]HI_MAPI_VENC_MPF_MAX_CNT = 2)。
large_thumb_nail_size[] 各大缩略图的分辨率,详见 hi_mapi_size

【注意事项】 无

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

11 hi_mapi_venc_payload_type_attr

【说明】 VENC 编码协议类型属性,包含编码类型、分辨率、buffer 大小、profile、场景模式及协议特有属性的联合体。

【定义】

typedef struct {
    hi_mapi_payload_type type;
    td_u32 width;
    td_u32 height;
    td_u32 buf_size;
    td_u32 profile;
    hi_mapi_venc_scene_mode scene_mode;
    td_bool by_frame;
    union {
        hi_mapi_venc_h264_attr  h264e_attr;
        hi_mapi_venc_h265_attr  h265e_attr;
        hi_mapi_venc_svac3_attr svac3e_attr;
        hi_mapi_venc_jpeg_attr  jpeg_attr;
        hi_mapi_venc_mjpeg_attr mjpeg_attr;
    };
} hi_mapi_venc_payload_type_attr;

【成员】

成员名称 描述
type 编码协议类型,详见 hi_mapi_payload_type
width 编码图像宽度,单位像素。
height 编码图像高度,单位像素。
buf_size 码流缓冲区大小,单位字节。
profile 编码 profile:H.264 — 0: Baseline, 1: MP, 2: HP;H.265 — 0: MP;JPEG/MJPEG — 0: Baseline。
scene_mode 场景模式,详见 hi_mapi_venc_scene_mode
by_frame 编码模式;TD_TRUE 按帧编码,TD_FALSE 按 Slice 编码。
h264e_attr / h265e_attr / svac3e_attr / jpeg_attr / mjpeg_attr 协议特有属性联合体,根据 type 选择对应成员。

【注意事项】

  • 联合体中仅有一个成员有效,取决于 type 的值。

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

12 hi_mapi_venc_rc_mode

【说明】 VENC 码率控制模式枚举。

【定义】

typedef enum {
    HI_MAPI_VENC_RC_MODE_CBR,
    HI_MAPI_VENC_RC_MODE_VBR,
    HI_MAPI_VENC_RC_MODE_QVBR,
    HI_MAPI_VENC_RC_MODE_CVBR,
    HI_MAPI_VENC_RC_MODE_AVBR,
    HI_MAPI_VENC_RC_MODE_BUTT,
} hi_mapi_venc_rc_mode;

【成员】

枚举值 描述
HI_MAPI_VENC_RC_MODE_CBR 固定码率(CBR)。
HI_MAPI_VENC_RC_MODE_VBR 可变码率(VBR)。
HI_MAPI_VENC_RC_MODE_QVBR 质量可变码率(QVBR)。
HI_MAPI_VENC_RC_MODE_CVBR 约束可变码率(CVBR)。
HI_MAPI_VENC_RC_MODE_AVBR 自适应可变码率(AVBR)。
HI_MAPI_VENC_RC_MODE_BUTT 哨兵值,无效。

【注意事项】 无

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

13 hi_mapi_venc_cbr_attr

【说明】 CBR(固定码率)控制属性。

【定义】

typedef struct {
    td_u32 gop;
    td_u32 stat_time;
    td_u32 src_frame_rate;
    td_u32 dst_frame_rate;
    td_u32 bit_rate;
} hi_mapi_venc_cbr_attr;

【成员】

成员名称 描述
gop I 帧间隔;取值范围 [1, 65536],MJPEG 无效。
stat_time 码率统计周期,单位秒;取值范围 [1, 60]
src_frame_rate 输入帧率;取值范围 [1, 240]
dst_frame_rate 目标帧率;取值范围 [0.015625, 240],不可大于 src_frame_rate
bit_rate 平均码率,单位 kbps;取值范围 [2, 614400]

【注意事项】

  • H.264/H.265/MJPEG 使用相同的数据结构。

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

14 hi_mapi_venc_vbr_attr

【说明】 VBR(可变码率)控制属性。

【定义】

typedef struct {
    td_u32 gop;
    td_u32 stat_time;
    td_u32 src_frame_rate;
    td_u32 dst_frame_rate;
    td_u32 max_bit_rate;
} hi_mapi_venc_vbr_attr;

【成员】

成员名称 描述
gop I 帧间隔;取值范围 [1, 65536],MJPEG 无效。
stat_time 码率统计周期,单位秒;取值范围 [1, 60]
src_frame_rate 输入帧率;取值范围 [1, 240]
dst_frame_rate 目标帧率;取值范围 [0.015625, 240],不可大于 src_frame_rate
max_bit_rate 最大码率,单位 kbps;取值范围 [2, 614400]

【注意事项】 无

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

15 hi_mapi_venc_qvbr_attr

【说明】 QVBR(质量可变码率)控制属性。

【定义】

typedef struct {
    td_u32 gop;
    td_u32 stat_time;
    td_u32 src_frame_rate;
    td_u32 dst_frame_rate;
    td_u32 target_bit_rate;
} hi_mapi_venc_qvbr_attr;

【成员】

成员名称 描述
gop I 帧间隔;取值范围 [1, 65536]
stat_time 码率统计周期,单位秒;取值范围 [1, 60]
src_frame_rate 输入帧率;取值范围 [1, 240]
dst_frame_rate 目标帧率;取值范围 [0.015625, 240]
target_bit_rate 目标码率,单位 kbps;取值范围 [2, 614400]

【注意事项】 无

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

16 hi_mapi_venc_cvbr_attr

【说明】 CVBR(约束可变码率)控制属性,支持长短期统计。

【定义】

typedef struct {
    td_u32 gop;
    td_u32 stat_time;
    td_u32 src_frame_rate;
    td_u32 dst_frame_rate;
    td_u32 max_bit_rate;
    td_u32 short_term_stat_time;
    td_u32 long_term_stat_time;
    td_u32 long_term_max_bitrate;
    td_u32 long_term_min_bitrate;
} hi_mapi_venc_cvbr_attr;

【成员】

成员名称 描述
gop I 帧间隔;取值范围 [1, 65536]
stat_time 码率统计周期,单位秒;取值范围 [1, 60]
src_frame_rate 输入帧率;取值范围 [1, 240]
dst_frame_rate 目标帧率;取值范围 [0.015625, 240]
max_bit_rate 最大码率,单位 kbps;取值范围 [2, 614400]
short_term_stat_time 短期码率统计周期,单位秒;取值范围 [1, 120]
long_term_stat_time 长期码率统计周期;取值范围 [1, 1440]
long_term_max_bitrate 长期最大码率,单位 kbps;取值范围 [2, 614400],不可大于 max_bit_rate
long_term_min_bitrate 长期最小码率,单位 kbps;取值范围 [0, 614400],不可大于 long_term_max_bitrate

【注意事项】 无

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

17 hi_mapi_venc_avbr_attr

【说明】 AVBR(自适应可变码率)控制属性。

【定义】

typedef struct {
    td_u32 gop;
    td_u32 stat_time;
    td_u32 src_frame_rate;
    td_u32 dst_frame_rate;
    td_u32 max_bit_rate;
} hi_mapi_venc_avbr_attr;

【成员】

成员名称 描述
gop I 帧间隔;取值范围 [1, 65536]
stat_time 码率统计周期,单位秒;取值范围 [1, 60]
src_frame_rate 输入帧率;取值范围 [1, 240]
dst_frame_rate 目标帧率;取值范围 [0.015625, 240]
max_bit_rate 最大码率,单位 kbps;取值范围 [2, 614400]

【注意事项】 无

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

18 hi_mapi_venc_rc_attr

【说明】 VENC 码率控制属性,包含码率控制模式及对应的模式参数联合体。

【定义】

typedef struct {
    hi_mapi_venc_rc_mode rc_mode;
    union {
        hi_mapi_venc_cbr_attr   cbr_attr;
        hi_mapi_venc_vbr_attr   vbr_attr;
        hi_mapi_venc_qvbr_attr  qvbr_attr;
        hi_mapi_venc_cvbr_attr  cvbr_attr;
        hi_mapi_venc_avbr_attr  avbr_attr;
    };
} hi_mapi_venc_rc_attr;

【成员】

成员名称 描述
rc_mode 码率控制模式,详见 hi_mapi_venc_rc_mode
cbr_attr CBR 参数,当 rc_modeCBR 时有效。
vbr_attr VBR 参数,当 rc_modeVBR 时有效。
qvbr_attr QVBR 参数,当 rc_modeQVBR 时有效。
cvbr_attr CVBR 参数,当 rc_modeCVBR 时有效。
avbr_attr AVBR 参数,当 rc_modeAVBR 时有效。

【注意事项】

  • 联合体中仅有一个成员有效,取决于 rc_mode 的值。

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

19 hi_mapi_venc_attr

【说明】 VENC 编码通道完整属性,包含编码协议类型属性与码率控制属性。

【定义】

typedef struct {
    hi_mapi_venc_payload_type_attr payload_type_attr;
    hi_mapi_venc_rc_attr           rc_attr;
} hi_mapi_venc_attr;

【成员】

成员名称 描述
payload_type_attr 编码协议类型属性,详见 hi_mapi_venc_payload_type_attr
rc_attr 码率控制属性,详见 hi_mapi_venc_rc_attr

【注意事项】

  • 通过 hi_mapi_venc_get_default_attr 可获取默认值,再按需修改。
  • 通过 hi_mapi_venc_set_attr / hi_mapi_venc_get_attr 设置/获取。

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

20 hi_mapi_venc_h264e_nalu_type

【说明】 H.264 编码 NALU 类型枚举。

【定义】

typedef enum {
    HI_MAPI_VENC_H264E_NALU_BSLICE   = 0,
    HI_MAPI_VENC_H264E_NALU_PSLICE   = 1,
    HI_MAPI_VENC_H264E_NALU_ISLICE   = 2,
    HI_MAPI_VENC_H264E_NALU_IDRSLICE = 5,
    HI_MAPI_VENC_H264E_NALU_SEI      = 6,
    HI_MAPI_VENC_H264E_NALU_SPS      = 7,
    HI_MAPI_VENC_H264E_NALU_PPS      = 8,
    HI_MAPI_VENC_H264E_NALU_BUTT
} hi_mapi_venc_h264e_nalu_type;

【成员】

枚举值 描述
HI_MAPI_VENC_H264E_NALU_BSLICE B Slice 类型。
HI_MAPI_VENC_H264E_NALU_PSLICE P Slice 类型。
HI_MAPI_VENC_H264E_NALU_ISLICE I Slice 类型。
HI_MAPI_VENC_H264E_NALU_IDRSLICE IDR Slice 类型。
HI_MAPI_VENC_H264E_NALU_SEI SEI 类型。
HI_MAPI_VENC_H264E_NALU_SPS SPS 类型。
HI_MAPI_VENC_H264E_NALU_PPS PPS 类型。
HI_MAPI_VENC_H264E_NALU_BUTT 哨兵值,无效。

【注意事项】 无

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

21 hi_mapi_venc_h265e_nalu_type

【说明】 H.265 编码 NALU 类型枚举。

【定义】

typedef enum {
    HI_MAPI_VENC_H265E_NALU_BSLICE   = 0,
    HI_MAPI_VENC_H265E_NALU_PSLICE   = 1,
    HI_MAPI_VENC_H265E_NALU_ISLICE   = 2,
    HI_MAPI_VENC_H265E_NALU_IDRSLICE = 19,
    HI_MAPI_VENC_H265E_NALU_VPS      = 32,
    HI_MAPI_VENC_H265E_NALU_SPS      = 33,
    HI_MAPI_VENC_H265E_NALU_PPS      = 34,
    HI_MAPI_VENC_H265E_NALU_SEI      = 39,
    HI_MAPI_VENC_H265E_NALU_ENHANCE  = 64,
    HI_MAPI_VENC_H265E_NALU_BUTT
} hi_mapi_venc_h265e_nalu_type;

【成员】

枚举值 描述
HI_MAPI_VENC_H265E_NALU_BSLICE B Slice 类型。
HI_MAPI_VENC_H265E_NALU_PSLICE P Slice 类型。
HI_MAPI_VENC_H265E_NALU_ISLICE I Slice 类型。
HI_MAPI_VENC_H265E_NALU_IDRSLICE IDR Slice 类型。
HI_MAPI_VENC_H265E_NALU_VPS VPS 类型。
HI_MAPI_VENC_H265E_NALU_SPS SPS 类型。
HI_MAPI_VENC_H265E_NALU_PPS PPS 类型。
HI_MAPI_VENC_H265E_NALU_SEI SEI 类型。
HI_MAPI_VENC_H265E_NALU_ENHANCE 增强层类型。
HI_MAPI_VENC_H265E_NALU_BUTT 哨兵值,无效。

【注意事项】 无

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

22 hi_mapi_venc_svac3e_nalu_type

【说明】 SVAC 3.0 编码 NALU 类型枚举。

【定义】

typedef enum {
    HI_MAPI_VENC_SVAC3_NALU_FORBIDDEN      = 0,
    HI_MAPI_VENC_SVAC3_NALU_NRAP_PATCH     = 1,
    HI_MAPI_VENC_SVAC3_NALU_RAPI_PATCH     = 2,
    HI_MAPI_VENC_SVAC3_NALU_PIC_HEAD       = 3,
    HI_MAPI_VENC_SVAC3_NALU_IDR_PATCH      = 4,
    HI_MAPI_VENC_SVAC3_NALU_EXTENSION      = 5,
    HI_MAPI_VENC_SVAC3_NALU_SEI            = 6,
    HI_MAPI_VENC_SVAC3_NALU_SPS            = 7,
    HI_MAPI_VENC_SVAC3_NALU_PPS            = 8,
    HI_MAPI_VENC_SVAC3_NALU_SEC_PS         = 9,
    HI_MAPI_VENC_SVAC3_NALU_AUTH_DATA      = 10,
    HI_MAPI_VENC_SVAC3_NALU_EOS            = 11,
    HI_MAPI_VENC_SVAC3_NALU_CRR_NDP_PATCH  = 12,
    HI_MAPI_VENC_SVAC3_NALU_RL_PATCH       = 14,
    HI_MAPI_VENC_SVAC3_NALU_PIC_DL         = 15,
    HI_MAPI_VENC_SVAC3_NALU_EOCVS          = 16,
    HI_MAPI_VENC_SVAC3_NALU_CRR_DP_PATCH   = 17,
    HI_MAPI_VENC_SVAC3_NALU_CRR_DL_PATCH   = 18,
    HI_MAPI_VENC_SVAC3_NALU_CRR_PRIVACY    = 19,
    HI_MAPI_VENC_SVAC3_NALU_BUTT
} hi_mapi_venc_svac3e_nalu_type;

【成员】

枚举值 描述
HI_MAPI_VENC_SVAC3_NALU_FORBIDDEN 禁用类型。
HI_MAPI_VENC_SVAC3_NALU_NRAP_PATCH 非参考可伸缩补丁。
HI_MAPI_VENC_SVAC3_NALU_RAPI_PATCH 参考可伸缩补丁。
HI_MAPI_VENC_SVAC3_NALU_PIC_HEAD 图像头。
HI_MAPI_VENC_SVAC3_NALU_IDR_PATCH IDR 补丁。
HI_MAPI_VENC_SVAC3_NALU_EXTENSION 扩展。
HI_MAPI_VENC_SVAC3_NALU_SEI SEI。
HI_MAPI_VENC_SVAC3_NALU_SPS SPS。
HI_MAPI_VENC_SVAC3_NALU_PPS PPS。
HI_MAPI_VENC_SVAC3_NALU_SEC_PS 二级参数集。
HI_MAPI_VENC_SVAC3_NALU_AUTH_DATA 认证数据。
HI_MAPI_VENC_SVAC3_NALU_EOS 码流结束。
HI_MAPI_VENC_SVAC3_NALU_CRR_NDP_PATCH CRR 非数据补丁。
HI_MAPI_VENC_SVAC3_NALU_RL_PATCH RL 补丁。
HI_MAPI_VENC_SVAC3_NALU_PIC_DL 图像时延。
HI_MAPI_VENC_SVAC3_NALU_EOCVS 视频序列结束。
HI_MAPI_VENC_SVAC3_NALU_CRR_DP_PATCH CRR 数据补丁。
HI_MAPI_VENC_SVAC3_NALU_CRR_DL_PATCH CRR 时延补丁。
HI_MAPI_VENC_SVAC3_NALU_CRR_PRIVACY CRR 隐私。
HI_MAPI_VENC_SVAC3_NALU_BUTT 哨兵值,无效。

【注意事项】 无

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

23 hi_mapi_venc_jpeg_pack_type

【说明】 JPEG 编码数据包类型枚举。

【定义】

typedef enum {
    HI_MAPI_VENC_JPEGE_PACK_ECS      = 5,
    HI_MAPI_VENC_JPEGE_PACK_APP      = 6,
    HI_MAPI_VENC_JPEGE_PACK_VDO      = 7,
    HI_MAPI_VENC_JPEGE_PACK_PIC      = 8,
    HI_MAPI_VENC_JPEGE_PACK_DCF      = 9,
    HI_MAPI_VENC_JPEGE_PACK_DCF_PIC  = 10,
    HI_MAPI_VENC_JPEGE_PACK_BUTT
} hi_mapi_venc_jpeg_pack_type;

【成员】

枚举值 描述
HI_MAPI_VENC_JPEGE_PACK_ECS ECS 类型。
HI_MAPI_VENC_JPEGE_PACK_APP APP 类型。
HI_MAPI_VENC_JPEGE_PACK_VDO VDO 类型。
HI_MAPI_VENC_JPEGE_PACK_PIC PIC 类型。
HI_MAPI_VENC_JPEGE_PACK_DCF DCF 类型。
HI_MAPI_VENC_JPEGE_PACK_DCF_PIC DCF PIC 类型。
HI_MAPI_VENC_JPEGE_PACK_BUTT 哨兵值,无效。

【注意事项】 无

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

24 hi_mapi_venc_data_type

【说明】 VENC 码流数据类型,标识当前数据包的协议类型与 NALU/PACK 类别。

【定义】

typedef struct {
    hi_mapi_payload_type payload_type;
    union {
        hi_mapi_venc_h264e_nalu_type  h264e_type;
        hi_mapi_venc_h265e_nalu_type  h265e_type;
        hi_mapi_venc_svac3e_nalu_type svac3e_type;
        hi_mapi_venc_jpeg_pack_type   jpeg_type;
    };
} hi_mapi_venc_data_type;

【成员】

成员名称 描述
payload_type 协议类型(H.264/H.265/JPEG/MJPEG/SVAC3)。
h264e_type H.264 NALU 类型,当 payload_type 为 H.264 时有效。
h265e_type H.265 NALU 类型,当 payload_type 为 H.265 时有效。
svac3e_type SVAC3 NALU 类型,当 payload_type 为 SVAC3 时有效。
jpeg_type JPEG PACK 类型,当 payload_type 为 JPEG 时有效。

【注意事项】 无

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

25 hi_mapi_venc_data_pack_attr

【说明】 VENC 码流数据包属性,包含物理/虚拟地址、长度、时间戳及数据类型。

【定义】

typedef struct {
    td_u64                  phy_addr[HI_MAPI_VENC_PACK_NUM];
    td_u8                   *vir_addr[HI_MAPI_VENC_PACK_NUM];
    td_u32                  len[HI_MAPI_VENC_PACK_NUM];
    td_u64                  time_stamp;
    hi_mapi_venc_data_type  data_type;
    td_u32                  offset;
} hi_mapi_venc_data_pack_attr;

【成员】

成员名称 描述
phy_addr[] 各 pack 的物理地址;HI_MAPI_VENC_PACK_NUM = 2。
vir_addr[] 各 pack 的虚拟地址。
len[] 各 pack 的码流长度,单位字节。
time_stamp 时间戳,单位 90 Hz tick。
data_type 数据类型,详见 hi_mapi_venc_data_type
offset 有效数据相对起始地址的偏移,单位字节。

【注意事项】 无

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

26 hi_mapi_venc_ref_type

【说明】 H.264/H.265 分层参考帧类型枚举,用于高级丢帧参考模式中标识帧类型。

【定义】

typedef enum {
    HI_MAPI_VENC_BASE_IDRSLICE = 0,
    HI_MAPI_VENC_BASE_PSLICE_REFTOIDR,
    HI_MAPI_VENC_BASE_PSLICE_REFBYBASE,
    HI_MAPI_VENC_BASE_PSLICE_REFBYENHANCE,
    HI_MAPI_VENC_ENHANCE_PSLICE_REFBYENHANCE,
    HI_MAPI_VENC_ENHANCE_PSLICE_NOTFORREF,
    HI_MAPI_VENC_ENHANCE_PSLICE_BUTT
} hi_mapi_venc_ref_type;

【成员】

枚举值 描述
HI_MAPI_VENC_BASE_IDRSLICE 基础层 IDR 帧。
HI_MAPI_VENC_BASE_PSLICE_REFTOIDR 基础层 P 帧,参考 IDR 帧,被基础层其他帧参考。
HI_MAPI_VENC_BASE_PSLICE_REFBYBASE 基础层 P 帧,被基础层其他帧参考。
HI_MAPI_VENC_BASE_PSLICE_REFBYENHANCE 基础层 P 帧,被增强层帧参考。
HI_MAPI_VENC_ENHANCE_PSLICE_REFBYENHANCE 增强层 P 帧,被增强层其他帧参考。
HI_MAPI_VENC_ENHANCE_PSLICE_NOTFORREF 增强层 P 帧,不作为参考帧。
HI_MAPI_VENC_ENHANCE_PSLICE_BUTT 哨兵值,无效。

【注意事项】 无

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

27 hi_mapi_venc_stream_info

【说明】 VENC 码流信息,包含参考帧类型与起始 QP。

【定义】

typedef struct {
    hi_mapi_venc_ref_type ref_type;
    td_u32                start_qp;
} hi_mapi_venc_stream_info;

【成员】

成员名称 描述
ref_type 高级丢帧参考模式下的帧类型,详见 hi_mapi_venc_ref_type
start_qp 编码帧的起始 QP 值。

【注意事项】 无

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

28 hi_mapi_venc_data_attr

【说明】 VENC 一帧码流数据属性,包含多个 pack、帧序号、码流结束标志及码流信息。

【定义】

typedef struct {
    hi_mapi_venc_data_pack_attr data_pack[HI_MAPI_VENC_MAX_FRAME_PACKCOUNT];
    td_u32                      pack_count;
    td_u32                      seq;
    td_bool                     end_of_stream;
    hi_mapi_venc_stream_info    stream_info;
} hi_mapi_venc_data_attr;

【成员】

成员名称 描述
data_pack[] 码流 pack 数组;HI_MAPI_VENC_MAX_FRAME_PACKCOUNT = 6。
pack_count 一帧中 pack 的数量。
seq 码流帧序号。
end_of_stream 码流结束标志;TD_TRUE 表示最后一帧。
stream_info 码流信息,详见 hi_mapi_venc_stream_info

【注意事项】

  • 该结构体通过 hi_mapi_venc_proc_data 回调上报给应用层。

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

29 hi_mapi_venc_proc_data / hi_mapi_venc_call_back

【说明】 VENC 码流数据回调函数类型及回调注册结构体。

【定义】

typedef td_s32 (*hi_mapi_venc_proc_data)(td_handle venc_hdl,
    hi_mapi_venc_data_attr *stream_data, td_void *private_data);

typedef struct {
    hi_mapi_venc_proc_data proc_data_cb;
    td_void               *private_data;
} hi_mapi_venc_call_back;

【成员】

成员名称 描述
proc_data_cb 码流数据回调函数指针;编码器每完成一帧编码时调用。
private_data 用户私有数据指针,回调时原样传回。

【注意事项】

  • 通过 hi_mapi_venc_register_callback / hi_mapi_venc_un_register_callback 注册/注销。

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

30 hi_mapi_venc_cmd

【说明】 VENC 动态扩展属性命令枚举,用于 hi_mapi_venc_set_param / hi_mapi_venc_get_param

【定义】

typedef enum {
    HI_MAPI_VENC_CMD_H264_RC_ATTR_EX,
    HI_MAPI_VENC_CMD_H265_RC_ATTR_EX,
    HI_MAPI_VENC_CMD_MJPEG_RC_ATTR_EX,
    HI_MAPI_VENC_CMD_SVAC2_RC_ATTR_EX,
    HI_MAPI_VENC_CMD_GOP_MODE,
    HI_MAPI_VENC_CMD_INTRA_REFRESH,
    HI_MAPI_VENC_CMD_FRAME_RATE,
    HI_MAPI_VENC_CMD_HIERARCHICAL_QP,
    HI_MAPI_VENC_CMD_FRAMELOST_STRATEGY,
    HI_MAPI_VENC_CMD_BUTT
} hi_mapi_venc_cmd;

【成员】

枚举值 描述
HI_MAPI_VENC_CMD_H264_RC_ATTR_EX H.264 码率控制扩展参数,对应 hi_mapi_venc_rc_param
HI_MAPI_VENC_CMD_H265_RC_ATTR_EX H.265 码率控制扩展参数,对应 hi_mapi_venc_rc_param
HI_MAPI_VENC_CMD_MJPEG_RC_ATTR_EX MJPEG 码率控制扩展参数,对应 hi_mapi_venc_rc_param
HI_MAPI_VENC_CMD_SVAC2_RC_ATTR_EX SVAC2 码率控制扩展参数,对应 hi_mapi_venc_rc_param
HI_MAPI_VENC_CMD_GOP_MODE GOP 模式属性,对应 hi_mapi_venc_gop_attr
HI_MAPI_VENC_CMD_INTRA_REFRESH 帧内刷新参数,对应 hi_mapi_venc_intra_refresh
HI_MAPI_VENC_CMD_FRAME_RATE 帧率控制,对应 hi_mapi_frame_rate_ctrl
HI_MAPI_VENC_CMD_HIERARCHICAL_QP 分层 QP 参数,对应 hi_mapi_venc_hierarchical_qp
HI_MAPI_VENC_CMD_FRAMELOST_STRATEGY 丢帧策略,对应 td_bool
HI_MAPI_VENC_CMD_BUTT 哨兵值,无效。

【注意事项】

  • 通道运行中可动态调整。

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

31 hi_mapi_venc_gop_mode / hi_mapi_venc_gop_attr

【说明】 GOP(Group of Pictures)模式枚举及 GOP 属性。

【定义】

typedef enum {
    HI_MAPI_VENC_GOPMODE_NORMALP  = 0,
    HI_MAPI_VENC_GOPMODE_DUALP    = 1,
    HI_MAPI_VENC_GOPMODE_SMARTP   = 2,
    HI_MAPI_VENC_GOPMODE_BIPREDB  = 3,
    HI_MAPI_VENC_GOPMODE_BUTT,
} hi_mapi_venc_gop_mode;

typedef struct {
    hi_mapi_venc_gop_mode gop_mode;
    union {
        hi_mapi_venc_normalp_gop  normalp;
        hi_mapi_venc_dualp_gop    dualp;
        hi_mapi_venc_smartp_gop   smartp;
        hi_mapi_venc_bipredb_gop  bipredb;
    };
} hi_mapi_venc_gop_attr;

【成员】

hi_mapi_venc_gop_mode 枚举成员:

枚举值 描述
HI_MAPI_VENC_GOPMODE_NORMALP 普通 P 帧 GOP。
HI_MAPI_VENC_GOPMODE_DUALP 双 P 帧 GOP。
HI_MAPI_VENC_GOPMODE_SMARTP 智能 P 帧 GOP(含长期参考帧)。
HI_MAPI_VENC_GOPMODE_BIPREDB 前向预测 B 帧 GOP。
HI_MAPI_VENC_GOPMODE_BUTT 哨兵值,无效。

hi_mapi_venc_gop_attr 成员:

成员名称 描述
gop_mode GOP 模式。
normalp 普通 P 帧参数,详见 hi_mapi_venc_normalp_gop
dualp 双 P 帧参数,详见 hi_mapi_venc_dualp_gop
smartp 智能 P 帧参数,详见 hi_mapi_venc_smartp_gop
bipredb 前向预测 B 帧参数,详见 hi_mapi_venc_bipredb_gop

【注意事项】

  • 通过 HI_MAPI_VENC_CMD_GOP_MODE 设置/获取。

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

32 hi_mapi_venc_normalp_gop

【说明】 普通 P 帧 GOP 属性。

【定义】

typedef struct {
    td_s32 ip_qp_delta;
} hi_mapi_venc_normalp_gop;

【成员】

成员名称 描述
ip_qp_delta I 帧与 P 帧的 QP 差值;取值范围 [-10, 30]

【注意事项】 无

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

33 hi_mapi_venc_dualp_gop

【说明】 双 P 帧 GOP 属性。

【定义】

typedef struct {
    td_u32 sp_interval;
    td_s32 sp_qp_delta;
    td_s32 ip_qp_delta;
} hi_mapi_venc_dualp_gop;

【成员】

成员名称 描述
sp_interval 特殊 P 帧间隔;取值范围 [0, 65536],不支持 1,且须小于 GOP。
sp_qp_delta P 帧与特殊 P 帧的 QP 差值;取值范围 [-10, 30]
ip_qp_delta I 帧与 P 帧的 QP 差值;取值范围 [-10, 30]

【注意事项】 无

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

34 hi_mapi_venc_smartp_gop

【说明】 智能 P 帧 GOP 属性(含长期参考帧/背景帧)。

【定义】

typedef struct {
    td_u32 bg_interval;
    td_s32 bg_qp_delta;
    td_s32 vi_qp_delta;
} hi_mapi_venc_smartp_gop;

【成员】

成员名称 描述
bg_interval 长期参考帧(背景帧)间隔,不可小于 GOP。
bg_qp_delta P 帧与背景帧的 QP 差值;取值范围 [-10, 30]
vi_qp_delta P 帧与虚拟 I 帧的 QP 差值;取值范围 [-10, 30]

【注意事项】 无

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

35 hi_mapi_venc_bipredb_gop

【说明】 前向预测 B 帧 GOP 属性。

【定义】

typedef struct {
    td_u32 b_frm_num;
    td_s32 b_qp_delta;
    td_s32 ip_qp_delta;
} hi_mapi_venc_bipredb_gop;

【成员】

成员名称 描述
b_frm_num B 帧数量;取值范围 [1, 3]
b_qp_delta P 帧与 B 帧的 QP 差值;取值范围 [-10, 30]
ip_qp_delta I 帧与 P 帧的 QP 差值;取值范围 [-10, 30]

【注意事项】 无

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

36 hi_mapi_venc_cfg_cmd

【说明】 VENC 静态配置命令枚举,必须在通道 init 之前设置。

【定义】

typedef enum {
    HI_MAPI_VENC_CFG_RCN_REF_SHARE,
    HI_MAPI_VENC_CFG_H264_MINI_BUF_MODE,
    HI_MAPI_VENC_CFG_H265_MINI_BUF_MODE,
    HI_MAPI_VENC_CFG_JPEG_MINI_BUF_MODE,
    HI_MAPI_VENC_CFG_CMD_BUTT
} hi_mapi_venc_cfg_cmd;

【成员】

枚举值 描述
HI_MAPI_VENC_CFG_RCN_REF_SHARE RCN 参考帧共享 buffer,对应 hi_mapi_venc_rcn_ref_share_attr
HI_MAPI_VENC_CFG_H264_MINI_BUF_MODE H.264 mini stream-buffer 模式,对应 hi_mapi_venc_mini_buf_mode_attr
HI_MAPI_VENC_CFG_H265_MINI_BUF_MODE H.265 mini stream-buffer 模式,对应 hi_mapi_venc_mini_buf_mode_attr
HI_MAPI_VENC_CFG_JPEG_MINI_BUF_MODE JPEG/MJPEG mini stream-buffer 模式,对应 hi_mapi_venc_mini_buf_mode_attr
HI_MAPI_VENC_CFG_CMD_BUTT 哨兵值,无效。

【注意事项】

  • 必须在 hi_mapi_venc_init 之前调用 hi_mapi_venc_set_config 设置。

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

37 hi_mapi_venc_rcn_ref_share_attr

【说明】 RCN 重建与参考帧共享 buffer 属性。

【定义】

typedef struct {
    td_bool ref_rcn_share_en;
} hi_mapi_venc_rcn_ref_share_attr;

【成员】

成员名称 描述
ref_rcn_share_en 重建帧与参考帧共享 buffer 使能;TD_TRUE 启用,TD_FALSE 关闭。

【注意事项】

  • 通过 HI_MAPI_VENC_CFG_RCN_REF_SHARE 设置。

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

38 hi_mapi_venc_mini_buf_mode_attr

【说明】 mini stream-buffer 模式属性,按协议(H.264/H.265/JPEG)全局生效。

【定义】

typedef struct {
    td_u32 mini_buf_mode;
} hi_mapi_venc_mini_buf_mode_attr;

【成员】

成员名称 描述
mini_buf_mode mini stream-buffer 模式;0 禁用,1 启用。

【注意事项】

  • 通过 HI_MAPI_VENC_CFG_H264_MINI_BUF_MODE / HI_MAPI_VENC_CFG_H265_MINI_BUF_MODE / HI_MAPI_VENC_CFG_JPEG_MINI_BUF_MODE 设置。

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

39 hi_mapi_venc_rc_qp_map_mode

【说明】 QP Map 模式枚举。

【定义】

typedef enum {
    HI_MAPI_VENC_RC_QPMAP_MODE_MEANQP = 0,
    HI_MAPI_VENC_RC_QPMAP_MODE_MINQP,
    HI_MAPI_VENC_RC_QPMAP_MODE_MAXQP,
    HI_MAPI_VENC_RC_QPMAP_MODE_BUTT,
} hi_mapi_venc_rc_qp_map_mode;

【成员】

枚举值 描述
HI_MAPI_VENC_RC_QPMAP_MODE_MEANQP 平均 QP 模式。
HI_MAPI_VENC_RC_QPMAP_MODE_MINQP 最小 QP 模式。
HI_MAPI_VENC_RC_QPMAP_MODE_MAXQP 最大 QP 模式。
HI_MAPI_VENC_RC_QPMAP_MODE_BUTT 哨兵值,无效。

【注意事项】

  • 在 H.265/SVAC3 的各 rc_param 结构体中使用。

【相关数据类型及接口】 hi_mapi_venc_rc_param 中各协议子参数。

40 hi_mapi_venc_scene_change_detect

【说明】 场景变化检测参数。

【定义】

typedef struct {
    td_bool detect_scene_change;
    td_bool adaptive_insert_idr_frame;
} hi_mapi_venc_scene_change_detect;

【成员】

成员名称 描述
detect_scene_change 是否启用场景变化检测;取值范围 [0, 1]
adaptive_insert_idr_frame 是否启用自适应插入 IDR 帧;取值范围 [0, 1]

【注意事项】

  • 作为 hi_mapi_venc_rc_param 的成员使用。

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

41 hi_mapi_venc_rc_param

【说明】 VENC 码率控制扩展参数,包含纹理阈值、行列 QP 偏移、场景变化检测及各协议/模式的详细 RC 参数联合体。

【定义】

typedef struct {
    td_u32 thrd_i[HI_MAPI_VENC_TEXTURE_THRESHOLD_SIZE];
    td_u32 thrd_p[HI_MAPI_VENC_TEXTURE_THRESHOLD_SIZE];
    td_u32 thrd_b[HI_MAPI_VENC_TEXTURE_THRESHOLD_SIZE];
    td_u32 direction_thrd;
    td_u32 row_qp_delta;
    td_s32 first_frame_start_qp;
    hi_mapi_venc_scene_change_detect scene_change_detect;
    union {
        hi_mapi_venc_h264_cbr_param  h264_cbr_param;
        hi_mapi_venc_h264_vbr_param  h264_vbr_param;
        hi_mapi_venc_h264_avbr_param h264_avbr_param;
        hi_mapi_venc_h264_qvbr_param h264_qvbr_param;
        hi_mapi_venc_h264_cvbr_param h264_cvbr_param;
        hi_mapi_venc_h265_cbr_param  h265_cbr_param;
        hi_mapi_venc_h265_vbr_param  h265_vbr_param;
        hi_mapi_venc_h265_avbr_param h265_avbr_param;
        hi_mapi_venc_h265_qvbr_param h265_qvbr_param;
        hi_mapi_venc_h265_cvbr_param h265_cvbr_param;
        hi_mapi_venc_svac3_cbr_param  svac3_cbr_param;
        hi_mapi_venc_svac3_vbr_param  svac3_vbr_param;
        hi_mapi_venc_svac3_avbr_param svac3_avbr_param;
        hi_mapi_venc_svac3_qvbr_param svac3_qvbr_param;
        hi_mapi_venc_svac3_cvbr_param svac3_cvbr_param;
        hi_mapi_venc_mjpeg_cbr_param mjpeg_cbr_param;
        hi_mapi_venc_mjpeg_vbr_param mjpeg_vbr_param;
    };
} hi_mapi_venc_rc_param;

【成员】

成员名称 描述
thrd_i[] I 帧宏块级 Mad 阈值数组;HI_MAPI_VENC_TEXTURE_THRESHOLD_SIZE = 16,取值范围 [0, 255]
thrd_p[] P 帧宏块级 Mad 阈值数组,取值范围 [0, 255]
thrd_b[] B 帧宏块级 Mad 阈值数组,取值范围 [0, 255]
direction_thrd 方向阈值;取值范围 [0, 16]
row_qp_delta 每行起始 QP 相对偏移;取值范围 [0, 10]
first_frame_start_qp 首帧起始 QP;取值范围 [-1, 51]-1 表示使用默认值。
scene_change_detect 场景变化检测参数,详见 hi_mapi_venc_scene_change_detect
联合体各成员 根据编码协议与码率模式选择对应的详细 RC 参数结构体。

【注意事项】

  • 通过 HI_MAPI_VENC_CMD_H264_RC_ATTR_EX / HI_MAPI_VENC_CMD_H265_RC_ATTR_EX / HI_MAPI_VENC_CMD_MJPEG_RC_ATTR_EX / HI_MAPI_VENC_CMD_SVAC2_RC_ATTR_EX 设置/获取。

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

42 hi_mapi_venc_h264_cbr_param

【说明】 H.264 CBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
    td_s32  max_reencode_times;
    td_bool qpmap_en;
} hi_mapi_venc_h264_cbr_param;

【成员】

成员名称 描述
min_ip_ratio I/P 帧最小比例;取值范围 [1, 100]
max_ip_ratio I/P 帧最大比例;取值范围 [1, 100],不可小于 min_ip_ratio
max_qp 最大 QP;取值范围 [0, 51]
min_qp 最小 QP;取值范围 [0, 51],不可大于 max_qp
max_i_qp I 帧最大 QP;取值范围 [0, 51]
min_i_qp I 帧最小 QP;取值范围 [0, 51],不可大于 max_i_qp
max_reencode_times 最大重编码次数;取值范围 [0, 3]
qpmap_en QP Map 使能;TD_TRUE 启用。

【注意事项】 无

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

43 hi_mapi_venc_h264_vbr_param

【说明】 H.264 VBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_s32  change_pos;
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_s32  max_reencode_times;
    td_bool qpmap_en;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
} hi_mapi_venc_h264_vbr_param;

【成员】

成员名称 描述
change_pos 开始调节 QP 时当前码率与最大码率的比值;取值范围 [50, 100]
min_ip_ratio I/P 帧最小比例;取值范围 [1, 100]
max_ip_ratio I/P 帧最大比例;取值范围 [1, 100]
max_reencode_times 最大重编码次数;取值范围 [0, 3]
qpmap_en QP Map 使能。
max_qp P/B 帧最大 QP;取值范围 [0, 51]
min_qp P/B 帧最小 QP;取值范围 [0, 51]
max_i_qp I 帧最大 QP;取值范围 [0, 51]
min_i_qp I 帧最小 QP;取值范围 [0, 51]

【注意事项】 无

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

44 hi_mapi_venc_h264_avbr_param

【说明】 H.264 AVBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_s32  change_pos;
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_s32  max_reencode_times;
    td_bool qpmap_en;
    td_s32  min_still_percent;
    td_u32  max_still_qp;
    td_u32  min_still_psnr;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
    td_u32  min_qp_delta;
    td_u32  motion_sensitivity;
} hi_mapi_venc_h264_avbr_param;

【成员】

成员名称 描述
change_pos QP 调节起始位置比;取值范围 [50, 100]
min_ip_ratio I/P 帧最小比例;取值范围 [1, 100]
max_ip_ratio I/P 帧最大比例;取值范围 [1, 100]
max_reencode_times 最大重编码次数;取值范围 [0, 3]
qpmap_en QP Map 使能。
min_still_percent 静态场景最小码率百分比;取值范围 [5, 100]
max_still_qp 静态场景 I 帧最大 QP;取值范围 [0, 51]
min_still_psnr 保留字段,当前无效。
max_qp P/B 帧最大 QP;取值范围 [0, 51]
min_qp P/B 帧最小 QP;取值范围 [0, 51]
max_i_qp I 帧最大 QP;取值范围 [0, 51]
min_i_qp I 帧最小 QP;取值范围 [0, 51]
min_qp_delta 帧级最小 QP 与 MinQp 的差值;取值范围 [0, 4]
motion_sensitivity 运动灵敏度;取值范围 [0, 100]

【注意事项】 无

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

45 hi_mapi_venc_h264_qvbr_param

【说明】 H.264 QVBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_s32  max_reencode_times;
    td_bool qpmap_en;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
    td_s32  bit_percent_ul;
    td_s32  bit_percent_ll;
    td_s32  psnr_fluctuate_ul;
    td_s32  psnr_fluctuate_ll;
} hi_mapi_venc_h264_qvbr_param;

【成员】

成员名称 描述
min_ip_ratio I/P 帧最小比例;取值范围 [1, 100]
max_ip_ratio I/P 帧最大比例;取值范围 [1, 100]
max_reencode_times 最大重编码次数;取值范围 [0, 3]
qpmap_en QP Map 使能。
max_qp P/B 帧最大 QP;取值范围 [0, 51]
min_qp P/B 帧最小 QP;取值范围 [0, 51]
max_i_qp I 帧最大 QP;取值范围 [0, 51]
min_i_qp I 帧最小 QP;取值范围 [0, 51]
bit_percent_ul 码率上限比例;取值范围 [30, 180]
bit_percent_ll 码率下限比例;取值范围 [30, 180],不可大于 bit_percent_ul
psnr_fluctuate_ul PSNR 上限波动阈值;取值范围 [18, 40]
psnr_fluctuate_ll PSNR 下限波动阈值;取值范围 [18, 40],不可大于 psnr_fluctuate_ul

【注意事项】 无

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

46 hi_mapi_venc_h264_cvbr_param

【说明】 H.264 CVBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_s32  max_reencode_times;
    td_bool qpmap_en;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
    td_u32  min_qp_delta;
    td_u32  max_qp_delta;
    td_u32  extra_bit_percent;
    td_u32  long_term_stat_time_unit;
} hi_mapi_venc_h264_cvbr_param;

【成员】

成员名称 描述
min_ip_ratio I/P 帧最小比例;取值范围 [1, 100]
max_ip_ratio I/P 帧最大比例;取值范围 [1, 100]
max_reencode_times 最大重编码次数;取值范围 [0, 3]
qpmap_en QP Map 使能。
max_qp P/B 帧最大 QP;取值范围 [0, 51]
min_qp P/B 帧最小 QP;取值范围 [0, 51]
max_i_qp I 帧最大 QP;取值范围 [0, 51]
min_i_qp I 帧最小 QP;取值范围 [0, 51]
min_qp_delta 帧级最小 QP 差值;取值范围 [0, 4]
max_qp_delta 帧级最大 QP 差值;取值范围 [0, 4]
extra_bit_percent 超目标码率时可额外分配的码率比例;取值范围 [0, 1000]
long_term_stat_time_unit 长期统计时间单位,单位秒;取值范围 [1, 1800]

【注意事项】 无

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

47 hi_mapi_venc_h265_cbr_param

【说明】 H.265 CBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_u32                    min_ip_ratio;
    td_u32                    max_ip_ratio;
    td_u32                    max_qp;
    td_u32                    min_qp;
    td_u32                    max_i_qp;
    td_u32                    min_i_qp;
    td_s32                    max_reencode_times;
    td_bool                   qpmap_en;
    hi_mapi_venc_rc_qp_map_mode qpmap_mode;
} hi_mapi_venc_h265_cbr_param;

【成员】

成员名称 描述
min_ip_ratio I/P 帧最小比例;取值范围 [1, 100]
max_ip_ratio I/P 帧最大比例;取值范围 [1, 100]
max_qp 最大 QP;取值范围 [0, 51]
min_qp 最小 QP;取值范围 [0, 51]
max_i_qp I 帧最大 QP;取值范围 [0, 51]
min_i_qp I 帧最小 QP;取值范围 [0, 51]
max_reencode_times 最大重编码次数;取值范围 [0, 3]
qpmap_en QP Map 使能。
qpmap_mode QP Map 模式,详见 hi_mapi_venc_rc_qp_map_mode

【注意事项】 无

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

48 hi_mapi_venc_h265_vbr_param

【说明】 H.265 VBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_s32                    change_pos;
    td_u32                    min_ip_ratio;
    td_u32                    max_ip_ratio;
    td_s32                    max_reencode_times;
    td_u32                    max_qp;
    td_u32                    min_qp;
    td_u32                    max_i_qp;
    td_u32                    min_i_qp;
    td_bool                   qpmap_en;
    hi_mapi_venc_rc_qp_map_mode qpmap_mode;
} hi_mapi_venc_h265_vbr_param;

【成员】

成员名称 描述
change_pos QP 调节起始位置比;取值范围 [50, 100]
min_ip_ratio I/P 帧最小比例;取值范围 [1, 100]
max_ip_ratio I/P 帧最大比例;取值范围 [1, 100]
max_reencode_times 最大重编码次数;取值范围 [0, 3]
max_qp P/B 帧最大 QP;取值范围 [0, 51]
min_qp P/B 帧最小 QP;取值范围 [0, 51]
max_i_qp I 帧最大 QP;取值范围 [0, 51]
min_i_qp I 帧最小 QP;取值范围 [0, 51]
qpmap_en QP Map 使能。
qpmap_mode QP Map 模式。

【注意事项】 无

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

49 hi_mapi_venc_h265_avbr_param

【说明】 H.265 AVBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_s32  change_pos;
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_s32  max_reencode_times;
    td_s32  min_still_percent;
    td_u32  max_still_qp;
    td_u32  min_still_psnr;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
    td_u32  min_qp_delta;
    td_u32  motion_sensitivity;
    td_bool qpmap_en;
    hi_mapi_venc_rc_qp_map_mode qpmap_mode;
} hi_mapi_venc_h265_avbr_param;

【成员】

成员名称 描述
change_pos QP 调节起始位置比;取值范围 [50, 100]
min_ip_ratio I/P 帧最小比例;取值范围 [1, 100]
max_ip_ratio I/P 帧最大比例;取值范围 [1, 100]
max_reencode_times 最大重编码次数;取值范围 [0, 3]
min_still_percent 静态场景最小码率百分比;取值范围 [5, 100]
max_still_qp 静态场景 I 帧最大 QP;取值范围 [0, 51]
min_still_psnr 保留字段。
max_qp P/B 帧最大 QP;取值范围 [0, 51]
min_qp P/B 帧最小 QP;取值范围 [0, 51]
max_i_qp I 帧最大 QP;取值范围 [0, 51]
min_i_qp I 帧最小 QP;取值范围 [0, 51]
min_qp_delta 帧级最小 QP 差值;取值范围 [0, 4]
motion_sensitivity 运动灵敏度;取值范围 [0, 100]
qpmap_en QP Map 使能。
qpmap_mode QP Map 模式。

【注意事项】 无

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

50 hi_mapi_venc_h265_qvbr_param

【说明】 H.265 QVBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_s32  max_reencode_times;
    td_bool qpmap_en;
    hi_mapi_venc_rc_qp_map_mode qpmap_mode;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
    td_s32  bit_percent_ul;
    td_s32  bit_percent_ll;
    td_s32  psnr_fluctuate_ul;
    td_s32  psnr_fluctuate_ll;
} hi_mapi_venc_h265_qvbr_param;

【成员】

成员名称 描述
min_ip_ratio I/P 帧最小比例;取值范围 [1, 100]
max_ip_ratio I/P 帧最大比例;取值范围 [1, 100]
max_reencode_times 最大重编码次数;取值范围 [0, 3]
qpmap_en QP Map 使能。
qpmap_mode QP Map 模式。
max_qp P/B 帧最大 QP;取值范围 [0, 51]
min_qp P/B 帧最小 QP;取值范围 [0, 51]
max_i_qp I 帧最大 QP;取值范围 [0, 51]
min_i_qp I 帧最小 QP;取值范围 [0, 51]
bit_percent_ul 码率上限比例;取值范围 [30, 180]
bit_percent_ll 码率下限比例;取值范围 [30, 180]
psnr_fluctuate_ul PSNR 上限波动阈值;取值范围 [18, 40]
psnr_fluctuate_ll PSNR 下限波动阈值;取值范围 [18, 40]

【注意事项】 无

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

51 hi_mapi_venc_h265_cvbr_param

【说明】 H.265 CVBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_s32  max_reencode_times;
    td_bool qpmap_en;
    hi_mapi_venc_rc_qp_map_mode qpmap_mode;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
    td_u32  min_qp_delta;
    td_u32  max_qp_delta;
    td_u32  extra_bit_percent;
    td_u32  long_term_stat_time_unit;
} hi_mapi_venc_h265_cvbr_param;

【成员】

成员名称 描述
min_ip_ratio I/P 帧最小比例;取值范围 [1, 100]
max_ip_ratio I/P 帧最大比例;取值范围 [1, 100]
max_reencode_times 最大重编码次数;取值范围 [0, 3]
qpmap_en QP Map 使能。
qpmap_mode QP Map 模式。
max_qp P/B 帧最大 QP;取值范围 [0, 51]
min_qp P/B 帧最小 QP;取值范围 [0, 51]
max_i_qp I 帧最大 QP;取值范围 [0, 51]
min_i_qp I 帧最小 QP;取值范围 [0, 51]
min_qp_delta 帧级最小 QP 差值;取值范围 [0, 4]
max_qp_delta 帧级最大 QP 差值;取值范围 [0, 4]
extra_bit_percent 超目标码率时可额外分配的比例;取值范围 [0, 1000]
long_term_stat_time_unit 长期统计时间单位,单位秒;取值范围 [1, 1800]

【注意事项】 无

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

52 hi_mapi_venc_svac3_cbr_param

【说明】 SVAC 3.0 CBR 模式详细码率控制参数(结构与 hi_mapi_venc_h265_cbr_param 相同)。

【定义】

typedef struct {
    td_u32                    min_ip_ratio;
    td_u32                    max_ip_ratio;
    td_u32                    max_qp;
    td_u32                    min_qp;
    td_u32                    max_i_qp;
    td_u32                    min_i_qp;
    td_s32                    max_reencode_times;
    td_bool                   qpmap_en;
    hi_mapi_venc_rc_qp_map_mode qpmap_mode;
} hi_mapi_venc_svac3_cbr_param;

【成员】 各成员含义与 hi_mapi_venc_h265_cbr_param 一致。

【注意事项】 无

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

53 hi_mapi_venc_svac3_vbr_param

【说明】 SVAC 3.0 VBR 模式详细码率控制参数(结构与 hi_mapi_venc_h265_vbr_param 相同)。

【定义】

typedef struct {
    td_s32                    change_pos;
    td_u32                    min_ip_ratio;
    td_u32                    max_ip_ratio;
    td_s32                    max_reencode_times;
    td_u32                    max_qp;
    td_u32                    min_qp;
    td_u32                    max_i_qp;
    td_u32                    min_i_qp;
    td_bool                   qpmap_en;
    hi_mapi_venc_rc_qp_map_mode qpmap_mode;
} hi_mapi_venc_svac3_vbr_param;

【成员】 各成员含义与 hi_mapi_venc_h265_vbr_param 一致。

【注意事项】 无

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

54 hi_mapi_venc_svac3_avbr_param

【说明】 SVAC 3.0 AVBR 模式详细码率控制参数(结构与 hi_mapi_venc_h265_avbr_param 相同)。

【定义】

typedef struct {
    td_s32  change_pos;
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_s32  max_reencode_times;
    td_s32  min_still_percent;
    td_u32  max_still_qp;
    td_u32  min_still_psnr;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
    td_u32  min_qp_delta;
    td_u32  motion_sensitivity;
    td_bool qpmap_en;
    hi_mapi_venc_rc_qp_map_mode qpmap_mode;
} hi_mapi_venc_svac3_avbr_param;

【成员】 各成员含义与 hi_mapi_venc_h265_avbr_param 一致。

【注意事项】 无

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

55 hi_mapi_venc_svac3_qvbr_param

【说明】 SVAC 3.0 QVBR 模式详细码率控制参数(结构与 hi_mapi_venc_h265_qvbr_param 相同)。

【定义】

typedef struct {
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_s32  max_reencode_times;
    td_bool qpmap_en;
    hi_mapi_venc_rc_qp_map_mode qpmap_mode;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
    td_s32  bit_percent_ul;
    td_s32  bit_percent_ll;
    td_s32  psnr_fluctuate_ul;
    td_s32  psnr_fluctuate_ll;
} hi_mapi_venc_svac3_qvbr_param;

【成员】 各成员含义与 hi_mapi_venc_h265_qvbr_param 一致。

【注意事项】 无

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

56 hi_mapi_venc_svac3_cvbr_param

【说明】 SVAC 3.0 CVBR 模式详细码率控制参数(结构与 hi_mapi_venc_h265_cvbr_param 相同)。

【定义】

typedef struct {
    td_u32  min_ip_ratio;
    td_u32  max_ip_ratio;
    td_s32  max_reencode_times;
    td_bool qpmap_en;
    hi_mapi_venc_rc_qp_map_mode qpmap_mode;
    td_u32  max_qp;
    td_u32  min_qp;
    td_u32  max_i_qp;
    td_u32  min_i_qp;
    td_u32  min_qp_delta;
    td_u32  max_qp_delta;
    td_u32  extra_bit_percent;
    td_u32  long_term_stat_time_unit;
} hi_mapi_venc_svac3_cvbr_param;

【成员】 各成员含义与 hi_mapi_venc_h265_cvbr_param 一致。

【注意事项】 无

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

57 hi_mapi_venc_mjpeg_cbr_param

【说明】 MJPEG CBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_u32 max_qfactor;
    td_u32 min_qfactor;
} hi_mapi_venc_mjpeg_cbr_param;

【成员】

成员名称 描述
max_qfactor 最大 Qfactor;取值范围 [1, 99]
min_qfactor 最小 Qfactor;取值范围 [1, 99],不可大于 max_qfactor

【注意事项】 无

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

58 hi_mapi_venc_mjpeg_vbr_param

【说明】 MJPEG VBR 模式详细码率控制参数。

【定义】

typedef struct {
    td_s32 change_pos;
    td_u32 max_qfactor;
    td_u32 min_qfactor;
} hi_mapi_venc_mjpeg_vbr_param;

【成员】

成员名称 描述
change_pos Qfactor 调节起始位置比;取值范围 [50, 100]
max_qfactor 最大图像质量;取值范围 [1, 99]
min_qfactor 最小图像质量;取值范围 [1, 99],不可大于 max_qfactor

【注意事项】 无

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

59 hi_mapi_venc_intra_refresh_mode / hi_mapi_venc_intra_refresh

【说明】 帧内刷新模式枚举及帧内刷新参数。

【定义】

typedef enum {
    HI_MAPI_VENC_INTRA_REFRESH_ROW = 0,
    HI_MAPI_VENC_INTRA_REFRESH_COLUMN,
    HI_MAPI_VENC_INTRA_REFRESH_BUTT
} hi_mapi_venc_intra_refresh_mode;

typedef struct {
    td_bool                        refresh_enable;
    hi_mapi_venc_intra_refresh_mode intra_refresh_mode;
    td_u32                         refresh_num;
    td_u32                         req_i_qp;
} hi_mapi_venc_intra_refresh;

【成员】

hi_mapi_venc_intra_refresh_mode 枚举成员:

枚举值 描述
HI_MAPI_VENC_INTRA_REFRESH_ROW 按行刷新。
HI_MAPI_VENC_INTRA_REFRESH_COLUMN 按列刷新。
HI_MAPI_VENC_INTRA_REFRESH_BUTT 哨兵值,无效。

hi_mapi_venc_intra_refresh 成员:

成员名称 描述
refresh_enable 是否启用帧内刷新;TD_TRUE 启用,默认 TD_FALSE
intra_refresh_mode 帧内刷新模式。
refresh_num 每次刷新的行/列数。
req_i_qp I 帧 QP 值;取值范围 [0, 51]

【注意事项】

  • 通过 HI_MAPI_VENC_CMD_INTRA_REFRESH 设置/获取。

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

60 hi_mapi_venc_hierarchical_qp

【说明】 分层 QP 参数,支持最多 4 层的 QP 偏移与帧数配置。

【定义】

typedef struct {
    td_bool hierarchical_qp_en;
    td_s32  hierarchical_qp_delta[HI_MAPI_VENC_HIERARCHICAL_QP_NUM];
    td_s32  hierarchical_frame_num[HI_MAPI_VENC_HIERARCHICAL_QP_NUM];
} hi_mapi_venc_hierarchical_qp;

【成员】

成员名称 描述
hierarchical_qp_en 分层 QP 使能;TD_TRUE 启用。
hierarchical_qp_delta[] 各层相对第 0 层 P 帧的 QP 偏移;HI_MAPI_VENC_HIERARCHICAL_QP_NUM = 4,取值范围 [-10, 10]
hierarchical_frame_num[] 各层帧数;取值范围 [0, 5]

【注意事项】

  • 通过 HI_MAPI_VENC_CMD_HIERARCHICAL_QP 设置/获取。

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

5 错误码

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

错误代码 宏定义 描述
0xA3038002 HI_MAPI_VENC_EHANDLE_ILLEGAL 通道号无效。
0xA3038003 HI_MAPI_VENC_EILLEGAL_PARAM 参数非法。
0xA3038004 HI_MAPI_VENC_EEXIST 资源已存在。
0xA3038005 HI_MAPI_VENC_EUNEXIST 资源不存在。
0xA3038006 HI_MAPI_VENC_ENULL_PTR 空指针。