跳到主要内容

K230视频编解码API参考

1. 概述

1.1 概述

视频编解码模块,支持H.264、H.265、JPEG编解码。VENC模块实现2D运算和编码功能,两者既可以同时使能,也可以单独运算。VDEC模块实现解码功能。

VENC、VENC+2D和VDEC支持系统绑定,2D单独运算时不支持系统绑定。

1.2 功能描述

1.2.1 视频编码

encode flow

图1-1编码数据流程图

典型的编码流程包括了输入图像的接收、图像内容的遮挡和覆盖、图像的编码、以及码流的输出等过程。

编码模块由VENC接收通道、编码通道、2D接收通道、2D运算模块组成。编码能力和2D运算能力见下表。

编码数据流程图中的绿色箭头所示路径,为单独做2D运算的流程。蓝色箭头所示路径为单独做编码运算的流程。紫色箭头所示路径为先做2D运算再进行编码的流程。

表 1-1 编码能力

H264HEVCJPEG
输入格式YUV420 NV12 8bit, ARGB8888, BGRA8888YUV420 NV12 8bit, ARGB8888, BGRA8888YUV420 NV12 8bit, YUV422 UYVY 8bit, ARGB8888, BGRA8888
输出格式YUV420 H.264 Baseline Profile(BP) ; H.264 Main Profile(MP) ; H.264 High Profile(HP); H.264 High 10 Profile(HP)YUV420 HEVC (H.265) Main ; HEVC (H.265) Main 10 ProfileYUV420 and YUV422 JPEG baseline sequential
最大分辨率3840x21603840x21608192x8192
码率控制模式CBR/VBR/FIXQPCBR/VBR/FIXQPFIXQP
GOPI/P帧I/P帧-
编码通道4路4路4路

注意:H264/HEVC/JPEG共用4路。

表1-2 2D运算能力

video输入格式video输出格式叠加数据格式最大分辨率
I420/NV12/ARGB8888/BGRA8888同输入格式ARGB8888/ARGB4444/ARGB15553840x2160
1.2.1.1 编码通道

编码通道作为基本容器,保存编码通道的多种用户设置和管理编码通道的多种内部资源。编码通道完成图像叠加和编码的功能。2D模块实现图像叠加运算,编码器模块实现图像编码,两者既可以单独使用,也可以协同使用。

encode channel

图1-2 编码通道

1.2.1.2 码率控制

码率控制器实现对编码码率进行控制。

从信息学的角度分析,图像的压缩比越低,压缩图像的质量越高;图像压缩比例越高,压缩图像的质量越低。在场景变化的情况下,追求图像质量稳定,则编码码率会波动较大;如追求编码码率稳定,则图像质量会波动较大。

H264/H265编码支持CBR、VBR和FIXQP三种码率控制模式。

MJPEG只支持FIXQP模式。

1.2.1.2.1 CBR

(Constant Bit Rate)固定比特率。即在码率统计时间内保证编码码率平稳。

1.2.1.2.2 VBR

VBR( Variable Bit Rate)可变比特率,即允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。

1.2.1.2.3 FIXQP

FIXQP固定QP值。在码率统计时间内,编码图像所有宏块QP值相同,采用用户设定的图像QP值。

1.2.1.3 GOP结构

本模块只支持I帧和P帧

1.2.1.4 2D运算

2D运算模块可以实现对图像数据的OSD叠加,OSD模式可以实现8个region图像叠加,各region不重叠。支持的OSD格式有:ARGB4444/ARGB1555/ARGB8888。

1.2.1.4.1 2D转换系数的计算

在OSD叠加运算时,如果输入video的格式为YUV,则OSD层需要做RGB to YUV的转换。内核态有一组默认的转换系数,用户如果需要自定义一组12bit的转换系数。转换系数由RGB to YUV的转换公式得到。

已知,RGB to YUV的转换公式如下:

osd formula

则,3*3矩阵中的系数乘以256后四舍五入取整得到对应的转换系数,3*1矩阵中的值为对应的转换系数。

以BT709 LIMITED为例,RGB->YUV的转换公式为:

Y = 0.1826*R + 0.6142*G + 0.0620*B + 16

U = -0.1007*R - 0.3385*G + 0.4392*B + 128

V = 0.4392*R - 0.3990*G - 0.0402*B + 128

得到,转换系数为:128

1.2.1.4.2 2D转换系数的配置

2D转换系数可以通过用户自定义系数接口kd_mpi_venc_set_2d_custom_coef和色域配置接口kd_mpi_venc_set_2d_color_gamut进行配置,两者中选择一个接口进行配置即可。如果两个接口在开始运算前都没有调用,会使用默认系数进行色域转换。

1.2.1.5 限制条件

编码运算存在以下限制:

  1. 如果输入数据格式为YUV420,Y、U、V各分量的图像数据的物理起始地址需要保证4k对齐。
  2. 如果输入数据格式为NV12,Y和UV数据的图像数据的物理起始地址需要保证4k对齐。

2D运算存在以下限制:

  1. 源图像以及目的图像在ddr的物理起始地址要保证8byte align。
  2. 支持图像、osd、框的尺寸为偶数。
  3. 叠加和画框运算中的video数据的src和dst地址必须相同。

解码运算存在以下限制:

  1. 每帧输入数据的物理起始地址需要4k对齐。
1.2.1.6 编码典型应用举例

venc sample flow

图1-3 编码典型应用场景流程图

1.2.2 视频解码

表 12 vpu解码能力

H264HEVCJPEG
输入格式H.264 Baseline;H.264 Main;H.264 High;H.264 High10;支持interlaced streamHEVC (H.265) Main/Main10JPEG, baseline sequential
输出格式YUV420 NV12YUV420 NV12YUV422 UYVY, YUV420 NV12
解码通道4路4路4路

注意:H264/HEVC/JPEG共用4路。

VDEC支持流式发送:

  • 流式发送( K_VDEC_SEND_MODE_STREAM):用户每次可发送任意长度码流到解码器,由解码器内部完成一帧码流的识别过程。须注意,对H.264/H.265而言,在收到下一帧码流才能识别当前帧码流的结束,所以在该发送模式下,输入一帧H.264/H.265码流,不能希望马上开始解码图像。
1.2.2.1 解码典型应用举例

vdec sample flow

图1-3 编码典型应用场景流程图

2. API参考

2.1 视频编码

该功能模块提供以下API:

2.1.1 kd_mpi_venc_create_chn

【描述】

创建编码通道。

【语法】

k_s32 kd_mpi_venc_create_chn(k_u32 chn_num, const k_venc_chn_attr *attr);

【参数】

参数名称描述输入/输出
chn_num编码通道信息。 取值范围:[0, VENC_MAX_CHN_NUM)。输入
attr编码通道属性指针。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 编码器支持通道宽高入下表所示:
H.264/H.265JPEG
WIDTHHEIGHTWIDTHHEIGHT
MAXMINMAXMINMAXMINMAXMIN
40961284096648192128819264

【举例】

无。

【相关主题】

无。

2.1.2 kd_mpi_venc_destory_chn

【描述】

销毁编码通道。

【语法】

