K230视频编解码API参考
1. 概述
1.1 概述
视频编解码模块,支持H.264、H.265、JPEG编解码。VENC模块实现2D运算和编码功能,两者既可以同时使能,也可以单独运算。VDEC模块实现解码功能。
VENC、VENC+2D和VDEC支持系统绑定,2D单独运算时不支持系统绑定。
1.2 功能描述
1.2.1 视频编码
图1-1编码数据流程图
典型的编码流程包括了输入图像的接收、图像内容的遮挡和覆盖、图像的编码、以及码流的输出等过程。
编码模块由VENC接收通道、编码通道、2D接收通道、2D运算模块组成。编码能力和2D运算能力见下表。
编码数据流程图中的绿色箭头所示路径,为单独做2D运算的流程。蓝色箭头所示路径为单独做编码运算的流程。紫色箭头所示路径为先做2D运算再进行编码的流程。
表 1-1 编码能力
H264 | HEVC | JPEG | |
---|---|---|---|
输入格式 | YUV420 NV12 8bit, ARGB8888, BGRA8888 | YUV420 NV12 8bit, ARGB8888, BGRA8888 | YUV420 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 Profile | YUV420 and YUV422 JPEG baseline sequential |
最大分辨率 | 3840x2160 | 3840x2160 | 8192x8192 |
码率控制模式 | CBR/VBR/FIXQP | CBR/VBR/FIXQP | FIXQP |
GOP | I/P帧 | I/P帧 | - |
编码通道 | 4路 | 4路 | 4路 |
注意:H264/HEVC/JPEG共用4路。
表1-2 2D运算能力
video输入格式 | video输出格式 | 叠加数据格式 | 最大分辨率 |
---|---|---|---|
I420/NV12/ARGB8888/BGRA8888 | 同输入格式 | ARGB8888/ARGB4444/ARGB1555 | 3840x2160 |
1.2.1.1 编码通道
编码通道作为基本容器,保存编码通道的多种用户设置和管理编码通道的多种内部资源。编码通道完成图像叠加和编码的功能。2D模块实现图像叠加运算,编码器模块实现图像编码,两者既可以单独使用,也可以协同使用。
图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的转换公式如下:
则,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 限制条件
编码运算存在以下限制:
- 如果输入数据格式为YUV420,Y、U、V各分量的图像数据的物理起始地址需要保证4k对齐。
- 如果输入数据格式为NV12,Y和UV数据的图像数据的物理起始地址需要保证4k对齐。
2D运算存在以下限制:
- 源图像以及目的图像在ddr的物理起始地址要保证8byte align。
- 支持图像、osd、框的尺寸为偶数。
- 叠加和画框运算中的video数据的src和dst地址必须相同。
解码运算存在以下限制:
- 每帧输入数据的物理起始地址需要4k对齐。
1.2.1.6 编码典型应用举例
图1-3 编码典型应用场景流程图
1.2.2 视频解码
表 12 vpu解码能力
H264 | HEVC | JPEG | |
---|---|---|---|
输入格式 | H.264 Baseline;H.264 Main;H.264 High;H.264 High10;支持interlaced stream | HEVC (H.265) Main/Main10 | JPEG, baseline sequential |
输出格式 | YUV420 NV12 | YUV420 NV12 | YUV422 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 解码典型应用举例
图1-3 编码典型应用场景流程图
2. API参考
2.1 视频编码
该功能模块提供以下API:
- kd_mpi_venc_create_chn:创建编码通道。
- kd_mpi_venc_destory_chn:销毁编码通道。
- kd_mpi_venc_start_chn:开启编码通道接收输入图像。
- kd_mpi_venc_stop_chn:停止编码通道接收输入图像。
- kd_mpi_venc_query_status:查询编码通道状态。
- kd_mpi_venc_get_stream:获取编码后的码流。
- kd_mpi_venc_release_stream:释放码流缓存。
- kd_mpi_venc_send_frame:支持用户发送原始图像进行编码。
- kd_mpi_venc_set_rotaion:设置编码图像旋转角度。
- kd_mpi_venc_get_rotaion:获取编码图像旋转角度。
- kd_mpi_venc_set_mirror:设置编码图像旋转角度。
- kd_mpi_venc_get_mirror:获取编码图像翻转方式。
- kd_mpi_venc_enable_idr:使能IDR帧,根据GOP间隔产生IDR帧。
- kd_mpi_venc_set_2d_mode:设置2D运算模式。
- kd_mpi_venc_get_2d_mode:获取2D运算模式。
- kd_mpi_venc_set_2d_osd_param:设置2D运算中OSD的区域属性。
- kd_mpi_venc_get_2d_osd_param:获取2D运 算中指定索引的OSD的区域属性。
- kd_mpi_venc_set_2d_border_param:设置2D运算中的画框属性。
- kd_mpi_venc_get_2d_border_param:获取2D运算中的画框属性。
- kd_mpi_venc_set_2d_custom_coef:设置2D运算中的图像格式转换系数。
- kd_mpi_venc_get_2d_custom_coef:获取2D运算中的图像格式转换系数。
- kd_mpi_venc_set_2d_color_gamut:设置2D运算的色域。
- kd_mpi_venc_get_2d_color_gamut:获取2D运算的色域
- kd_mpi_venc_attach_2d:将2D运算与venc关联。
- kd_mpi_venc_detach_2d:将2D运算与venc分离。
- kd_mpi_venc_send_2d_frame:向2D模块发送一帧数据。
- kd_mpi_venc_get_2d_frame:获取2D运算结果。
- kd_mpi_venc_start_2d_chn:开始2D通道接收输入图像。
- kd_mpi_venc_stop_2d_chn:停止2D通道接收输入图像。
- kd_mpi_venc_request_idr:请求IDR帧,在调用之后立即产生一个IDR帧。
- kd_mpi_venc_set_h265_sao:设置H.265通道的Sao属性。
- kd_mpi_venc_get_h265_sao:获取H.265通道的Sao属性。
- kd_mpi_venc_set_dblk:设置协议编码通道的Deblocking使能。
- kd_mpi_venc_get_dblk:获取 协议编码通道的Deblocking状态。
- kd_mpi_venc_set_roi_attr:设置H.264/H.265通道的ROI属性。
- kd_mpi_venc_get_roi_attr:获取H.264/H.265通道的ROI属性。
- kd_mpi_venc_set_h264_entropy:设置H.264协议编码通道的熵编码模式。
- kd_mpi_venc_get_h264_entropy:获取H.264协议编码通道的熵编码模式。
- kd_mpi_venc_set_h265_entropy:设置H.265协议编码通道的熵编码模式。
- kd_mpi_venc_get_h265_entropy:获取H.265协议编码通道的熵编码模式。
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.265 | JPEG | ||||||
---|---|---|---|---|---|---|---|
WIDTH | HEIGHT | WIDTH | HEIGHT | ||||
MAX | MIN | MAX | MIN | MAX | MIN | MAX | MIN |
4096 | 128 | 4096 | 64 | 8192 | 128 | 8192 | 64 |
【举例】
无。
【相关主题】
无。
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
【注意】
- 销毁前必须停止接收图像,否则返回失败。
【举例】
无。
【相关主题】
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并不会被清除。
【举例】
无。
【相关主题】
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
【注意】
- 如果通道未创建,则返回失败。
【举例】
无。
【相关主题】
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)。 | 输入 |
mode | 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_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)。 | 输入 |
mode | 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_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)。 | 输入 |
index | OSD区域索引。 取值范围:[0, K_VENC_MAX_2D_OSD_REGION_NUM)。 | 输入 |
attr | OSD属性指针。 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
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)。 | 输入 |
index | OSD区域索引。 取值范围:[0, K_VENC_MAX_2D_OSD_REGION_NUM)。 | 输入 |
attr | OSD属性指针。 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
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时,不适用转换系数,调用本接口会报错。
【举例】
无。
【相关主题】
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_num | 2D运算通道号。 取值范围:[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.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_num | 2D运算通道号,取值范围[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。
【举例】
无。
【相关主题】
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_num | 2D运算通道号,取值范围[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
【举例】
无。
【相关主题】
2.1.28 kd_mpi_venc_start_2d_chn
【描述】
开始2D通道接收输入图像。
【语法】
k_s32 kd_mpi_venc_start_2d_chn(k_u32 chn_num);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
chn_num | 2D运算通道号,取值范围[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
【注意】
- 本接口只在单2D运算的场景使用,在VENC+2D的场景,需要调用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_num | 2D运算通道号,取值范围[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_sao | H.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_sao | H.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
【注意】
无。
【举例】
无。
【相关主题】
无。