1 /*
2  * RkAiqCustomHandle.h
3  *
4  *  Copyright (c) 2019 Rockchip Corporation
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19 
20 #include "RkAiqCustomAeHandle.h"
21 
22 namespace RkCam {
23 
24 //#define BYPASS_CUSTOM_AE
25 
updateConfig(bool needSync)26 XCamReturn RkAiqCustomAeHandle::updateConfig(bool needSync) {
27     return XCAM_RETURN_NO_ERROR;
28 }
29 
lock()30 XCamReturn RkAiqCustomAeHandle::lock() {
31     return XCAM_RETURN_NO_ERROR;
32 }
33 
unlock()34 XCamReturn RkAiqCustomAeHandle::unlock() {
35     return XCAM_RETURN_NO_ERROR;
36 }
37 
setExpSwAttr(Uapi_ExpSwAttr_t ExpSwAttr)38 XCamReturn RkAiqCustomAeHandle::setExpSwAttr(Uapi_ExpSwAttr_t ExpSwAttr) {
39     return XCAM_RETURN_NO_ERROR;
40 }
41 
getExpSwAttr(Uapi_ExpSwAttr_t * pExpSwAttr)42 XCamReturn RkAiqCustomAeHandle::getExpSwAttr(Uapi_ExpSwAttr_t* pExpSwAttr) {
43     return XCAM_RETURN_NO_ERROR;
44 }
45 
setExpSwAttr(Uapi_ExpSwAttrV2_t ExpSwAttrV2)46 XCamReturn RkAiqCustomAeHandle::setExpSwAttr(Uapi_ExpSwAttrV2_t ExpSwAttrV2) {
47     return XCAM_RETURN_NO_ERROR;
48 }
49 
getExpSwAttr(Uapi_ExpSwAttrV2_t * pExpSwAttrV2)50 XCamReturn RkAiqCustomAeHandle::getExpSwAttr(Uapi_ExpSwAttrV2_t* pExpSwAttrV2) {
51     return XCAM_RETURN_NO_ERROR;
52 }
53 
setLinExpAttr(Uapi_LinExpAttr_t LinExpAttr)54 XCamReturn RkAiqCustomAeHandle::setLinExpAttr(Uapi_LinExpAttr_t LinExpAttr) {
55     return XCAM_RETURN_NO_ERROR;
56 }
57 
getLinExpAttr(Uapi_LinExpAttr_t * pLinExpAttr)58 XCamReturn RkAiqCustomAeHandle::getLinExpAttr(Uapi_LinExpAttr_t* pLinExpAttr) {
59     return XCAM_RETURN_NO_ERROR;
60 }
61 
setLinExpAttr(Uapi_LinExpAttrV2_t LinExpAttrV2)62 XCamReturn RkAiqCustomAeHandle::setLinExpAttr(Uapi_LinExpAttrV2_t LinExpAttrV2) {
63     return XCAM_RETURN_NO_ERROR;
64 }
65 
getLinExpAttr(Uapi_LinExpAttrV2_t * pLinExpAttrV2)66 XCamReturn RkAiqCustomAeHandle::getLinExpAttr(Uapi_LinExpAttrV2_t* pLinExpAttrV2) {
67     return XCAM_RETURN_NO_ERROR;
68 }
69 
setHdrExpAttr(Uapi_HdrExpAttr_t HdrExpAttr)70 XCamReturn RkAiqCustomAeHandle::setHdrExpAttr(Uapi_HdrExpAttr_t HdrExpAttr) {
71     return XCAM_RETURN_NO_ERROR;
72 }
73 
getHdrExpAttr(Uapi_HdrExpAttr_t * pHdrExpAttr)74 XCamReturn RkAiqCustomAeHandle::getHdrExpAttr(Uapi_HdrExpAttr_t* pHdrExpAttr) {
75     return XCAM_RETURN_NO_ERROR;
76 }
77 
setHdrExpAttr(Uapi_HdrExpAttrV2_t HdrExpAttrV2)78 XCamReturn RkAiqCustomAeHandle::setHdrExpAttr(Uapi_HdrExpAttrV2_t HdrExpAttrV2) {
79     return XCAM_RETURN_NO_ERROR;
80 }
81 
getHdrExpAttr(Uapi_HdrExpAttrV2_t * pHdrExpAttrV2)82 XCamReturn RkAiqCustomAeHandle::getHdrExpAttr(Uapi_HdrExpAttrV2_t* pHdrExpAttrV2) {
83     return XCAM_RETURN_NO_ERROR;
84 }
85 
setLinAeRouteAttr(Uapi_LinAeRouteAttr_t LinAeRouteAttr)86 XCamReturn RkAiqCustomAeHandle::setLinAeRouteAttr(Uapi_LinAeRouteAttr_t LinAeRouteAttr) {
87     return XCAM_RETURN_NO_ERROR;
88 }
89 
getLinAeRouteAttr(Uapi_LinAeRouteAttr_t * pLinAeRouteAttr)90 XCamReturn RkAiqCustomAeHandle::getLinAeRouteAttr(Uapi_LinAeRouteAttr_t* pLinAeRouteAttr) {
91     return XCAM_RETURN_NO_ERROR;
92 }
93 
setHdrAeRouteAttr(Uapi_HdrAeRouteAttr_t HdrAeRouteAttr)94 XCamReturn RkAiqCustomAeHandle::setHdrAeRouteAttr(Uapi_HdrAeRouteAttr_t HdrAeRouteAttr) {
95     return XCAM_RETURN_NO_ERROR;
96 }
97 
getHdrAeRouteAttr(Uapi_HdrAeRouteAttr_t * pHdrAeRouteAttr)98 XCamReturn RkAiqCustomAeHandle::getHdrAeRouteAttr(Uapi_HdrAeRouteAttr_t* pHdrAeRouteAttr) {
99     return XCAM_RETURN_NO_ERROR;
100 }
101 
setIrisAttr(Uapi_IrisAttrV2_t IrisAttr)102 XCamReturn RkAiqCustomAeHandle::setIrisAttr(Uapi_IrisAttrV2_t IrisAttr) {
103     return XCAM_RETURN_NO_ERROR;
104 }
105 
getIrisAttr(Uapi_IrisAttrV2_t * pIrisAttr)106 XCamReturn RkAiqCustomAeHandle::getIrisAttr(Uapi_IrisAttrV2_t* pIrisAttr) {
107     return XCAM_RETURN_NO_ERROR;
108 }
109 
setSyncTestAttr(Uapi_AecSyncTest_t SyncTestAttr)110 XCamReturn RkAiqCustomAeHandle::setSyncTestAttr(Uapi_AecSyncTest_t SyncTestAttr) {
111     return XCAM_RETURN_NO_ERROR;
112 }
113 
getSyncTestAttr(Uapi_AecSyncTest_t * pSyncTestAttr)114 XCamReturn RkAiqCustomAeHandle::getSyncTestAttr(Uapi_AecSyncTest_t* pSyncTestAttr) {
115     return XCAM_RETURN_NO_ERROR;
116 }
117 
setExpWinAttr(Uapi_ExpWin_t ExpWinAttr)118 XCamReturn RkAiqCustomAeHandle::setExpWinAttr(Uapi_ExpWin_t ExpWinAttr) {
119     return XCAM_RETURN_NO_ERROR;
120 }
121 
getExpWinAttr(Uapi_ExpWin_t * pExpWinAttr)122 XCamReturn RkAiqCustomAeHandle::getExpWinAttr(Uapi_ExpWin_t* pExpWinAttr) {
123     return XCAM_RETURN_NO_ERROR;
124 }
125 
queryExpInfo(Uapi_ExpQueryInfo_t * pExpQueryInfo)126 XCamReturn RkAiqCustomAeHandle::queryExpInfo(Uapi_ExpQueryInfo_t* pExpQueryInfo) {
127     return XCAM_RETURN_NO_ERROR;
128 }
129 
setLockAeForAf(bool lock_ae)130 XCamReturn RkAiqCustomAeHandle::setLockAeForAf(bool lock_ae) {
131     return XCAM_RETURN_NO_ERROR;
132 }
133 
134 void
init()135 RkAiqCustomAeHandle::init() {
136     if (mIsMulRun) {
137         // reuse parent's resources, contains:
138         // mConfig, mProcInParam, mProcOutParam
139         RkAiqAeHandleInt* parent =  dynamic_cast<RkAiqAeHandleInt*>(mParentHdl);
140         if (!parent)
141             LOGE_AEC("no parent ae handler in multiple handler mode !");
142         mConfig      = parent->mConfig;
143         mPreInParam   = parent->mPreInParam;
144         mProcInParam = parent->mProcInParam;
145         mProcOutParam = parent->mProcOutParam;
146         mPostInParam  = parent->mPostInParam;
147         mPostOutParam = parent->mPostOutParam;
148 #if RKAIQ_HAVE_AF
149         mAf_handle = parent->mAf_handle;
150 #endif
151 #if RKAIQ_HAVE_AFD_V1 || RKAIQ_HAVE_AFD_V2
152         mAfd_handle = parent->mAfd_handle;
153 #endif
154         mAmerge_handle = parent->mAmerge_handle;
155         mAdrc_handle = parent->mAdrc_handle;
156     } else {
157         RkAiqAeHandleInt::init();
158     }
159 }
160 
161 void
deInit()162 RkAiqCustomAeHandle::deInit() {
163     if (mIsMulRun) {
164         mConfig      = NULL;
165         mPreInParam   = NULL;
166         mProcInParam = NULL;
167         mProcOutParam = NULL;
168         mPostInParam  = NULL;
169         mPostOutParam = NULL;
170 #if RKAIQ_HAVE_AF
171         mAf_handle = NULL;
172 #endif
173 #if RKAIQ_HAVE_AFD_V1 || RKAIQ_HAVE_AFD_V2
174         mAfd_handle = NULL;
175 #endif
176         mAmerge_handle = NULL;
177         mAdrc_handle = NULL;
178     } else {
179         RkAiqAeHandleInt::deInit();
180     }
181 }
182 
preProcess()183 XCamReturn RkAiqCustomAeHandle::preProcess() {
184     ENTER_ANALYZER_FUNCTION();
185 
186     XCamReturn ret = XCAM_RETURN_NO_ERROR;
187 
188     RkAiqAlgoPreAe* ae_pre_int        = (RkAiqAlgoPreAe*)mPreInParam;
189     bool postMsg = true;
190 #ifdef BYPASS_CUSTOM_AE
191     if (0) {
192 #else
193     if (mIsMulRun) {
194 #endif
195         // use parent's mem, so child algo results can overwrite parents results
196         RkAiqAeHandleInt* parent =  dynamic_cast<RkAiqAeHandleInt*>(mParentHdl);
197         if (!parent)
198             LOGE_AEC("no parent ae handler in multiple handler mode !");
199         mPreResShared =  parent->mPreResShared;
200     } else {
201         mPreResShared = new RkAiqAlgoPreResAeIntShared();
202         if (!mPreResShared.ptr()) {
203             LOGE("new ae mPreOutParam failed, bypass!");
204             return XCAM_RETURN_BYPASS;
205         }
206     }
207 
208     return RkAiqAeHandleInt::preProcess();
209 
210     EXIT_ANALYZER_FUNCTION();
211     return XCAM_RETURN_NO_ERROR;
212 }
213 
214 XCamReturn RkAiqCustomAeHandle::processing() {
215     ENTER_ANALYZER_FUNCTION();
216 
217     XCamReturn ret = XCAM_RETURN_NO_ERROR;
218 
219 #ifdef BYPASS_CUSTOM_AE
220     if (0) {
221 #else
222     if (mIsMulRun) {
223 #endif
224     } else {
225     }
226 
227     return RkAiqAeHandleInt::processing();
228 
229     EXIT_ANALYZER_FUNCTION();
230     return ret;
231 }
232 
233 XCamReturn RkAiqCustomAeHandle::postProcess() {
234     return XCAM_RETURN_NO_ERROR;
235 }
236 
237 XCamReturn RkAiqCustomAeHandle::genIspResult(RkAiqFullParams* params, RkAiqFullParams* cur_params) {
238 #ifdef BYPASS_CUSTOM_AE
239     return XCAM_RETURN_NO_ERROR;
240 #else
241     return RkAiqAeHandleInt::genIspResult(params, cur_params);
242 #endif
243 }
244 
245 }  // namespace RkCam
246