k_s32 kd_mpi_venc_destory_chn(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 销毁前必须停止接收图像,否则返回失败。

【举例】

无。

【相关主题】

kd_mpi_venc_stop_chn

2.1.3 kd_mpi_venc_start_chn

【描述】

开启编码通道接收输入图像。

【语法】

k_s32 kd_mpi_venc_start_chn(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 如果通道未创建,则返回失败K_ERR_VENC_UNEXIST。
  • 如果通道已经开始接收图像,没有停止接收图像前再一次调用此接口指定接收帧数,返回操作不允许。
  • 只有开启接收之后编码器才开始接收图像编码。

【举例】

无。

【相关主题】

kd_mpi_venc_create_chn kd_mpi_venc_stop_chn

2.1.4 kd_mpi_venc_stop_chn

【描述】

停止编码通道接收输入图像。

【语法】

k_s32 kd_mpi_venc_stop_chn(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 如果通道未创建,则返回失败。
  • 此接口并不判断当前是否停止接收,即允许重复停止接收不返回错误。
  • 此接口用于编码通道停止接收图像来编码,在编码通道销毁或复位前必须停止接收图像。
  • 调用此接口仅停止接收原始数据编码,码流buffer并不会被清除。

【举例】

无。

【相关主题】

kd_mpi_venc_destory_chn

2.1.5 kd_mpi_venc_query_status

【描述】

查询编码通道状态。

【语法】

k_s32 kd_mpi_venc_query_status(k_u32 chn_num, k_venc_chn_status *status);

【参数】

参数名称描述输入/输出
chn_num编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。输入
status编码通道的状态指针。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 如果通道未创建,则返回失败。

【举例】

无。

【相关主题】

kd_mpi_venc_create_chn

2.1.6 kd_mpi_venc_get_stream

【描述】

获取编码后的码流。

【语法】

k_s32 kd_mpi_venc_get_stream(k_u32 chn_num, k_venc_stream *stream, k_s32 milli_sec);

【参数】

参数名称描述输入/输出
chn_num编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。输入
stream码流结构体指针.输出
milli_sec获取码流超时时间。 取值范围: [-1, +∞ ) -1:阻塞。 0:非阻塞。 大于0:超时时间输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 如果通道未创建,返回失败。
  • 如果stream为空,返回K_ERR_VENC_NULL_PTR。
  • 如果milli_sec小于-1,返回K_ERR_VENC_ILLEGAL_PARAM。

【举例】

无。

【相关主题】

kd_mpi_venc_create_chn kd_mpi_venc_start_chn

2.1.7 kd_mpi_venc_release_stream

【描述】

释放码流缓存。

【语法】

k_s32 kd_mpi_venc_release_stream(k_u32 chn_num, k_venc_stream *stream);

【参数】

参数名称描述输入/输出
chn_num编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。输入
stream码流结构体指针。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 如果通道未创建,则返回错误码K_ERR_VENC_UNEXIST。
  • 如果stream为空,则返回错误码K_ERR_VENC_NULL_PTR。

【举例】

无。

【相关主题】

kd_mpi_venc_create_chn kd_mpi_venc_start_chn

2.1.8 kd_mpi_venc_send_frame

【描述】

支持用户发送原始图像进行编码。

【语法】

k_s32 kd_mpi_venc_send_frame(k_u32 chn_num, k_video_frame_info *frame, k_s32 milli_sec);

【参数】

参数名称描述输入/输出
chn_num编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。输入
frame原始图像信息结构指针,参考《K230 系统控制 API参考》。输入
milli_sec发送图像超时时间。 取值范围: [-1,+∞ ) -1:阻塞。 0:非阻塞。 > 0:超时时间。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 此接口支持用户发送图像至编码通道。
  • 如果milli_sec小于-1,返回K_ERR_VENC_ILLEGAL_PARAM。
  • 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像。

【举例】

无。

【相关主题】

kd_mpi_venc_create_chn kd_mpi_venc_start_chn

2.1.9 kd_mpi_venc_set_rotaion

【描述】

设置编码图像旋转角度。

【语法】

k_s32 kd_mpi_venc_set_rotaion(k_u32 chn_num, const k_rotation rotation);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。输入
rotation旋转角度枚举。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.1.10 kd_mpi_venc_get_rotaion

【描述】

获取编码图像旋转角度。

【语法】

k_s32 kd_mpi_venc_get_rotaion(k_u32 chn_num, k_rotation *rotation);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。输入
rotation旋转角度枚举指针。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.1.11 kd_mpi_venc_set_mirror

【描述】

设置编码图像旋转角度。

【语法】

k_s32 kd_mpi_venc_set_mirror(k_u32 chn_num, const k_venc_mirror mirror);

【参数】

参数名称描述输入/输出
chn_num通道号。取值范围:[0, VENC_MAX_CHN_NUM)。输入
mirror翻转方式枚举。输入

【返回值】

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

【芯片差异】

无。 【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。 【举例】

无。 【相关主题】

无。

2.1.12 kd_mpi_venc_get_mirror

【描述】

设置编码图像旋转角度。 【语法】

| k_s32 kd_mpi_venc_get_mirror(k_u32 chn_num, k_venc_mirror mirror);|

【参数】

参数名称描述输入/输出
chn_num通道号。取值范围:[0, VENC_MAX_CHN_NUM)。输入
mirror翻转方式枚举。输出

【返回值】

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

【芯片差异】

无。 【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。 【举例】

无。 【相关主题】

无。

2.1.13 kd_mpi_venc_enable_idr

【描述】

设置IDR帧使能。

【语法】

k_s32 kd_mpi_venc_enable_idr(k_u32 chn_num, const k_bool idr_enable);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
idr_enable是否使能IDR帧。0:不使能。1:使能。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 本接口需要在创建编码通道之后,开始编码通道之前调用。

【举例】

无。

【相关主题】

无。

2.1.14 kd_mpi_venc_set_2d_mode

【描述】

设置2D运算模式。

【语法】

k_s32 kd_mpi_venc_set_2d_mode(k_u32 chn_num, const k_venc_2d_calc_mode mode);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
mode2D运算模式枚举。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 目前运算模式不支持K_VENC_2D_CALC_MODE_CSC模式。

【举例】

无。

【相关主题】

无。

2.1.15 kd_mpi_venc_get_2d_mode

【描述】

获取2D运算模式。

【语法】

k_s32 kd_mpi_venc_get_2d_mode(k_u32 chn_num, k_venc_2d_calc_mode *mode);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
mode2D运算模式枚举指针。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h

  • 库文件:libvenc.a

【注意】

  • 目前运算模式不支持K_VENC_2D_CALC_MODE_CSC模式。

【举例】

无。

【相关主题】

无。

2.1.16 kd_mpi_venc_set_2d_osd_param

【描述】

设置2D运算中OSD的区域属性。

【语法】

k_s32 kd_mpi_venc_set_2d_osd_param(k_u32 chn_num, k_u8 index, const k_venc_2d_osd_attr *attr);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
indexOSD区域索引。 取值范围:[0, K_VENC_MAX_2D_OSD_REGION_NUM)。输入
attrOSD属性指针。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 如果有n个叠加区域,索引值应分别设置为0~n-1。

【举例】

无。

【相关主题】

无。

2.1.17 kd_mpi_venc_get_2d_osd_param

【描述】

获取2D运算中指定索引的OSD的区域属性。

【语法】

k_s32 kd_mpi_venc_get_2d_osd_param(k_u32 chn_num, k_u8 index, const k_venc_2d_osd_attr *attr);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
indexOSD区域索引。 取值范围:[0, K_VENC_MAX_2D_OSD_REGION_NUM)。输入
attrOSD属性指针。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.1.18 kd_mpi_venc_set_2d_border_param

【描述】

设置2D运算中的画框属性。

【语法】

k_s32 kd_mpi_venc_set_2d_border_param(k_u32 chn_num, k_u8 index, const k_venc_2d_border_attr *attr);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
index画框索引。 取值范围:[0, K_VENC_MAX_2D_BORDER_NUM)。输入
attr画框属性指针。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 如果有n个框,索引值应分别设置为0~n-1。

【举例】

无。

【相关主题】

无。

2.1.19 kd_mpi_venc_get_2d_border_param

【描述】

获取2D运算中的画框属性。

【语法】

k_s32 kd_mpi_venc_get_2d_border_param(k_u32 chn_num, k_u8 index, k_venc_2d_border_attr *attr);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
index画框索引。 取值范围:[0, K_VENC_MAX_2D_BORDER_NUM)。输入
attr画框属性指针。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.1.20 kd_mpi_venc_set_2d_custom_coef

【描述】

设置2D运算中的图像格式转换系数。

【语法】

k_s32 kd_mpi_venc_set_2d_custom_coef(k_u32 chn_num, const k_s16 *coef);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
coef转换系数指针。参考2D转换系数的计算输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 内核态有一组默认的转换系数,如需自定义转换系数,可通过本接口配置。
  • 本接口调用应该在设置运算模式之后。
  • 转换系数的说明,详见2D转换系数的计算
  • 在运算模式为K_VENC_2D_CALC_MODE_BORDER时,不适用转换系数,调用本接口会报错。

【举例】

无。

【相关主题】

kd_mpi_venc_set_2d_mode

2.1.21 kd_mpi_venc_get_2d_custom_coef

【描述】

获取2D运算中的图像格式转换系数。

【语法】

k_s32 kd_mpi_venc_get_2d_custom_coef(k_u32 chn_num, k_s16 *coef);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
coef转换系数指针。参考2D转换系数的计算输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 本接口调用应该在设置运算模式之后。
  • 在运算模式为K_VENC_2D_CALC_MODE_BORDER时,不适用转换系数,调用本接口会报错。

【举例】

无。

【相关主题】

无。

2.1.22 kd_mpi_venc_set_2d_color_gamut

【描述】

设置2D运算的色域。

【语法】

k_s32 kd_mpi_venc_set_2d_color_gamut(k_u32 chn_num, const k_venc_2d_color_gamut color_gamut);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
color_gamut色域枚举。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 内核态有一组默认的转换系数,如需自定义转换系数,可通过本接口配置。
  • 本接口调用应该在设置运算模式之后。
  • 在运算模式为K_VENC_2D_CALC_MODE_BORDER时,不适用色域,调用本接口会报错。

【举例】

无。

【相关主题】

无。

2.1.23 kd_mpi_venc_get_2d_color_gamut

【描述】

获取2D运算的色域。

【语法】

k_s32 kd_mpi_venc_get_2d_color_gamut(k_u32 chn_num, k_venc_2d_color_gamut *color_gamut);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
color_gamut色域枚举指针。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 内核态有一组默认的转换系数,如需自定义转换系数,可通过本接口配置。
  • 本接口调用应该在设置运算模式之后。
  • 在运算模式为K_VENC_2D_CALC_MODE_BORDER时,不适用色域,调用本接口会报错。

【举例】

无。

【相关主题】

无。

2.1.24 kd_mpi_venc_attach_2d

【描述】

将2D运算与venc关联。

【语法】

k_s32 kd_mpi_venc_attach_2d(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 目前绑定只支持编码通道号和2D运算通道号相同的模式。只有前3路编码支持attach 2D操作。

【举例】

无。

【相关主题】

无。

2.1.25 kd_mpi_venc_detach_2d

【描述】

将2D运算与venc分离。

【语法】

k_s32 kd_mpi_venc_detach_2d(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num2D运算通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 调用该接口,用户需要保证编码通道已停止。

【举例】

无。

【相关主题】

kd_mpi_venc_stop_chn

2.1.26 kd_mpi_venc_send_2d_frame

【描述】

向2D模块发送一帧数据。

【语法】

| k_s32 kd_mpi_venc_send_2d_frame(k_u32 chn_num, const k_video_frame_info *frame, k_s32 milli_sec);

【参数】

参数名称描述输入/输出
chn_num2D运算通道号,取值范围[0, K_VENC_2D_MAX_CHN_NUM)。输入
frame原始图像信息结构指针,参考《K230 系统控制 API参考》。输入
milli_sec发送图像超时时间。 取值范围: [-1,+∞ ) -1:阻塞。 0:非阻塞。 > 0:超时时间。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 本接口只在单2D运算的场景使用,在2D运算后再进行编码的场景,需要使用venc发送图形的接口kd_mpi_venc_send_frame

【举例】

无。

【相关主题】

kd_mpi_venc_send_frame

2.1.27 kd_mpi_venc_get_2d_frame

【描述】

获取2D运算结果。

【语法】

k_s32 kd_mpi_venc_get_2d_frame(k_u32 chn_num, k_video_frame_info *frame, k_s32 milli_sec);

【参数】

参数名称描述输入/输出
chn_num2D运算通道号,取值范围[0, K_VENC_2D_MAX_CHN_NUM)。输入
frame输出图像信息结构指针,参考《K230 系统控制 API参考》。输入
milli_sec发送图像超时时间。 取值范围: [-1,+∞ ) -1:阻塞。 0:非阻塞。 > 0:超时时间。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 本接口只在单2D运算的场景使用,在2D运算后再进行编码的场景,获取编码后的码流需要使用kd_mpi_venc_get_stream

【举例】

无。

【相关主题】

kd_mpi_venc_get_stream

2.1.28 kd_mpi_venc_start_2d_chn

【描述】

开始2D通道接收输入图像。

【语法】

k_s32 kd_mpi_venc_start_2d_chn(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num2D运算通道号,取值范围[0, K_VENC_2D_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h

【注意】

【举例】

无。

【相关主题】

kd_mpi_venc_start_chn

2.1.29 kd_mpi_venc_stop_2d_chn

【描述】

停止2D通道接收输入图像。

【语法】

k_s32 kd_mpi_venc_stop_2d_chn(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num2D运算通道号,取值范围[0, K_VENC_2D_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.1.30 kd_mpi_venc_request_idr

【描述】

请求IDR帧,在调用之后立即产生一个IDR帧。

【语法】

k_s32 kd_mpi_venc_request_idr(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.1.31 kd_mpi_venc_set_h265_sao

【描述】

设置H.265通道的Sao属性。

【语法】

k_s32 kd_mpi_venc_set_h265_sao(k_u32 chn_num, const k_venc_h265_sao *h265_sao);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
h265_saoH.265协议编码通道的Sao配置。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 本接口需要在创建编码通道之后,开始编码通道之前调用。

【举例】

无。

【相关主题】

无。

2.1.32 kd_mpi_venc_get_h265_sao

【描述】

获取H.265通道的Sao属性。

【语法】

k_s32 kd_mpi_venc_get_h265_sao(k_u32 chn_num, k_venc_h265_sao *h265_sao);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
h265_saoH.265协议编码通道的Sao配置。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.1.33 kd_mpi_venc_set_dblk

【描述】

设置H.264/H.265协议编码通道的Deblocking使能。

【语法】

k_s32 kd_mpi_venc_set_dblk(k_u32 chn_num, const k_bool dblk_en);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
dblk_en是否使能deblocking。K_TRUE:使能。K_FALSE:不使能。默认使能。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 本接口需要在创建编码通道之后,开始编码通道之前调用。

【举例】

无。

【相关主题】

无。

2.1.34 kd_mpi_venc_get_dblk

【描述】

获取H.264/H.265协议编码通道的Deblocking状态。

【语法】

k_s32 kd_mpi_venc_get_dblk(k_u32 chn_num, k_bool *dblk_en);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
dblk_en是否使能deblocking。K_TRUE:使能。K_FALSE:不使能。默认使能。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.1.35 kd_mpi_venc_set_roi_attr

【描述】

设置H.264/H.265通道的ROI属性。

【语法】

k_s32 kd_mpi_venc_set_roi_attr(k_u32 chn_num, const k_venc_roi_attr *roi_attr);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
dblk_en是否使能deblocking。K_TRUE:使能。K_FALSE:不使能。默认使能。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 本接口需要在创建编码通道之后,开始编码通道之前调用。

【举例】

无。

【相关主题】

无。

2.1.36 kd_mpi_venc_get_roi_attr

【描述】

获取H.264/H.265通道的ROI属性。

【语法】

k_s32 kd_mpi_venc_get_roi_attr(k_u32 chn_num, k_venc_roi_attr *roi_attr);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
dblk_en是否使能deblocking。K_TRUE:使能。K_FALSE:不使能。默认使能。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.1.37 kd_mpi_venc_set_h264_entropy

【描述】

设置H.264协议编码通道的熵编码模式。

【语法】

k_s32 kd_mpi_venc_set_h264_entropy(k_u32 chn_num, const k_venc_h264_entropy *h264_entropy);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
h264_entropyH.264协议编码通道的熵编码模式。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 本接口需要在创建编码通道之后,开始编码通道之前调用。

【举例】

无。

【相关主题】

无。

2.1.38 kd_mpi_venc_get_h264_entropy

【描述】

获取H.264协议编码通道的熵编码模式。

【语法】

k_s32 kd_mpi_venc_get_h264_entropy(k_u32 chn_num, k_venc_h264_entropy *h264_entropy);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
h264_entropyH.264协议编码通道的熵编码模式。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.1.39 kd_mpi_venc_set_h265_entropy

【描述】

设置H.265协议编码通道的熵编码模式。

【语法】

k_s32 kd_mpi_venc_set_h265_entropy(k_u32 chn_num, const k_venc_h265_entropy *h265_entropy);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
h265_entropyH.265协议编码通道的熵编码模式。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

  • 本接口需要在创建编码通道之后,开始编码通道之前调用。

【举例】

无。

【相关主题】

无。

2.1.40 kd_mpi_venc_get_h265_entropy

【描述】

获取H.265协议编码通道的熵编码模式。

【语法】

k_s32 kd_mpi_venc_get_h265_entropy(k_u32 chn_num, k_venc_h265_entropy *h265_entropy);

【参数】

参数名称描述输入/输出
chn_num通道号。 取值范围:[0, K_VENC_2D_MAX_CHN_NUM)。输入
h265_entropyH.265协议编码通道的熵编码模式。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_venc_api.h,k_type.h,k_module.h,k_sys_comm.h,k_venc_comm.h
  • 库文件:libvenc.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.2 视频解码

该功能模块提供以下API:

2.2.1 kd_mpi_vdec_create_chn

【描述】

创建视频解码通道。

【语法】

k_s32 kd_mpi_vdec_create_chn(k_u32 chn_num, const k_vdec_chn_attr *attr);

【参数】

参数名称描述输入/输出
chn_num编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。输入
attr解码通道属性指针。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_vdec_api.h,k_type.h,k_module.h,k_sys_comm.h,k_vdec_comm.h
  • 库文件:libvdec.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.2.2 kd_mpi_vdec_destroy_chn

【描述】

销毁视频解码通道。

【语法】

k_s32 kd_mpi_vdec_destroy_chn(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_vdec_api.h,k_type.h,k_module.h,k_sys_comm.h,k_vdec_comm.h
  • 库文件:libvdec.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.2.3 kd_mpi_vdec_start_chn

【描述】

开启视频解码通道。

【语法】

k_s32 kd_mpi_vdec_start_chn(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_vdec_api.h,k_type.h,k_module.h,k_sys_comm.h,k_vdec_comm.h
  • 库文件:libvdec.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.2.4 kd_mpi_vdec_stop_chn

【描述】

停止视频解码通道。

【语法】

k_s32 kd_mpi_vdec_stop_chn(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_num编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_vdec_api.h,k_type.h,k_module.h,k_sys_comm.h,k_vdec_comm.h
  • 库文件:libvdec.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.2.5 kd_mpi_vdec_query_status

【描述】

查询解码通道状态。

【语法】

k_s32 kd_mpi_vdec_query_status(k_u32 chn_num, k_vdec_chn_status *status);

【参数】

参数名称描述输入/输出
chn_num编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。输入
status视频解码通道状态结构体指针。输出

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_vdec_api.h,k_type.h,k_module.h,k_sys_comm.h,k_vdec_comm.h
  • 库文件:libvdec.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.2.6 kd_mpi_vdec_send_stream

【描述】

向视频解码通道发送码流数据。

【语法】

k_s32 kd_mpi_vdec_send_stream(k_u32 chn_num, const k_vdec_stream *stream, k_s32 milli_sec);

【参数】

参数名称描述输入/输出
chn_num编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。输入
stream解码码流数据指针。输入
milli_sec送码流方式标志。 取值范围: -1:阻塞。 0:非阻塞。 正值:超时时间,没有上限值,以ms为单位。输入

【返回值】

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

【芯片差异】

【需求】

  • 头文件:mpi_vdec_api.h,k_type.h,k_module.h,k_sys_comm.h,k_vdec_comm.h
  • 库文件:libvdec.a

【注意】

【举例】

【相关主题】

2.2.7 kd_mpi_vdec_get_frame

【描述】

获取视频解码通道的解码图像。

【语法】

k_s32 kd_mpi_vdec_get_frame(k_u32 chn_num, k_video_frame_info *frame_info, k_vdec_supplement_info *supplement, k_s32 milli_sec);

【参数】

参数名称描述输入/输出
chn编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。 输入
frame_info获取的解码图像信息,参考《K230 系统控制 API参考》。输出
supplement获取的解码图像补充信息。输出
milli_sec送码流方式标志。 取值范围: -1:阻塞。 0:非阻塞。 正值:超时时间,没有上限值,以ms为单位 动态属性。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_vdec_api.h,k_type.h,k_module.h,k_sys_comm.h,k_vdec_comm.h
  • 库文件:libvdec.a

【注意】

无。

【举例】

无。

【相关主题】

无。

2.2.8 kd_mpi_vdec_release_frame

【描述】

获取视频解码通道的解码图像。

【语法】

k_s32 kd_mpi_vdec_release_frame(k_u32 chn_num, const k_video_frame_info *frame_info);

【参数】

参数名称描述输入/输出
chn编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。输入
frame_info解码后的图像信息指针,由kd_mpi_vdec_get_frame接口获取,参考《K230 系统控制 API参考》。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_vdec_api.h,k_type.h,k_module.h,k_sys_comm.h,k_vdec_comm.h
  • 库文件:libvdec.a

【注意】

无。

【举例】

无。

【相关主题】

kd_mpi_vdec_get_frame

2.2.9 kd_mpi_vdec_set_downscale

【描述】

设置解码输出缩小的图像(指定长宽或按比例)。

【语法】

k_s32 kd_mpi_vdec_set_downscale(k_u32 chn_num, const k_vdec_downscale *downscale)

【参数】

参数名称描述输入/输出
chn_num编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。输入
downscale缩小尺寸参数结构体指针。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_vdec_api.h,k_type.h,k_module.h,k_sys_comm.h,k_vdec_comm.h
  • 库文件:libvdec.a

【注意】

在kd_mpi_vdec_create_chn和kd_mpi_vdec_start_chn之间设置。

【举例】

无。

【相关主题】

无。

2.2.10 kd_mpi_vdec_set_rotation

【描述】

设置解码旋转角度。

【语法】

k_s32 kd_mpi_vdec_set_rotation(k_u32 chn_num, const k_rotation rotation)

【参数】

参数名称描述输入/输出
chn_num编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。输入
rotation旋转角度枚举。输入

【返回值】

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

【芯片差异】

无。

【需求】

  • 头文件:mpi_vdec_api.h,k_type.h,k_module.h,k_sys_comm.h,k_vdec_comm.h
  • 库文件:libvdec.a

【注意】

在kd_mpi_vdec_create_chn和kd_mpi_vdec_start_chn之间设置。

【举例】

无。

【相关主题】

无。

3. 数据类型

3.1 视频编码

该功能模块的相关数据类型定义如下:

3.1.1 VENC_MAX_CHN_NUM

【说明】

定义最大通道个数。

【定义】

#define VENC_MAX_CHN_NUM 4

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.2 K_VENC_MAX_2D_OSD_REGION_NUM

【说明】

定义2D运算叠加OSD的最大Region个数。

【定义】

#define K_VENC_MAX_2D_OSD_REGION_NUM 8

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.3 K_VENC_MAX_2D_BORDER_NUM

【说明】

定义2D运算画框的最大个数。

【定义】

#define K_VENC_MAX_2D_BORDER_NUM 32

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.4 K_VENC_2D_COFF_NUM

【说明】

定义2D运算CSC转换系数的个数。

【定义】

#define K_VENC_2D_COFF_NUM 12

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.5 K_VENC_2D_MAX_CHN_NUM

【说明】

定义2D运算channel个数。

【定义】

#define K_VENC_2D_MAX_CHN_NUM 3

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.6 k_venc_rc_mode

【说明】

定义编码通道码率控制器模式。

【定义】

typedef enum {  
K_VENC_RC_MODE_CBR = 1,
K_VENC_RC_MODE_VBR,
K_VENC_RC_MODE_FIXQP,
K_VENC_RC_MODE_MJPEG_FIXQP,
K_VENC_RC_MODE_BUTT,
} k_venc_rc_mode;

【成员】

成员名称描述
K_VENC_RC_MODE_CBRH.264/H.265 CBR模式。
K_VENC_RC_MODE_VBRH.264/H.265 VBR模式。
K_VENC_RC_MODE_FIXQPH.264/H.265 Fixqp模式。
K_VENC_RC_MODE_MJPEG_FIXQPMJPEG Fixqp模式。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.7 k_venc_pack_type

【说明】

定义JPEG码流PACK类型枚举。

【定义】

typedef enum {  
K_VENC_P_FRAME = 1,
K_VENC_I_FRAME = 2,
K_VENC_HEADER = 3,
K_VENC_BUTT
} k_venc_pack_type;

【成员】

成员名称描述
K_VENC_P_FRAMEI帧。
K_VENC_I_FRAMEP帧。
K_VENC_HEADERHeader。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.8 k_venc_2d_calc_mode

【说明】

定义2d运算的计算模式枚举。

【定义】

typedef enum {  
K_VENC_2D_CALC_MODE_CSC = 0,
K_VENC_2D_CALC_MODE_OSD,
K_VENC_2D_CALC_MODE_BORDER,
K_VENC_2D_CALC_MODE_OSD_BORDER,
K_VENC_2D_CALC_MODE_BUTT
} k_venc_2d_calc_mode;

【成员】

成员名称描述
K_VENC_2D_CALC_MODE_CSC图片格式转换。
K_VENC_2D_CALC_MODE_OSD图片叠加。
K_VENC_2D_CALC_MODE_BORDER画框。
K_VENC_2D_CALC_MODE_OSD_BORDER先进行图片叠加,再画框。

【注意事项】

  • 目前不支持K_VENC_2D_CALC_MODE_CSC模式。

【相关数据类型及接口】

无。

3.1.9 k_venc_2d_src_dst_fmt

【说明】

定义2D运算的输入输出数据格式枚举。

【定义】

typedef enum {  
K_VENC_2D_SRC_DST_FMT_YUV420_NV12= 0,
K_VENC_2D_SRC_DST_FMT_YUV420_NV21,
K_VENC_2D_SRC_DST_FMT_YUV420_I420,
K_VENC_2D_SRC_DST_FMT_ARGB8888 = 4,
K_VENC_2D_SRC_DST_FMT_ARGB4444,
K_VENC_2D_SRC_DST_FMT_ARGB1555,
K_VENC_2D_SRC_DST_FMT_XRGB8888,
K_VENC_2D_SRC_DST_FMT_XRGB4444,
K_VENC_2D_SRC_DST_FMT_XRGB1555,
K_VENC_2D_SRC_DST_FMT_BGRA8888,
K_VENC_2D_SRC_DST_FMT_BGRA4444,
K_VENC_2D_SRC_DST_FMT_BGRA5551,
K_VENC_2D_SRC_DST_FMT_BGRX8888,
K_VENC_2D_SRC_DST_FMT_BGRX4444,
K_VENC_2D_SRC_DST_FMT_BGRX5551,
K_VENC_2D_SRC_DST_FMT_RGB888,
K_VENC_2D_SRC_DST_FMT_BGR888,
K_VENC_2D_SRC_DST_FMT_RGB565,
K_VENC_2D_SRC_DST_FMT_BGR565,
K_VENC_2D_SRC_DST_FMT_SEPERATE_RGB,
K_VENC_2D_SRC_DST_FMT_BUTT
} k_venc_2d_src_dst_fmt;

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.10 k_venc_2d_osd_fmt

【说明】

定义2D运算的OSD层数据格式枚举。

【定义】

typedef enum {  
K_VENC_2D_OSD_FMT_ARGB8888= 0,
K_VENC_2D_OSD_FMT_ARGB4444,
K_VENC_2D_OSD_FMT_ARGB1555,
K_VENC_2D_OSD_FMT_XRGB8888,
K_VENC_2D_OSD_FMT_XRGB4444,
K_VENC_2D_OSD_FMT_XRGB1555,
K_VENC_2D_OSD_FMT_BGRA8888,
K_VENC_2D_OSD_FMT_BGRA4444,
K_VENC_2D_OSD_FMT_BGRA5551,
K_VENC_2D_OSD_FMT_BGRX8888,
K_VENC_2D_OSD_FMT_BGRX4444,
K_VENC_2D_OSD_FMT_BGRX5551,
K_VENC_2D_OSD_FMT_RGB888,
K_VENC_2D_OSD_FMT_BGR888,
K_VENC_2D_OSD_FMT_RGB565,
K_VENC_2D_OSD_FMT_BGR565,
K_VENC_2D_OSD_FMT_SEPERATE_RGB,
K_VENC_2D_OSD_FMT_BUTT
} k_venc_2d_osd_fmt;

【注意事项】

  • 目前叠加图像只支持ARGB8888、ARGB4444和ARGB1555的格式。

【相关数据类型及接口】

无。

3.1.11 k_venc_2d_add_order

【说明】

定义2D运算的OSD叠加(video、osd和背景层)顺序枚举。

【定义】

typedef enum {  
/\* bottom ------\> top \*/
K_VENC_2D_ADD_ORDER_VIDEO_OSD= 0,
K_VENC_2D_ADD_ORDER_OSD_VIDEO,
K_VENC_2D_ADD_ORDER_VIDEO_BG,
K_VENC_2D_ADD_ORDER_BG_VIDEO,
K_VENC_2D_ADD_ORDER_VIDEO_BG_OSD,
K_VENC_2D_ADD_ORDER_VIDEO_OSD_BG,
K_VENC_2D_ADD_ORDER_BG_VIDEO_OSD,
K_VENC_2D_ADD_ORDER_BG_OSD_VIDEO,
K_VENC_2D_ADD_ORDER_OSD_VIDEO_BG,
K_VENC_2D_ADD_ORDER_OSD_BG_VIDEO,
K_VENC_2D_ADD_ORDER_BUTT
} k_venc_2d_add_order;

【成员】

成员名称描述
K_VENC_2D_ADD_ORDER_VIDEO_OSDVideo在底层,OSD在顶层。
K_VENC_2D_ADD_ORDER_OSD_VIDEOOSD在底层,video在顶层。
K_VENC_2D_ADD_ORDER_VIDEO_BGVideo在底层,背景色顶层。
K_VENC_2D_ADD_ORDER_BG_VIDEO背景色在底层,video顶层。
K_VENC_2D_ADD_ORDER_VIDEO_BG_OSDVideo在底层,背景色在中间层,OSD在顶层。
K_VENC_2D_ADD_ORDER_VIDEO_OSD_BGVideo在底层,OSD在中间层,背景色在顶层。
K_VENC_2D_ADD_ORDER_BG_VIDEO_OSD背景色在底层,video在中间层,OSD在顶层。
K_VENC_2D_ADD_ORDER_BG_OSD_VIDEO背景色在底层,OSD在中间层,video在顶层。
K_VENC_2D_ADD_ORDER_OSD_VIDEO_BGOSD在底层,video在中间层,背景色在顶层。
K_VENC_2D_ADD_ORDER_OSD_BG_VIDEOOSD在底层,背景色在中间层,video在顶层。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.12 k_rotation

【说明】

定义编码旋转角度枚举。

【定义】

typedef enum {  
K_VPU_ROTATION_0 = 0,
K_VPU_ROTATION_90 = 1,
K_VPU_ROTATION_180 = 2,
K_VPU_ROTATION_270 = 3,
K_VPU_ROTATION_BUTT
} k_rotation;

【成员】

成员名称描述
K_VPU_ROTATION_0不旋转,旋转0度。
K_VPU_ROTATION_90旋转90度。
K_VPU_ROTATION_180旋转180度。
K_VPU_ROTATION_270旋转270度。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.13 k_venc_mirror

【说明】

定义编码翻转方式枚举。

【定义】

typedef enum {  
K_VENC_MIRROR_HORI = 0,
K_VENC_MIRROR_VERT = 1,
K_VENC_MIRROR_BUTT
} k_venc_mirror;

【成员】

成员名称描述
K_VENC_MIRROR_HORI水平翻转。
K_VENC_MIRROR_VERT垂直翻转。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.14 k_venc_2d_color_gamut

【说明】

定义2D运算的色域枚举。

【定义】

typedef enum {  
VENC_2D_COLOR_GAMUT_BT601 = 0,
VENC_2D_COLOR_GAMUT_BT709,
VENC_2D_COLOR_GAMUT_BT2020,
VENC_2D_COLOR_GAMUT_BUTT
} k_venc_2d_color_gamut;

【成员】

成员名称描述
VENC_2D_COLOR_GAMUT_BT601BT.601色域
VENC_2D_COLOR_GAMUT_BT709,BT.709色域
VENC_2D_COLOR_GAMUT_BT2020BT.2020色域

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.15 k_venc_chn_attr

【说明】

定义编码通道属性结构体。

【定义】

typedef struct {
[k_venc_attr](#3116-k_venc_attr) venc_attr;
[k_venc_rc_attr](#3117-k_venc_rc_attr) rc_attr;
} k_venc_chn_attr;

【成员】

成员名称描述
venc_attr编码器属性。
rc_attr码率控制器属性。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.16 k_venc_attr

【说明】

定义编码器属性结构体。

【定义】

typedef struct {  
k_payload_type type;
k_u32 stream_buf_size;
k_u32 stream_buf_cnt;
k_u32 pic_width;
k_u32 pic_height;
k_venc_profile profile;
} k_venc_attr;

【成员】

成员名称描述
type编码协议类型枚。
stream_buf_size码流buffer大小。
stream_buf_size码流buffer大小。
stream_buf_cnt码流buffer个数。
profile编码的等级枚举。
pic_width编码图像宽度。 取值范围: [MIN_WIDTH, MAX_WIDTH],以像素为单 位。 必须是MIN_ALIGN的整数倍。
pic_height编码图像高度。 取值范围: [MIN_HEIGHT, MAX_HEIGHT],以像素为 单位。 必须是MIN_ALIGN的整数倍。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.17 k_venc_rc_attr

【说明】

定义编码通道码率控制器属性结构体。

【定义】

typedef struct {  
[k_venc_rc_mode](#316-k_venc_rc_mode) rc_mode;
union { [k_venc_cbr](#3118-k_venc_cbr) cbr;
[k_venc_vbr](#3119-k_venc_vbr) vbr;
[k_venc_fixqp](#3120-k_venc_fixqp) fixqp;
[k_venc_mjpeg_fixqp](#3121-k_venc_mjpeg_fixqp) mjpeg_fixqp;
};
} k_venc_rc_attr;

【成员】

成员名称描述
rc_modeRC模式。
cbrH.264/H.265协议编码通道固定比特率模式属性。
VbrH.264/H.265协议编码通道可变比特率模式属性。
fixqpH.264/H.265协议编码通道固定qp模式属性。
mjpeg_fixqpMjpeg协议编码通道Fixqp模式属性。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.18 k_venc_cbr

【说明】

定义H.264/H.265编码通道CBR属性结构体。

【定义】

typedef struct {  
k_u32 gop;
k_u32 stats_time;
k_u32 src_frame_rate;
k_u32 dst_frame_rate;
k_u32 bit_rate;
} k_venc_cbr;

【成员】

成员名称描述
gopgop值。
stats_timeCBR码率统计时间,以秒为单位。 取值范围: [1, 60]
src_frame_rate输入帧率,以fps为单位。
dst_frame_rate编码器输出帧率,以fps为单位。
bit_rate平均bitrate,以kbps为单位。

【注意事项】

  • 如果设置的码率超过芯片手册中规定的最大实时码率,则不能保证实时编码。

【相关数据类型及接口】

无。

3.1.19 k_venc_vbr

【说明】

定义H.264/H.265编码通道VBR属性结构体。

【定义】

typedef struct {  
k_u32 gop;
k_u32 stats_time;
k_u32 src_frame_rate;
k_u32 dst_frame_rate;
k_u32 max_bit_rate;
k_u32 bit_rate;
} k_venc_vbr;

【成员】

成员名称描述
gopgop值。
stats_timeVBR码率统计时间,以秒为单位。 取值范围: [1, 60]
src_frame_rate输入帧率,以fps为单位。
dst_frame_rate编码器输出帧率,以fps为单位。
max_bit_rate最大bitrate,以kbps为单位。
bit_rate平均bitrate,以kbps为单位。

【注意事项】

请参见k_venc_cbr关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

无。

3.1.20 k_venc_fixqp

【说明】

定义H.264/H.265编码通道Fixqp属性结构体。

【定义】

typedef struct {  
k_u32 gop;
k_u32 src_frame_rate;
k_u32 dst_frame_rate;
k_u32 i_qp; k_u32 p_qp;
} k_venc_fixqp;

【成员】

成员名称描述
gopgop值。
src_frame_rate输入帧率,以fps为单位。
dst_frame_rate编码器输出帧率,以fps为单位。
i_qpI帧所有宏块Qp值。 取值范围: [0, 51]
q_qpP帧所有宏块Qp值。 取值范围: [0, 51]

【注意事项】

请参见k_venc_cbr关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

无。

3.1.21 k_venc_mjpeg_fixqp

【说明】

定义MJPEG编码通道Fixqp属性结构体。

【定义】

typedef struct {  
k_u32 src_frame_rate;
k_u32 dst_frame_rate;
k_u32 q_factor;
} k_venc_mjpeg_fixqp;

【成员】

成员名称描述
src_frame_rate输入帧率,以fps为单位。
dst_frame_rate编码器输出帧率,以fps为单位。
q_factorMJPEG编码的Qfactor。 取值范围: [1, 99]

【注意事项】

请参见k_venc_cbr关于src_frame_rate和dst_frame_rate的说明。

【相关数据类型及接口】

无。

3.1.22 k_venc_chn_status

【说明】

定义编码通道的状态结构体。

【定义】

typedef struct {  
k_u32 cur_packs;
k_u64 release_pic_pts;
k_bool end_of_stream;
} k_venc_chn_status;

【成员】

成员名称描述
cur_packs当前帧的码流包个数。
release_pic_pts释放码流对应图像的PTS。
end_of_streamStream结束标志位。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.23 k_venc_stream

【说明】

定义帧码流类型结构体。

【定义】

typedef struct {  
[k_venc_pack](#3124-k_venc_pack) \*pack;
k_u32 pack_cnt;
} k_venc_stream;

【成员】

成员名称描述
pack帧码流包结构。
pack_cnt一帧码流的所有包的个数。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.24 k_venc_pack

【说明】

定义帧码流包结构体。

【定义】


typedef struct {
k_u64 phys_addr;
k_u32 len;
k_u64 pts;
[k_venc_pack_type](#317-k_venc_pack_type) type;
} k_venc_pack;

【成员】

成员名称描述
phys_addr码流包物理地址。
len码流包长度。
pts时间戳。单位: us。
type包数据类型。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.25 k_venc_2d_osd_attr

【说明】

2D叠加属性结构体。

【定义】

typedef struct{  
k_u16 width;
k_u16 height;
k_u16 startx;
k_u16 starty;
k_u32 phys_addr`[3]`;
k_u8 bg_alpha;
k_u8 osd_alpha;
k_u8 video_alpha;
[k_venc_2d_add_order](#3111-k_venc_2d_add_order) add_order;
k_u32 bg_color;
[k_venc_2d_osd_fmt](#3110-k_venc_2d_osd_fmt) fmt;
} k_venc_2d_osd_attr;

【成员】

成员名称描述
widthOSD叠加区域的宽度。
heightOSD叠加区域的高度。
startxOSD叠加区域左上点在原图中x方向上的像素偏移
startyOSD叠加区域左上点在原图中y方向上的像素偏移
phys_addrOSD图像的物理地址。
bg_alpha背景层的透明度。
osd_alphaOSD图像的透明度。
video_alphavideo输入图像的透明度。
add_orderOSD叠加顺序枚举。
bg_colorOSD背景层颜色,YUV444格式。 Y: bit0~bit7 U: bit8~bit15 V: bit16~bit 23
fmtOSD图像格式枚举。

【注意事项】

  • 源图像以及目的图像在ddr的起始地址要保证8byte align。
  • 支持图像、osd的尺寸为偶数。
  • OSD的src和dst地址必须相同。

【相关数据类型及接口】

无。

3.1.26 k_venc_2d_border_attr

【说明】

2D画框结构体。

【定义】

typedef struct {  
k_u16 width;
k_u16 height;
k_u16 line_width;
k_u32 color;
k_u16 startx;
k_u16 starty;
} k_venc_2d_border_attr;

【成员】

成员名称描述
width画框区域的宽度,此为外框宽度,包含线宽。
height画框区域的高度,此为外框高度,包含线宽。
line_width画框的线宽。
color框的颜色。格式为YUV444 Y: bit0~bit7 U: bit8~bit15 V: bit16~bit 23
startx画框区域左上点在原图中x方向上的像素偏移
starty画框区域左上点在原图中y方向上的像素偏移

【注意事项】

  • 源图像以及目的图像在ddr的起始地址要保证8byte align。
  • 支持图像、框的尺寸为偶数。
  • src和dst地址必须相同。

【相关数据类型及接口】

无。

3.1.27 k_venc_h265_sao

【说明】

定义H.265协议编码通道Sao的结构体。

【定义】

typedef struct {  
k_u32 slice_sao_luma_flag;
k_u32 slice_sao_chroma_flag;
} k_venc_h265_sao;

【成员】

成员名称描述
slice_sao_luma_flag默认为1。取值范围:0或1。
slice_sao_chroma_flag默认为1。取值范围:0或1。

【注意事项】

无。

3.1.28 k_venc_rect

【说明】

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

【定义】

typedef struct {  
k_s32 left;
k_s32 right;
k_u32 top;
k_u32 bottom;
} k_venc_rect;

【成员】

成员名称描述
leftLeft offset。
rightRight offset。
topTop offset。
bottomBottom offset。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.29 k_venc_roi_attr

【说明】

定义编码感兴趣区域信息。

【定义】

typedef struct {  
k_u32 idx;
k_bool enable;
k_bool is_abs_qp;
k_s32 qp;
[k_venc_rect](#3128-k_venc_rect) rect;
} k_venc_roi_attr;

【成员】

成员名称描述
idxROI区域的索引,系统支持的索引范围为[0,15],不支持超出这个范围的索引。
enable是否使能这个ROI区域。
is_abs_qpROI区域QP模式。K_FALSE:相对QP。K_TRUE:绝对QP。
qpQP值,范围[0,51]
rectROI区域。left、 right、 top、bottom必须是16对齐。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.30 k_venc_h264_entropy

【说明】

定义H.264协议编码通道熵编码结构体。

【定义】

typedef struct {  
k_u32 entropy_coding_mode;
k_u32 cabac_init_idc;
} k_venc_h264_entropy;

【成员】

成员名称描述
entropy_coding_mode熵编码模式。0: cavlc。1: cabac。>=2没有意义。Baseline不支持cabac。 默认值为1。
cabac_init_idc取值范围: [0, 2], 默认值0,具体含义请参见H.264协议。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.31 k_venc_h265_entropy

【说明】

定义H.265协议编码通道熵编码结构体。

【定义】

typedef struct {  
k_u32 cabac_init_flag;
} k_venc_h265_entropy;

【成员】

成员名称描述
cabac_init_flag取值范围: [0, 1], 默认值1,具体含义请参见H.265协议。

【注意事项】

无。

【相关数据类型及接口】

无。

3.2 视频解码

该功能模块的相关数据类型定义如下:

3.2.1 K_VDEC_MAX_CHN_NUM

【说明】

定义最大通道个数。

【定义】

#define K_VDEC_MAX_CHN_NUM 4

【注意事项】

无。

【相关数据类型及接口】

无。

3.2.2 k_vdec_send_mode

【说明】

定义解码通道属性结构体。

【定义】

typedef enum {  
K_VDEC_SEND_MODE_STREAM = 0,
K_VDEC_SEND_MODE_FRAME,
K_VDEC_SEND_MODE_BUTT
} k_vdec_send_mode;

【成员】

成员名称描述
K_VDEC_SEND_MODE_STREAM按流方式发送码流。
OT_VDEC_SEND_MODE_FRAME按帧方式发送码流。以帧为单位。

【注意事项】

目前只支持流式发送。

【相关数据类型及接口】

无。

3.2.3 k_vdec_chn_attr

【说明】

定义解码通道属性结构体。

【定义】

typedef struct {  
k_payload_type type;
[k_vdec_send_mode](#322-k_vdec_send_mode) mode;
k_u32 pic_width;
k_u32 pic_height;
k_u32 stream_buf_size;
k_u32 frame_buf_size;
k_u32 frame_buf_cnt;
k_pixel_format pic_format;
} k_vdec_chn_attr;

【成员】

成员名称描述
type解码协议类型枚举值。
mode码流发送方式。
pic_width通道支持的解码图像最大宽(以像素为单位)
pic_height通道支持的解码图像最大高(以像素为单位)
stream_buf_size码流缓存的大小。
frame_buf_size解码图像帧存buffer大小。
pic_format输入数据格式枚举,参考《K230 系统控制 API参考》。

【注意事项】

  • 目前支持的pic_format为:PIXEL_FORMAT_YUV_SEMIPLANAR_420和PIXEL_FORMAT_YVU_PLANAR_420。

【相关数据类型及接口】

无。

3.2.4 k_vdec_chn_status

【说明】

定义通道状态结构体。

【定义】

typedef struct {  
k_payload_type type;
k_bool is_started;
k_u32 recv_stream_frames;
k_u32 dec_stream_frames;
[k_vdec_dec_err](#325-k_vdec_dec_err) dec_err;
k_u32 width;
k_u32 height;
k_u64 latest_frame_pts;
k_bool end_of_stream;
} k_vdec_chn_status;

【成员】

成员名称描述
type解码协议。
is_started解码器是否已经启动接收码流。
recv_stream_frames"码流buffer中已接收码流帧数。 -1表示无效。 流模式发送时无效。"
dec_stream_frames码流buffer中已解码帧数。
dec_err解码错误信息。
width图像宽度。
height图像高度。
latest_frame_pts最新解码图像的时间戳。
end_of_streamStream结束标志位。

【注意事项】

无。

【相关数据类型及接口】

无。

3.2.5 k_vdec_dec_err

【说明】

定义解码错误信息结构体。

【定义】

typedef struct {  
k_s32 set_pic_size_err;
k_s32 format_err;
k_s32 stream_unsupport;
} k_vdec_dec_err;

【成员】

成员名称描述
set_pic_size_err图像的宽(或高)比通道的宽(或高)大。
format_err不支持的格式。
stream_unsupport不支持的规格(码流规格与解决方案宣称支持的规格不一致)。

【注意事项】

无。

【相关数据类型及接口】

无。

3.2.6 k_vdec_stream

【说明】

定义视频解码的码流结构体。

【定义】

typedef struct {  
k_bool end_of_stream;
k_u64 pts;
k_u32 len;
k_u8 \* addr;
} k_vdec_stream;

【成员】

成员名称描述
end_of_stream是否发完所有码流。
pts码流包的时间戳。以μs为单位。
len码流包的长度。以byte为单位。
addr码流包的地址。

【注意事项】

无。

【相关数据类型及接口】

无。

3.2.7 k_vdec_supplement_info

【说明】

定义输出帧补充信息。

【定义】

typedef struct {  
k_payload_type type;
k_bool is_valid_frame;
k_bool end_of_stream;
} k_vdec_supplement_info;

【成员】

成员名称描述
type解码协议类型枚举值。
is_valid_frame是否为有效帧。
end_of_streamStream结束标志位。

【注意事项】

无。

【相关数据类型及接口】

无。

3.2.8 k_vdec_dsl_mode

【说明】

定义解码减小尺寸模式枚举。

【定义】

typedef enum {  
K_VDEC_DSL_MODE_BY_SIZE,
K_VDEC_DSL_MODE_BY_RATIO,
K_VDEC_DSL_MODE_BUTT
} k_vdec_dsl_mode;

【成员】

成员名称描述
K_VDEC_DSL_MODE_BY_SIZE根据尺寸减小。
K_VDEC_DSL_MODE_BY_RATIO根据比例减小。

【注意事项】

无。

【相关数据类型及接口】

无。

3.2.9 k_vdec_dsl_size

【说明】

定义解码按照大小减小尺寸参数结构体。

【定义】

typedef struct {  
k_u32 dsl_frame_width;
k_u32 dsl_frame_height;
} k_vdec_dsl_size;

【成员】

成员名称描述
dsl_frame_width减小尺寸后的宽度。
dsl_frame_height减小尺寸后的高度。

【注意事项】

无。

【相关数据类型及接口】

无。

3.2.10 k_vdec_dsl_ratio

【说明】

定义解码按照比例减小尺寸参数结构体。

【定义】

typedef struct {  
k_u8 dsl_ratio_hor;
k_u8 dsl_ratio_ver;
} k_vdec_dsl_ratio;

【成员】

成员名称描述
dsl_frame_width减小尺寸水平方向的比例。
dsl_frame_height减小尺寸垂直方向的比例。

【注意事项】

无。

【相关数据类型及接口】

无。

3.2.11 k_vdec_downscale

【说明】

缩小尺寸结构体。

【定义】

typedef struct {  
k_vdec_dsl_mode dsl_mode;
union
{
k_vdec_dsl_size dsl_size;
k_vdec_dsl_ratio dsl_ratio;
};
} k_vdec_downscale;

【成员】

成员名称描述
dsl_mode减小尺寸模式枚举。
dsl_size按照大小减小尺寸参数结构体。
dsl_ratio按照比例减小尺寸参数结构体。

【注意事项】

无。

【相关数据类型及接口】

无。

4. MAPI

4.1 视频编码

4.1.1 概述

MAPI是在小核调用,用以获取venc的码流数据。

4.1.2 编码数据流图

图4-1

mapi encode channel

典型的编码流程包括了输入图像的接收、图像的编码、数据流的跨核传输以及码流的输出等过程。

上图编码模块(VENC)由VENC接收通道、编码通道、2D接收通道、2D运算模块组成,详见1.2.1

4.1.3 API

视频编码模块主要提供视频编码通道的创建和销毁、视频编码通道的开启和停止接收图像、设置和获取编码通道属性、注册和解注册获取码流的回调函数等功能。

该功能模块提供以下MAPI:

kd_mapi_venc_init

kd_mapi_venc_deinit

kd_mapi_venc_registercallback

kd_mapi_venc_unregistercallback

kd_mapi_venc_start

kd_mapi_venc_stop

kd_mapi_venc_bind_vi

kd_mapi_venc_unbind_vi

kd_mapi_venc_request_idr

kd_mapi_venc_enable_idr

4.1.3.1 kd_mapi_venc_init

【描述】

初始化编码通道。

【语法】

k_s32 kd_mapi_venc_init(k_u32 chn_num, k_venc_chn_attr * pst_venc_attr)

【参数】

参数名称描述输入/输出
chn_numVENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM)输入
pst_venc_attrVENC 通道属性指针。 静态属性。输入

【返回值】

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

【芯片差异】

无 。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

  • 调用该接口前需要先初始化kd_mapi_sys_init ()和kd_mapi_media_init ()成功,详见“SYS MAPI”章节。
  • 重复初始化返回成功

【举例】

请参考sample_venc代码

【相关主题】

kd_mapi_venc_deinit k_venc_chn_attr

4.1.3.2 kd_mapi_venc_deinit

【描述】

编码通道去初始化。

【语法】

k_s32 kd_mapi_venc_deinit(k_u32 chn_num)

【参数】

参数名称描述输入/输出
chn_numVENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM)输入

【返回值】

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

【芯片差异】

无 。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

kd_mapi_venc_init

4.1.3.3 kd_mapi_venc_registercallback

【描述】

注册编码通道回调函数,用于编码数据的获取。

【语法】

k_s32 kd_mapi_venc_registercallback(k_u32 chn_num, kd_venc_callback_s *pst_venc_cb);

【参数】

参数名称描述输入/输出
chn_numVENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM)输入
pst_venc_cb编码器回调函数结构体指针。输入

【返回值】

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

【芯片差异】

无 。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

  • 回调函数结构体指针不能为空。
  • 结构体之内容完全一致时,才表示回调函数结构体相等。
  • 每个通道最多支持五个回调函数。

【举例】

【相关主题】

kd_mapi_venc_unregistercallback kd_venc_callback_s

4.1.3.4 kd_mapi_venc_unregistercallback

【描述】

解注册编码通道回调函数。

【语法】

k_s32 kd_mapi_venc_unregistercallback(k_u32 chn_num, kd_venc_callback_s *pst_venc_cb);

【参数】

参数名称描述输入/输出
chn_numVENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM)输入
pst_venc_cb编码器回调函数结构体指针。输入

【返回值】

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

【芯片差异】

无 。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h

库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

pst_venc_cb回调函数结构体内容与注册时的结构体内容完全一致时才能解注册该回调函数。

【举例】

【相关主题】

kd_mapi_venc_registercallback

4.1.3.5 kd_mapi_venc_start

【描述】

启动编码通道。

【语法】

k_s32 kd_mapi_venc_start(k_s32 chn_num ,k_s32 s32_frame_cnt);

【参数】

参数名称描述输入/输出
chn_numVENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM)输入
s32_frame_cnt期望编码帧的个数输入

【返回值】

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

【芯片差异】

无 。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

  • 场景一:视频流编码场景下,s32_frame_cnt 取值KD_VENC_LIMITLESS_FRAME_COUNT
  • 场景二:单个或者多个数据编码的场景下,上一个编码完后才可以再次启动。
  • 场景一切换场景二时,需要先调用kd_mapi_venc_stop 接口。
  • 场景二切换场景一时,可以先调用kd_mapi_venc_stop 接口,也可以在编码完后再次启动编码。
  • 编码完成的标记请查看kd_venc_data_s 中end_of_stream。

【举例】

无。

【相关主题】

kd_mapi_venc_stop

4.1.3.6 kd_mapi_venc_stop

【描述】

停止编码通道。

【语法】

k_s32 kd_mapi_venc_stop(k_s32 chn_num);

【参数】

参数名称描述输入/输出
chn_numVENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM)输入

【返回值】

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

【芯片差异】

无。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

kd_mapi_venc_start

4.1.3.7 kd_mapi_venc_bind_vi

【描述】

编码通道绑定输入源VI

【语法】

k_s32 kd_mapi_venc_bind_vi(k_s32 src_dev, k_s32 src_chn,k_s32 chn_num);

【参数】

参数名称描述输入/输出
src_dev输入源Device ID输入
src_chn输入源Channel ID输入
chn_numVENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM)输入

【返回值】

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

【芯片差异】

无。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

kd_mapi_venc_unbind_vi

4.1.3.8 kd_mapi_venc_unbind_vi

【描述】

解绑定编码通道的输入源VI。

【语法】

k_s32 kd_mapi_venc_unbind_vi(k_s32 src_dev, k_s32 src_chn, k_s32 chn_num);

【参数】

参数名称描述输入/输出
src_dev输入源Device ID输入
src_chn输入源Channel ID输入
chn_numVENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM)输入

【返回值】

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

【芯片差异】

无。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

kd_mapi_venc_bind_vi

4.1.3.9 kd_mapi_venc_request_idr

【描述】

请求IDR帧,在调用之后立即产生一个IDR帧。

【语法】

k_s32 kd_mapi_venc_request_idr(k_s32 chn_num);

【参数】

参数名称描述输入/输出
chn_numVENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM]输入

【返回值】

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

【芯片差异】

无。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

kd_mapi_venc_start

4.1.3.10 kd_mapi_venc_enable_idr

【描述】

使能IDR帧,根据GOP间隔产生IDR帧。

【语法】

k_s32 kd_mapi_venc_enable_idr(k_s32 chn_num, k_bool idr_enable);

【参数】

参数名称描述输入/输出
chn_numVENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM]输入
idr_enable是否是能IDR帧,0:不使能 1:使能输入

【返回值】

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

【芯片差异】

无。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

【举例】

无。

【相关主题】

kd_mapi_venc_start

4.1.4 数据类型

视频编码相关的数据类型定义如下:

4.1.4.1 kd_venc_callback_s

【说明】

编码回调函数结构体。

【定义】

typedef struct  
{
[pfn_venc_dataproc](#4142-pfn_venc_dataproc)
k_u8 \*p_private_data;
}kd_venc_callback_s;

【成员】

成员名称描述
pfn_data_cb回调处理函数。用于获取编码数据
p_private_data私有数据指针。作为参数,在pfn_venc_dataproc中被调用。

【注意事项】

  • 该结构体被注册后,编码启动后,有编码数据时,pfn_data_cb函数会被调用。用户通过该函数获取编码数据。
  • p_private_data为私有数据,用户可选用。

【相关数据类型及接口】

4.1.4.2 pfn_venc_dataproc

【说明】

定义编码数据回调函数。

【定义】

typedef k_s32 (*pfn_venc_dataproc)(k_u32 chn_num, [kd_venc_data_s](#4144-k_venc_data_pack_s) \*p_vstream_data, k_u8 \*p_private_data);

【成员】

成员名称描述
chn_num编码通道句柄
kd_venc_data_s数据指针
p_private_data私有数据指针

【注意事项】

无。

【相关数据类型及接口】

4.1.4.3 kd_venc_data_s

【说明】

编码后的数据包类型。

【定义】

typedef struct
{
[k_venc_chn_status](#3122-k_venc_chn_status);
k_u32 u32_pack_cnt;
[k_venc_data_pack_s](#4144-k_venc_data_pack_s) astPack `[`[KD_VENC_MAX_FRAME_PACKCOUNT](#4145-kd_venc_max_frame_packcount)`]`;
}kd_venc_data_s;

【成员】

成员名称描述
status通道状态
u32_pack_cnt包的数量
astPack数据包

【注意事项】

无。

【相关数据类型及接口】

pfn_venc_dataproc kd_mapi_venc_start

4.1.4.4 k_venc_data_pack_s

【说明】

编码后的数据包类型。

【定义】

typedef struct  
{
k_char * vir_addr;
k_u64 phys_addr;
k_u32 len;
k_u64 pts;
k_venc_pack_type type;
}k_venc_data_pack_s;

【成员】

成员名称描述
vir_addr数据包的虚拟地址
phys_addr数据包的物理地址
len数据包的长度
pts时间戳
type码流PACK类型

【注意事项】

vir_addr和phys_addr都有一个地址;

【相关数据类型及接口】

kd_venc_data_s

4.1.4.5 KD_VENC_MAX_FRAME_PACKCOUNT

【说明】

定义每帧数据中包的最大个数。

【定义】

#define KD_VENC_MAX_FRAME_PACKCOUNT 12

【注意事项】

【相关数据类型及接口】

4.1.4.6 KD_VENC_LIMITLESS_FRAME_COUNT

【说明】

定义视频无限制编码。

【定义】

#define KD_VENC_LIMITLESS_FRAME_COUNT -1

【注意事项】

无。

【相关数据类型及接口】

kd_mapi_venc_start

4.2 视频解码

4.2.1 API

视频解码模块主要提供视频解码通道的创建和销毁、视频解码通道的开启和停止接收图像、设置和获取解码通道属性、与vo绑定输出解码图像等功能。

该功能模块提供以下MAPI:

kd_mapi_vdec_init

kd_mapi_vdec_deinit

kd_mapi_vdec_start

kd_mapi_vdec_stop

kd_mapi_vdec_bind_vo

kd_mapi_vdec_unbind_vo

kd_mapi_vdec_send_stream

kd_mapi_vdec_query_status

4.2.1.1 kd_mapi_vdec_init

【描述】

初始化解码通道。

【语法】

k_s32 kd_mapi_vdec_init(k_u32 chn_num,const k_vdec_chn_attr *attr);

【参数】

参数名称描述输入/输出
chn_numVDEC 通道号 取值范围:[0, VDEC_MAX_CHN_NUM)输入
attrVDEC 通道属性指针。 静态属性。输入

【返回值】

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

【芯片差异】

无 。

【需求】

头文件:mapi_vdec_api.h、k_vdec_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

  • 调用该接口前需要先初始化kd_mapi_sys_init ()和kd_mapi_media_init ()成功,详见“SYS MAPI”章节。
  • 重复初始化返回成功

【举例】

请参考sample_vdec代码

【相关主题】

kd_mapi_vdec_deinit

4.2.1.2 kd_mapi_vdec_deinit

【描述】

编码通道去初始化。

【语法】

k_s32 kd_mapi_vdec_deinit(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_numVDEC 通道号 取值范围:[0, VDEC_MAX_CHN_NUM)输入

【返回值】

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

【芯片差异】

无 。

【需求】

头文件:mapi_vdec_api.h、k_vdec_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

kd_mapi_vdec_init

4.2.1.3 kd_mapi_vdec_start

【描述】

启动解码通道。

【语法】

k_s32 kd_mapi_vdec_start(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_numVDEC 通道号 取值范围:[0, VDEC_MAX_CHN_NUM)输入

【返回值】

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

【芯片差异】

无 。

【需求】

头文件:mapi_venc_api.h、k_venc_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。 【举例】

无。

【相关主题】

kd_mapi_vdec_stop

4.2.1.4 kd_mapi_vdec_stop

【描述】

停止解码通道。

【语法】

k_s32 kd_mapi_vdec_stop(k_u32 chn_num);

【参数】

参数名称描述输入/输出
chn_numVDEC 通道号 取值范围:[0, VDEC_MAX_CHN_NUM)输入

【返回值】

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

【芯片差异】

无。

【需求】

头文件:mapi_vdec_api.h、k_vdec_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

kd_mapi_vdec_start

4.2.1.5 kd_mapi_vdec_bind_vo

【描述】

解码通道绑定输出源VO

【语法】

k_s32 kd_mapi_vdec_bind_vo(k_s32 chn_num,k_s32 vo_dev, k_s32 vo_chn);

【参数】

参数名称描述输入/输出
chn_numVDEC 通道号 取值范围:[0, VDEC_MAX_CHN_NUM)输入
vo_dev输出vo device id输入
vo_chn输出vo device channel输入

【返回值】

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

【芯片差异】

无。

【需求】

头文件:mapi_vdec_api.h、k_vdec_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

kd_mapi_vdec_unbind_vo

4.2.1.6 kd_mapi_vdec_unbind_vo

【描述】

解绑定解码通道的输出源VO。

【语法】

k_s32 kd_mapi_vdec_unbind_ao(k_s32 chn_num,k_s32 vo_dev, k_s32 vo_chn);

【参数】

参数名称描述输入/输出
chn_numVDEC 通道号 取值范围:[0, VDEC_MAX_CHN_NUM)输入
vo_dev输出vo device id输入
vo_chn输出vo device channel输入

【返回值】

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

【芯片差异】

无。

【需求】

头文件:mapi_vdec_api.h、k_vdec_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

kd_mapi_vdec_bind_vo

4.2.1.7 kd_mapi_vdec_send_stream

【描述】

发送stream数据解码。

【语法】

k_s32 kd_mapi_vdec_send_stream(k_u32 chn_num, k_vdec_stream *stream, k_s32 milli_sec);

【参数】

参数名称描述输入/输出
chn_numVDEC 通道号 取值范围:[0, VDEC_MAX_CHN_NUM)输入
stream解码码流数据指针。输入
milli_sec送码流方式标志。 取值范围: -1:阻塞。 0:非阻塞。 正值:超时时间,没有上限值,以ms为单位。输入

【返回值】

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

【芯片差异】

无。

【需求】

头文件:mapi_vdec_api.h、k_vdec_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

无。

4.2.1.8 kd_mapi_vdec_query_status

【描述】

查询解码通道状态。

【语法】

k_s32 kd_mapi_vdec_query_status(k_u32 chn_num, k_vdec_chn_status *status);

【参数】

参数名称描述输入/输出
chn_num编码通道信息。 取值范围:[0, K_VDEC_MAX_CHN_NUM)。输入
status视频解码通道状态结构体指针。输出

【返回值】

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

【芯片差异】

无。

【需求】

头文件:mapi_vdec_api.h、k_vdec_comm.h 库文件:libmapi.a libipcmsg.a libdatafifo.a

【注意】

无。

【举例】

无。

【相关主题】

无。

5. 错误码

表 41 编码 API 错误码

错误代码宏定义描述
0xa0098001K_ERR_VENC_INVALID_DEVID设备ID超出合法范围
0xa0098002K_ERR_VENC_INVALID_CHNID通道ID超出合法范围
0xa0098003K_ERR_VENC_ILLEGAL_PARAM参数超出合法范围
0xa0098004K_ERR_VENC_EXIST试图申请或者创建已经存在的设备、通道或者资源
0xa0098005K_ERR_VENC_UNEXIST试图使用或者销毁不存在的设备、通道或者资源
0xa0098006K_ERR_VENC_NULL_PTR函数参数中有空指针
0xa0098007K_ERR_VENC_NOT_CONFIG使用前未配置
0xa0098008K_ERR_VENC_NOT_SUPPORT不支持的参数或者功能
0xa0098009K_ERR_VENC_NOT_PERM该操作不允许,如试图修改静态配置参数
0xa009800cK_ERR_VENC_NOMEM分配内存失败,如系统内存不足
0xa009800dK_ERR_VENC_NOBUF分配缓存失败,如申请的数据缓冲区太大
0xa009800eK_ERR_VENC_BUF_EMPTY缓冲区中无数据
0xa009800fK_ERR_VENC_BUF_FULL缓冲区中数据满
0xa0098010K_ERR_VENC_NOTREADY系统没有初始化或没有加载相应模块
0xa0098011K_ERR_VENC_BADADDR地址超出合法范围
0xa0098012K_ERR_VENC_BUSYVENC系统忙

表 42 解码 API 错误码

错误代码宏定义描述
0xa00a8001K_ERR_VDEC_INVALID_DEVID设备ID超出合法范围
0xa00a8002K_ERR_VDEC_INVALID_CHNID通道ID超出合法范围
0xa00a8003K_ERR_VDEC_ILLEGAL_PARAM参数超出合法范围
0xa00a8004K_ERR_VDEC_EXIST试图申请或者创建已经存在的设备、通道或者资源
0xa00a8005K_ERR_VDEC_UNEXIST试图使用或者销毁不存在的设备、通道或者资源
0xa00a8006K_ERR_VDEC_NULL_PTR函数参数中有空指针
0xa00a8007K_ERR_VDEC_NOT_CONFIG使用前未配置
0xa00a8008K_ERR_VDEC_NOT_SUPPORT不支持的参数或者功能
0xa00a8009K_ERR_VDEC_NOT_PERM该操作不允许,如试图修改静态配置参数
0xa00a800cK_ERR_VDEC_NOMEM分配内存失败,如系统内存不足
0xa00a800dK_ERR_VDEC_NOBUF分配缓存失败,如申请的数据缓冲区太大
0xa00a800eK_ERR_VDEC_BUF_EMPTY缓冲区中无数据
0xa00a800fK_ERR_VDEC_BUF_FULL缓冲区中数据满
0xa00a8010K_ERR_VDEC_NOTREADY系统没有初始化或没有加载相应模块
0xa00a8011K_ERR_VDEC_BADADDR地址超出合法范围
0xa00a8012K_ERR_VDEC_BUSYVDEC系统忙

6. 调试信息

多媒体内存管理和和系统绑定调试信息,请参考《K230 系统控制 API参考》。