/* * Copyright (c) 2021 Rockchip, Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __RKADK_PARAM_H__ #define __RKADK_PARAM_H__ #include "rkadk_common.h" #include "rkadk_media_comm.h" #include "rkadk_record.h" #include "rkadk_platform_param.h" #include #include #ifdef __cplusplus extern "C" { #endif /* version */ #define RKADK_PARAM_VERSION "1.4" #define RKADK_VOLUME_LEN 3 /* audio default parameters */ /* g711u must be 16K, g711a can be either 8K or 16K */ #define AUDIO_SAMPLE_RATE 16000 #define AUDIO_DEVICE_CHANNEL 2 #define AUDIO_CHANNEL 2 #define AUDIO_MIC_TYPE 0 #define AUDIO_BIT_REAT 160000 #define AUDIO_FRAME_COUNT 1152 #define AUDIO_BIT_WIDTH AUDIO_BIT_WIDTH_16 #define AI_DEPTH 1 #if defined(RV1106_1103) || defined(RV1103B) #define AUDIO_DEVICE_NAME "hw:0,0" #elif RK3506 #define AUDIO_DEVICE_NAME "hw:0,0" #else #define AUDIO_DEVICE_NAME "default" #endif #define AI_VQE_CONFIG_PATH "/oem/usr/share/vqefiles/config_aivqe.json" /* video default parameters */ #define VIDEO_GOP 25 #define VIDEO_FRAME_RATE 25 #define VIDEO_PROFILE 100 #define VIDEO_BUFFER_COUNT 2 #define STREAM_VIDEO_WIDTH 1280 #define STREAM_VIDEO_HEIGHT 720 #define RECORD_VIDEO_WIDTH SENSOR_MAX_WIDTH #define RECORD_VIDEO_HEIGHT SENSOR_MAX_HEIGHT #define RECORD_VIDEO_WIDTH_S STREAM_VIDEO_WIDTH #define RECORD_VIDEO_HEIGHT_S STREAM_VIDEO_HEIGHT #define PHOTO_VIDEO_WIDTH SENSOR_MAX_WIDTH #define PHOTO_VIDEO_HEIGHT SENSOR_MAX_HEIGHT #define DISP_WIDTH 720 #define DISP_HEIGHT 1280 /* thumb default parameters */ #define THUMB_WIDTH 320 #define THUMB_HEIGHT 180 #define THUMB_PHOTO_VENC_CHN 5 #define THUMB_RECORD_MAIN_VENC_CHN 6 #define THUMB_RECORD_SUB_VENC_CHN 7 #define THUMB_VPSS_GRP 1 #define THUMB_VPSS_CHN 0 #define RECORD_AI_CHN 0 #define RECORD_AENC_CHN 0 #define PREVIEW_AI_CHN RECORD_AI_CHN #define PREVIEW_AENC_CHN RECORD_AENC_CHN #define LIVE_AI_CHN RECORD_AI_CHN #define LIVE_AENC_CHN RECORD_AENC_CHN /* vo default parameters */ #define VO_DEVICE 0 #define VOP_LAYER 0 /* setting file path */ #define RKADK_DEFPARAM_PATH "/oem/usr/etc/rkadk_defsetting.ini" #define RKADK_DEFPARAM_PATH_SENSOR_PREFIX "/oem/usr/etc/rkadk_defsetting_sensor" #define RKADK_PARAM_PATH "/data/rkadk/rkadk_setting.ini" #define RKADK_PARAM_PATH_SENSOR_PREFIX "/data/rkadk/rkadk_setting_sensor" /* Resolution */ #define RKADK_WIDTH_480P 848 #define RKADK_HEIGHT_480P 480 #define RKADK_WIDTH_720P 1280 #define RKADK_HEIGHT_720P 720 #define RKADK_WIDTH_1080P 1920 #define RKADK_HEIGHT_1080P 1080 #define RKADK_WIDTH_1296P 2304 #define RKADK_HEIGHT_1296P 1296 #define RKADK_WIDTH_1440P 2560 #define RKADK_HEIGHT_1440P 1440 #define RKADK_WIDTH_1520P 2688 #define RKADK_HEIGHT_1520P 1520 #define RKADK_WIDTH_1600P 2560 #define RKADK_HEIGHT_1600P 1600 #define RKADK_WIDTH_1620P 2880 #define RKADK_HEIGHT_1620P 1616 #define RKADK_WIDTH_1944P 2592 #define RKADK_HEIGHT_1944P 1944 #define RKADK_WIDTH_2160P 3840 #define RKADK_HEIGHT_2160P 2160 #define RKADK_WIDTH_3456P 4608 #define RKADK_HEIGHT_3456P 3456 #define RKADK_WIDTH_4000P 6000 #define RKADK_HEIGHT_4000P 4000 #define RKADK_WIDTH_4480P 6720 #define RKADK_HEIGHT_4480P 4480 #define RKADK_WIDTH_4275P 7600 #define RKADK_HEIGHT_4275P 4275 #define RKADK_WIDTH_4320P 7680 #define RKADK_HEIGHT_4320P 4320 #define RKADK_WIDTH_3672P 6528 #define RKADK_HEIGHT_3672P 3672 /* Resolution type */ typedef enum { RKADK_RES_480P = 0, /* 848*480 */ RKADK_RES_720P, /* 1280*720 */ RKADK_RES_1080P, /* 1920*1080 */ RKADK_RES_1296P, /* 2304*1296 */ RKADK_RES_1440P, /* 2560*1440 */ RKADK_RES_1520P, /* 2688*1520 */ RKADK_RES_1600P, /* 2560*1600 */ RKADK_RES_1620P, /* 2880*1616, height 8 alignment */ RKADK_RES_1944P, /* 2592*1944 */ RKADK_RES_2160P, /* 3840*2160 */ RKADK_RES_3456P, /* 4608*3456 */ RKADK_RES_4000P, /* 6000*4000 */ RKADK_RES_4480P, /* 6720*4480 */ RKADK_RES_4275P, /* 7600*4275 */ RKADK_RES_4320P, /* 7680*4320 */ RKADK_RES_3672P, /* 6528*3672 */ RKADK_RES_BUTT, } RKADK_PARAM_RES_E; /* config param */ typedef enum { // CAM Dependent Param RKADK_PARAM_TYPE_FPS, /* framerate */ RKADK_PARAM_TYPE_GOP, /* gop */ RKADK_PARAM_TYPE_RES, /* specify RKADK_PARAM_RES_E(record_main) */ RKADK_PARAM_TYPE_PHOTO_RES, /* specify RKADK_PARAM_RES_E(photo) */ RKADK_PARAM_TYPE_STREAM_RES, /* specify RKADK_PARAM_RES_CFG_S(record_main, record_sub, photo, stream, live) */ RKADK_PARAM_TYPE_CODEC_TYPE, /* specify RKADK_PARAM_CODEC_CFG_S */ RKADK_PARAM_TYPE_BITRATE, /* specify RKADK_PARAM_BITRATE_S */ RKADK_PARAM_TYPE_FLIP, /* bool */ RKADK_PARAM_TYPE_MIRROR, /* bool */ RKADK_PARAM_TYPE_LDC, /* ldc level [0,255] */ RKADK_PARAM_TYPE_ANTIFOG, /* antifog value, [0,10] */ RKADK_PARAM_TYPE_WDR, /* wdr level, [0,10] */ RKADK_PARAM_TYPE_HDR, /* 0: normal, 1: HDR2, 2: HDR3, [0,2] */ RKADK_PARAM_TYPE_RECORD_TYPE, /* specify RKADK_REC_TYPE_E */ RKADK_PARAM_TYPE_RECORD_TIME, /* specify RKADK_PARAM_REC_TIME_S, record time(s) */ RKADK_PARAM_TYPE_PRE_RECORD_TIME, /* pre record time, unit in second(s) */ RKADK_PARAM_TYPE_PRE_RECORD_MODE, /* pre record mode, specify MUXER_PRE_RECORD_MODE_E */ RKADK_PARAM_TYPE_SPLITTIME, /* specify RKADK_PARAM_REC_TIME_S, manual splite time(s) */ RKADK_PARAM_TYPE_FILE_CNT, /* record file count, maximum RECORD_FILE_NUM_MAX */ RKADK_PARAM_TYPE_LAPSE_INTERVAL, /* specify RKADK_PARAM_REC_TIME_S, lapse interval(s) */ RKADK_PARAM_TYPE_LAPSE_MULTIPLE, /* lapse multiple */ RKADK_PARAM_TYPE_JPEG_SLICE, /* enable/disable jpeg slice */ RKADK_PARAM_TYPE_SLICE_HEIGHT, /* set jpeg slice height */ RKADK_PARAM_TYPE_INPUT_FMT, /* set vi input format */ RKADK_PARAM_TYPE_INPUT_BUFCNT, /* set vi input format */ RKADK_PARAM_TYPE_ENABLE_AUDIO, /* enable record audio */ // COMM Dependent Param RKADK_PARAM_TYPE_REC_MUTE, /* record audio mute, bool */ RKADK_PARAM_TYPE_VOLUME, /* speaker volume, [0,100] */ RKADK_PARAM_TYPE_MIC_VOLUME, /* mic volume, [0,100] */ RKADK_PARAM_TYPE_BUTT } RKADK_PARAM_TYPE_E; typedef struct { RKADK_STREAM_TYPE_E enStreamType; RKADK_PARAM_RES_E enResType; } RKADK_PARAM_RES_CFG_S; typedef struct { RKADK_STREAM_TYPE_E enStreamType; RKADK_CODEC_TYPE_E enCodecType; } RKADK_PARAM_CODEC_CFG_S; typedef struct { RKADK_STREAM_TYPE_E enStreamType; RKADK_U32 u32Bitrate; } RKADK_PARAM_BITRATE_S; typedef struct { RKADK_STREAM_TYPE_E enStreamType; RKADK_U32 time; } RKADK_PARAM_REC_TIME_S; typedef struct { RKADK_STREAM_TYPE_E enStreamType; RKADK_U32 u32Framerate; } RKADK_PARAM_FPS_S; typedef struct { RKADK_STREAM_TYPE_E enStreamType; RKADK_U32 u32Gop; } RKADK_PARAM_GOP_S; typedef struct { RKADK_STREAM_TYPE_E enStreamType; const char *format; } RKADK_PARAM_INPUT_FMT_S; typedef struct { RKADK_STREAM_TYPE_E enStreamType; RKADK_U32 u32BufCnt; } RKADK_PARAM_INPUT_BUFCNT_S; typedef struct tagRKADK_PARAM_VERSION_S { char version[RKADK_BUFFER_LEN]; } RKADK_PARAM_VERSION_S; typedef struct tagRKADK_PARAM_VI_CFG_S { RKADK_U32 chn_id; char device_name[MAX_VI_ENTITY_NAME_LEN]; RKADK_U32 buf_cnt; RKADK_U32 width; RKADK_U32 height; RKADK_U32 depth; char pix_fmt[RKADK_PIX_FMT_LEN]; /* options: NV12/NV16/YUYV/FBC0/FBC2 */ /* options: NONE/RECORD_MAIN/RECORD_SUB/PREVIEW/PHOTO/LIVE/DISP */ char module[RKADK_BUFFER_LEN]; } RKADK_PARAM_VI_CFG_S; typedef struct tagRKADK_PARAM_COMM_CFG_S { RKADK_U32 sensor_count; bool rec_mute; /* false:disable record audio, true:enable */ RKADK_U32 speaker_volume; /* speaker volume, [0,100] */ RKADK_U32 mic_volume; /* mic input volume, [0,100] */ RKADK_U32 vpss_devcie; /* 0: GPU device, 1: RGA device */ } RKADK_PARAM_COMM_CFG_S; typedef struct tagRKADK_PARAM_SENSOR_CFG_S { bool used_isp; RKADK_U32 max_width; RKADK_U32 max_height; RKADK_U32 framerate; bool flip; /* FLIP */ bool mirror; /* MIRROR */ bool enable_wrap; RKADK_U32 wrap_buf_line; RKADK_U32 ldc; /* LDC level, [0,255]*/ RKADK_U32 wdr; /* WDR level, [0,10] */ RKADK_U32 hdr; /* hdr, [0: normal, 1: HDR2, 2: HDR3] */ RKADK_U32 antifog; /* antifog value, [0,10] */ } RKADK_PARAM_SENSOR_CFG_S; typedef struct tagRKADK_PARAM_AUDIO_CFG_S { char ai_audio_node[RKADK_BUFFER_LEN]; RKADK_U32 ai_depth; AUDIO_BIT_WIDTH_E bit_width; RKADK_U32 channels; RKADK_U32 mic_type; RKADK_U32 samplerate; RKADK_U32 samples_per_frame; RKADK_U32 bitrate; RKADK_VQE_MODE_E vqe_mode; char vqe_config_path[RKADK_PATH_LEN]; RKADK_CODEC_TYPE_E codec_type; } RKADK_PARAM_AUDIO_CFG_S; typedef struct tagRKADK_PARAM_REC_TIME_CFG_S { RKADK_U32 record_time; RKADK_U32 splite_time; RKADK_U32 lapse_interval; } RKADK_PARAM_REC_TIME_CFG_S; typedef struct tagRKADK_PARAM_REC_CFG_S { bool enable_audio; RKADK_REC_TYPE_E record_type; RKADK_MUXER_FILE_TYPE_E file_type; RKADK_U32 pre_record_time; RKADK_MUXER_PRE_RECORD_MODE_E pre_record_mode; RKADK_U32 lapse_multiple; RKADK_U32 file_num; RKADK_PARAM_REC_TIME_CFG_S record_time_cfg[RECORD_FILE_NUM_MAX]; RKADK_PARAM_VENC_ATTR_S attribute[RECORD_FILE_NUM_MAX]; RKADK_PRAAM_VI_ATTR_S vi_attr[RECORD_FILE_NUM_MAX]; } RKADK_PARAM_REC_CFG_S; typedef struct tagRKADK_PARAM_STREAM_CFG_S { RKADK_PARAM_VENC_ATTR_S attribute; RKADK_PRAAM_VI_ATTR_S vi_attr; } RKADK_PARAM_STREAM_CFG_S; typedef struct tagRKADK_PARAM_PHOTO_CFG_S { RKADK_U32 max_width; RKADK_U32 max_height; RKADK_U32 image_width; RKADK_U32 image_height; RKADK_U32 venc_chn; bool enable_vpss; RKADK_U32 vpss_grp; RKADK_U32 vpss_chn; bool post_aiisp; bool enable_combo; RKADK_U32 combo_venc_chn; RKADK_U32 qfactor; bool jpeg_slice; RKADK_U32 slice_height; RKADK_U32 max_slice_width; RKADK_U32 max_slice_height; RKADK_PRAAM_VI_ATTR_S vi_attr; } RKADK_PARAM_PHOTO_CFG_S; typedef struct tagRKADK_PARAM_DISP_CFG_S { RKADK_U32 x; RKADK_U32 y; RKADK_U32 width; RKADK_U32 height; RKADK_U32 frame_rate; RKADK_U32 rotation; RKADK_U32 vpss_grp; RKADK_U32 vpss_chn; char img_type[RKADK_PIX_FMT_LEN]; /* specify PIXEL_FORMAT_E: NV12/RGB888... */ char intf_type[RKADK_INTF_FMT_LEN]; /* specify RKADK_VO_INTF_TYPE_E */ char splice_mode[RKADK_SPLICE_MODE_LEN]; /* vo layer splice mode: RGA/GPU/BYPASS */ RKADK_U32 vo_device; RKADK_U32 vo_layer; RKADK_U32 vo_chn; RKADK_U32 layer_buflen; RKADK_PRAAM_VI_ATTR_S vi_attr; } RKADK_PARAM_DISP_CFG_S; typedef struct tagRKADK_PARAM_THUMB_CFG_S { // 4 alignment RKADK_U32 thumb_width; // 2 alignment RKADK_U32 thumb_height; // photo RKADK_U32 photo_venc_chn; // record RKADK_U32 record_main_venc_chn; RKADK_U32 record_sub_venc_chn; RKADK_U32 vpss_grp; RKADK_U32 vpss_chn; RKADK_U32 qfactor; RKADK_PRAAM_VI_ATTR_S vi_attr; } RKADK_PARAM_THUMB_CFG_S; typedef struct tagRKADK_PARAM_MEDIA_CFG_S { RKADK_PARAM_VI_CFG_S stViCfg[RKADK_ISPP_VI_NODE_CNT]; RKADK_PARAM_REC_CFG_S stRecCfg; RKADK_PARAM_STREAM_CFG_S stStreamCfg; RKADK_PARAM_STREAM_CFG_S stLiveCfg; RKADK_PARAM_PHOTO_CFG_S stPhotoCfg; RKADK_PARAM_DISP_CFG_S stDispCfg; RKADK_PARAM_THUMB_CFG_S stThumbCfg; } RKADK_PARAM_MEDIA_CFG_S; typedef struct tagPARAM_CFG_S { RKADK_PARAM_VERSION_S stVersion; RKADK_PARAM_COMM_CFG_S stCommCfg; RKADK_PARAM_AUDIO_CFG_S stAudioCfg; RKADK_PARAM_SENSOR_CFG_S stSensorCfg[RKADK_MAX_SENSOR_CNT]; RKADK_PARAM_MEDIA_CFG_S stMediaCfg[RKADK_MAX_SENSOR_CNT]; } RKADK_PARAM_CFG_S; /* Param Context */ typedef struct { bool bInit; /* module init status */ pthread_mutex_t mutexLock; /* param lock, protect pstCfg */ RKADK_PARAM_CFG_S stCfg; /* param config */ char defPath[RKADK_PATH_LEN]; char defSensorPath[RKADK_MAX_SENSOR_CNT][RKADK_PATH_LEN]; char path[RKADK_PATH_LEN]; char sensorPath[RKADK_MAX_SENSOR_CNT][RKADK_PATH_LEN]; } RKADK_PARAM_CONTEXT_S; /** * @brief Parameter Module Init * @param[in] globalSetting: global setting ini file path * @param[in] sesnorSettingArrary: sensor setting ini file path arrary * @return 0 success,non-zero error code. */ RKADK_S32 RKADK_PARAM_Init(char *globalSetting, char **sesnorSettingArrary); /** * @brief Parameter Module Deinit * @return 0 success,non-zero error code. */ RKADK_S32 RKADK_PARAM_Deinit(RKADK_VOID); /** * @brief get cam related Item Values. * @param[in] s32CamID: the specify cam id,valid value range: * [0,RKADK_PDT_MEDIA_VCAP_DEV_MAX_CNT] * @param[in] enType: param type * @param[in] pvParam: param value * @return 0 success,non-zero error code. */ RKADK_S32 RKADK_PARAM_GetCamParam(RKADK_S32 s32CamID, RKADK_PARAM_TYPE_E enParamType, RKADK_VOID *pvParam); /** * @brief set cam related Item Values. * @param[in] enWorkMode: workmode * @param[in] s32CamID: the specify cam id,valid value range: * [0,RKADK_PDT_MEDIA_VCAP_DEV_MAX_CNT] * @param[in] enType: param type * @param[in] pvParam: param value * @return 0 success,non-zero error code. */ RKADK_S32 RKADK_PARAM_SetCamParam(RKADK_S32 s32CamID, RKADK_PARAM_TYPE_E enParamType, const RKADK_VOID *pvParam); /** * @brief get common parameter configure * @param[in] enParamType : param type * @param[out] pvParam : param value * @return 0 success,non-zero error code. */ RKADK_S32 RKADK_PARAM_GetCommParam(RKADK_PARAM_TYPE_E enParamType, RKADK_VOID *pvParam); /** * @brief set common parameter configure * @param[in] enParamType : param type * @param[out] pvParam : param value * @return 0 success,non-zero error code. */ RKADK_S32 RKADK_PARAM_SetCommParam(RKADK_PARAM_TYPE_E enParamType, const RKADK_VOID *pvParam); /** * @brief defualt all parameters configure * @return 0 success,non-zero error code. */ RKADK_S32 RKADK_PARAM_SetDefault(RKADK_VOID); /** * @brief RKADK_PARAM_RES_E to width and height * @return 0 success,non-zero error code. */ RKADK_S32 RKADK_PARAM_GetResolution(RKADK_PARAM_RES_E type, RKADK_U32 *width, RKADK_U32 *height); /** * @brief width and height to RKADK_PARAM_RES_E * @return 0 success,non-zero error code. */ RKADK_PARAM_RES_E RKADK_PARAM_GetResType(RKADK_U32 width, RKADK_U32 height); /** * @brief get venc chn id * @return venc chn id success,-1 error code. */ RKADK_S32 RKADK_PARAM_GetVencChnId(RKADK_U32 u32CamId, RKADK_STREAM_TYPE_E enStrmType); RKADK_S32 RKADK_PARAM_GetThumbChnId(RKADK_U32 u32CamId, RKADK_STREAM_TYPE_E enStrmType); void RKADK_PARAM_GetVpssId(RKADK_U32 u32CamId, RKADK_STREAM_TYPE_E enStrmType, RKADK_S32 *s32VpssGrp, RKADK_S32 *s32VpssChn); RKADK_PARAM_CONTEXT_S *RKADK_PARAM_GetCtx(RKADK_VOID); RKADK_PARAM_COMM_CFG_S *RKADK_PARAM_GetCommCfg(); RKADK_PARAM_REC_CFG_S *RKADK_PARAM_GetRecCfg(RKADK_U32 u32CamId); RKADK_PARAM_STREAM_CFG_S * RKADK_PARAM_GetStreamCfg(RKADK_U32 u32CamId, RKADK_STREAM_TYPE_E enStrmType); RKADK_PARAM_PHOTO_CFG_S *RKADK_PARAM_GetPhotoCfg(RKADK_U32 u32CamId); RKADK_PARAM_SENSOR_CFG_S *RKADK_PARAM_GetSensorCfg(RKADK_U32 u32CamId); RKADK_PARAM_DISP_CFG_S *RKADK_PARAM_GetDispCfg(RKADK_U32 u32CamId); RKADK_PARAM_THUMB_CFG_S *RKADK_PARAM_GetThumbCfg(RKADK_U32 u32CamId); RKADK_PARAM_AUDIO_CFG_S *RKADK_PARAM_GetAudioCfg(RKADK_VOID); VENC_RC_MODE_E RKADK_PARAM_GetRcMode(char *rcMode, RKADK_CODEC_TYPE_E enCodecType); RKADK_S32 RKADK_PARAM_SetVAdvancedParam(RKADK_PARAM_VENC_ATTR_S stVencAttr); RKADK_STREAM_TYPE_E RKADK_PARAM_VencChnMux(RKADK_U32 u32CamId, RKADK_U32 u32ChnId); PIXEL_FORMAT_E RKADK_PARAM_GetPixFmt(char *pixFmt, COMPRESS_MODE_E *enCompressMode); RKADK_VO_INTF_TYPE_E RKADK_PARAM_GetIntfType(char *intfType); RKADK_U32 RKADK_PARAM_GetStreamBufCnt(RKADK_U32 u32CamId, bool bIsAudio); RKADK_VO_INTF_TYPE_E RKADK_PARAM_GetSpliceMode(char *spliceMode); #ifdef __cplusplus } #endif #endif