/** @file * Copyright (C) 2022 Allwinner, Inc. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #ifndef _UAPI_RT_MEDIA_H_ #define _UAPI_RT_MEDIA_H_ //#include //#include #define SENSOR_0_SIGN 0xAA66AA66 #define SENSOR_1_SIGN 0xBB66BB66 #define SENSOR_2_SIGN 0xCC66CC66 #if 1//config 0 #define CSI_SENSOR_0_VIPP_0 0 #define CSI_SENSOR_0_VIPP_1 4 #define CSI_SENSOR_0_VIPP_2 8 #define CSI_SENSOR_0_VIPP_3 12 #define CSI_SENSOR_1_VIPP_0 1 #define CSI_SENSOR_1_VIPP_1 5 #define CSI_SENSOR_1_VIPP_2 9 #define CSI_SENSOR_1_VIPP_3 13 #define CSI_SENSOR_2_VIPP_0 2 #define CSI_SENSOR_2_VIPP_1 6 #define CSI_SENSOR_2_VIPP_2 10 #define CSI_SENSOR_2_VIPP_3 14 #else//config 1 #define CSI_SENSOR_0_VIPP_0 0 #define CSI_SENSOR_0_VIPP_1 4 #define CSI_SENSOR_0_VIPP_2 8 #define CSI_SENSOR_0_VIPP_3 12 #define CSI_SENSOR_1_VIPP_0 2 #define CSI_SENSOR_1_VIPP_1 6 #define CSI_SENSOR_1_VIPP_2 10 #define CSI_SENSOR_1_VIPP_3 14 #define CSI_SENSOR_2_VIPP_0 1 #define CSI_SENSOR_2_VIPP_1 5 #define CSI_SENSOR_2_VIPP_2 9 #define CSI_SENSOR_2_VIPP_3 13 #endif #define LBC_2X_COM_RATIO_EVEN 600 #define LBC_2X_COM_RATIO_ODD 450 #define LBC_2_5X_COM_RATIO_EVEN 440 #define LBC_2_5X_COM_RATIO_ODD 380 #define LBC_BIT_DEPTH 8 #define LBC_EXT_SIZE (2 * 1024) #define NEI_TEST_CODE 0 #define RT_AE_FACE_MAX_NUM 8 #define RT_AE_FACE_WIN_WEIGHT_LENGTH 16 #define RT_AE_FACE_POS_WEIGHT_LENGTH 64 enum RT_MEDIA_IOCTL_CMD { IOCTL_UNKOWN = 0x100, IOCTL_CONFIG, //+1 IOCTL_START, //+2 IOCTL_PAUSE, //+3 IOCTL_DESTROY, //+4 IOCTL_GET_VBV_BUFFER_INFO, //+5 IOCTL_GET_STREAM_HEADER_SIZE, //+6 IOCTL_GET_STREAM_HEADER_DATA, //+7 IOCTL_GET_STREAM_DATA, //+8 IOCTL_RETURN_STREAM_DATA, //+9 IOCTL_CATCH_JPEG_START, IOCTL_CATCH_JPEG_GET_DATA, IOCTL_CATCH_JPEG_STOP, IOCTL_SET_OSD, //IOCTL_GET_BIN_IMAGE_DATA, //IOCTL_GET_MV_INFO_DATA, IOCTL_CONFIG_YUV_BUF_INFO, IOCTL_REQUEST_YUV_FRAME, IOCTL_RETURN_YUV_FRAME, IOCTL_GET_ISP_LV, IOCTL_GET_ISP_HIST, IOCTL_GET_ISP_EXP_GAIN, //+20 IOCTL_GET_ISP_AE_METERING_MODE, IOCTL_SET_IR_PARAM, IOCTL_SET_VERTICAL_FLIP, IOCTL_SET_HORIZONTAL_FLIP, IOCTL_SET_ISP_ATTR_CFG, IOCTL_GET_ISP_ATTR_CFG, IOCTL_SET_ISP_ORL, IOCTL_SET_ISP_AE_MODE, IOCTL_SET_FORCE_KEYFRAME, IOCTL_RESET_ENCODER_TYPE, IOCTL_REQUEST_ENC_YUV_FRAME, //+30 IOCTL_SUBMIT_ENC_YUV_FRAME, IOCTL_SET_POWER_LINE_FREQ, IOCTL_SET_QP_RANGE, IOCTL_SET_BITRATE, IOCTL_SET_VBR_PARAM, IOCTL_GET_SUM_MB_INFO, IOCTL_SET_ENC_MOTION_SEARCH_PARAM, IOCTL_GET_ENC_MOTION_SEARCH_RESULT, IOCTL_SET_VENC_SUPER_FRAME_PARAM, IOCTL_SET_FPS, //+40 IOCTL_SET_SHARP, IOCTL_GET_CSI_STATUS, IOCTL_SET_ROI, IOCTL_SET_GDC, IOCTL_SET_ROTATE, IOCTL_SET_REC_REF_LBC_MODE, IOCTL_SET_WEAK_TEXT_TH, IOCTL_SET_REGION_D3D_PARAM, IOCTL_GET_REGION_D3D_RESULT, //+50 IOCTL_SET_CHROMA_QP_OFFSET, IOCTL_SET_H264_CONSTRAINT_FLAG, IOCTL_SET_VE2ISP_D2D_LIMIT, IOCTL_SET_EN_SMALL_SEARCH_RANGE, IOCTL_SET_FORCE_CONF_WIN, IOCTL_SET_ROT_VE2ISP, IOCTL_SET_INSERT_DATA, IOCTL_GET_INSERT_DATA_BUF_STATUS, IOCTL_SET_GRAY, IOCTL_SET_WB_YUV, //+60 IOCTL_GET_WB_YUV, IOCTL_SET_2DNR, IOCTL_SET_3DNR, IOCTL_SET_CYCLIC_INTRA_REFRESH, IOCTL_SET_P_FRAME_INTRA, IOCTL_RESET_IN_OUT_BUFFER, IOCTL_DROP_FRAME, ///< notify rt_media to drop video frames IOCTL_SET_CAMERA_MOVE_STATUS, IOCTL_SET_CROP, IOCTL_SET_VENC_TARTGET_BITS_CLIP_PARAM, IOCTL_SET_JPEG_QUALITY, IOCTL_SET_FIX_QP, IOCTL_SET_MB_RC_MOVE_STATUS, IOCTL_SET_H264_VIDEO_TIMING, IOCTL_SET_H265_VIDEO_TIMING, IOCTL_GET_TDM_BUF, IOCTL_RETURN_TDM_BUF, IOCTL_GET_TDM_DATA, IOCTL_SET_BRIGHTNESS, IOCTL_SET_CONTRAST, IOCTL_SET_SATURATION, IOCTL_SET_HUE, IOCTL_SET_SHARPNESS, IOCTL_SET_SENSOR_EXP, IOCTL_SET_SENSOR_GAIN, IOCTL_GET_SENSOR_NAME, IOCTL_GET_SENSOR_RESOLUTION, IOCTL_GET_TUNNING_CTL_DATA, IOCTL_SET_ENC_AND_DEC_CASE, IOCTL_GET_SENSOR_RESERVE_ADDR, IOCTL_GET_ISP_REG, }; typedef struct KERNEL_VBV_BUFFER_INFO{ int share_fd; int size; } KERNEL_VBV_BUFFER_INFO; typedef enum { RT_VENC_CODEC_H264 = 0, RT_VENC_CODEC_JPEG = 1, RT_VENC_CODEC_H265 = 2, } RT_VENC_CODEC_TYPE; // dynamic config typedef struct video_stream_s{ int id; uint64_t pts; unsigned int flag; unsigned int size0; unsigned int size1; unsigned int size2; unsigned int offset0; unsigned int offset1; unsigned int offset2; int keyframe_flag; struct timeval tv; unsigned char *data0; unsigned char *data1; unsigned char *data2; } video_stream_s; typedef video_stream_s STREAM_DATA_INFO; typedef struct catch_jpeg_config { int channel_id; int width; int height; int qp; int rotate_angle; } catch_jpeg_config; typedef struct catch_jpeg_buf_info { unsigned int buf_size; // set the max_size, return valid_size unsigned char *buf; } catch_jpeg_buf_info; /* overlay related */ #define MAX_OVERLAY_ITEM_SIZE (64) typedef enum OVERLAY_ARGB_TYPE { OVERLAY_ARGB_MIN = -1, OVERLAY_ARGB8888 = 0, OVERLAY_ARGB4444 = 1, OVERLAY_ARGB1555 = 2, OVERLAY_ARGB_MAX = 3, } OVERLAY_ARGB_TYPE; ///< same to VENC_OVERLAY_ARGB_TYPE typedef enum RT_VENC_OVERLAY_TYPE { RT_NORMAL_OVERLAY = 0, //normal overlay RT_COVER_OSD = 1, //use the setting yuv to cover region RT_LUMA_REVERSE_OVERLAY = 2, //normal overlay and luma reverse } RT_VENC_OVERLAY_TYPE; ///< same to VENC_OVERLAY_TYPE typedef struct VencCoverYuvS { unsigned char use_cover_yuv_flag; //1:use the cover yuv; 0:transform the argb data to yuv ,then cover unsigned char cover_y; //the value of cover y unsigned char cover_u; //the value of cover u unsigned char cover_v; //the value of cover v } VencCoverYuvS; ///< same to VencOverlayCoverYuvS typedef struct OverlayItemInfo_t { unsigned short start_x; unsigned short start_y; unsigned int widht; // must 16_align: 'width%16 == 0' unsigned int height; // must 16_align: 'height%16 == 0' VencCoverYuvS cover_yuv; //when use RT_COVER_OSD should set the cover yuv RT_VENC_OVERLAY_TYPE osd_type; //reference definition of VENC_OVERLAY_TYPE unsigned char *data_buf; //the vir addr of overlay block unsigned int data_size; //the size of bitmap } OverlayItemInfo; typedef struct VideoInputOSD_t { unsigned char osd_num; //num of overlay region OVERLAY_ARGB_TYPE argb_type;//reference definition of VENC_OVERLAY_ARGB_TYPE OverlayItemInfo item_info[MAX_OVERLAY_ITEM_SIZE]; //* for v5v200 and newer ic unsigned int invert_mode; unsigned int invert_threshold; //* end } VideoInputOSD; //typedef struct VideoGetBinImageBufInfo { // unsigned int max_size; // unsigned char *buf; //} VideoGetBinImageBufInfo; //typedef struct VideoGetMvInfoBufInfo { // unsigned int max_size; // unsigned char *buf; //} VideoGetMvInfoBufInfo; #ifdef CONFIG_FRAMEDONE_TWO_BUFFER #define CONFIG_YUV_BUF_NUM (2) #else #define CONFIG_YUV_BUF_NUM (3) #endif typedef struct config_yuv_buf_info { unsigned char *phy_addr[CONFIG_YUV_BUF_NUM]; int buf_size; int buf_num; } config_yuv_buf_info; typedef struct rt_yuv_info { int bset; int fd; unsigned char *phy_addr; } rt_yuv_info; #define VIDEO_INPUT_CHANNEL_NUM (16) typedef enum { AW_Video_H264ProfileBaseline = 66, /**< Baseline profile */ AW_Video_H264ProfileMain = 77, /**< Main profile */ AW_Video_H264ProfileHigh = 100, /**< High profile */ } AW_Video_H264PROFILETYPE; ///< same to #VENC_H264PROFILETYPE /** * H264 level types */ typedef enum { AW_Video_H264Level1 = 10, /**< Level 1 */ AW_Video_H264Level11 = 11, /**< Level 1.1 */ AW_Video_H264Level12 = 12, /**< Level 1.2 */ AW_Video_H264Level13 = 13, /**< Level 1.3 */ AW_Video_H264Level2 = 20, /**< Level 2 */ AW_Video_H264Level21 = 21, /**< Level 2.1 */ AW_Video_H264Level22 = 22, /**< Level 2.2 */ AW_Video_H264Level3 = 30, /**< Level 3 */ AW_Video_H264Level31 = 31, /**< Level 3.1 */ AW_Video_H264Level32 = 32, /**< Level 3.2 */ AW_Video_H264Level4 = 40, /**< Level 4 */ AW_Video_H264Level41 = 41, /**< Level 4.1 */ AW_Video_H264Level42 = 42, /**< Level 4.2 */ AW_Video_H264Level5 = 50, /**< Level 5 */ AW_Video_H264Level51 = 51, /**< Level 5.1 */ AW_Video_H264Level52 = 52, /**< Level 5.2 */ AW_Video_H264LevelDefault = 0 } AW_Video_H264LEVELTYPE; ///< same to #VENC_H264LEVELTYPE typedef enum { AW_Video_H265ProfileMain = 1, AW_Video_H265ProfileMain10 = 2, AW_Video_H265ProfileMainStill = 3 } AW_VideoH265PROFILETYPE; ///< same to #VENC_H265PROFILETYPE typedef enum { AW_Video_H265Level1 = 30, /**< Level 1 */ AW_Video_H265Level2 = 60, /**< Level 2 */ AW_Video_H265Level21 = 63, /**< Level 2.1 */ AW_Video_H265Level3 = 90, /**< Level 3 */ AW_Video_H265Level31 = 93, /**< Level 3.1 */ AW_Video_H265Level41 = 123, /**< Level 4.1 */ AW_Video_H265Level5 = 150, /**< Level 5 */ AW_Video_H265Level51 = 153, /**< Level 5.1 */ AW_Video_H265Level52 = 156, /**< Level 5.2 */ AW_Video_H265Level6 = 180, /**< Level 6 */ AW_Video_H265Level61 = 183, /**< Level 6.1 */ AW_Video_H265Level62 = 186, /**< Level 6.2 */ AW_Video_H265LevelDefault = 0 } AW_Video_H265LEVELTYPE; ///< same to #VENC_H265LEVELTYPE typedef struct video_qp_range { int i_min_qp;//[1 ~ 51], I帧qp最小值,默认值: 35 int i_max_qp;//[1 ~ 51], I帧qp最大值,默认值: 51 int p_min_qp;//[1 ~ 51], P帧qp最小值,默认值: 35 int p_max_qp;//[1 ~ 51], P帧qp最大值,默认值: 51 int i_init_qp; int enable_mb_qp_limit; } video_qp_range; typedef struct RTVencFixQP { int bEnable; int nIQp; int nPQp; } RTVencFixQP; typedef enum VIDEO_OUTPUT_MODE{ OUTPUT_MODE_STREAM = 0, // yuv图像经过编码器输出码流数据; OUTPUT_MODE_YUV = 1, // 直接调用接口获取yuv数据 OUTPUT_MODE_ENCODE_FILE_YUV = 2, // 调试用:不启用isp,应用层传递yuv给编码器进行编码 OUTPUT_MODE_ENCODE_OUTSIDE_YUV = 3,//从外部,非yuv file获取yuv,进行编码 } VIDEO_OUTPUT_MODE; typedef enum rt_pixelformat_type { RT_PIXEL_YUV420SP, //nv12 RT_PIXEL_YVU420SP, //nv21 RT_PIXEL_YUV420P, RT_PIXEL_YVU420P, RT_PIXEL_YUV422SP, RT_PIXEL_YVU422SP, RT_PIXEL_YUV422P, RT_PIXEL_YVU422P, RT_PIXEL_YUYV422, RT_PIXEL_UYVY422, RT_PIXEL_YVYU422, RT_PIXEL_VYUY422, RT_PIXEL_LBC_25X, RT_PIXEL_LBC_2X, RT_PIXEL_NUM } rt_pixelformat_type; typedef rt_pixelformat_type RT_PIXELFORMAT_TYPE; typedef enum rt_outputformat_type { RT_OUTPUT_SAME_AS_INPUT, RT_OUTPUT_420, RT_OUTPUT_444, RT_OUTPUT_422, RT_OUPUT_NUM } rt_outputformat_type; typedef rt_outputformat_type RT_OUTPUTFORMAT_TYPE; typedef struct { int en_motion_search; int dis_default_para; int hor_region_num; int ver_region_num; int large_mv_th; float large_mv_ratio_th; // include intra and large mv float non_zero_mv_ratio_th; // include intra, large mv and samll mv float large_sad_ratio_th; } RTVencMotionSearchParam; ///< same to VencMotionSearchParam typedef struct RTVencBitRateRange { int bitRateMax; //unit: kbps int bitRateMin; //unit: kbps } RTVencBitRateRange; typedef enum RT_VENC_VIDEO_FORMAT { RT_COMPONENT = 0, RT_PAL = 1, RT_NTSC = 2, RT_SECAM = 3, RT_MAC = 4, RT_DEFAULT = 5, } RT_VENC_VIDEO_FORMAT; /**< same to VENC_VIDEO_FORMAT [vencoder.h] */ typedef enum RT_VENC_COLOR_SPACE { RT_RESERVED0 = 0, RT_VENC_BT709 = 1, // include BT709-5, BT1361, IEC61966-2-1 IEC61966-2-4 RT_RESERVED1 = 2, RT_RESERVED2 = 3, RT_VENC_BT470 = 4, // include BT470-6_SystemM, RT_VENC_BT601 = 5, // include BT470-6_SystemB, BT601-6_625, BT1358_625, BT1700_625 RT_VENC_SMPTE_170M = 6, // include SMPTE_170M, BT601-6_525, BT1358_525, BT1700_NTSC RT_VENC_SMPTE_240M = 7, // include SMPTE_240M RT_VENC_YCC = 8, // include GENERIC_FILM RT_VENC_BT2020 = 9, // include BT2020 RT_VENC_ST_428 = 10, // include SMPTE_428-1 } RT_VENC_COLOR_SPACE; ///< same to VENC_COLOR_SPACE [vencoder.h] typedef struct RTVencH264VideoSignal { RT_VENC_VIDEO_FORMAT video_format; unsigned char full_range_flag; RT_VENC_COLOR_SPACE src_colour_primaries; RT_VENC_COLOR_SPACE dst_colour_primaries; } RTVencVideoSignal; ///< same to VencJpegVideoSignal [vencoder.h] typedef struct RTVencRect { int nLeft; int nTop; int nWidth; int nHeight; } RTVencRect; ///< same to VencRect typedef struct RTVencROIConfig { int bEnable; int index; int nQPoffset; unsigned char roi_abs_flag; RTVencRect sRect; } RTVencROIConfig; ///< same to VencROIConfig typedef enum { RTVENC_ISP_SCALER_0 = 0, //not scaler RTVENC_ISP_SCALER_EIGHTH = 1, //scaler 1/8 write back RTVENC_ISP_SCALER_HALF = 2, //scaler 1/2 write back RTVENC_ISP_SCALER_QUARTER = 3, //scaler 1/4 write back } RTeVencEncppScalerRatio; typedef struct { unsigned int bEnableWbYuv; unsigned int nWbBufferNum; unsigned int bEnableCrop; RTVencRect sWbYuvcrop; RTeVencEncppScalerRatio scalerRatio; } RTsWbYuvParam; typedef struct { unsigned int nThumbSize; unsigned char *pThumbBuf; unsigned int bWriteToFile; unsigned int nEncodeCnt; } RTVencThumbInfo; typedef struct { int enable_crop; RTVencRect s_crop_rect; } RTCropInfo; typedef enum { RTVENC_PRODUCT_STATIC_IPC = 0, RTVENC_PRODUCT_MOVING_IPC = 1, RTVENC_PRODUCT_DOORBELL = 2, RTVENC_PRODUCT_CDR = 3, RTVENC_PRODUCT_SDV = 4, RTVENC_PRODUCT_PROJECTION = 5, RTVENC_PRODUCT_UAV = 6, // Unmanned Aerial Vehicle RTVENC_PRODUCT_NUM, } RTeVencProductMode; ///< same to eVencProductMode #define MAX_ROI_AREA 8 typedef struct { unsigned int uMaxBitRate; //* kbps unsigned int nMovingTh; //range[1,31], 1:all frames are moving, // 31:have no moving frame, default: 20 int nQuality; //range[1,50], 1:worst quality, 10: common quality, 50:best quality int nIFrmBitsCoef; //range[1, 20], 1:worst quality, 20:best quality int nPFrmBitsCoef; //range[1, 50], 1:worst quality, 50:best quality } RTVencVbrParam; typedef struct rt_media_config_s { int channelId; // 码流通道, channel ID. equivalent to vipp number, scope[0,15]. int encodeType; //编码类型:0)h264 1)mjpeg 2)h265 int width; // resolution width int height;// resolution height int dst_width; ///< operate venc. encode output size. int dst_height; int fps; ///< operate isp. fps:1~30 int dst_fps; ///< operate isp. fps:1~30 int bitrate; ///< operate venc. h264 bitrate (kbps) int gop; ///< operate venc. h264 I帧间隔(秒),如果sdk有自动降帧逻辑,要保证I帧间隔不变。 int vbr; ///< operate venc. VBR=1, CBR=0 RTVencVbrParam vbr_param; int profile; //AW_Video_H264PROFILETYPE or AW_VideoH265PROFILETYPE int level; //AW_Video_H264LEVELTYPE or AW_Video_H265LEVELTYPE int drop_frame_num; //丢弃的图像帧数:如drop_frame_num = 5, 则前5帧图像丢弃掉,从第6帧开始编码 video_qp_range qp_range; VIDEO_OUTPUT_MODE output_mode; //int enable_bin_image; // 0: disable, 1: enable //int bin_image_moving_th;//range[1,31], 1:all frames are moving, // 31:have no moving frame, default: 20 //int enable_mv_info; // 0: disable, 1: enable //* about isp int enable_wdr; ///< config isp: set wdr, [0,1] RT_PIXELFORMAT_TYPE pixelformat;//* just set it to: RT_PIXELFORMAT_UNKNOWN RT_OUTPUTFORMAT_TYPE outputformat; //RTVencMotionSearchParam motion_search_param;// should setup the param if use motion search by encoder int enable_overlay; int jpg_quality; int bonline_channel; int share_buf_num; int jpg_mode;//0: jpg 1: mjpg RTVencBitRateRange bit_rate_range; RTVencVideoSignal venc_video_signal; RTeVencProductMode product_mode; //RTVencROIConfig sRoiConfig[MAX_ROI_AREA]; int demo_start; int enable_sharp; ///< operate venc. only config venc to enable sharp. int en_16_align_fill_data; int vin_buf_num; int breduce_refrecmem;//Can reduce memory usage and optimize memory efficiency. default set enable RTCropInfo s_crop_info; RTsWbYuvParam s_wbyuv_param; int vbv_buf_size; //all bitstream buf size. int vbv_thresh_size; //one bitstream max size. int enable_ve_isp_linkage; int skip_sharp_param_frame_num; int ve_encpp_sharp_atten_coef_per; //decrease encpp sharpness percent [0, 100]. 100 means no decrease int enable_aiisp; unsigned int tdm_rxbuf_cnt; } rt_media_config_s; typedef rt_media_config_s VideoInputConfig; typedef struct { int pix_x_bgn; int pix_x_end; int pix_y_bgn; int pix_y_end; int total_num; int intra_num; int large_mv_num; int small_mv_num; int zero_mv_num; int large_sad_num; int is_motion; } RTVencMotionSearchRegion; ///< same to VencMotionSearchRegion typedef struct { int total_region_num; int motion_region_num; RTVencMotionSearchRegion *region; } RTVencMotionSearchResult; ///< same to VencMotionSearchResult //#define ISP_REG_TBL_LENGTH 33 //typedef struct RTsEncppSharpParamStatic { // unsigned char ss_shp_ratio; // unsigned char ls_shp_ratio; // unsigned short ss_dir_ratio; // unsigned short ls_dir_ratio; // unsigned short ss_crc_stren; // unsigned char ss_crc_min; // unsigned short wht_sat_ratio; // unsigned short blk_sat_ratio; // unsigned char wht_slp_bt; // unsigned char blk_slp_bt; // // unsigned short sharp_ss_value[ISP_REG_TBL_LENGTH]; // unsigned short sharp_ls_value[ISP_REG_TBL_LENGTH]; // unsigned short sharp_hsv[46]; //} RTsEncppSharpParamStatic; // //typedef struct RTsEncppSharpParamDynamic { // unsigned short ss_ns_lw; // unsigned short ss_ns_hi; // unsigned short ls_ns_lw; // unsigned short ls_ns_hi; // unsigned char ss_lw_cor; // unsigned char ss_hi_cor; // unsigned char ls_lw_cor; // unsigned char ls_hi_cor; // unsigned short ss_blk_stren; // unsigned short ss_wht_stren; // unsigned short ls_blk_stren; // unsigned short ls_wht_stren; // unsigned char ss_avg_smth; // unsigned char ss_dir_smth; // unsigned char dir_smth[4]; // unsigned char hfr_smth_ratio; // unsigned short hfr_hf_wht_stren; // unsigned short hfr_hf_blk_stren; // unsigned short hfr_mf_wht_stren; // unsigned short hfr_mf_blk_stren; // unsigned char hfr_hf_cor_ratio; // unsigned char hfr_mf_cor_ratio; // unsigned short hfr_hf_mix_ratio; // unsigned short hfr_mf_mix_ratio; // unsigned char hfr_hf_mix_min_ratio; // unsigned char hfr_mf_mix_min_ratio; // unsigned short hfr_hf_wht_clp; // unsigned short hfr_hf_blk_clp; // unsigned short hfr_mf_wht_clp; // unsigned short hfr_mf_blk_clp; // unsigned short wht_clp_para; // unsigned short blk_clp_para; // unsigned char wht_clp_slp; // unsigned char blk_clp_slp; // unsigned char max_clp_ratio; // // unsigned short sharp_edge_lum[ISP_REG_TBL_LENGTH]; //} RTsEncppSharpParamDynamic; // //typedef struct RTsEncppSharpParam { // RTsEncppSharpParamDynamic *pDynamicParam; // RTsEncppSharpParamStatic *pStaticParam; //} RTsEncppSharpParam; // //typedef struct RTsEncppSharp { // int bsharp; // RTsEncppSharpParam sEncppSharpParam; //} RTsEncppSharp; typedef struct { unsigned int sum_mad; unsigned int sum_qp; unsigned long long sum_sse; unsigned int avg_sse; } RTVencMBSumInfo; typedef enum RTVENC_SUPERFRAME_MODE { RT_VENC_SUPERFRAME_NONE, RT_VENC_SUPERFRAME_DISCARD, RT_VENC_SUPERFRAME_REENCODE, } RTVENC_SUPERFRAME_MODE; ///< same to VENC_SUPERFRAME_MODE typedef struct RTVencSuperFrameConfig { RTVENC_SUPERFRAME_MODE eSuperFrameMode; unsigned int nMaxIFrameBits; unsigned int nMaxPFrameBits; int nMaxRencodeTimes; float nMaxP2IFrameBitsRatio; } RTVencSuperFrameConfig; ///< same to VencSuperFrameConfig typedef enum RT_POWER_LINE_FREQUENCY{ RT_FREQUENCY_DISABLED = 0, RT_FREQUENCY_50HZ = 1, RT_FREQUENCY_60HZ = 2, RT_FREQUENCY_AUTO = 3, } RT_POWER_LINE_FREQUENCY; typedef enum RT_AE_METERING_MODE{ RT_AE_METERING_MODE_AVERAGE = 0, RT_AE_METERING_MODE_CENTER = 1, RT_AE_METERING_MODE_SPOT = 2, RT_AE_METERING_MODE_MATRIX = 3, } RT_AE_METERING_MODE; typedef enum { /*isp_ctrl*/ RT_ISP_CTRL_MODULE_EN = 0, RT_ISP_CTRL_DIGITAL_GAIN, RT_ISP_CTRL_PLTMWDR_STR, RT_ISP_CTRL_DN_STR, RT_ISP_CTRL_3DN_STR, RT_ISP_CTRL_HIGH_LIGHT, RT_ISP_CTRL_BACK_LIGHT, RT_ISP_CTRL_WB_MGAIN, RT_ISP_CTRL_AGAIN_DGAIN, RT_ISP_CTRL_COLOR_EFFECT, RT_ISP_CTRL_AE_ROI, RT_ISP_CTRL_AF_METERING, RT_ISP_CTRL_COLOR_TEMP, RT_ISP_CTRL_EV_IDX, RT_ISP_CTRL_MAX_EV_IDX, RT_ISP_CTRL_PLTM_HARDWARE_STR, RT_ISP_CTRL_ISO_LUM_IDX, RT_ISP_CTRL_COLOR_SPACE, RT_ISP_CTRL_VENC2ISP_PARAM, RT_ISP_CTRL_NPU_NR_PARAM, RT_ISP_CTRL_TOTAL_GAIN, RT_ISP_CTRL_AE_EV_LV, RT_ISP_CTRL_AE_EV_LV_ADJ, RT_ISP_CTRL_AE_WEIGHT_LUM, RT_ISP_CTRL_AE_LOCK, RT_ISP_CTRL_AE_FACE_CFG, RT_ISP_CTRL_MIPI_SWITCH, RT_ISP_CTRL_AE_TABLE, RT_ISP_CTRL_AE_STATS, RT_ISP_CTRL_IR_STATUS, RT_ISP_CTRL_IR_AWB_GAIN, RT_ISP_CTRL_READ_BIN_PARAM, RT_ISP_CTRL_AE_ROI_TARGET, RT_ISP_CTRL_AI_ISP, } RT_ISP_CTRL_CFG_IDS; ///< ref to hw_isp_ctrl_cfg_ids typedef enum { /*tunning_ctrl*/ RT_ISP_CTRL_GET_SENSOR_CFG = 0, RT_ISP_CTRL_RPBUF_INIT, RT_ISP_CTRL_RPBUF_RELEASE, RT_ISP_CTRL_GET_ISP_PARAM, RT_ISP_CTRL_SET_ISP_PARAM, RT_ISP_CTRL_GET_LOG, RT_ISP_CTRL_GET_3A_STAT, } RT_TUNNING_CTRL_IDS; //ref to hw_tunning_ctrl_ids typedef struct { int grey; // 0 彩色模式 1 黑白模式 int ir_on; int ir_flash_on; } RTIrParam; typedef struct { int exp_val; int exp_mid_val; int exp_short_val; int gain_val; int gain_mid_val; int gain_short_val; int r_gain; int b_gain; } RTIspExpGain; typedef struct { unsigned int min_exp;//us unsigned int max_exp; unsigned int min_gain; unsigned int max_gain; unsigned int min_iris; unsigned int max_iris; } RTIspAeTable; ///< ref to struct ae_table typedef struct { RTIspAeTable ae_tbl[10]; int length; int ev_step; int shutter_shift; } RTIspAeTableInfo; ///< ref to struct ae_table_info typedef struct { int awb_rgain_ir; int awb_bgain_ir; } RTIspIrAwbGain; ///< same to struct isp_ir_awb_gain typedef struct { int x1; int y1; int x2; int y2; } RTIspH3aCoorWin; ///< same to struct isp_h3a_coor_win typedef struct { unsigned short enable; unsigned short force_ae_target; RTIspH3aCoorWin coor; } RTIspAeRoiAttr; ///< same to tstruct isp_ae_roi_attr typedef struct { unsigned char is_overflow; unsigned short moving_level_table[484]; } RTEncMovingLevelInfo; ///< same to struct enc_MovingLevelInfo typedef struct { RTIspH3aCoorWin face_ae_coor[RT_AE_FACE_MAX_NUM]; unsigned char enable; unsigned char vaild_face_cnt; short face_ae_tolerance; short face_ae_speed; short face_ae_target; short face_ae_delay_cnt; unsigned short face_up_percent; unsigned short face_down_percent; unsigned short ae_face_block_num_thrd; unsigned short ae_face_block_weight; unsigned short ae_over_face_max_exp_control; unsigned short ae_face_win_weight[RT_AE_FACE_WIN_WEIGHT_LENGTH]; int ae_face_pos_weight[RT_AE_FACE_POS_WEIGHT_LENGTH]; } RTFaceAeCfg; typedef enum { RT_MIPI_SWITCH_A = 0, RT_MIPI_SWITCH_B = 1, RT_MIPI_SWITCH_MAX, } RTMipiSwitchChoiceType; typedef enum { RT_MIPI_GET_SWITCH = 0, RT_MIPI_SET_SWITCH = 1, RT_MIPI_CTRL_MAX, } RTMipiSwitchCtrlType; typedef struct { RTMipiSwitchCtrlType switch_ctrl; unsigned int mipi_switch_status; unsigned int comp_ratio; unsigned int exp_comp; unsigned int gain_comp; unsigned int drop_frame_num; unsigned long long time_stamp; } RTSensorMipiSwitchEntity; typedef struct { unsigned char enable_3d_filter; unsigned char adjust_pix_level_enable; // adjustment of coef pix level enable unsigned char smooth_filter_enable; //* 3x3 smooth filter enable unsigned char max_pix_diff_th; //* range[0~31]: maximum threshold of pixel difference unsigned char max_mad_th; //* range[0~63]: maximum threshold of mad unsigned char max_mv_th; //* range[0~63]: maximum threshold of motion vector unsigned char min_coef; //* range[0~16]: minimum weight of 3d filter unsigned char max_coef; //* range[0~16]: maximum weight of 3d filter, } RTs3DfilterParam; typedef struct { unsigned char enable_2d_filter; unsigned char filter_strength_uv; //* range[0~255], 0 means close 2d filter, advice: 32 unsigned char filter_strength_y; //* range[0~255], 0 means close 2d filter, advice: 32 unsigned char filter_th_uv; //* range[0~15], advice: 2 unsigned char filter_th_y; //* range[0~15], advice: 2 } RTs2DfilterParam; typedef struct RTVencH264VideoTiming { unsigned long num_units_in_tick; unsigned long time_scale; unsigned int fixed_frame_rate_flag; } RTVencH264VideoTiming; typedef struct RTVencH265TimingS { //0:stream without timing info; 1:stream with timing info unsigned char timing_info_present_flag; unsigned int num_units_in_tick; //time_scale/frameRate unsigned int time_scale; //1second is average divided by time_scale unsigned int num_ticks_poc_diff_one; //num ticks of diff frame } RTVencH265TimingS; typedef struct { int bEnable; int nBlockNumber; } RTVencCyclicIntraRefresh; typedef struct { int d2d_level; //[1,1024], 256 means 1X int d3d_level; //[1,1024], 256 means 1X RTEncMovingLevelInfo mMovingLevelInfo; } RTEncVencVe2IspParam; ///< same to struct enc_VencVe2IspParam typedef struct { unsigned short cfg_id; ///< ref to RT_ISP_CTRL_CFG_IDS unsigned short update_flag; int ev_digital_gain; int pltmwdr_level; int denoise_level; int tdf_level; int ir_status; int ae_ev_idx; int ae_max_ev_idx; int ae_lum_idx; int ae_ev_lv; int ae_ev_lv_adj; int ae_lock; int awb_color_temp; int ae_weight_lum; RTIspIrAwbGain awb_ir_gain; RTIspAeTableInfo *ae_table; char path[100]; RTIspAeRoiAttr ae_roi_area; unsigned char ae_stat_avg[432]; RTEncVencVe2IspParam VencVe2IspParam; unsigned char ai_isp_en; unsigned char ai_isp_update; RTFaceAeCfg ae_face_info; RTSensorMipiSwitchEntity mipi_switch_info; } RTIspCfgAttrData; ///< same to struct isp_cfg_attr_data typedef struct { RTIspCfgAttrData isp_attr_cfg; } RTIspCtrlAttr; typedef struct { unsigned char isp_id; unsigned short sensor_width; unsigned short sensor_height; unsigned short act_fps; unsigned char wdr; } RTTunningSensorCfg; //< same to struct tunning_sensor_cfg typedef struct { unsigned short cfg_id; char path[100]; RTTunningSensorCfg sensor_cfg; } RTTunningCtlData; // < same to tunning_ctl_data typedef struct { unsigned int width_max; unsigned int height_max; unsigned int width_min; unsigned int height_min; } RTSensorResolution; #define MAX_ISP_ORL_NUM (16) struct orl_win { unsigned int left; unsigned int top; unsigned int width; unsigned int height; unsigned int rgb_orl; }; typedef struct { unsigned char on; unsigned char orl_cnt; unsigned int orl_width; struct orl_win orl_win[MAX_ISP_ORL_NUM]; } RTIspOrl; typedef enum RTeGdcPerspFunc { RT_Gdc_Persp_Only, RT_Gdc_Persp_LDC } RTeGdcPerspFunc; ///< same to eGdcPerspFunc typedef enum RTeGdcLensDistModel { RT_Gdc_DistModel_WideAngle, RT_Gdc_DistModel_FishEye } RTeGdcLensDistModel; ///< same to eGdcLensDistModel typedef enum RTeGdcMountType { RT_Gdc_Mount_Top, RT_Gdc_Mount_Wall, RT_Gdc_Mount_Bottom } RTeGdcMountType; ///< same to eGdcMountType typedef enum RTeGdcWarpType { RT_Gdc_Warp_LDC, RT_Gdc_Warp_Pano180, RT_Gdc_Warp_Pano360, RT_Gdc_Warp_Normal, RT_Gdc_Warp_Fish2Wide, RT_Gdc_Warp_Perspective, RT_Gdc_Warp_BirdsEye, RT_Gdc_Warp_User } RTeGdcWarpType; ///< same to eGdcWarpType typedef struct { unsigned char bGDC_en; RTeGdcWarpType eWarpMode; RTeGdcMountType eMountMode; unsigned char bMirror; unsigned int calib_widht; unsigned int calib_height; float fx; float fy; float cx; float cy; float fx_scale; float fy_scale; float cx_scale; float cy_scale; RTeGdcLensDistModel eLensDistModel; float distCoef_wide_ra[3]; float distCoef_wide_ta[2]; float distCoef_fish_k[4]; int centerOffsetX; int centerOffsetY; int rotateAngle; int radialDistortCoef; int trapezoidDistortCoef; int fanDistortCoef; int pan; int tilt; int zoomH; int zoomV; int scale; int innerRadius; float roll; float pitch; float yaw; RTeGdcPerspFunc perspFunc; float perspectiveProjMat[9]; int birdsImg_width; int birdsImg_height; float mountHeight; float roiDist_ahead; float roiDist_left; float roiDist_right; float roiDist_bottom; int peaking_en; int peaking_clamp; int peak_m; int th_strong_edge; int peak_weights_strength; } RTsGdcParam; ///< same to sGdcParam typedef enum RTeVeLbcMode { RT_LBC_MODE_DISABLE = 0, RT_LBC_MODE_1_5X = 1, RT_LBC_MODE_2_0X = 2, RT_LBC_MODE_2_5X = 3, RT_LBC_MODE_NO_LOSSY = 4, } RTeVeLbcMode; ///< same to eVeLbcMode typedef struct { int en_weak_text_th; float weak_text_th; } RTVenWeakTextTh; typedef struct { float weak_text_th; } RTDynamicProcSettings; typedef struct { int pix_x_bgn; int pix_x_end; int pix_y_bgn; int pix_y_end; int total_num; int zero_mv_num; int is_possible_static; int is_really_static; float zero_mv_rate; } RTVencRegionD3DRegion; ///< same to VencRegionD3DRegion typedef struct sRTVencRegionD3DResult RTVencRegionD3DResult; ///< same to VencRegionD3DResult struct sRTVencRegionD3DResult{ int total_region_num; int static_region_num; RTVencRegionD3DRegion *region; RTVencRegionD3DResult **prev; RTVencRegionD3DResult **next; }; typedef struct { int en_region_d3d; int dis_default_para; int result_num; int hor_region_num; int ver_region_num; int hor_expand_num; int ver_expand_num; int lv_weak_th[9]; float zero_mv_rate_th[3]; unsigned char chroma_offset; unsigned char static_coef[3]; //* fallow by zero_mv_rate unsigned char motion_coef[4]; //* fallow by MoveStatus } RTVencRegionD3DParam; ///< same to VencRegionD3DParam typedef struct { unsigned char reserve_zero : 2; unsigned char constraint_5 : 1; unsigned char constraint_4 : 1; unsigned char constraint_3 : 1; unsigned char constraint_2 : 1; unsigned char constraint_1 : 1; unsigned char constraint_0 : 1; } RTVencH264ConstraintFlag; ///< same to VencH264ConstraintFlag typedef struct { int en_d2d_limit; int d2d_level[6]; } RTVencVe2IspD2DLimit; ///< same to VencVe2IspD2DLimit typedef struct { unsigned int en_force_conf; unsigned int left_offset; unsigned int right_offset; unsigned int top_offset; unsigned int bottom_offset; } RTVencForceConfWin; ///< same to VencForceConfWin typedef struct { int dis_default_d2d; int d2d_min_lv_th; int d2d_max_lv_th; int d2d_min_lv_level; int d2d_max_lv_level; int dis_default_d3d; int d3d_min_lv_th; int d3d_max_lv_th; int d3d_min_lv_level; int d3d_max_lv_level; } RTVencRotVe2Isp; ///< same to VencRotVe2Isp typedef struct { unsigned char *pBuffer; unsigned int nBufLen; unsigned int nDataLen; unsigned int nType; } RTVencSeiData; ///< same to VencSeiData typedef struct { unsigned int nSeiNum; RTVencSeiData *pSeiData; } RTVencSeiParam; ///< same to VencSeiParam #define RT_MAX_INSERT_FRAME_LEN (196569) typedef enum { RT_BUF_IDLE, RT_BUF_STANDBY, RT_BUF_OCCUPY, } RT_VENC_BUF_STATUS; ///< same to VENC_BUF_STATUS typedef struct { unsigned char *pBuffer; unsigned int nBufLen; unsigned int nDataLen; unsigned int nFrameRate; RT_VENC_BUF_STATUS eStatus; } RTVencInsertData; ///< same to VencInsertData // notify callback event to AWVideoInput_cxt, using netlink. typedef enum { RTCB_EVENT_VENC_DROP_FRAME = 0, } RTCbEventType; typedef struct { RTCbEventType eEventType; int nData1; int nData2; } RTCbEvent; /** generic netlink rt_media family definition. */ enum { RT_MEDIA_CMD_UNSPEC = 0, /* Reserved */ RT_MEDIA_CMD_SEND, /* user->kernel, send some infos such as channelId */ RT_MEDIA_CMD_CB_EVENT, /* kernel->user, send rt_media callback event to AWVideoInput */ __RT_MEDIA_CMD_MAX, }; #define RT_MEDIA_CMD_MAX (__RT_MEDIA_CMD_MAX - 1) /** rt_media family netlink attribute definition. */ enum { RT_MEDIA_CMD_ATTR_UNSPEC = 0, RT_MEDIA_CMD_ATTR_CHNID, //record channel id, type = int. RT_MEDIA_CMD_ATTR_RTCBEVENT, //type = RTCbEvent __RT_MEDIA_CMD_ATTR_MAX, }; #define RT_MEDIA_CMD_ATTR_MAX (__RT_MEDIA_CMD_ATTR_MAX - 1) typedef enum { RT_VENC_CAMERA_ADAPTIVE_STATIC = 0, RT_VENC_CAMERA_FORCE_STATIC = 1, RT_VENC_CAMERA_FORCE_MOVING = 2, RT_VENC_CAMERA_ADAPTIVE_MOVING_AND_STATIC = 3, RT_VENC_CAMERA_STATUS_NUM } RT_VENC_CAMERA_MOVE_STATUS; typedef struct { int dis_default_para; int mode; int en_gop_clip; float gop_bit_ratio_th[3]; float coef_th[5][2]; } RT_VENC_TARGET_BITS_CLIP_PARAM; /* < same to VencTargetBitsClipParam > */ typedef struct { int flag; //0: print; 1: save to file; others: reserve for future use char *path; //path string unsigned int len; //path string length } VIN_ISP_REG_GET_CFG; /** NETLINK_GENERIC related info RT_MEDIA_GENL_NAME: rt_media generic netlink family name, string_length + 1 <= GENL_NAMSIZ. RT_MEDIA_GENL_VERSION: rt_media generic netlink family version */ #define RT_MEDIA_GENL_NAME "genl-rt_media" #define RT_MEDIA_GENL_VERSION 0x1 #endif