/* * Copyright (c) 2021 Rockchip Corporation * * 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 __AEC_UAPI_HEAD_H__ #define __AEC_UAPI_HEAD_H__ #include "aec_head.h" #include "ae/rk_aiq_types_ae_hw.h" #include "rk_aiq_comm.h" #define MAX_HDR_FRAMENUM (3) #define RAWAEBIG_SUBWIN_NUM 4 #define RAWAEBIG_WIN_NUM 225 #define ISP2_RAWAE_WINNUM_MAX ((RAWAELITE_WIN_NUM > RAWAEBIG_WIN_NUM) ? RAWAELITE_WIN_NUM : RAWAEBIG_WIN_NUM) #define ISP2_HIST_BINNUM_MAX ((RAWHIST_BIN_N_MAX > SIHIST_BIN_N_MAX) ? RAWHIST_BIN_N_MAX : SIHIST_BIN_N_MAX) typedef struct Aec_AeRange_uapi_s { float Min; float Max; } Aec_AeRange_uapi_t; typedef struct Aec_LinAeRange_uapi_s { Aec_AeRange_uapi_t stExpTimeRange; Aec_AeRange_uapi_t stGainRange; Aec_AeRange_uapi_t stIspDGainRange; Aec_AeRange_uapi_t stPIrisRange; } Aec_LinAeRange_uapi_t; typedef struct Aec_HdrAeRange_uapi_s { Aec_AeRange_uapi_t stExpTimeRange[3]; Aec_AeRange_uapi_t stGainRange[3]; Aec_AeRange_uapi_t stIspDGainRange[3]; Aec_AeRange_uapi_t stPIrisRange; } Aec_HdrAeRange_uapi_t; typedef struct Uapi_AeAttrV2_uapi_s { CalibDb_AeSpeedV2_t stAeSpeed; // DelayFrmNum uint8_t BlackDelayFrame; uint8_t WhiteDelayFrame; // Auto/Fixed fps CalibDb_AeFrmRateAttrV2_t stFrmRate; CalibDb_AntiFlickerAttrV2_t stAntiFlicker; // auto range Aec_LinAeRange_uapi_t LinAeRange; // result LinAerange Aec_HdrAeRange_uapi_t HdrAeRange; // result HdrAerange } Uapi_AeAttrV2_uapi_t; // manual exposure typedef struct Uapi_LinMeAttrV2_uapi_s { // M4_BOOL_DESC("ManualTimeEn", "1") bool ManualTimeEn; // M4_BOOL_DESC("ManualGainEn", "1") bool ManualGainEn; // M4_BOOL_DESC("ManualIspDgainEn", "1") bool ManualIspDgainEn; // M4_NUMBER_DESC("TimeValue", "f32", M4_RANGE(0,1), "0.003", M4_DIGIT(6),M4_HIDE(0)) float TimeValue; // unit: s = 10^6 us // M4_NUMBER_DESC("GainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) float GainValue; // M4_NUMBER_DESC("IspDGainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) float IspDGainValue; } Uapi_LinMeAttrV2_uapi_t; typedef struct Uapi_HdrMeAttrV2_uapi_s { // M4_BOOL_DESC("ManualTimeEn", "1") bool ManualTimeEn; // M4_BOOL_DESC("ManualGainEn", "1") bool ManualGainEn; // M4_BOOL_DESC("ManualIspDgainEn", "1") bool ManualIspDgainEn; // M4_ARRAY_DESC("TimeValue", "f32", M4_SIZE(1,3), M4_RANGE(0,1), "0.003", M4_DIGIT(6), M4_DYNAMIC(0)) float TimeValue[MAX_HDR_FRAMENUM]; // M4_ARRAY_DESC("GainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) float GainValue[MAX_HDR_FRAMENUM]; // M4_ARRAY_DESC("IspDGainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) float IspDGainValue[MAX_HDR_FRAMENUM]; } Uapi_HdrMeAttrV2_uapi_t; typedef struct Uapi_MeAttrV2_uapi_s { // M4_STRUCT_DESC("LinearAE", "normal_ui_style") Uapi_LinMeAttrV2_uapi_t LinearAE; // M4_STRUCT_DESC("HdrAE", "normal_ui_style") Uapi_HdrMeAttrV2_uapi_t HdrAE; } Uapi_MeAttrV2_uapi_t; typedef struct Aec_uapi_advanced_attr_uapi_s { bool enable; uint8_t GridWeights[15 * 15]; uint8_t DayGridWeights[RAWAEBIG_WIN_NUM]; uint8_t NightGridWeights[RAWAEBIG_WIN_NUM]; bool SetAeRangeEn; Aec_LinAeRange_uapi_t SetLinAeRange; Aec_HdrAeRange_uapi_t SetHdrAeRange; } Aec_uapi_advanced_attr_uapi_t; typedef struct __uapi_expsw_attr_uapi_s { rk_aiq_uapi_sync_t sync; uint8_t Enable; CalibDb_CamRawStatsModeV2_t RawStatsMode; CalibDb_CamHistStatsModeV2_t HistStatsMode; CalibDb_CamYRangeModeV2_t YRangeMode; uint8_t AecRunInterval; // M4_ENUM_DESC("OPMode", "RKAiqOPMode_uapi_t","RK_AIQ_OP_MODE_AUTO") RKAiqOPMode_t AecOpType; Cam15x15UCharMatrix_t GridWeights; Uapi_AeAttrV2_uapi_t stAuto; // M4_STRUCT_DESC("ManualCtrl", "normal_ui_style") Uapi_MeAttrV2_uapi_t stManual; Aec_uapi_advanced_attr_uapi_t stAdvanced; } uapi_expsw_attr_t; typedef struct uapi_expinfo { // M4_BOOL_DESC("IsConverged", "0",M4_HIDE(1)) bool IsConverged; // M4_BOOL_DESC("IsExpMax", "0",M4_HIDE(1)) bool IsExpMax; // M4_NUMBER_DESC("LumaDeviation", "f32", M4_RANGE(-256,256), "0.0", M4_DIGIT(3),M4_HIDE(1)) float LumaDeviation; // M4_ARRAY_DESC("HdrLumaDeviation", "f32", M4_SIZE(1,3), M4_RANGE(-256,256), "0.0", M4_DIGIT(3), M4_DYNAMIC(0), M4_HIDE(1)) float HdrLumaDeviation[3]; // M4_NUMBER_DESC("MeanLuma", "f32", M4_RANGE(0,256), "0.0", M4_DIGIT(2)) float MeanLuma; // M4_ARRAY_DESC("HdrMeanLuma", "f32", M4_SIZE(1,3), M4_RANGE(0,256), "0.0", M4_DIGIT(2), M4_DYNAMIC(0)) float HdrMeanLuma[3]; // M4_NUMBER_DESC("GlobalEnvLux", "f32", M4_RANGE(0,65535), "0.0", M4_DIGIT(2),M4_HIDE(1)) float GlobalEnvLux; // M4_ARRAY_DESC("BlockEnvLux", "f32", M4_SIZE(15,15), M4_RANGE(0,65535), "0.0", M4_DIGIT(2), M4_DYNAMIC(0), M4_HIDE(1)) float BlockEnvLux[ISP2_RAWAE_WINNUM_MAX]; // M4_STRUCT_DESC("CurExpInfo", "normal_ui_style"); RKAiqAecExpInfo_t CurExpInfo; // M4_NUMBER_DESC("Piris", "u16", M4_RANGE(0,1024), "0", M4_DIGIT(0),M4_HIDE(1)) unsigned short Piris; // M4_NUMBER_DESC("LinePeriodsPerField", "f32", M4_RANGE(0,65535), "0", M4_DIGIT(2),M4_HIDE(1)) float LinePeriodsPerField; // M4_NUMBER_DESC("PixelPeriodsPerLine", "f32", M4_RANGE(0,65535), "0", M4_DIGIT(2),M4_HIDE(1)) float PixelPeriodsPerLine; // M4_NUMBER_DESC("PixelClockFreqMHZ", "f32", M4_RANGE(0,4096), "0", M4_DIGIT(2),M4_HIDE(1)) float PixelClockFreqMHZ; } uapi_expinfo_t; /*****************************************************************************/ /** * @brief ISP AEC HW-Meas Stats Params */ /*****************************************************************************/ typedef struct uapi_rawhist_stats_s { // M4_ARRAY_DESC("bins", "u32", M4_SIZE(1,256), M4_RANGE(0,268435456), "0", M4_DIGIT(0), M4_DYNAMIC(0)) unsigned int bins[RAWHIST_BIN_N_MAX]; } uapi_rawhist_stats_t; typedef struct uapi_sihist_stats_s { // M4_ARRAY_DESC("bins", "u32", M4_SIZE(1,32), M4_RANGE(0,268435456), "0", M4_DIGIT(0), M4_DYNAMIC(0)) unsigned int bins[SIHIST_BIN_N_MAX]; } uapi_sihist_stats_t; typedef struct uapi_rawae_big_stats_s { // M4_ARRAY_DESC("channelr_xy", "u16", M4_SIZE(1,225), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t channelr_xy[RAWAEBIG_WIN_NUM]; // M4_ARRAY_DESC("channelg_xy", "u16", M4_SIZE(1,225), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t channelg_xy[RAWAEBIG_WIN_NUM]; // M4_ARRAY_DESC("channelb_xy", "u16", M4_SIZE(1,225), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t channelb_xy[RAWAEBIG_WIN_NUM]; // M4_ARRAY_DESC("channely_xy", "u16", M4_SIZE(1,225), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t channely_xy[RAWAEBIG_WIN_NUM]; //not HW! // M4_ARRAY_DESC("wndx_sumr", "u64", M4_SIZE(1,4), M4_RANGE(0,536870912), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint64_t wndx_sumr[RAWAEBIG_SUBWIN_NUM]; // M4_ARRAY_DESC("wndx_sumg", "u64", M4_SIZE(1,4), M4_RANGE(0,4294967296), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint64_t wndx_sumg[RAWAEBIG_SUBWIN_NUM]; // M4_ARRAY_DESC("wndx_sumb", "u64", M4_SIZE(1,4), M4_RANGE(0,536870912), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint64_t wndx_sumb[RAWAEBIG_SUBWIN_NUM]; // M4_ARRAY_DESC("wndx_channelr", "u16", M4_SIZE(1,4), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t wndx_channelr[RAWAEBIG_SUBWIN_NUM]; //not HW! // M4_ARRAY_DESC("wndx_channelg", "u16", M4_SIZE(1,4), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t wndx_channelg[RAWAEBIG_SUBWIN_NUM]; //not HW! // M4_ARRAY_DESC("wndx_channelb", "u16", M4_SIZE(1,4), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t wndx_channelb[RAWAEBIG_SUBWIN_NUM]; //not HW! // M4_ARRAY_DESC("wndx_channely", "u16", M4_SIZE(1,4), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t wndx_channely[RAWAEBIG_SUBWIN_NUM]; //not HW! } uapi_rawae_big_stats_t; typedef struct uapi_rawae_lite_stat_s { // M4_ARRAY_DESC("channelr_xy", "u16", M4_SIZE(1,25), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t channelr_xy[RAWAELITE_WIN_NUM]; // M4_ARRAY_DESC("channelg_xy", "u16", M4_SIZE(1,25), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t channelg_xy[RAWAELITE_WIN_NUM]; // M4_ARRAY_DESC("channelb_xy", "u16", M4_SIZE(1,25), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t channelb_xy[RAWAELITE_WIN_NUM]; // M4_ARRAY_DESC("channely_xy", "u16", M4_SIZE(1,25), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint16_t channely_xy[RAWAELITE_WIN_NUM]; //not HW! } uapi_rawae_lite_stat_t; typedef struct uapi_yuvae_stats_s { // M4_ARRAY_DESC("channely_xy", "u64", M4_SIZE(1,4), M4_RANGE(0,4294967296), "0", M4_DIGIT(0), M4_DYNAMIC(0)) uint64_t ro_yuvae_sumy[YUVAE_SUBWIN_NUM]; // M4_ARRAY_DESC("channely_xy", "u8", M4_SIZE(1,225), M4_RANGE(0,255), "0", M4_DIGIT(0), M4_DYNAMIC(0)) unsigned char mean[YUVAE_WIN_NUM]; } uapi_yuvae_stats_t; typedef struct uapi_raw_stats_s { //rawae // M4_STRUCT_DESC("rawae_big", "normal_ui_style") uapi_rawae_big_stats_t rawae_big; // M4_STRUCT_DESC("rawae_lite", "normal_ui_style") uapi_rawae_lite_stat_t rawae_lite; //rawhist // M4_STRUCT_DESC("rawhist_big", "normal_ui_style") uapi_rawhist_stats_t rawhist_big; // M4_STRUCT_DESC("rawhist_lite", "normal_ui_style") uapi_rawhist_stats_t rawhist_lite; } uapi_raw_stats_t; typedef struct uapi_ae_hwstats_s { // M4_STRUCT_LIST_DESC("chn", M4_SIZE(1,3), "normal_ui_style") uapi_raw_stats_t chn[3]; // M4_STRUCT_DESC("extra", "normal_ui_style") uapi_raw_stats_t extra; // M4_STRUCT_DESC("yuvae", "normal_ui_style") uapi_yuvae_stats_t yuvae; // M4_STRUCT_DESC("sihist", "normal_ui_style") uapi_sihist_stats_t sihist; } uapi_ae_hwstats_t; #endif /*__AEC_UAPI_HEAD_H__*/