Skip to content

Latest commit

 

History

History
executable file
·
4993 lines (3056 loc) · 124 KB

K230_视频编解码_API参考.md

File metadata and controls

executable file
·
4993 lines (3056 loc) · 124 KB

K230视频编解码API参考

cover

版权所有©2023北京嘉楠捷思信息技术有限公司

免责声明

您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。

由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。

商标声明

logo、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。

版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

目录

[TOC]

前言

概述

本文档主要介绍视频编解码模块的功能和用法。

读者对象

本文档(本指南)主要适用于以下人员:

  • 技术支持工程师
  • 软件开发工程师

缩略词定义

简称 说明

修订记录

文档版本号 修改者 日期 修改说明
V1.0 系统软件部 2023.03.10 初版
V1.1 系统软件部 2023.03.31 1. 新增2d设置/获取运算模式接口kd_mpi_venc_set_2d_mode、 kd_mpi_venc_get_2d_mode 2.修改2d的参数设置/获取接口,kd_mpi_venc_set_2d_osd_param、 kd_mpi_venc_get_2d_osd_param 3. 新增设置2D运算中的图像格式转换系数接口kd_mpi_venc_set_2d_set_custom_coef 4. kd_mpi_venc_set_2d_set_custom_coef删除编码器属性结构体k_venc_attr的pic_format属性
V1.1.1 系统软件部 2023.04.11 1. 新增编码图像旋转设置/获取接口 kd_mpi_venc_set_rotaion、 kd_mpi_venc_get_rotaion 2. 新增2D画框属性的设置/获取接口 kd_mpi_venc_set_2d_border_param、 kd_mpi_venc_get_2d_border_param 3. 删除2D运算属性结构体k_venc_2d_attr4. 增加OSD背景层格式说明 5. 增加部分MAPI函数接口及数据类型,具体是章节4 MAPI。
V1.2 系统软件部 2023.04.27 1. 修改2D画框结构体k_venc_2d_border_attr的线宽参数 2. 修改2D用户自定义转换系数API名称kd_mpi_venc_set_2d_custom_coef 3. 修改kd_mpi_venc_set_2d_custom_coef的转换系数参数类型。 4. 增加获取转换系数的接口kd_mpi_venc_get_2d_custom_coef 5. 增加色域设置和获取接口kd_mpi_venc_set_2d_color_gamut、kd_mpi_venc_get_2d_color_gamut 6. 修改kd_mpi_venc_set_rotaion的旋转角度参数。7. 修改视频编码功能描述中JPEG的输入格式
V1.2.1 系统软件部 2023-04-28 1. 在 k_venc_chn_attr中增加GOP属性
V1.2.2 系统软件部 2023-05-24 1. 增加图像翻转设置/获取接口kd_mpi_venc_set_mirror、kd_mpi_venc_get_mirror 2. 增加IDR帧使能接口kd_mpi_venc_enable_idr
V1.3 系统软件部 2023-05-25 1. mapi增加IDR帧使能接口 kd_mapi_venc_request_idr
V1.3.1 系统软件部 2023-06-14 1. 添加mpi可设置解码输出缩小的图像。kd_mpi_vdec_set_downscale
V1.3.2 系统软件部 2023-06-19 1. 修改kd_mapi_venc_request_idr 2. 增加kd_mpi_venc_request_idr、kd_mapi_venc_enable_idr 3.增加H.265 SAO设置和获取接口kd_mpi_venc_set_h265_sao、kd_mpi_venc_get_h265_sao 4. 增加deblocking设置/获取接口kd_mpi_venc_set_dblk、kd_mpi_venc_get_dblk 5. 增加ROI接口kd_mpi_venc_set_roi_attr、kd_mpi_venc_get_roi_attr
V1.3.3 系统软件部 2023-06-20 1. 增加H.264/H.265熵编码模式设置/获取接口kd_mpi_venc_set_h264_entropy、kd_mpi_venc_get_h264_entropy、kd_mpi_venc_set_h265_entropy、kd_mpi_venc_get_h265_entropy 2. k_venc_rotation枚举更明为k_rotation 3. 增加解码旋转设置接口kd_mpi_vdec_set_rotation
V1.3.4 系统软件部 2023-06-30 修改编解码及2D支持的数据类型

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 编码能力

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模块实现图像叠加运算,编码器模块实现图像编码,两者既可以单独使用,也可以协同使用。

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

得到,转换系数为:{ 47, 157, 16, 16, -26, -86, 112, 128, 112, -102, -10, 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解码能力

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 解码典型应用举例

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.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

【注意】

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

【举例】

无。

【相关主题】

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)。 输入
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时,不适用转换系数,调用本接口会报错。

