1 /* 2 * Copyright (c) 2019-2022 Rockchip Eletronics Co., Ltd. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 #ifndef _RK_AIQ_AWB_HANDLE_INT_H_ 17 #define _RK_AIQ_AWB_HANDLE_INT_H_ 18 19 #include "RkAiqHandle.h" 20 #include "awb/rk_aiq_uapi_awb_int.h" 21 #include "rk_aiq_api_private.h" 22 #include "rk_aiq_pool.h" 23 #include "xcam_mutex.h" 24 25 namespace RkCam { 26 27 class RkAiqAwbHandleInt : public RkAiqHandle { 28 friend class RkAiqAwbV21HandleInt; 29 friend class RkAiqCustomAwbHandle; 30 public: RkAiqAwbHandleInt(RkAiqAlgoDesComm * des,RkAiqCore * aiqCore)31 explicit RkAiqAwbHandleInt(RkAiqAlgoDesComm* des, RkAiqCore* aiqCore) 32 : RkAiqHandle(des, aiqCore), mProcResShared(nullptr) { 33 #ifndef DISABLE_HANDLE_ATTRIB 34 memset(&mCurAtt, 0, sizeof(rk_aiq_wb_attrib_t)); 35 memset(&mNewAtt, 0, sizeof(rk_aiq_wb_attrib_t)); 36 #ifdef RKAIQ_HAVE_AWB_V20 37 memset(&mCurWbV20Attr, 0, sizeof(mCurWbV20Attr)); 38 memset(&mNewWbV20Attr, 0, sizeof(mNewWbV20Attr)); 39 #endif 40 #if defined(RKAIQ_HAVE_AWB_V20) || defined(RKAIQ_HAVE_AWB_V21) 41 memset(&mCurWbAwbAttr, 0, sizeof(mCurWbAwbAttr)); 42 memset(&mNewWbAwbAttr, 0, sizeof(mNewWbAwbAttr)); 43 #endif 44 memset(&mCurWbOpModeAttr, 0, sizeof(mCurWbOpModeAttr)); 45 mCurWbOpModeAttr.mode = RK_AIQ_WB_MODE_MAX; 46 memset(&mCurWbAwbWbGainAdjustAttr, 0, sizeof(mCurWbAwbWbGainAdjustAttr)); 47 memset(&mCurWbAwbWbGainOffsetAttr, 0, sizeof(mCurWbAwbWbGainOffsetAttr)); 48 memset(&mCurWbAwbMultiWindowAttr, 0, sizeof(mCurWbAwbMultiWindowAttr)); 49 memset(&mNewWbOpModeAttr, 0, sizeof(mNewWbOpModeAttr)); 50 mNewWbOpModeAttr.mode = RK_AIQ_WB_MODE_MAX; 51 memset(&mCurWbMwbAttr, 0, sizeof(mCurWbMwbAttr)); 52 memset(&mNewWbMwbAttr, 0, sizeof(mNewWbMwbAttr)); 53 memset(&mNewWbAwbWbGainAdjustAttr, 0, sizeof(mNewWbAwbWbGainAdjustAttr)); 54 memset(&mNewWbAwbWbGainOffsetAttr, 0, sizeof(mNewWbAwbWbGainOffsetAttr)); 55 memset(&mNewWbAwbMultiWindowAttr, 0, sizeof(mNewWbAwbMultiWindowAttr)); 56 memset(&mCurFFWbgainAttr, 0, sizeof(mCurFFWbgainAttr)); 57 memset(&mNewFFWbgainAttr, 0, sizeof(mNewFFWbgainAttr)); 58 updateWbV20Attr = false; 59 updateWbOpModeAttr = false; 60 updateWbMwbAttr = false; 61 updateWbAwbAttr = false; 62 updateWbAwbWbGainAdjustAttr = false; 63 updateWbAwbWbGainOffsetAttr = false; 64 updateWbAwbMultiWindowAttr = false; 65 updateFFWbgainAttr = false; 66 #endif 67 }; ~RkAiqAwbHandleInt()68 virtual ~RkAiqAwbHandleInt() { 69 #ifndef DISABLE_HANDLE_ATTRIB 70 freeWbGainAdjustAttrib(&mNewWbAwbWbGainAdjustAttr); 71 freeWbGainAdjustAttrib(&mCurWbAwbWbGainAdjustAttr); 72 #ifdef RKAIQ_HAVE_AWB_V20 73 freeWbGainAdjustAttrib(&mCurWbV20Attr.stAuto.wbGainAdjust); 74 freeWbGainAdjustAttrib(&mNewWbV20Attr.stAuto.wbGainAdjust); 75 #endif 76 #if defined(RKAIQ_HAVE_AWB_V20) || defined(RKAIQ_HAVE_AWB_V21) 77 freeWbGainAdjustAttrib(&mCurWbAwbAttr.wbGainAdjust); 78 freeWbGainAdjustAttrib(&mNewWbAwbAttr.wbGainAdjust); 79 #endif 80 #endif 81 RkAiqHandle::deInit(); 82 }; 83 virtual XCamReturn updateConfig(bool needSync); 84 virtual XCamReturn prepare(); 85 virtual XCamReturn preProcess(); 86 virtual XCamReturn processing(); 87 virtual XCamReturn postProcess(); 88 virtual XCamReturn genIspResult(RkAiqFullParams* params, RkAiqFullParams* cur_params); 89 // TODO add algo specific methords, this is a sample 90 XCamReturn setAttrib(rk_aiq_wb_attrib_t att); 91 XCamReturn getAttrib(rk_aiq_wb_attrib_t* att); 92 XCamReturn getCct(rk_aiq_wb_cct_t* cct); 93 XCamReturn queryWBInfo(rk_aiq_wb_querry_info_t* wb_querry_info); 94 XCamReturn lock(); 95 XCamReturn unlock(); 96 XCamReturn setWbV20Attrib(rk_aiq_uapiV2_wbV20_attrib_t att); 97 XCamReturn getWbV20Attrib(rk_aiq_uapiV2_wbV20_attrib_t* att); 98 XCamReturn setWbOpModeAttrib(rk_aiq_uapiV2_wb_opMode_t att); 99 XCamReturn getWbOpModeAttrib(rk_aiq_uapiV2_wb_opMode_t* att); 100 XCamReturn setMwbAttrib(rk_aiq_wb_mwb_attrib_t att); 101 XCamReturn getMwbAttrib(rk_aiq_wb_mwb_attrib_t* att); 102 XCamReturn setAwbV20Attrib(rk_aiq_uapiV2_wbV20_awb_attrib_t att); 103 XCamReturn getAwbV20Attrib(rk_aiq_uapiV2_wbV20_awb_attrib_t* att); 104 XCamReturn setWbAwbWbGainAdjustAttrib(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t att); 105 XCamReturn getWbAwbWbGainAdjustAttrib(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t* att); 106 XCamReturn setWbAwbWbGainOffsetAttrib(rk_aiq_uapiV2_wb_awb_wbGainOffset_t att); 107 XCamReturn getWbAwbWbGainOffsetAttrib(rk_aiq_uapiV2_wb_awb_wbGainOffset_t* att); 108 XCamReturn setWbAwbMultiWindowAttrib(rk_aiq_uapiV2_wb_awb_mulWindow_t att); 109 XCamReturn getWbAwbMultiWindowAttrib(rk_aiq_uapiV2_wb_awb_mulWindow_t* att); 110 XCamReturn setFFWbgainAttrib(rk_aiq_uapiV2_awb_ffwbgain_attr_t att); 111 XCamReturn getAlgoStat(rk_tool_awb_stat_res_full_t *awb_stat_algo); 112 XCamReturn getStrategyResult(rk_tool_awb_strategy_result_t *awb_strategy_result); 113 #ifndef DISABLE_HANDLE_ATTRIB 114 XCamReturn mallocAndCopyWbGainAdjustAttrib(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t* dst,const rk_aiq_uapiV2_wb_awb_wbGainAdjust_t *src); 115 XCamReturn freeWbGainAdjustAttrib(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t* dst); 116 #endif 117 protected: 118 virtual void init(); deInit()119 virtual void deInit() { RkAiqHandle::deInit(); }; 120 SmartPtr<RkAiqAlgoProcResAwbIntShared> mProcResShared; 121 122 protected: 123 #ifndef DISABLE_HANDLE_ATTRIB 124 rk_aiq_wb_attrib_t mCurAtt; 125 rk_aiq_wb_attrib_t mNewAtt; 126 #ifdef RKAIQ_HAVE_AWB_V20 127 rk_aiq_uapiV2_wbV20_attrib_t mCurWbV20Attr; 128 rk_aiq_uapiV2_wbV20_attrib_t mNewWbV20Attr; 129 #endif 130 rk_aiq_uapiV2_wb_opMode_t mCurWbOpModeAttr; 131 rk_aiq_uapiV2_wb_opMode_t mNewWbOpModeAttr; 132 rk_aiq_wb_mwb_attrib_t mCurWbMwbAttr; 133 rk_aiq_wb_mwb_attrib_t mNewWbMwbAttr; 134 #if defined(RKAIQ_HAVE_AWB_V20) || defined(RKAIQ_HAVE_AWB_V21) 135 rk_aiq_uapiV2_wbV20_awb_attrib_t mCurWbAwbAttr; 136 rk_aiq_uapiV2_wbV20_awb_attrib_t mNewWbAwbAttr; 137 #endif 138 rk_aiq_uapiV2_wb_awb_wbGainAdjust_t mCurWbAwbWbGainAdjustAttr; 139 rk_aiq_uapiV2_wb_awb_wbGainAdjust_t mNewWbAwbWbGainAdjustAttr; 140 rk_aiq_uapiV2_wb_awb_wbGainOffset_t mCurWbAwbWbGainOffsetAttr; 141 rk_aiq_uapiV2_wb_awb_wbGainOffset_t mNewWbAwbWbGainOffsetAttr; 142 rk_aiq_uapiV2_wb_awb_mulWindow_t mCurWbAwbMultiWindowAttr; 143 rk_aiq_uapiV2_wb_awb_mulWindow_t mNewWbAwbMultiWindowAttr; 144 rk_aiq_uapiV2_awb_ffwbgain_attr_t mCurFFWbgainAttr; 145 rk_aiq_uapiV2_awb_ffwbgain_attr_t mNewFFWbgainAttr; 146 mutable std::atomic<bool> updateWbV20Attr; 147 mutable std::atomic<bool> updateWbOpModeAttr; 148 mutable std::atomic<bool> updateWbMwbAttr; 149 mutable std::atomic<bool> updateWbAwbAttr; 150 mutable std::atomic<bool> updateWbAwbWbGainAdjustAttr; 151 mutable std::atomic<bool> updateWbAwbWbGainOffsetAttr; 152 mutable std::atomic<bool> updateWbAwbMultiWindowAttr; 153 mutable std::atomic<bool> updateFFWbgainAttr; 154 #endif 155 uint32_t mWbGainSyncFlag{(uint32_t)(-1)}; 156 uint32_t mWbParamSyncFlag{(uint32_t)(-1)}; 157 private: 158 DECLARE_HANDLE_REGISTER_TYPE(RkAiqAwbHandleInt); 159 }; 160 161 } // namespace RkCam 162 163 #endif 164