linuxOS_AP06/app/rkadk/include/rkadk_param.h

537 lines
17 KiB
C
Raw Normal View History

2025-06-03 04:28:32 +00:00
/*
* 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 <stdio.h>
#include <stdlib.h>
#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