【举例】

无。

【相关主题】

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_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

【注意】

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

【举例】

无。

【相关主题】

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_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

【举例】

无。

【相关主题】

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

【举例】

无。

【相关主题】

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

【注意】

【举例】

无。

【相关主题】

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

【注意】

无。

【举例】

无。

【相关主题】

无。

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_entropy H.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_entropy H.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_entropy H.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_entropy H.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_CBR H.264/H.265 CBR模式。
K_VENC_RC_MODE_VBR H.264/H.265 VBR模式。
K_VENC_RC_MODE_FIXQP H.264/H.265 Fixqp模式。
K_VENC_RC_MODE_MJPEG_FIXQP MJPEG 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_FRAME I帧。
K_VENC_I_FRAME P帧。
K_VENC_HEADER Header。

【注意事项】

无。

【相关数据类型及接口】

无。

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_OSD Video在底层,OSD在顶层。
K_VENC_2D_ADD_ORDER_OSD_VIDEO OSD在底层,video在顶层。
K_VENC_2D_ADD_ORDER_VIDEO_BG Video在底层,背景色顶层。
K_VENC_2D_ADD_ORDER_BG_VIDEO 背景色在底层,video顶层。
K_VENC_2D_ADD_ORDER_VIDEO_BG_OSD Video在底层,背景色在中间层,OSD在顶层。
K_VENC_2D_ADD_ORDER_VIDEO_OSD_BG Video在底层,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_BG OSD在底层,video在中间层,背景色在顶层。
K_VENC_2D_ADD_ORDER_OSD_BG_VIDEO OSD在底层,背景色在中间层,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_BT601 BT.601色域
VENC_2D_COLOR_GAMUT_BT709, BT.709色域
VENC_2D_COLOR_GAMUT_BT2020 BT.2020色域

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.15 k_venc_chn_attr

【说明】

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

【定义】

typedef struct {  k_venc_attr venc_attr;  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 rc_mode;
 union { k_venc_cbr cbr;
  k_venc_vbr vbr;
  k_venc_fixqp fixqp;
  k_venc_mjpeg_fixqp mjpeg_fixqp;
 };
} k_venc_rc_attr;

【成员】

成员名称 描述
rc_mode RC模式。
cbr H.264/H.265协议编码通道固定比特率模式属性。
vbr H.264/H.265协议编码通道可变比特率模式属性。
fixqp H.264/H.265协议编码通道固定qp模式属性。
mjpeg_fixqp Mjpeg协议编码通道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;

【成员】

