xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/aiq_core/algo_handlers/RkAiqAeHandle.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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