You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

663 lines
36 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* Copyright (c) Hisilicon Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: Define functions used to test function of venc driver
* Author: Hisilicon
* Create: 2019-11-26
*/
#ifndef __UAPI_VENC_H__
#define __UAPI_VENC_H__
#include "uapi_video.h"
#include "uapi_stream.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
#define UAPI_VENC_TYPE_NUM 3
/*
* H264 NALU type
* CNcomment: H264 NALU类型
*/
typedef enum {
UAPI_VENC_H264_NALU_SPS = 0, /* SPS NALU */
UAPI_VENC_H264_NALU_PPS, /* PPS NALU */
UAPI_VENC_H264_NALU_SEI, /* SEI NALU */
UAPI_VENC_H264_NALU_I_SLICE, /* I slice NALU */
UAPI_VENC_H264_NALU_P_SLICE, /* P slice NALU */
UAPI_VENC_H264_NALU_B_SLICE, /* B slice NALU */
UAPI_VENC_H264_NALU_MAX
} uapi_venc_h264_nalu_type;
/*
* H265 NALU type
* CNcomment: H265 NALU类型
*/
typedef enum {
UAPI_VENC_H265_NALU_VPS = 0, /* VPS NALU */
UAPI_VENC_H265_NALU_SPS, /* SPS NALU */
UAPI_VENC_H265_NALU_PPS, /* PPS NALU */
UAPI_VENC_H265_NALU_SEI, /* SEI NALU */
UAPI_VENC_H265_NALU_P_SLICE, /* P slice NALU */
UAPI_VENC_H265_NALU_I_SLICE, /* I slice NALU */
UAPI_VENC_H265_NALU_B_SLICE, /* B slice NALU */
UAPI_VENC_H265_NALU_MAX
} uapi_venc_h265_nalu_type;
/*
* VENC Rate Control Type
* CNcomment: 编码器码率控制类型
*/
typedef enum {
UAPI_VENC_RC_TYPE_CBR, /* Encoding in constant bit rate mode */ /* CNcomment: 恒定比特率方式进行编码 */
UAPI_VENC_RC_TYPE_AVBR, /* Encoding in variable bit rate mode */ /* CNcomment: 可变比特率方式进行编码 */
UAPI_VENC_RC_TYPE_MAX
} uapi_venc_rc_type;
/*
* Defines the source of input frame rate
* CNcomment: 定义编码器输入帧率来源类型的枚举
*/
typedef enum {
UAPI_VENC_FRAME_RATE_TYPE_AUTO, /* Use the frame rate calculates from real-time statistics */
/* CNcomment: 内部统计校正实时收到的帧率 */
UAPI_VENC_FRAME_RATE_TYPE_STREAM, /* Use the frame rate comes from stream */
/* CNcomment: 采用码流信息中的帧率 */
UAPI_VENC_FRAME_RATE_TYPE_USER, /* Use the frame rate set by user */
/* CNcomment: 采用用户设置的帧率 */
UAPI_VENC_FRAME_RATE_TYPE_MAX
} uapi_venc_frame_rate_type;
/*
* Data type of the Encoder
* CNcomment: 编码器数据类型
*/
typedef union {
uapi_venc_h264_nalu_type h264_type; /* H264 encoding data */ /* CNcomment: H264编码数据 */
uapi_venc_h265_nalu_type h265_type; /* H265 encoding data */ /* CNcomment: H265编码数据 */
} uapi_venc_data_type;
/*
* Output stream attributes structure
* CNcomment: 输出码流属性结构体
*/
typedef struct {
uapi_stream_buf buf; /* Stream buf description */ /* CNcomment: 码流buffer描述信息 */
td_s64 pts_us; /* Presentation time stamp (PTS) */ /* CNcomment: 时间戳 */
td_bool frame_end; /* Frame end or not */ /* CNcomment: 标识是否为帧结束 */
uapi_venc_data_type data_type; /* Encoding data type */ /* CNcomment: 编码数据类型 */
} uapi_venc_stream;
typedef union {
uapi_h264_profile h264_profile; /* H264 profile */ /* CNcomment: H264编码档次 */
uapi_h265_profile h265_profile; /* H265 profile */ /* CNcomment: H265编码档次 */
} uapi_venc_profile;
/*
* Related configure of slice split
* CNcomment: slice划分相关配置
*/
typedef enum {
UAPI_VENC_SPLIT_BY_BYTE, /* split slice by byte */ /* CNcomment: 按byte分slice */
UAPI_VENC_SPLIT_BY_LINE, /* split slice by LCU/MB line */ /* CNcomment: 按宏块行分slice */
UAPI_VENC_SPLIT_MAX
} uapi_split_mode;
typedef struct {
td_bool enable; /* slice split function switch */ /* CNcomment: slice划分功能开关 */
uapi_split_mode mode; /* slice split mode */ /* CNcomment: slice划分模式 */
td_u32 size; /* slice size, according to split_mode attribute, unit can be byte or line */
/* CNcomment: slice大小根据split_mode属性单位可以是byte或者line */
} uapi_venc_slice_split;
/*
* the gop mode
* CNcomment: GOP类型
*/
typedef enum {
UAPI_VENC_GOP_MODE_NORMALP = 0, /* NORMALP: One reference frame and only forward reference
* adjacent I frame or P frame */
/* CNcomment: 单P帧模式即一个参考帧且只前向参考相邻的I帧或者P帧 */
UAPI_VENC_GOP_MODE_DUALP, /* DUALP: Two forward reference frames */
/* CNcomment: 双P帧模式即前向参考两帧 */
UAPI_VENC_GOP_MODE_SMARTP, /* SMARTP: Two forward reference frames, one of which is long-term reference */
/* CNcomment: SMARTP模式两个前向参考帧其中一个为长期参考帧 */
UAPI_VENC_GOP_MODE_MAX,
} uapi_venc_gop_mode;
typedef struct {
td_u32 width; /* Curent encode Width aligned 4-byte. */ /* CNcomment: 当前编码宽度, 4对齐 */
td_u32 height; /* Curent encode Height, 4-byte aligned */ /* CNcomment: 当前编码高度, 4对齐 */
td_u32 target_bitrate; /* RC parameter for the VENC, it is just valid for H264/H265 Encoder.
* See the development guide for the reference values. */
/* CNcomment: Venc下是RC参数,仅在编码H264/H265协议有效。部分参考值见开发指南 */
td_u32 target_frame_rate; /* Target frame rate. */ /* CNcomment: 目标帧率 */
td_u32 input_frame_rate; /* Input frame rate is less than or equal to the value of input_frame_rate.
* Attention: the configuration is invalid in the mode of attach source
* to encode the InputFrmRate */
/* CNcomment: 输入帧率, target_frame_rate <= input_frame_rate,
* 注意在绑定模式编码情况下用户配置的输入帧率将失效 */
td_u32 gop; /* GOP size,it is just valid for H264/H265 Encoder */
/* CNcomment: GOP大小,仅在编码H264/H265协议有效 */
td_bool quick_encode; /* Quick Encode Mode enable */ /* CNcomment:是否使能快速编码模式 */
td_u8 priority; /* the Priority Level of the channal, should be between 0 to
* the max num of channel minus 1. */
/* CNcomment: 编码通道的优先级属性取值范围为0~最大通道数-1 */
td_u32 qfactor; /* The value ranges from 1 to 99 for the JPGE, it is just valid for JPEG Encoder. */
/* CNcomment: JPGE取值范围1-99只在定义了JPEG编码器情况下才有效 */
td_u32 sp_interval; /* Interval of the special P frames that should be less than Gop and
* only needs to be configured when gop_mode == UAPI_VENC_GOP_MODE_DUALP.
* When the value is 0, there is no special P frame. */
/* CNcomment: 特殊P帧间隔双P帧模式才需配置值不能为1且小于GOP的大小。
* 当为0时表示没有特殊P帧 */
uapi_venc_frame_rate_type input_frame_rate_type; /* input frame rate type */ /* CNcomment: 输入帧率类型 */
} uapi_venc_config;
/*
* Coding channal attributes structure
* CNcomment: 编码通道属性结构体
*/
typedef struct {
uapi_vcodec_type venc_type; /* Encoder type */ /* CNcomment: 编码器类型 */
uapi_venc_profile profile; /* Profile type */ /* CNcomment: 编码档次 */
td_u32 max_width; /* Maximum width aligned 4-byte */ /* CNcomment: 最大宽4字节对齐 */
td_u32 max_height; /* Maximum height aligned 4-byte */ /* CNcomment: 最大高4字节对齐 */
td_u32 stream_buf_size; /* Stream buffer size, the value ranges from 32*1024 to 40*1024*1024.
* You'd better set larger streamBufferSize if you set larger target bitrate or Qlevel. */
/* CNcomment: 码流buffer大小配置的码流buffer大小范围为32x1024到40x1024x1024
* 如果设置了较高的码率或JPEG图像质量参数建议适当增大码流buffer大小。 */
uapi_venc_slice_split slice_split; /* Slice split configure, which is for H264/H265 Encoder */
/* CNcomment: slice划分配置, 只在定义了H264/H265协议编码器情况下才有效 */
td_bool secure; /* Secure config, 1:secure encoder; 0:normal encoder */
/* CNcomment: 安全通路标志 1:安全编码器0:非安编码器 */
uapi_venc_gop_mode gop_mode; /* Encoding GOP type */ /* CNcomment: GOP类型 */
uapi_venc_config config; /* Dynamically configurable attributes */ /* CNcomment: 可动态配置属性 */
} uapi_venc_attr;
/*
* VENC Capability Information Of One Resolution
* CNcomment: 某一分辨率的编码能力信息
*/
typedef struct {
td_u32 width; /* support width */ /* CNcomment: 宽度 */
td_u32 height; /* support height */ /* CNcomment: 高度 */
td_u32 max_frm_rate; /* support max frame rate */ /* CNcomment: 最大帧率 */
td_u32 max_bit_rate; /* support max bit rate */ /* CNcomment: 最大码率 */
td_u32 min_bit_rate; /* support min bit rate */ /* CNcomment: 最小码率 */
td_u32 min_buf_size; /* support min stream buffer size */ /* CNcomment: 最大能力级对应的最小码流buffer大小 */
} uapi_venc_cap_reso;
/*
* VENC Capability Information Of One Encode Type
* CNcomment: 某一编码协议的编码能力信息
*/
typedef struct {
uapi_vcodec_type code_type; /* support venc type */ /* CNcomment: 编码类型 */
td_u32 max_chan_num; /* support max channel num */ /* CNcomment: 最大通道数 */
uapi_venc_cap_reso max_reso; /* support capability information of max resolution */
/* CNcomment: 最大分辨率对应的能力信息 */
uapi_venc_cap_reso min_reso; /* support capability information of min resolution */
/* CNcomment: 最小分辨率对应的能力信息 */
} uapi_venc_cap_info;
/*
* VENC Capability Information
* CNcomment: 编码能力信息
*/
typedef struct {
td_u32 support_type_num; /* support venc type num */ /* CNcomment: 编码器支持的编码类型数量 */
uapi_venc_cap_info cap_info[UAPI_VENC_TYPE_NUM]; /* capability information for venc types */
/* CNcomment: 编码器不同编码类型的编码能力信息 */
} uapi_venc_cap;
/*
* Rate control advanced parameters
* CNcomment: 码率控制高级参数
*/
typedef struct {
uapi_venc_rc_type type; /* Rate Control Type */ /* CNcomment: 码率控制类型 */
td_u8 max_qp; /* Maximum QP */ /* CNcomment: 最大QP值 */
td_u8 min_qp; /* Minimum QP */ /* CNcomment: 最小QP值 */
} uapi_venc_rc_param;
/*
* VENC advanced parameter commands
* CNcomment: VENC高级参数命令
*/
typedef enum {
UAPI_VENC_INVOKE_SET_RC_PARAM = 0, /* Command to set rate control parameter */
/* CNcomment: 设置码率参数命令 */
UAPI_VENC_INVOKE_GET_RC_PARAM, /* Command to get rate control parameter */
/* CNcomment: 获取码率参数命令 */
UAPI_VENC_INVOKE_MAX
} uapi_venc_invoke_cmd;
typedef enum {
UAPI_VENC_FRAME_DROP_NORMAL = 0, /* Drop the frame directly when the instant bitrate exceeds the threshold */
/* CNcomment: 瞬时码率超过阈值时直接丢帧 */
UAPI_VENC_FRAME_DROP_SKIP_FRM, /* Encoded pskip frame when the instant bitrate exceeds the threshold */
/* CNcomment: 瞬时码率超过阈值时编码pskip帧 */
UAPI_VENC_FRAME_DROP_MAX,
} uapi_venc_frame_drop_mode;
/*
* Frame drop strategy
* CNcomment: 丢帧策略
*/
typedef struct {
td_bool enable; /* Drop frame enable flag */ /* CNcomment: 丢帧使能开关 */
td_u32 bit_rate_threshold; /* Encoder bitrate fluctuation threshold */
/* CNcomment: 编码器码率波动阈值 */
uapi_venc_frame_drop_mode mode; /* Drop frame mode */ /* CNcomment: 丢帧模式 */
td_u32 drop_gap; /* Maximum allowed consecutive frames drop */
/* CNcomment: 最大允许连续丢帧帧数 */
} uapi_venc_frame_drop_strategy;
/*
* VENC channel status
* CNcomment: VENC通道状态
*/
typedef struct {
td_bool is_start; /* Encode work status */ /* CNcomment: 编码器工作模式 */
td_u32 left_pics; /* The number of frames that the encoder has not yet encoded */
/* CNcomment: 编码器还没有编码的帧数 */
td_u32 left_stream_bytes; /* The left bytes of stream buffer */
/* CNcomment: 剩余的码流buffer字节数 */
td_u32 drop_frame_num; /* Total drop frames number */ /* CNcomment: 丢帧总数 */
} uapi_venc_chan_status;
/*
* brief Initializes the video encoder. CNcomment: 初始化视频编码器 CNend
* attention \n
* Before using the VENC, you must call this API. CNcomment: 调用VENC模块要求首先调用该接口 CNend
* param[in] N/A CNcomment: 无 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_DEV_NOT_EXIST No VENC device exists. CNcomment: 设备不存在 CNend
* retval ::SOC_ERR_VENC_NOT_DEV_FILE The file is not a VENC file. CNcomment: 文件非设备 CNend
* retval ::SOC_ERR_VENC_DEV_OPEN_ERR The VENC device fails to start. CNcomment: 打开设备失败 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_init(td_void);
/*
* brief Deinitializes the video encoder. CNcomment: 去初始化视频编码器 CNend
* attention \n
* N/A CNcomment: 无 CNend
* param[in] N/A CNcomment: 无 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_DEV_CLOSE_ERR The video encoder fails to stop. CNcomment: 关闭编码器失败 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_deinit(td_void);
/*
* brief Obtains the default attributes of a VENC channel. CNcomment: 获取编码通道默认属性 CNend
* attention \n
* By default, the encoding size is D1, encoding format is H.264, and a frame is a slice.
* CNcomment: 默认720P编码H.264格式一帧为一个Slice CNend
* param[out] attr Pointer to the attributes of a VENC channel. CNcomment: attr 指向编码通道属性的指针 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_NULL_PTR The input pointer parameter is null. CNcomment: 输入指针参数为空指针 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_get_default_attr(uapi_venc_attr *attr);
/*
* brief Creates a VENC channel. CNcomment: 创建视频编码通道 CNend
* attention \n
* You must create a VENC channel before video encoding.
* CNcomment: 进行视频编码要求首先创建编码通道 CNend
* param[in] attr Pointer to the attributes of a VENC channel. CNcomment: attr 指向编码通道属性的指针 CNend
* param[out] chan_id Pointer to the handle of a VENC channel. CNcomment: chan_id 指向编码通道句柄的指针 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_NULL_PTR The input pointer parameter is null. CNcomment: 输入指针参数有空指针 CNend
* retval ::SOC_ERR_VENC_CREATE_ERR The number of VENC channels exceeds the limit. CNcomment: 编码通道数已满 CNend
* retval ::SOC_ERR_VENC_INVALID_PARA The channel attributes are incorrect. CNcomment: 通道属性设置错误 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_create(td_handle *chan_id, const uapi_venc_attr *attr);
/*
* brief Destroys a VENC channel. CNcomment: 销毁视频编码通道 CNend
* attention \n
* param[in] chan_id Handle of a VENC channel. CNcomment: CNcomment: chan_id 编码通道句柄 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No handle exists. CNcomment: 句柄不存在 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_destroy(td_handle chan_id);
/*
* brief Attaches a VENC channel to the video source. CNcomment: 绑定编码通道到视频源 CNend
* attention \n
* You must call this API before performing encoding and obtaining streams.
* CNcomment: 开始编码和获取码流之前需要首先调用该接口 CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* param[in] src_id Data source handle CNcomment: src_id 视频源句柄 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_INVALID_PARA The video source is invalid. CNcomment: 视频源错误 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_attach_input(td_handle chan_id, td_handle src_id);
/*
* brief Detaches a VENC channel from the video source. CNcomment: 解绑定视频源 CNend
* attention \n
* You must stop encoding before calling this API.
* CNcomment: 调用该接口需要首先停止编码 CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_INVALID_PARA The video source is invalid. CNcomment: 视频源错误 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* retval ::SOC_ERR_VENC_CHN_INVALID_STAT Invalid state which the video encoder does not stop encoding.
* CNcomment: 异常状态,编码器未停止编码 CNend
* retval ::SOC_ERR_VENC_CHN_NO_ATTACH The VENC channel doesn't attach any source.
* CNcomment: 编码通道没有绑定任何源 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_detach_input(td_handle chan_id);
/*
* brief Starts to perform encoding. CNcomment: 开始编码 CNend
* attention \n
* You must initialize the video encoder, create a VENC channel, and attach the channel to the video source
* before calling this API.
* CNcomment: 调用该接口需要首先初始化编码器,创建编码通道,绑定视频源 CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_start(td_handle chan_id);
/*
* brief Stops encoding. CNcomment: 停止编码 CNend
* attention \n
* You must initialize the video encoder, create a VENC channel, attach the channel to the video source,
* and start to perform encoding before calling this API.
* CNcomment: 调用该接口需要首先初始化编码器,创建编码通道,绑定视频源,已经开始编码 CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_stop(td_handle chan_id);
/*
* brief Obtains VENC streams. CNcomment: 获取视频编码码流 CNend
* attention \n
* You must attach a VENC channel to the video source and start to perform encoding before calling this API.
* The block time (in ms) is configurable. If u32TimeOutMs is set to 0,
* the block time is 0; if timeout_ms is set to 0xFFFFFFFF, it indicates infinite wait. \n
* If the block time is reached but no data is received, ::SOC_ERR_VENC_BUF_EMPTY is returned.\n
* If the wait time is 0 and there is no data, ::SOC_ERR_VENC_BUF_EMPTY is returned.
* CNcomment: 调用该接口需要首先绑定视频源,开始编码
* 阻塞时间可以设置时间单位为毫秒设置为0不等待设置为0xffffffff一直等待。\n
* 若超过阻塞时间,还没有数据到达,则返回::SOC_ERR_VENC_BUF_EMPTY\n
* 如果等待时间为0且没有码流数据则返回::SOC_ERR_VENC_BUF_EMPTY\n CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* param[out] stream Pointer to the structure for storing streams CNcomment: stream 存放码流结构的指针 CNend
* param[in] timeout_ms: Wait timeout, count in ms CNcomment: u32TimeoutMs等待超时时间单位ms CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* retval ::SOC_ERR_VENC_NULL_PTR The stream pointer is null. CNcomment: 码流指针为空 CNend
* retval ::SOC_ERR_VENC_BUF_EMPTY Streams fail to be obtained. CNcomment: 获取码流失败 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_acquire_stream(td_handle chan_id, uapi_venc_stream *stream, td_u32 timeout_ms);
/*
* brief Releases VENC streams. CNcomment: 释放视频编码码流 CNend
* attention \n
* You must obtain streams and keep the streams unchanged before calling this API.
* The stream which you get first should be release first.
* CNcomment: 调用该接口需要首先获取码流,且不能改变码流内容。
* 先获取的码流需要先释放。 CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* param[in] stream Pointer to the structure for storing streams CNcomment: stream 存放码流结构的指针 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* retval ::SOC_ERR_VENC_NULL_PTR The stream pointer is null. CNcomment: 码流指针为空 CNend
* retval ::SOC_ERR_VENC_CHN_RELEASE_ERR Streams fail to be released. CNcomment: 释放码流失败 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_release_stream(td_handle chan_id, const uapi_venc_stream *stream);
/*
* brief Sets the encoding channel dynamic attributes dynamically. CNcomment: 动态设置编码通道属性 CNend
* attention \n
* You must create a VENC channel before calling this API. You should still assign the real value to them
* at that time. It's better that you should call uapi_venc_get_attr() to obtain the attributes of a VENC channel
* before calling this API.
* CNcomment: 调用该接口需要首先创建编码通道,在调用该接口时你还是要给这些通道属性赋上当时的实际值。 CNend
* 最好在调用该接口之前调用uapi_venc_get_config()接口获取到当时的通道属性 CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* param[in] config Encoding channel dynamic attribute CNcomment: config 编码通道动态属性 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_INVALID_PARA The channel attributes are incorrect. CNcomment: 通道属性设置错误 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* retval ::SOC_ERR_VENC_NULL_PTR The pointer is null. CNcomment: 指针为空 CNend
* retval ::SOC_ERR_VENC_NOT_SUPPORT This change of attributes dosen't be supported.
* CNcomment: 不支持该属性动态配置 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_set_config(td_handle chan_id, const uapi_venc_config *config);
/*
* brief Obtains the dynamic attributes of a VENC channel. CNcomment: 获取编码通道动态属性 CNend
* attention \n
* You must create a VENC channel before calling this API.
* CNcomment: 调用该接口需要首先创建编码通道 CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* param[out] config Encoding channel dynamic attribute CNcomment: config 编码通道动态属性 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* retval ::SOC_ERR_VENC_NULL_PTR The pointer is null. CNcomment: 指针为空 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_get_config(td_handle chan_id, uapi_venc_config *config);
/*
* brief Applies for I frames. CNcomment: 请求I帧 CNend
* attention \n
* The video encoder encodes an I frame as soon as possible after you call this API.\n
* You can call this API when you set up a video call or fix errors.\n
* If you call this API repeatedly in a short period, I frames may be not generated each time.\n
* CNcomment: 调用该接口后编码器会尽快编码出一个I帧来.\n
* 此接口一般用于可视电话场景的通话建立和错误恢复.\n
* 此接口只是"尽最大能力"尽快编码出一个I帧来如果在短时间内多次调用此接口
* 那么不能保证每次调用都能对应编码出一个I帧来.\n CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_request_i_frame(td_handle chan_id);
/*
* brief Input frame to VENC. CNcomment: 向编码器送帧 CNend
* attention \n
* You must create a VENC channel before calling this API.
* If the venc channel has already attach the source,::SOC_ERR_VENC_CHN_INVALID_STAT is returned.
* This API should be matched with the API: uapi_venc_dequeue_frame.
* uapi_venc_queue_frame is used to send frame data to Encoder for user and uapi_venc_dequeue_frame is used to call
* the Encoder to receive the frame data which has already be processed.
* CNcomment: 调用该接口需要首先创建编码通道.
* 如果编码通道已经绑定源会返回SOC_ERR_VENC_CHN_INVALID_STAT 无效操作
* 该接口需要与 uapi_venc_dequeue_frame 接口配对使用。
* UAPI_VENC_QueueFrame接口用于为用户提供一个接口向编码器送帧供编码
* uapi_venc_dequeue_frame接口是编码器归还已经处理的帧 CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* param[in] frame_info Frame information struct CNcomment: 帧信息属性 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_NULL_PTR The pointer is null. CNcomment: 指针为空 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* retval ::SOC_ERR_VENC_CHN_INVALID_STAT Invalid state which the VENC channel has already attach source.
CNcomment: 异常状态,编码器通道已经绑定源 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_queue_frame(td_handle chan_id, uapi_video_frame_info *frame_info);
/*
* brief release frame from VENC. CNcomment: 向编码器还帧 CNend
* attention \n
* You must create a VENC channel before calling this API.
* If the venc channel has already attach the source,::SOC_ERR_VENC_CHN_INVALID_STAT is returned.
* Refer to the attention of the API: uapi_venc_queue_frame.
* If uapi_venc_dequeue_frame return TD_SUCCESS, it means the corresponding frame buffer could be set free by user.
* CNcomment: 调用该接口需要首先创建编码通道.
* 如果编码通道已经绑定源会返回SOC_ERR_VENC_CHN_INVALID_STAT 无效操作
* 注意事项参照uapi_venc_queue_frame接口。如果uapi_venc_dequeue_frame接口返回成功
* 意味着对应的帧存用户可以释放 CNend
* param[in] chan_id Handle of a VENC channel CNcomment: chan_id 编码通道句柄 CNend
* param[out] frame_info Frame information struct CNcomment: 帧信息属性 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_NULL_PTR The pointer is null. CNcomment: 指针为空 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* retval ::SOC_ERR_VENC_CHN_INVALID_STAT Invalid state which the VENC channel has already attach source.
CNcomment: 异常状态,编码器通道已经绑定源 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_dequeue_frame(td_handle chan_id, uapi_video_frame_info *frame_info);
/*
* brief get encoding capbility from VENC. CNcomment: 获取编码器的编码能力 CNend
* attention \n
* param[in] N/A CNcomment: 无 CNend
* param[out] capability Pointer to the capability of VENC CNcomment: capability 存放编码能力信息的指针 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_NULL_PTR The pointer is null. CNcomment: 指针为空 CNend
* retval ::TD_FAILURE Capability fail to be obtained. CNcomment: 获取编码能力信息失败 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_get_cap_ability(uapi_venc_cap *capability);
/*
* brief set frame drop strategy. CNcomment: 设置丢帧策略 CNend
* attention \n
* param[in] chan_id Venc handle. CNcomment: Venc句柄 CNend
* param[in] frm_drop_param Frame drop parameter. CNcomment: 丢帧策略参数 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_INVALID_PARA The channel attributes are incorrect. CNcomment: 通道属性设置错误 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_set_frame_drop_strategy(td_handle chan_id, const uapi_venc_frame_drop_strategy *frm_drop_param);
/*
* brief get frame drop strategy. CNcomment: 获取丢帧策略 CNend
* attention \n
* param[in] chan_id Venc handle. CNcomment: Venc句柄 CNend
* param[out] frm_drop_param Frame drop parameter. CNcomment: 丢帧策略参数 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_INVALID_PARA The channel attributes are incorrect. CNcomment: 通道属性设置错误 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_get_frame_drop_strategy(td_handle chan_id, uapi_venc_frame_drop_strategy *frm_drop_param);
/*
* brief venc extended function interface. CNcomment: Venc扩展功能接口 CNend
* attention \n
* param[in] chan_id Venc handle. CNcomment: Venc句柄 CNend
* param[in] invode_cmd Command. CNcomment: 扩展命令 CNend
* param[in] param Input Parameter(determined by invode_cmd). CNcomment: 输入参数invode_cmd决定 CNend
* param[in] param_len Parameter length. CNcomment: 参数结构体长度 CNend
* param[out] param Output parameter(determined by invode_cmd). CNcomment: 输出参数invode_cmd决定 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_INVALID_PARA The channel attributes are incorrect. CNcomment: 通道属性设置错误 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_invoke(td_handle chan_id, uapi_venc_invoke_cmd invoke_cmd, td_void *param, td_u32 param_len);
/*
* brief venc reset. CNcomment: 重置编码通道 CNend
* attention \n
* param[in] chan_id Venc handle. CNcomment: Venc句柄 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_INVALID_PARA The channel attributes are incorrect. CNcomment: 通道属性设置错误 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_reset(td_handle chan_id);
/*
* brief query channel status. CNcomment: 查询通道状态 CNend
* attention \n
* param[in] chan_id Venc handle. CNcomment: Venc句柄 CNend
* param[out] status Current status. CNcomment: 当前通道状态 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_INVALID_PARA The channel attributes are incorrect. CNcomment: 通道属性设置错误 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_query_status(td_handle chan_id, uapi_venc_chan_status *status);
/*
* brief Obtains the attributes of a VENC channel. CNcomment: 获取编码通道属性 CNend
* attention \n
* param[in] chan_id Venc handle. CNcomment: Venc句柄 CNend
* param[out] attr Encoding channel attribute CNcomment: attr 编码通道属性 CNend
* retval ::TD_SUCCESS Success CNcomment: 成功 CNend
* retval ::SOC_ERR_VENC_CHN_NOT_EXIST No VENC channel handle exists. CNcomment: 编码通道句柄不存在 CNend
* retval ::SOC_ERR_VENC_INVALID_PARA The channel attributes are incorrect. CNcomment: 通道属性设置错误 CNend
* retval ::SOC_ERR_VENC_NO_INIT The video encoder is not initialized. CNcomment: 编码器未初始化 CNend
* see \n
* N/A CNcomment: 无 CNend
*/
td_s32 uapi_venc_get_attr(td_handle chan_id, uapi_venc_attr *attr);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif // __UAPI_VENC_H__