成员名称 描述
gop gop值。
stats_time CBR码率统计时间,以秒为单位。 取值范围: [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;

【成员】

成员名称 描述
gop gop值。
stats_time VBR码率统计时间,以秒为单位。 取值范围: [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;

【成员】

成员名称 描述
gop gop值。
src_frame_rate 输入帧率,以fps为单位。
dst_frame_rate 编码器输出帧率,以fps为单位。
i_qp I帧所有宏块Qp值。 取值范围: [0, 51]
q_qp P帧所有宏块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_factor MJPEG编码的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_stream Stream结束标志位。

【注意事项】

无。

【相关数据类型及接口】

无。

3.1.23 k_venc_stream

【说明】

定义帧码流类型结构体。

【定义】

typedef struct {
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 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 add_order;
 k_u32 bg_color;
k_venc_2d_osd_fmt fmt;
} k_venc_2d_osd_attr;

【成员】

成员名称 描述
width OSD叠加区域的宽度。
height OSD叠加区域的高度。
startx OSD叠加区域左上点在原图中x方向上的像素偏移
starty OSD叠加区域左上点在原图中y方向上的像素偏移
phys_addr OSD图像的物理地址。
bg_alpha 背景层的透明度。
osd_alpha OSD图像的透明度。
video_alpha video输入图像的透明度。
add_order OSD叠加顺序枚举。
bg_color OSD背景层颜色,YUV444格式。 Y: bit0~bit7 U: bit8~bit15 V: bit16~bit 23
fmt OSD图像格式枚举。

【注意事项】

  • 源图像以及目的图像在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;

【成员】

成员名称 描述
left Left offset。
right Right offset。
top Top offset。
bottom Bottom 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 rect;
} k_venc_roi_attr;

【成员】

成员名称 描述
idx ROI区域的索引,系统支持的索引范围为[0,15],不支持超出这个范围的索引。
enable 是否使能这个ROI区域。
is_abs_qp ROI区域QP模式。K_FALSE:相对QP。K_TRUE:绝对QP。
qp QP值,范围[0,51]
rect ROI区域。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 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 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_stream Stream结束标志位。

【注意事项】

无。

【相关数据类型及接口】

无。

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_stream Stream结束标志位。

【注意事项】

无。

【相关数据类型及接口】

无。

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_num VENC 通道号 取值范围:[0, VENC_MAX_CHN_NUM) 输入
pst_venc_attr VENC 通道属性指针。 静态属性。 输入

【返回值】

返回值 描述
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_num VENC 通道号 取值范围:[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_num VENC 通道号 取值范围:[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_num VENC 通道号 取值范围:[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_num VENC 通道号 取值范围:[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_num VENC 通道号 取值范围:[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_num VENC 通道号 取值范围:[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_num VENC 通道号 取值范围:[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_num VENC 通道号 取值范围:[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_num VENC 通道号 取值范围:[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
 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 *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;  k_u32 u32_pack_cnt;  k_venc_data_pack_s astPack [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_num VDEC 通道号 取值范围:[0, VDEC_MAX_CHN_NUM) 输入
attr VDEC 通道属性指针。 静态属性。 输入

【返回值】

返回值 描述
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_num VDEC 通道号 取值范围:[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_num VDEC 通道号 取值范围:[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_num VDEC 通道号 取值范围:[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_num VDEC 通道号 取值范围:[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_num VDEC 通道号 取值范围:[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_num VDEC 通道号 取值范围:[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 错误码

错误代码 宏定义 描述
0xa0098001 K_ERR_VENC_INVALID_DEVID 设备ID超出合法范围
0xa0098002 K_ERR_VENC_INVALID_CHNID 通道ID超出合法范围
0xa0098003 K_ERR_VENC_ILLEGAL_PARAM 参数超出合法范围
0xa0098004 K_ERR_VENC_EXIST 试图申请或者创建已经存在的设备、通道或者资源
0xa0098005 K_ERR_VENC_UNEXIST 试图使用或者销毁不存在的设备、通道或者资源
0xa0098006 K_ERR_VENC_NULL_PTR 函数参数中有空指针
0xa0098007 K_ERR_VENC_NOT_CONFIG 使用前未配置
0xa0098008 K_ERR_VENC_NOT_SUPPORT 不支持的参数或者功能
0xa0098009 K_ERR_VENC_NOT_PERM 该操作不允许,如试图修改静态配置参数
0xa009800c K_ERR_VENC_NOMEM 分配内存失败,如系统内存不足
0xa009800d K_ERR_VENC_NOBUF 分配缓存失败,如申请的数据缓冲区太大
0xa009800e K_ERR_VENC_BUF_EMPTY 缓冲区中无数据
0xa009800f K_ERR_VENC_BUF_FULL 缓冲区中数据满
0xa0098010 K_ERR_VENC_NOTREADY 系统没有初始化或没有加载相应模块
0xa0098011 K_ERR_VENC_BADADDR 地址超出合法范围
0xa0098012 K_ERR_VENC_BUSY VENC系统忙

表 42 解码 API 错误码

错误代码 宏定义 描述
0xa00a8001 K_ERR_VDEC_INVALID_DEVID 设备ID超出合法范围
0xa00a8002 K_ERR_VDEC_INVALID_CHNID 通道ID超出合法范围
0xa00a8003 K_ERR_VDEC_ILLEGAL_PARAM 参数超出合法范围
0xa00a8004 K_ERR_VDEC_EXIST 试图申请或者创建已经存在的设备、通道或者资源
0xa00a8005 K_ERR_VDEC_UNEXIST 试图使用或者销毁不存在的设备、通道或者资源
0xa00a8006 K_ERR_VDEC_NULL_PTR 函数参数中有空指针
0xa00a8007 K_ERR_VDEC_NOT_CONFIG 使用前未配置
0xa00a8008 K_ERR_VDEC_NOT_SUPPORT 不支持的参数或者功能
0xa00a8009 K_ERR_VDEC_NOT_PERM 该操作不允许,如试图修改静态配置参数
0xa00a800c K_ERR_VDEC_NOMEM 分配内存失败,如系统内存不足
0xa00a800d K_ERR_VDEC_NOBUF 分配缓存失败,如申请的数据缓冲区太大
0xa00a800e K_ERR_VDEC_BUF_EMPTY 缓冲区中无数据
0xa00a800f K_ERR_VDEC_BUF_FULL 缓冲区中数据满
0xa00a8010 K_ERR_VDEC_NOTREADY 系统没有初始化或没有加载相应模块
0xa00a8011 K_ERR_VDEC_BADADDR 地址超出合法范围
0xa00a8012 K_ERR_VDEC_BUSY VDEC系统忙

6. 调试信息

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