/* * Copyright (c) Hisilicon Technologies Co., Ltd. 2021-2021. All rights reserved. * Description: api vplugin function define * Author: Hisilicon * Create: 2021-10-18 */ #ifndef __UAPI_VPLUGIN_H__ #define __UAPI_VPLUGIN_H__ #include "uapi_video.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif /* * Define the VPLUGIN INVALID HANDLE MACRO. * CNcomment: 定义VPLUGIN INVALID HANDLE宏. */ #define INVALID_HANDLE (-1) /* * Define the VPLUGIN DATA STREAME. * CNcomment: 定义 VPLUGIN 数据流. */ typedef enum { UAPI_VPLUGIN_STREAM_MAIN = 0, UAPI_VPLUGIN_STREAM_EXT_0 = 1, UAPI_VPLUGIN_STREAM_MAX, } uapi_vplugin_stream_index; /* * Define the VPLUGIN frame type * CNcomment: 定义 VPLUGIN 处理完的帧类型,当前识别到只放大亮度、只放大色度、正常帧 */ typedef enum { UAPI_VPLUGIN_FRAME_TYPE_NORMAL, /* Y和C都放大的帧 */ UAPI_VPLUGIN_FRAME_TYPE_Y, /* 只有Y放大的帧 */ UAPI_VPLUGIN_FRAME_TYPE_C, /* 只有C放大的帧 */ UAPI_VPLUGIN_FRAME_TYPE_MAX, } uapi_vplugin_frame_type; typedef struct { td_u32 y_sr_ratio; td_u32 y_width; td_u32 y_height; td_u32 c_sr_ratio; td_u32 c_width; td_u32 c_height; } uapi_vplugin_aisr_result; typedef struct { td_u32 hdr_coef0; td_u32 hdr_coef1; td_u32 hdr_coef2; } uapi_vplugin_aihdr_result; typedef struct { td_u32 coef0; td_u32 coef1; td_u32 coef2; } uapi_vplugin_aift_coef_result; /* * Define the VPLUGIN result strutc type. * CNcomment: 定义 VPLUGIN server 处理完的检测结果类型. */ typedef enum { UAPI_VPLUGIN_RESULT_TYPE_AISR = 0, UAPI_VPLUGIN_RESULT_TYPE_AIHDR, UAPI_VPLUGIN_RESULT_TYPE_FT_COEF, UAPI_VPLUGIN_RESULT_TYPE_MAX = 10, } uapi_vplugin_result_type; /* * Define the VPLUGIN STATE * CNcomment: 定义 VPLUGIN 状态类型,只有当状态为开始时,才可以进行取帧 */ typedef enum { UAPI_VPLUGIN_STATUS_NONE, UAPI_VPLUGIN_STATUS_CREATE, UAPI_VPLUGIN_STATUS_START, UAPI_VPLUGIN_STATUS_STOP, UAPI_VPLUGIN_STATUS_DESTROY, UAPI_VPLUGIN_STATUS_MAX, } uapi_vplugin_inst_status; /* * Define the VPLUGIN backin stream param. * CNcomment: 定义 VPLUGIN backin数据流参数 */ typedef struct { td_bool secure_frame; uapi_vplugin_frame_type frame_type; td_u32 frame_stride_y; td_u32 frame_stride_c; td_u32 frame_width; td_u32 frame_height; uapi_video_pixel_format frame_format; uapi_pixel_bit_depth frame_bit_depth; td_u32 result_cnt; td_u32 result_size[UAPI_VPLUGIN_RESULT_TYPE_MAX]; } uapi_vplugin_backin_param; /* * Define the VPLUGIN frontout stream param. * CNcomment: 定义 VPLUGIN 输出数据流参数 (w h)为0,frontout param不生效 */ typedef struct { td_u32 frame_width; td_u32 frame_height; uapi_video_pixel_format frame_format; uapi_pixel_bit_depth frame_bit_depth; uapi_video_crop_rect crop_rect; } uapi_vplugin_frontout_param; /* * Define the VPLUGIN frontout info. * CNcomment: 定义 VPLUGIN 输出数据流信息 */ typedef struct { td_bool stream_valid; uapi_video_frame_info frontout_frame; } uapi_vplugin_frontout_stream; typedef struct { td_u32 frontout_stream_cnt; uapi_vplugin_frontout_stream frontout_stream[UAPI_VPLUGIN_STREAM_MAX]; } uapi_vplugin_frontout_stream_package; /* * Define the VPLUGIN result. * CNcomment: 定义 VPLUGIN处理完的检测结果结构体. */ typedef struct { td_s32 is_valid; td_u32 result_offset; uapi_vplugin_result_type result_type; td_u32 result_frame_index; } uapi_vplugin_result; /* * Define the VPLUGIN backin info. * CNcomment: 定义VPLUGIN 输入数据流信息,对应于上层处理完的输出信息, * 包含检测结果、检测结果个数、输出帧信息以及输出帧类型. */ typedef struct { td_bool stream_valid; td_bool frame_vaild; uapi_vplugin_frame_type frame_type; uapi_video_frame_info backin_frame; td_u32 result_cnt; td_mem_handle_t result_buf_fd; /* result buffer fd. */ uapi_vplugin_result result[UAPI_VPLUGIN_RESULT_TYPE_MAX]; } uapi_vplugin_backin_stream; typedef struct { td_u32 backin_stream_cnt; uapi_vplugin_backin_stream backin_stream[UAPI_VPLUGIN_STREAM_MAX]; } uapi_vplugin_backin_stream_package; /* * Define the VPLUGIN rect info. * CNcomment: 定义 VPLUGIN vect信息 */ typedef struct { uapi_video_rect crop_rect; uapi_video_rect video_rect; } uapi_vplugin_rect_info; /* * brief init vplugin module.CNcomment: 初始化VPLUGIN模块 CNend * attention \n * call this func before any other vplugin funcs . * CNcomment: 调用VPLUGIN模块要求首先调用本接口 CNend * retval ::TD_SUCCESS successs. * CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_DEV_OPEN_ERR open vplugin failed. CNcomment: VPLUGIN打开失败 CNend * see \n * CNcomment: 无 CNend */ td_s32 uapi_vplugin_init(td_void); /* * brief deinit vplugin module. * CNcomment: 去初始化VPLUGIN模块 CNend * attention \n * before calling this func ,you should call uapi_vplugin_destroy to destroy all the vplugins first. * CNcomment: 在调用::uapi_vplugin_destroy接口销毁所有创建的VPLUGIN后调用本接口 CNend * param * CNcomment: 无 CNend * retval ::TD_SUCCESS success. * CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_DEV_CLOSE_ERR vplugin deinited failed. CNcomment: VPLUGIN关闭失败 CNend * see \n * CNcomment: 无 CNend */ td_s32 uapi_vplugin_deinit(td_void); /* * brief create the vplugin. * CNcomment: 创建VPLUGIN CNend * attention \n * CNcomment: 无 CNend * param[in] win_handle the window handler to be create vplugin. CNcomment: WINDOW句柄 CNend * param[out] vplugin_handle the vplugin handler to be created. CNcomment: 创建的VPLUGIN句柄 CNend * retval ::TD_SUCCESS CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_NO_INIT VPLUGIN not inited. CNcomment: VPLUGIN未初始化 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_PARA illegal params. CNcomment: 输入参数非法 CNend * retval ::SOC_ERR_VPLUGIN_CREATE_ERR ceate vplugin failed CNcomment: 创建VPLUGIN失败 CNend * see \n CNcomment: 无 CNend */ td_s32 uapi_vplugin_create(td_handle win_handle, td_handle *vplugin_handle); /* * brief destroy the given vplugin. CNcomment: 销毁VPLUGIN CNend * attention \n * user should disable vplugin before call this func * CNcomment: 请先调用接口disable vplugin, 再调用此接口 CNend * param[in] vplugin_handle the input vplugin handler. CNcomment: VPLUGIN句柄 CNend * retval ::TD_SUCCESS CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_NO_INIT VPLUGIN not inited. CNcomment: 未初始化 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_PARA illegal params. CNcomment: 输入参数非法 CNend * retval ::SOC_ERR_VPLUGIN_NOT_EXIST vplugin not exist. CNcomment: vplugin不存在 CNend * see \n CNcomment: 无 CNend */ td_s32 uapi_vplugin_destroy(td_handle vplugin_handle); /* * brief set the param of the given vplugin. CNcomment: 设置vplugin参数 CNend * attention \n * CNcomment: 无 CNend * param[in] vplugin_handle the input vplugin handler. CNcomment: vplugin句柄 CNend * param[in] stream_index the data source select. CNcomment: VPLUGIN 数据流ID CNend * param[in] frontout_param the struct of data source param. CNcomment: vplugin输出流参数结构体 CNend * param[in] backin_param the struct of data source param. CNcomment: vplugin输入流参数结构体 CNend * retval ::TD_SUCCESS CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_NO_INIT VPLUGIN not inited. CNcomment: 未初始化 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_PARA illegal params. CNcomment: 输入参数非法 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_OPT illegal operation. CNcomment: 操作非法 CNend * retval ::SOC_ERR_VPLUGIN_NOT_EXIST vplugin not exist. CNcomment: vplugin不存在 CNend * see \n * CNcomment: 无 CNend */ td_s32 uapi_vplugin_set_param(td_handle vplugin_handle, uapi_vplugin_stream_index stream_index, uapi_vplugin_frontout_param *frontout_param, uapi_vplugin_backin_param *backin_param); /* * brief get the param of the given vplugin. CNcomment: 获取vplugin参数 CNend * attention \n * CNcomment: 无 CNend * param[in] vplugin_handle the input vplugin handler. CNcomment: vplugin句柄 CNend * param[in] stream_index the data source select. CNcomment: VPLUGIN 数据流ID CNend * param[out] frontout_param the pointer of data source param. CNcomment: vplugin输出流参数结构指针 CNend * param[out] backin_param the pointer of data source param. CNcomment: vplugin输入流参数结构指针 CNend * retval ::TD_SUCCESS CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_NO_INIT VPLUGIN not inited. CNcomment: 未初始化 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_PARA illegal params. CNcomment: 输入参数非法 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_OPT illegal operation. CNcomment: 操作非法 CNend * retval ::SOC_ERR_VPLUGIN_NOT_EXIST vplugin not exist. CNcomment: vplugin不存在 CNend * see \n * CNcomment: 无 CNend */ td_s32 uapi_vplugin_get_param(td_handle vplugin_handle, uapi_vplugin_stream_index stream_index, uapi_vplugin_frontout_param *frontout_param, uapi_vplugin_backin_param *backin_param); /* * brief to enable or disable the given vplugin. CNcomment: 使能/禁止VPLUGIN CNend * attention \n * param[in] vplugin_handle the input vplugin handler. CNcomment: VPLUGIN句柄 CNend * param[in] stream_index the data source select. CNcomment: VPLUGIN 数据流ID CNend * param[in] enable the flag of enable or disable vplugin instance. CNcomment: 使能/禁止标志 CNend * retval ::TD_SUCCESS CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_NO_INIT VPLUGIN not inited. CNcomment: 未初始化 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_PARA illegal params. CNcomment: 输入参数非法 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_OPT illegal operation. CNcomment: 操作非法 CNend * retval ::SOC_ERR_VPLUGIN_NOT_EXIST vplugin not exist. CNcomment: vplugin不存在 CNend * see \n CNcomment: 无 CNend */ td_s32 uapi_vplugin_set_enable(td_handle vplugin_handle, uapi_vplugin_stream_index stream_index, td_bool enable); /* * brief get the enable status of the given vplugin: enable or not. CNcomment: 获取VPLUGIN的使能状态 CNend * attention \n CNcomment: 无 CNend * param[in] vplugin_handle the input vplugin handler. CNcomment: VPLUGIN句柄 CNend * param[in] stream_index the data source select. CNcomment: VPLUGIN 数据流ID CNend * param[out] enable the flag of enable or disable vplugin instance. CNcomment: 使能/禁止标志 CNend * retval ::TD_SUCCESS CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_NO_INIT VPLUGIN not inited. CNcomment: 未初始化 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_PARA illegal params. CNcomment: 输入参数非法 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_OPT illegal operation. CNcomment: 操作非法 CNend * retval ::SOC_ERR_VPLUGIN_NOT_EXIST vplugin not exist. CNcomment: vplugin不存在 CNend * see \n * CNcomment: 无 CNend */ td_s32 uapi_vplugin_get_enable(td_handle vplugin_handle, uapi_vplugin_stream_index stream_index, td_bool *enable); /* * brief get the running status of the given vplugin: start or not. CNcomment: 获取VPLUGIN的运行状态 CNend * attention \n CNcomment: 无 CNend * param[in] vplugin_handle the input vplugin handler. CNcomment: VPLUGIN句柄 CNend * param[out] status the vplugin running status. CNcomment: VPLUGIN 运行状态 CNend * retval ::TD_SUCCESS CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_NO_INIT VPLUGIN not inited. CNcomment: 未初始化 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_PARA illegal params. CNcomment: 输入参数非法 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_OPT illegal operation. CNcomment: 操作非法 CNend * retval ::SOC_ERR_VPLUGIN_NOT_EXIST vplugin not exist. CNcomment: vplugin不存在 CNend * see \n * CNcomment: 无 CNend */ td_s32 uapi_vplugin_get_inst_status(td_handle vplugin_handle, uapi_vplugin_inst_status *status); /* * user acquire frame . CNcomment: 用户catch帧接口 CNend * attention \n * param[in] vplugin_handle vplugin handle. CNcomment: vplugin 句柄 CNend * param[out] output_info frame info. CNcomment: frontout帧信息 CNend * param[out] input_info frame info. CNcomment: backin帧信息(提供内存空间,供上层填数据) CNend * param[in] timeout_ms . CNcomment: 阻塞调用等待时间 CNend * retval ::TD_SUCCESS CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_NO_INIT VPLUGIN not inited. CNcomment: 未初始化 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_PARA illegal params. CNcomment: 输入参数非法 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_OPT illegal operation. CNcomment: 操作非法 CNend * retval ::SOC_ERR_VPLUGIN_NOT_EXIST vplugin not exist. CNcomment: vplugin不存在 CNend * see \n * none. CNcomment: 无 CNend */ td_s32 uapi_vplugin_catch_stream(td_handle vplugin_handle, uapi_vplugin_frontout_stream_package *frontout_stream_package, uapi_vplugin_backin_stream_package *backin_stream_package, td_u32 timeout_ms); /* * user acquire frame extend . CNcomment: 用户catch帧扩展接口 CNend * attention \n * param[in] vplugin_handle vplugin handle. CNcomment: vplugin 句柄 CNend * param[out] output_info frame info. CNcomment: frontout帧信息 CNend * param[out] input_info frame info. CNcomment: backin帧信息(提供内存空间,供上层填数据) CNend * param[out] rect info. CNcomment: crop rect和video rect信息 CNend * param[in] timeout_ms . CNcomment: 阻塞调用等待时间 CNend * retval ::TD_SUCCESS CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_NO_INIT VPLUGIN not inited. CNcomment: 未初始化 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_PARA illegal params. CNcomment: 输入参数非法 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_OPT illegal operation. CNcomment: 操作非法 CNend * retval ::SOC_ERR_VPLUGIN_NOT_EXIST vplugin not exist. CNcomment: vplugin不存在 CNend * see \n * none. CNcomment: 无 CNend */ td_s32 uapi_vplugin_catch_stream_ext(td_handle vplugin_handle, uapi_vplugin_frontout_stream_package *frontout_stream_package, uapi_vplugin_backin_stream_package *backin_stream_package, uapi_vplugin_rect_info *rect_info, td_u32 timeout_ms); /* * user release frame . CNcomment: 用户sendback帧接口 CNend * attention \n * param[in] vplugin_handle vplugin handle. CNcomment: vplugin 句柄 CNend * param[in] input_info frame info. CNcomment: backin帧信息(上层填完数据,送给vplugin) CNend * param[in] input_info frame info. CNcomment: frontout帧信息 CNend * retval ::TD_SUCCESS CNcomment: 成功 CNend * retval ::SOC_ERR_VPLUGIN_NO_INIT VPLUGIN not inited. CNcomment: 未初始化 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_PARA illegal params. CNcomment: 输入参数非法 CNend * retval ::SOC_ERR_VPLUGIN_INVALID_OPT illegal operation. CNcomment: 操作非法 CNend * retval ::SOC_ERR_VPLUGIN_NOT_EXIST vplugin not exist. CNcomment: vplugin不存在 CNend * see \n * none. CNcomment: 无 CNend */ td_s32 uapi_vplugin_sendback_stream(td_handle vplugin_handle, uapi_vplugin_backin_stream_package *backin_stream_package, uapi_vplugin_frontout_stream_package *frontout_stream_package); #ifdef __cplusplus #if __cplusplus } #endif #endif #endif