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