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_AE_HANDLE_INT_H_ 17 #define _RK_AIQ_AE_HANDLE_INT_H_ 18 19 #include "RkAiqHandle.h" 20 #include "ae/rk_aiq_uapi_ae_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 #if RKAIQ_HAVE_AE_V1 27 class RkAiqCustomAeHandle; 28 29 class RkAiqAeHandleInt : public RkAiqHandle { 30 friend class RkAiqCustomAeHandle; 31 32 public: RkAiqAeHandleInt(RkAiqAlgoDesComm * des,RkAiqCore * aiqCore)33 explicit RkAiqAeHandleInt(RkAiqAlgoDesComm* des, RkAiqCore* aiqCore) 34 : RkAiqHandle(des, aiqCore), mPreResShared(nullptr) { 35 #ifndef DISABLE_HANDLE_ATTRIB 36 updateExpSwAttrV2 = false; 37 updateLinExpAttrV2 = false; 38 updateHdrExpAttrV2 = false; 39 40 updateLinAeRouteAttr = false; 41 updateHdrAeRouteAttr = false; 42 updateIrisAttr = false; 43 updateSyncTestAttr = false; 44 updateExpWinAttr = false; 45 46 memset(&mCurExpSwAttrV2, 0, sizeof(Uapi_ExpSwAttrV2_t)); 47 memset(&mNewExpSwAttrV2, 0, sizeof(Uapi_ExpSwAttrV2_t)); 48 memset(&mCurLinExpAttrV2, 0, sizeof(Uapi_LinExpAttrV2_t)); 49 memset(&mNewLinExpAttrV2, 0, sizeof(Uapi_LinExpAttrV2_t)); 50 memset(&mCurHdrExpAttrV2, 0, sizeof(Uapi_HdrExpAttrV2_t)); 51 memset(&mNewHdrExpAttrV2, 0, sizeof(Uapi_HdrExpAttrV2_t)); 52 53 memset(&mCurLinAeRouteAttr, 0, sizeof(Uapi_LinAeRouteAttr_t)); 54 memset(&mNewLinAeRouteAttr, 0, sizeof(Uapi_LinAeRouteAttr_t)); 55 memset(&mCurHdrAeRouteAttr, 0, sizeof(Uapi_HdrAeRouteAttr_t)); 56 memset(&mNewHdrAeRouteAttr, 0, sizeof(Uapi_HdrAeRouteAttr_t)); 57 memset(&mCurIrisAttr, 0, sizeof(Uapi_IrisAttrV2_t)); 58 memset(&mNewIrisAttr, 0, sizeof(Uapi_IrisAttrV2_t)); 59 memset(&mCurAecSyncTestAttr, 0, sizeof(Uapi_AecSyncTest_t)); 60 memset(&mNewAecSyncTestAttr, 0, sizeof(Uapi_AecSyncTest_t)); 61 memset(&mCurExpWinAttr, 0, sizeof(Uapi_ExpWin_t)); 62 memset(&mNewExpWinAttr, 0, sizeof(Uapi_ExpWin_t)); 63 #endif 64 }; ~RkAiqAeHandleInt()65 virtual ~RkAiqAeHandleInt() { 66 RkAiqHandle::deInit(); 67 }; 68 virtual XCamReturn updateConfig(bool needSync); 69 virtual XCamReturn prepare(); 70 virtual XCamReturn preProcess(); 71 virtual XCamReturn processing(); 72 virtual XCamReturn postProcess(); 73 74 // TODO: calibv1 75 virtual XCamReturn setExpSwAttr(Uapi_ExpSwAttr_t ExpSwAttr); 76 virtual XCamReturn getExpSwAttr(Uapi_ExpSwAttr_t* pExpSwAttr); 77 virtual XCamReturn setLinExpAttr(Uapi_LinExpAttr_t LinExpAttr); 78 virtual XCamReturn getLinExpAttr(Uapi_LinExpAttr_t* pLinExpAttr); 79 virtual XCamReturn setHdrExpAttr(Uapi_HdrExpAttr_t HdrExpAttr); 80 virtual XCamReturn getHdrExpAttr(Uapi_HdrExpAttr_t* pHdrExpAttr); 81 82 // TODO: calibv2 83 virtual XCamReturn setExpSwAttr(Uapi_ExpSwAttrV2_t ExpSwAttr); 84 virtual XCamReturn getExpSwAttr(Uapi_ExpSwAttrV2_t* pExpSwAttr); 85 virtual XCamReturn setLinExpAttr(Uapi_LinExpAttrV2_t LinExpAttr); 86 virtual XCamReturn getLinExpAttr(Uapi_LinExpAttrV2_t* pLinExpAttr); 87 virtual XCamReturn setHdrExpAttr(Uapi_HdrExpAttrV2_t HdrExpAttr); 88 virtual XCamReturn getHdrExpAttr(Uapi_HdrExpAttrV2_t* pHdrExpAttr); 89 90 virtual XCamReturn setLinAeRouteAttr(Uapi_LinAeRouteAttr_t LinAeRouteAttr); 91 virtual XCamReturn getLinAeRouteAttr(Uapi_LinAeRouteAttr_t* pLinAeRouteAttr); 92 virtual XCamReturn setHdrAeRouteAttr(Uapi_HdrAeRouteAttr_t HdrAeRouteAttr); 93 virtual XCamReturn getHdrAeRouteAttr(Uapi_HdrAeRouteAttr_t* pHdrAeRouteAttr); 94 95 virtual XCamReturn setIrisAttr(Uapi_IrisAttrV2_t IrisAttr); 96 virtual XCamReturn getIrisAttr(Uapi_IrisAttrV2_t* pIrisAttr); 97 virtual XCamReturn setSyncTestAttr(Uapi_AecSyncTest_t SyncTestAttr); 98 virtual XCamReturn getSyncTestAttr(Uapi_AecSyncTest_t* pSyncTestAttr); 99 virtual XCamReturn queryExpInfo(Uapi_ExpQueryInfo_t* pExpQueryInfo); 100 virtual XCamReturn setLockAeForAf(bool lock_ae); 101 virtual XCamReturn getAfdResForAE(AfdPeakRes_t AfdRes); 102 virtual XCamReturn setExpWinAttr(Uapi_ExpWin_t ExpWinAttr); 103 virtual XCamReturn getExpWinAttr(Uapi_ExpWin_t* pExpWinAttr); 104 virtual XCamReturn genIspResult(RkAiqFullParams* params, RkAiqFullParams* cur_params); 105 106 protected: 107 virtual void init(); deInit()108 virtual void deInit() { 109 RkAiqHandle::deInit(); 110 }; 111 SmartPtr<RkAiqAlgoPreResAeIntShared> mPreResShared; 112 113 private: 114 // TODO: calibv1 115 #ifndef DISABLE_HANDLE_ATTRIB 116 Uapi_ExpSwAttr_t mCurExpSwAttr; 117 Uapi_ExpSwAttr_t mNewExpSwAttr; 118 Uapi_LinExpAttr_t mCurLinExpAttr; 119 Uapi_LinExpAttr_t mNewLinExpAttr; 120 Uapi_HdrExpAttr_t mCurHdrExpAttr; 121 Uapi_HdrExpAttr_t mNewHdrExpAttr; 122 123 // TODO: calibv2 124 Uapi_ExpSwAttrV2_t mCurExpSwAttrV2; 125 Uapi_ExpSwAttrV2_t mNewExpSwAttrV2; 126 Uapi_LinExpAttrV2_t mCurLinExpAttrV2; 127 Uapi_LinExpAttrV2_t mNewLinExpAttrV2; 128 Uapi_HdrExpAttrV2_t mCurHdrExpAttrV2; 129 Uapi_HdrExpAttrV2_t mNewHdrExpAttrV2; 130 131 Uapi_LinAeRouteAttr_t mCurLinAeRouteAttr; 132 Uapi_LinAeRouteAttr_t mNewLinAeRouteAttr; 133 Uapi_HdrAeRouteAttr_t mCurHdrAeRouteAttr; 134 Uapi_HdrAeRouteAttr_t mNewHdrAeRouteAttr; 135 Uapi_IrisAttrV2_t mCurIrisAttr; 136 Uapi_IrisAttrV2_t mNewIrisAttr; 137 Uapi_AecSyncTest_t mCurAecSyncTestAttr; 138 Uapi_AecSyncTest_t mNewAecSyncTestAttr; 139 Uapi_ExpWin_t mCurExpWinAttr; 140 Uapi_ExpWin_t mNewExpWinAttr; 141 142 bool updateExpSwAttr = false; 143 bool updateLinExpAttr = false; 144 bool updateHdrExpAttr = false; 145 146 mutable std::atomic<bool> updateExpSwAttrV2; 147 mutable std::atomic<bool> updateLinExpAttrV2; 148 mutable std::atomic<bool> updateHdrExpAttrV2; 149 150 mutable std::atomic<bool> updateLinAeRouteAttr; 151 mutable std::atomic<bool> updateHdrAeRouteAttr; 152 mutable std::atomic<bool> updateIrisAttr; 153 mutable std::atomic<bool> updateSyncTestAttr; 154 mutable std::atomic<bool> updateExpWinAttr; 155 156 uint16_t updateAttr = 0; 157 #endif 158 XCam::Mutex mLockAebyAfMutex; 159 bool lockaebyaf = false; 160 161 XCam::Mutex mGetAfdResMutex; 162 AfdPeakRes_t mAfdRes; 163 #if RKAIQ_HAVE_AF 164 SmartPtr<RkAiqHandle>* mAf_handle; 165 #endif 166 #if RKAIQ_HAVE_AFD_V1 || RKAIQ_HAVE_AFD_V2 167 SmartPtr<RkAiqHandle>* mAfd_handle; 168 #endif 169 SmartPtr<RkAiqHandle>* mAmerge_handle; 170 SmartPtr<RkAiqHandle>* mAdrc_handle; 171 uint32_t mMeasSyncFlag{(uint32_t)(-1)}; 172 uint32_t mHistSyncFlag{(uint32_t)(-1)}; 173 private: 174 DECLARE_HANDLE_REGISTER_TYPE(RkAiqAeHandleInt); 175 }; 176 #endif 177 } // namespace RkCam 178 179 #endif 180