1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * Copyright (c) 2019 Rockchip Corporation
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Licensed under the Apache License, Version 2.0 (the "License");
5*4882a593Smuzhiyun * you may not use this file except in compliance with the License.
6*4882a593Smuzhiyun * You may obtain a copy of the License at
7*4882a593Smuzhiyun *
8*4882a593Smuzhiyun * http://www.apache.org/licenses/LICENSE-2.0
9*4882a593Smuzhiyun *
10*4882a593Smuzhiyun * Unless required by applicable law or agreed to in writing, software
11*4882a593Smuzhiyun * distributed under the License is distributed on an "AS IS" BASIS,
12*4882a593Smuzhiyun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4882a593Smuzhiyun * See the License for the specific language governing permissions and
14*4882a593Smuzhiyun * limitations under the License.
15*4882a593Smuzhiyun *
16*4882a593Smuzhiyun */
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun #include "Isp20Params.h"
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun #include <climits>
21*4882a593Smuzhiyun #include <cstring>
22*4882a593Smuzhiyun #include <type_traits>
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun #include "common/rkisp21-config.h"
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun namespace RkCam {
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun #ifndef DISABLE_PARAMS_ASSEMBLER
29*4882a593Smuzhiyun uint32_t IspParamsAssembler::MAX_PENDING_PARAMS = 2;
30*4882a593Smuzhiyun
IspParamsAssembler(const char * name)31*4882a593Smuzhiyun IspParamsAssembler::IspParamsAssembler (const char* name)
32*4882a593Smuzhiyun : mLatestReadyFrmId(-1)
33*4882a593Smuzhiyun , mReadyMask(0)
34*4882a593Smuzhiyun , mReadyNums(0)
35*4882a593Smuzhiyun , mName(name)
36*4882a593Smuzhiyun , mCondNum(0)
37*4882a593Smuzhiyun , started(false)
38*4882a593Smuzhiyun {
39*4882a593Smuzhiyun }
40*4882a593Smuzhiyun
~IspParamsAssembler()41*4882a593Smuzhiyun IspParamsAssembler::~IspParamsAssembler ()
42*4882a593Smuzhiyun {
43*4882a593Smuzhiyun }
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun void
rmReadyCondition(uint32_t cond)46*4882a593Smuzhiyun IspParamsAssembler::rmReadyCondition(uint32_t cond)
47*4882a593Smuzhiyun {
48*4882a593Smuzhiyun SmartLock locker (mParamsMutex);
49*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
50*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
51*4882a593Smuzhiyun if (mCondMaskMap.find(cond) != mCondMaskMap.end()) {
52*4882a593Smuzhiyun mReadyMask &= ~mCondMaskMap[cond];
53*4882a593Smuzhiyun }
54*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
55*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
56*4882a593Smuzhiyun }
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun void
addReadyCondition(uint32_t cond)59*4882a593Smuzhiyun IspParamsAssembler::addReadyCondition(uint32_t cond)
60*4882a593Smuzhiyun {
61*4882a593Smuzhiyun SmartLock locker (mParamsMutex);
62*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
63*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun if (mCondMaskMap.find(cond) == mCondMaskMap.end()) {
66*4882a593Smuzhiyun if (mCondNum > 63) {
67*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: max condintion num exceed 32",
68*4882a593Smuzhiyun mName.c_str());
69*4882a593Smuzhiyun return;
70*4882a593Smuzhiyun }
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun mCondMaskMap[cond] = 1 << mCondNum;
73*4882a593Smuzhiyun mReadyMask |= mCondMaskMap[cond];
74*4882a593Smuzhiyun mCondNum++;
75*4882a593Smuzhiyun LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: map cond %s 0x%x -> 0x%llx, mask: 0x%llx",
76*4882a593Smuzhiyun mName.c_str(), Cam3aResultType2Str[cond], cond, mCondMaskMap[cond], mReadyMask);
77*4882a593Smuzhiyun } else {
78*4882a593Smuzhiyun LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: map cond %s 0x%x -> 0x%llx already added",
79*4882a593Smuzhiyun mName.c_str(), Cam3aResultType2Str[cond], cond, mCondMaskMap[cond]);
80*4882a593Smuzhiyun }
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
83*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
84*4882a593Smuzhiyun }
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun XCamReturn
queue(SmartPtr<cam3aResult> & result)87*4882a593Smuzhiyun IspParamsAssembler::queue(SmartPtr<cam3aResult>& result)
88*4882a593Smuzhiyun {
89*4882a593Smuzhiyun SmartLock locker (mParamsMutex);
90*4882a593Smuzhiyun return queue_locked(result);
91*4882a593Smuzhiyun }
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun XCamReturn
queue_locked(SmartPtr<cam3aResult> & result)94*4882a593Smuzhiyun IspParamsAssembler::queue_locked(SmartPtr<cam3aResult>& result)
95*4882a593Smuzhiyun {
96*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
97*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun XCamReturn ret = XCAM_RETURN_NO_ERROR;
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun if (!result.ptr()) {
102*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: null result", mName.c_str());
103*4882a593Smuzhiyun return ret;
104*4882a593Smuzhiyun }
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun uint32_t frame_id = result->getId();
107*4882a593Smuzhiyun int type = result->getType();
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun if (!started) {
110*4882a593Smuzhiyun LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: intial params type %s , result_id[%d] !",
111*4882a593Smuzhiyun mName.c_str(), Cam3aResultType2Str[type], frame_id);
112*4882a593Smuzhiyun if (frame_id != 0)
113*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: intial params type %s , result_id[%d] != 0",
114*4882a593Smuzhiyun mName.c_str(), Cam3aResultType2Str[type], frame_id);
115*4882a593Smuzhiyun mInitParamsList.push_back(result);
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun return XCAM_RETURN_NO_ERROR;
118*4882a593Smuzhiyun }
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun #if 0 // allow non-mandatory params
121*4882a593Smuzhiyun if (mCondMaskMap.find(type) == mCondMaskMap.end()) {
122*4882a593Smuzhiyun LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: result type: 0x%x is not required, skip ",
123*4882a593Smuzhiyun mName.c_str(), type);
124*4882a593Smuzhiyun for (auto cond_it : mCondMaskMap)
125*4882a593Smuzhiyun LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: -->need type: 0x%x", mName.c_str(), cond_it.first);
126*4882a593Smuzhiyun return ret;
127*4882a593Smuzhiyun }
128*4882a593Smuzhiyun #endif
129*4882a593Smuzhiyun // exception case 1 : wrong result frame_id
130*4882a593Smuzhiyun if (frame_id != (uint32_t)(-1) && (frame_id <= mLatestReadyFrmId)) {
131*4882a593Smuzhiyun // merged to the oldest one
132*4882a593Smuzhiyun bool found = false;
133*4882a593Smuzhiyun for (const auto& iter : mParamsMap) {
134*4882a593Smuzhiyun if (!(iter.second.flags & mCondMaskMap[type])) {
135*4882a593Smuzhiyun frame_id = iter.first;
136*4882a593Smuzhiyun found = true;
137*4882a593Smuzhiyun break;
138*4882a593Smuzhiyun }
139*4882a593Smuzhiyun }
140*4882a593Smuzhiyun if (!found) {
141*4882a593Smuzhiyun if (!mParamsMap.empty())
142*4882a593Smuzhiyun frame_id = (mParamsMap.rbegin())->first + 1;
143*4882a593Smuzhiyun else {
144*4882a593Smuzhiyun // except for initial 3 frame params
145*4882a593Smuzhiyun if ((mLatestReadyFrmId == (uint32_t)(-1)) || (mLatestReadyFrmId < 3)) {
146*4882a593Smuzhiyun frame_id = mLatestReadyFrmId + 1;
147*4882a593Smuzhiyun } else {
148*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: type %s, mLatestReadyFrmId %u, frame_id %u, "
149*4882a593Smuzhiyun "can't find a proper unready params, impossible case, drop it",
150*4882a593Smuzhiyun mName.c_str(), Cam3aResultType2Str[type], mLatestReadyFrmId, frame_id);
151*4882a593Smuzhiyun return ret;
152*4882a593Smuzhiyun }
153*4882a593Smuzhiyun }
154*4882a593Smuzhiyun }
155*4882a593Smuzhiyun LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: type %s , delayed result_id[%u], merged to %u",
156*4882a593Smuzhiyun mName.c_str(), Cam3aResultType2Str[type], result->getId(), frame_id);
157*4882a593Smuzhiyun result->setId(frame_id);
158*4882a593Smuzhiyun } else if (frame_id != 0 && mLatestReadyFrmId == (uint32_t)(-1)) {
159*4882a593Smuzhiyun LOGW_CAMHW_SUBM(ISP20PARAM_SUBM,
160*4882a593Smuzhiyun "Wrong initial id %u set to 0, last %u", frame_id,
161*4882a593Smuzhiyun mLatestReadyFrmId);
162*4882a593Smuzhiyun frame_id = 0;
163*4882a593Smuzhiyun result->setId(0);
164*4882a593Smuzhiyun } else if (frame_id == (uint32_t)(-1)) {
165*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "type:%s, frame_id == -1 && mLatestReadyFrmId == %d ",
166*4882a593Smuzhiyun Cam3aResultType2Str[type], mLatestReadyFrmId);
167*4882a593Smuzhiyun return ret;
168*4882a593Smuzhiyun }
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun mParamsMap[frame_id].params.push_back(result);
171*4882a593Smuzhiyun mParamsMap[frame_id].flags |= mCondMaskMap[type];
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, new params: frame: %u, type:%s, flag: 0x%llx",
174*4882a593Smuzhiyun mName.c_str(), frame_id, Cam3aResultType2Str[type], mCondMaskMap[type]);
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun bool ready =
177*4882a593Smuzhiyun (mReadyMask == mParamsMap[frame_id].flags) ? true : false;
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, frame: %d, flags: 0x%llx, mask: 0x%llx, ready status: %d !",
180*4882a593Smuzhiyun mName.c_str(), frame_id, mParamsMap[frame_id].flags, mReadyMask, ready);
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun mParamsMap[frame_id].ready = ready;
183*4882a593Smuzhiyun
184*4882a593Smuzhiyun if (ready) {
185*4882a593Smuzhiyun mReadyNums++;
186*4882a593Smuzhiyun if (mLatestReadyFrmId == (uint32_t)(-1) || (frame_id == 0) || (frame_id > mLatestReadyFrmId))
187*4882a593Smuzhiyun mLatestReadyFrmId = frame_id;
188*4882a593Smuzhiyun else {
189*4882a593Smuzhiyun // impossible case
190*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, wrong ready params, latest %u <= new %u, drop it !",
191*4882a593Smuzhiyun mName.c_str(), mLatestReadyFrmId, frame_id);
192*4882a593Smuzhiyun mParamsMap.erase(mParamsMap.find(frame_id));
193*4882a593Smuzhiyun return ret;
194*4882a593Smuzhiyun }
195*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, camId:%d, frameId:%d params ready, mReadyNums: %d !",
196*4882a593Smuzhiyun mName.c_str(), mCamPhyId, frame_id, mReadyNums);
197*4882a593Smuzhiyun }
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun bool overflow = false;
200*4882a593Smuzhiyun if (mParamsMap.size() > MAX_PENDING_PARAMS) {
201*4882a593Smuzhiyun LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: pending params overflow, max is %d",
202*4882a593Smuzhiyun mName.c_str(), MAX_PENDING_PARAMS);
203*4882a593Smuzhiyun overflow = true;
204*4882a593Smuzhiyun }
205*4882a593Smuzhiyun bool ready_disorder = false;
206*4882a593Smuzhiyun if (mReadyNums > 0 && !(mParamsMap.begin())->second.ready) {
207*4882a593Smuzhiyun ready_disorder = true;
208*4882a593Smuzhiyun LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: ready params disordered",
209*4882a593Smuzhiyun mName.c_str());
210*4882a593Smuzhiyun }
211*4882a593Smuzhiyun if (overflow || ready_disorder) {
212*4882a593Smuzhiyun // exception case 2 : current ready one is not the first one in
213*4882a593Smuzhiyun // mParamsMap, this means some conditions frame_id may be NOT
214*4882a593Smuzhiyun // continuous, should check the AIQCORE and isp driver,
215*4882a593Smuzhiyun // so far we merge all disordered to one.
216*4882a593Smuzhiyun std::map<uint32_t, params_t>::iterator it = mParamsMap.begin();
217*4882a593Smuzhiyun cam3aResultList merge_list;
218*4882a593Smuzhiyun uint32_t merge_id = 0;
219*4882a593Smuzhiyun for (it = mParamsMap.begin(); it != mParamsMap.end();) {
220*4882a593Smuzhiyun if (!(it->second.ready)) {
221*4882a593Smuzhiyun LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: ready disorderd, NOT ready id(flags:0x%llx) %u < ready %u !",
222*4882a593Smuzhiyun mName.c_str(), it->second.flags, it->first, frame_id);
223*4882a593Smuzhiyun // print missing params
224*4882a593Smuzhiyun std::string missing_conds;
225*4882a593Smuzhiyun for (auto cond : mCondMaskMap) {
226*4882a593Smuzhiyun if (!(cond.second & it->second.flags)) {
227*4882a593Smuzhiyun missing_conds.append(Cam3aResultType2Str[cond.first]);
228*4882a593Smuzhiyun missing_conds.append(",");
229*4882a593Smuzhiyun }
230*4882a593Smuzhiyun }
231*4882a593Smuzhiyun if (!missing_conds.empty()) {
232*4882a593Smuzhiyun LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: [%u] missing conditions: %s !",
233*4882a593Smuzhiyun mName.c_str(), it->first, missing_conds.c_str());
234*4882a593Smuzhiyun }
235*4882a593Smuzhiyun // forced to ready
236*4882a593Smuzhiyun merge_list.insert(merge_list.end(), it->second.params.begin(), it->second.params.end());
237*4882a593Smuzhiyun merge_id = it->first;
238*4882a593Smuzhiyun it = mParamsMap.erase(it);
239*4882a593Smuzhiyun } else
240*4882a593Smuzhiyun break;
241*4882a593Smuzhiyun }
242*4882a593Smuzhiyun
243*4882a593Smuzhiyun if (merge_list.size() > 0) {
244*4882a593Smuzhiyun mReadyNums++;
245*4882a593Smuzhiyun if (mLatestReadyFrmId == (uint32_t)(-1) || merge_id > mLatestReadyFrmId)
246*4882a593Smuzhiyun mLatestReadyFrmId = merge_id;
247*4882a593Smuzhiyun mParamsMap[merge_id].params.clear();
248*4882a593Smuzhiyun mParamsMap[merge_id].params.assign(merge_list.begin(), merge_list.end());
249*4882a593Smuzhiyun LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: merge all pending disorderd to frame %u !",
250*4882a593Smuzhiyun mName.c_str(), merge_id);
251*4882a593Smuzhiyun mParamsMap[merge_id].flags = mReadyMask;
252*4882a593Smuzhiyun mParamsMap[merge_id].ready = true;
253*4882a593Smuzhiyun }
254*4882a593Smuzhiyun }
255*4882a593Smuzhiyun
256*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
257*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun return ret;
260*4882a593Smuzhiyun
261*4882a593Smuzhiyun }
262*4882a593Smuzhiyun
263*4882a593Smuzhiyun XCamReturn
queue(cam3aResultList & results)264*4882a593Smuzhiyun IspParamsAssembler::queue(cam3aResultList& results)
265*4882a593Smuzhiyun {
266*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n", __FUNCTION__, __LINE__, mName.c_str());
267*4882a593Smuzhiyun
268*4882a593Smuzhiyun XCamReturn ret = XCAM_RETURN_NO_ERROR;
269*4882a593Smuzhiyun
270*4882a593Smuzhiyun SmartLock locker (mParamsMutex);
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun for (auto result : results)
273*4882a593Smuzhiyun queue_locked(result);
274*4882a593Smuzhiyun
275*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
276*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
277*4882a593Smuzhiyun
278*4882a593Smuzhiyun return ret;
279*4882a593Smuzhiyun }
280*4882a593Smuzhiyun
281*4882a593Smuzhiyun void
forceReady(uint32_t force_frame_id)282*4882a593Smuzhiyun IspParamsAssembler::forceReady(uint32_t force_frame_id)
283*4882a593Smuzhiyun {
284*4882a593Smuzhiyun SmartLock locker (mParamsMutex);
285*4882a593Smuzhiyun uint32_t frame_id = 0;
286*4882a593Smuzhiyun
287*4882a593Smuzhiyun for (auto& item : mParamsMap) {
288*4882a593Smuzhiyun frame_id = item.first;
289*4882a593Smuzhiyun if (frame_id < force_frame_id) {
290*4882a593Smuzhiyun if (!mParamsMap[frame_id].ready && 0 != mParamsMap[frame_id].flags) {
291*4882a593Smuzhiyun // print missing params
292*4882a593Smuzhiyun std::string missing_conds;
293*4882a593Smuzhiyun for (auto cond : mCondMaskMap) {
294*4882a593Smuzhiyun if (!(cond.second & mParamsMap[frame_id].flags)) {
295*4882a593Smuzhiyun missing_conds.append(Cam3aResultType2Str[cond.first]);
296*4882a593Smuzhiyun missing_conds.append(",");
297*4882a593Smuzhiyun }
298*4882a593Smuzhiyun }
299*4882a593Smuzhiyun if (!missing_conds.empty()) {
300*4882a593Smuzhiyun LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: %s: [%u] missing conditions: %s !",
301*4882a593Smuzhiyun mName.c_str(), __func__, frame_id, missing_conds.c_str());
302*4882a593Smuzhiyun }
303*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:%s: [%d] params forced to ready",
304*4882a593Smuzhiyun mName.c_str(), __func__, frame_id);
305*4882a593Smuzhiyun mReadyNums++;
306*4882a593Smuzhiyun if (mLatestReadyFrmId == (uint32_t)(-1) || frame_id > mLatestReadyFrmId)
307*4882a593Smuzhiyun mLatestReadyFrmId = frame_id;
308*4882a593Smuzhiyun mParamsMap[frame_id].flags = mReadyMask;
309*4882a593Smuzhiyun mParamsMap[frame_id].ready = true;
310*4882a593Smuzhiyun } else {
311*4882a593Smuzhiyun LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:%s: [%d] params is already ready",
312*4882a593Smuzhiyun mName.c_str(), __func__, frame_id);
313*4882a593Smuzhiyun }
314*4882a593Smuzhiyun }
315*4882a593Smuzhiyun }
316*4882a593Smuzhiyun }
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun bool
ready()319*4882a593Smuzhiyun IspParamsAssembler::ready()
320*4882a593Smuzhiyun {
321*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
322*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
323*4882a593Smuzhiyun SmartLock locker (mParamsMutex);
324*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: ready params num %d", mName.c_str(), mReadyNums);
325*4882a593Smuzhiyun return mReadyNums > 0 ? true : false;
326*4882a593Smuzhiyun }
327*4882a593Smuzhiyun
328*4882a593Smuzhiyun XCamReturn
deQueOne(cam3aResultList & results,uint32_t & frame_id)329*4882a593Smuzhiyun IspParamsAssembler::deQueOne(cam3aResultList& results, uint32_t& frame_id)
330*4882a593Smuzhiyun {
331*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
332*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
333*4882a593Smuzhiyun
334*4882a593Smuzhiyun XCamReturn ret = XCAM_RETURN_NO_ERROR;
335*4882a593Smuzhiyun
336*4882a593Smuzhiyun SmartLock locker (mParamsMutex);
337*4882a593Smuzhiyun if (mReadyNums > 0) {
338*4882a593Smuzhiyun // get next params id, the first one in map
339*4882a593Smuzhiyun std::map<uint32_t, params_t>::iterator it = mParamsMap.begin();
340*4882a593Smuzhiyun
341*4882a593Smuzhiyun if (it == mParamsMap.end()) {
342*4882a593Smuzhiyun LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: mParamsMap is empty !", mName.c_str());
343*4882a593Smuzhiyun return XCAM_RETURN_ERROR_PARAM;
344*4882a593Smuzhiyun } else {
345*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: deque frame %u params, ready %d",
346*4882a593Smuzhiyun mName.c_str(), it->first, it->second.ready);
347*4882a593Smuzhiyun results = it->second.params;
348*4882a593Smuzhiyun frame_id = it->first;
349*4882a593Smuzhiyun mParamsMap.erase(it);
350*4882a593Smuzhiyun mReadyNums--;
351*4882a593Smuzhiyun }
352*4882a593Smuzhiyun } else {
353*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: no ready params", mName.c_str());
354*4882a593Smuzhiyun
355*4882a593Smuzhiyun if (mParamsMap.size() > 0) {
356*4882a593Smuzhiyun std::map<uint32_t, params_t>::reverse_iterator rit = mParamsMap.rbegin();
357*4882a593Smuzhiyun
358*4882a593Smuzhiyun if (rit->first - mLatestReadyFrmId != (uint32_t)(-1) && rit->first - mLatestReadyFrmId > 5) {
359*4882a593Smuzhiyun std::map<uint32_t, params_t>::iterator it = mParamsMap.begin();
360*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "not ready params num over 5, force ready: %d", it->first);
361*4882a593Smuzhiyun
362*4882a593Smuzhiyun mLatestReadyFrmId = it->first;
363*4882a593Smuzhiyun results = it->second.params;
364*4882a593Smuzhiyun mParamsMap.erase(it);
365*4882a593Smuzhiyun } else {
366*4882a593Smuzhiyun LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: mParamsMap is %d %d!", mName.c_str(), mParamsMap.size(), __LINE__);
367*4882a593Smuzhiyun return XCAM_RETURN_ERROR_PARAM;
368*4882a593Smuzhiyun }
369*4882a593Smuzhiyun } else {
370*4882a593Smuzhiyun LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: mParamsMap is empty %d!", mName.c_str(), __LINE__);
371*4882a593Smuzhiyun return XCAM_RETURN_ERROR_PARAM;
372*4882a593Smuzhiyun }
373*4882a593Smuzhiyun }
374*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
375*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
376*4882a593Smuzhiyun
377*4882a593Smuzhiyun return ret;
378*4882a593Smuzhiyun }
379*4882a593Smuzhiyun
380*4882a593Smuzhiyun void
reset()381*4882a593Smuzhiyun IspParamsAssembler::reset()
382*4882a593Smuzhiyun {
383*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
384*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
385*4882a593Smuzhiyun SmartLock locker (mParamsMutex);
386*4882a593Smuzhiyun reset_locked();
387*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
388*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
389*4882a593Smuzhiyun }
390*4882a593Smuzhiyun
391*4882a593Smuzhiyun void
reset_locked()392*4882a593Smuzhiyun IspParamsAssembler::reset_locked()
393*4882a593Smuzhiyun {
394*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
395*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
396*4882a593Smuzhiyun mParamsMap.clear();
397*4882a593Smuzhiyun mLatestReadyFrmId = (uint32_t)(-1);
398*4882a593Smuzhiyun mReadyMask = 0;
399*4882a593Smuzhiyun mReadyNums = 0;
400*4882a593Smuzhiyun mCondNum = 0;
401*4882a593Smuzhiyun mCondMaskMap.clear();
402*4882a593Smuzhiyun mInitParamsList.clear();
403*4882a593Smuzhiyun started = false;
404*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
405*4882a593Smuzhiyun __FUNCTION__, __LINE__, mName.c_str());
406*4882a593Smuzhiyun }
407*4882a593Smuzhiyun
408*4882a593Smuzhiyun XCamReturn
start()409*4882a593Smuzhiyun IspParamsAssembler::start()
410*4882a593Smuzhiyun {
411*4882a593Smuzhiyun SmartLock locker (mParamsMutex);
412*4882a593Smuzhiyun if (started)
413*4882a593Smuzhiyun return XCAM_RETURN_NO_ERROR;
414*4882a593Smuzhiyun
415*4882a593Smuzhiyun started = true;
416*4882a593Smuzhiyun
417*4882a593Smuzhiyun for (auto result : mInitParamsList)
418*4882a593Smuzhiyun queue_locked(result);
419*4882a593Smuzhiyun
420*4882a593Smuzhiyun mInitParamsList.clear();
421*4882a593Smuzhiyun
422*4882a593Smuzhiyun return XCAM_RETURN_NO_ERROR;
423*4882a593Smuzhiyun }
424*4882a593Smuzhiyun
425*4882a593Smuzhiyun void
stop()426*4882a593Smuzhiyun IspParamsAssembler::stop() {
427*4882a593Smuzhiyun SmartLock locker (mParamsMutex);
428*4882a593Smuzhiyun if (!started)
429*4882a593Smuzhiyun return;
430*4882a593Smuzhiyun started = false;
431*4882a593Smuzhiyun reset_locked();
432*4882a593Smuzhiyun }
433*4882a593Smuzhiyun #endif
434*4882a593Smuzhiyun
435*4882a593Smuzhiyun template <typename T>
436*4882a593Smuzhiyun struct ConvertAeHelper {
437*4882a593Smuzhiyun template < typename U = T, typename std::enable_if <
438*4882a593Smuzhiyun (std::is_same<U, struct isp2x_isp_params_cfg>::value ||
439*4882a593Smuzhiyun std::is_same<U, struct isp21_isp_params_cfg>::value),
440*4882a593Smuzhiyun bool >::type = true >
copyYuvAeCfgRkCam::ConvertAeHelper441*4882a593Smuzhiyun void copyYuvAeCfg(U& cfg, const rk_aiq_isp_aec_meas_t& aec_meas) {
442*4882a593Smuzhiyun memcpy(&cfg.meas.yuvae, &aec_meas.yuvae, sizeof(aec_meas.yuvae));
443*4882a593Smuzhiyun }
444*4882a593Smuzhiyun
445*4882a593Smuzhiyun template < typename U = T,
446*4882a593Smuzhiyun typename std::enable_if < !(std::is_same<U, struct isp2x_isp_params_cfg>::value ||
447*4882a593Smuzhiyun std::is_same<U, struct isp21_isp_params_cfg>::value),
448*4882a593Smuzhiyun bool >::type = false >
copyYuvAeCfgRkCam::ConvertAeHelper449*4882a593Smuzhiyun void copyYuvAeCfg(U& cfg, const rk_aiq_isp_aec_meas_t& aec_meas) {}
450*4882a593Smuzhiyun
451*4882a593Smuzhiyun template < typename U = T,
452*4882a593Smuzhiyun typename std::enable_if < (std::is_same<U, struct isp2x_isp_params_cfg>::value ||
453*4882a593Smuzhiyun std::is_same<U, struct isp21_isp_params_cfg>::value),
454*4882a593Smuzhiyun bool >::type = true >
copyAeHistCfgRkCam::ConvertAeHelper455*4882a593Smuzhiyun void copyAeHistCfg(U& cfg, const rk_aiq_isp_hist_meas_t& hist_meas) {
456*4882a593Smuzhiyun memcpy(&cfg.meas.sihst, &hist_meas.sihist, sizeof(hist_meas.sihist));
457*4882a593Smuzhiyun }
458*4882a593Smuzhiyun
459*4882a593Smuzhiyun template < typename U = T,
460*4882a593Smuzhiyun typename std::enable_if < !(std::is_same<U, struct isp2x_isp_params_cfg>::value ||
461*4882a593Smuzhiyun std::is_same<U, struct isp21_isp_params_cfg>::value),
462*4882a593Smuzhiyun bool >::type = false >
copyAeHistCfgRkCam::ConvertAeHelper463*4882a593Smuzhiyun void copyAeHistCfg(U& cfg, const rk_aiq_isp_hist_meas_t& hist_meas) {}
464*4882a593Smuzhiyun };
465*4882a593Smuzhiyun
466*4882a593Smuzhiyun template <class T>
convertAiqAeToIsp20Params(T & isp_cfg,const rk_aiq_isp_aec_meas_t & aec_meas)467*4882a593Smuzhiyun void Isp20Params::convertAiqAeToIsp20Params(T& isp_cfg, const rk_aiq_isp_aec_meas_t& aec_meas) {
468*4882a593Smuzhiyun /* ae update */
469*4882a593Smuzhiyun if(/*aec_meas.ae_meas_en*/1) {
470*4882a593Smuzhiyun #if 0
471*4882a593Smuzhiyun if(_working_mode == RK_AIQ_WORKING_MODE_NORMAL) { // normal
472*4882a593Smuzhiyun switch(aec_meas.rawae0.rawae_sel) {
473*4882a593Smuzhiyun case 0:
474*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE0_ID;
475*4882a593Smuzhiyun break;
476*4882a593Smuzhiyun case 1:
477*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE1_ID;
478*4882a593Smuzhiyun break;
479*4882a593Smuzhiyun case 2:
480*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE2_ID;
481*4882a593Smuzhiyun break;
482*4882a593Smuzhiyun }
483*4882a593Smuzhiyun } else if(_working_mode < RK_AIQ_WORKING_MODE_ISP_HDR3) { //hdr 2
484*4882a593Smuzhiyun switch(aec_meas.rawae0.rawae_sel) {
485*4882a593Smuzhiyun case 0:
486*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE0_ID;
487*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE1_ID;
488*4882a593Smuzhiyun break;
489*4882a593Smuzhiyun case 1:
490*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE0_ID;
491*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE1_ID;
492*4882a593Smuzhiyun break;
493*4882a593Smuzhiyun case 2:
494*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE1_ID;
495*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE2_ID;
496*4882a593Smuzhiyun break;
497*4882a593Smuzhiyun }
498*4882a593Smuzhiyun } else { // hdr 3
499*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE0_ID;
500*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE1_ID;
501*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE2_ID;
502*4882a593Smuzhiyun }
503*4882a593Smuzhiyun #else
504*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE0_ID;
505*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE1_ID;
506*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE2_ID;
507*4882a593Smuzhiyun #endif
508*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE3_ID;
509*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_YUVAE_ID;
510*4882a593Smuzhiyun
511*4882a593Smuzhiyun
512*4882a593Smuzhiyun if(/*aec_meas.ae_meas_update*/1) {
513*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWAE0_ID;
514*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWAE0_ID;
515*4882a593Smuzhiyun
516*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWAE1_ID;
517*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWAE1_ID;
518*4882a593Smuzhiyun
519*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWAE2_ID;
520*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWAE2_ID;
521*4882a593Smuzhiyun
522*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWAE3_ID;
523*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWAE3_ID;
524*4882a593Smuzhiyun
525*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_YUVAE_ID;
526*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_YUVAE_ID;
527*4882a593Smuzhiyun } else {
528*4882a593Smuzhiyun return;
529*4882a593Smuzhiyun }
530*4882a593Smuzhiyun } else {
531*4882a593Smuzhiyun return;
532*4882a593Smuzhiyun }
533*4882a593Smuzhiyun
534*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawae3, &aec_meas.rawae3, sizeof(aec_meas.rawae3));
535*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawae1, &aec_meas.rawae1, sizeof(aec_meas.rawae1));
536*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawae2, &aec_meas.rawae2, sizeof(aec_meas.rawae2));
537*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawae0, &aec_meas.rawae0, sizeof(aec_meas.rawae0));
538*4882a593Smuzhiyun #if defined(ISP_HW_V20) || defined(ISP_HW_V21)
539*4882a593Smuzhiyun ConvertAeHelper<T> helper;
540*4882a593Smuzhiyun helper.copyYuvAeCfg(isp_cfg, aec_meas);
541*4882a593Smuzhiyun #endif
542*4882a593Smuzhiyun /*
543*4882a593Smuzhiyun * LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: hist_meas-isp_cfg size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
544*4882a593Smuzhiyun * sizeof(aec_meas.rawae3),
545*4882a593Smuzhiyun * sizeof(isp_cfg.meas.rawae3),
546*4882a593Smuzhiyun * sizeof(aec_meas.rawae1),
547*4882a593Smuzhiyun * sizeof(isp_cfg.meas.rawae1),
548*4882a593Smuzhiyun * sizeof(aec_meas.rawae2),
549*4882a593Smuzhiyun * sizeof(isp_cfg.meas.rawae2),
550*4882a593Smuzhiyun * sizeof(aec_meas.rawae0),
551*4882a593Smuzhiyun * sizeof(isp_cfg.meas.rawae0));
552*4882a593Smuzhiyun *
553*4882a593Smuzhiyun * LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: aec_meas: win size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
554*4882a593Smuzhiyun * aec_meas.rawae0.win.h_size,
555*4882a593Smuzhiyun * aec_meas.rawae0.win.v_size,
556*4882a593Smuzhiyun * aec_meas.rawae1.win.h_size,
557*4882a593Smuzhiyun * aec_meas.rawae1.win.v_size,
558*4882a593Smuzhiyun * aec_meas.rawae2.win.h_size,
559*4882a593Smuzhiyun * aec_meas.rawae2.win.v_size,
560*4882a593Smuzhiyun * aec_meas.rawae3.win.h_size,
561*4882a593Smuzhiyun * aec_meas.rawae3.win.v_size);
562*4882a593Smuzhiyun *
563*4882a593Smuzhiyun * LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: isp_cfg: win size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
564*4882a593Smuzhiyun * isp_cfg.meas.rawae0.win.h_size,
565*4882a593Smuzhiyun * isp_cfg.meas.rawae0.win.v_size,
566*4882a593Smuzhiyun * isp_cfg.meas.rawae1.win.h_size,
567*4882a593Smuzhiyun * isp_cfg.meas.rawae1.win.v_size,
568*4882a593Smuzhiyun * isp_cfg.meas.rawae2.win.h_size,
569*4882a593Smuzhiyun * isp_cfg.meas.rawae2.win.v_size,
570*4882a593Smuzhiyun * isp_cfg.meas.rawae3.win.h_size,
571*4882a593Smuzhiyun * isp_cfg.meas.rawae3.win.v_size);
572*4882a593Smuzhiyun */
573*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawae3, &aec_meas.rawae3, sizeof(aec_meas.rawae3));
574*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawae1, &aec_meas.rawae1, sizeof(aec_meas.rawae1));
575*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawae2, &aec_meas.rawae2, sizeof(aec_meas.rawae2));
576*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawae0, &aec_meas.rawae0, sizeof(aec_meas.rawae0));
577*4882a593Smuzhiyun #if defined(ISP_HW_V32) || defined(ISP_HW_V32_LITE)
578*4882a593Smuzhiyun mLatestMeasCfg.rawae3 = isp_cfg.meas.rawae3;
579*4882a593Smuzhiyun mLatestMeasCfg.rawae1 = isp_cfg.meas.rawae1;
580*4882a593Smuzhiyun mLatestMeasCfg.rawae2 = isp_cfg.meas.rawae2;
581*4882a593Smuzhiyun mLatestMeasCfg.rawae0 = isp_cfg.meas.rawae0;
582*4882a593Smuzhiyun #endif
583*4882a593Smuzhiyun }
584*4882a593Smuzhiyun
585*4882a593Smuzhiyun template<class T>
586*4882a593Smuzhiyun void
convertAiqHistToIsp20Params(T & isp_cfg,const rk_aiq_isp_hist_meas_t & hist_meas)587*4882a593Smuzhiyun Isp20Params::convertAiqHistToIsp20Params
588*4882a593Smuzhiyun (
589*4882a593Smuzhiyun T& isp_cfg,
590*4882a593Smuzhiyun const rk_aiq_isp_hist_meas_t& hist_meas
591*4882a593Smuzhiyun )
592*4882a593Smuzhiyun {
593*4882a593Smuzhiyun /* hist update */
594*4882a593Smuzhiyun if(/*hist_meas.hist_meas_en*/1) {
595*4882a593Smuzhiyun #if 0
596*4882a593Smuzhiyun if(_working_mode == RK_AIQ_WORKING_MODE_NORMAL) { // normal
597*4882a593Smuzhiyun switch(hist_meas.ae_swap) {
598*4882a593Smuzhiyun case 0:
599*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST0_ID;
600*4882a593Smuzhiyun break;
601*4882a593Smuzhiyun case 1:
602*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST1_ID;
603*4882a593Smuzhiyun break;
604*4882a593Smuzhiyun case 2:
605*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST2_ID;
606*4882a593Smuzhiyun
607*4882a593Smuzhiyun break;
608*4882a593Smuzhiyun }
609*4882a593Smuzhiyun } else if(_working_mode < RK_AIQ_WORKING_MODE_ISP_HDR3) { //hdr 2
610*4882a593Smuzhiyun switch(hist_meas.ae_swap) {
611*4882a593Smuzhiyun case 0:
612*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST0_ID;
613*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST1_ID;
614*4882a593Smuzhiyun break;
615*4882a593Smuzhiyun case 1:
616*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST0_ID;
617*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST1_ID;
618*4882a593Smuzhiyun break;
619*4882a593Smuzhiyun case 2:
620*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST1_ID;
621*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST2_ID;
622*4882a593Smuzhiyun break;
623*4882a593Smuzhiyun }
624*4882a593Smuzhiyun } else { // hdr 3
625*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST0_ID;
626*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST1_ID;
627*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST2_ID;
628*4882a593Smuzhiyun }
629*4882a593Smuzhiyun #else
630*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST0_ID;
631*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST1_ID;
632*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST2_ID;
633*4882a593Smuzhiyun #endif
634*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST3_ID;
635*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_SIHST_ID;
636*4882a593Smuzhiyun
637*4882a593Smuzhiyun if(/*hist_meas.hist_meas_update*/1) {
638*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWHIST0_ID;
639*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWHIST0_ID;
640*4882a593Smuzhiyun
641*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWHIST1_ID;
642*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWHIST1_ID;
643*4882a593Smuzhiyun
644*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWHIST2_ID;
645*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWHIST2_ID;
646*4882a593Smuzhiyun
647*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWHIST3_ID;
648*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWHIST3_ID;
649*4882a593Smuzhiyun
650*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_SIHST_ID;
651*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_SIHST_ID;
652*4882a593Smuzhiyun
653*4882a593Smuzhiyun } else {
654*4882a593Smuzhiyun return;
655*4882a593Smuzhiyun }
656*4882a593Smuzhiyun } else {
657*4882a593Smuzhiyun return;
658*4882a593Smuzhiyun }
659*4882a593Smuzhiyun
660*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawhist3, &hist_meas.rawhist3, sizeof(hist_meas.rawhist3));
661*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawhist1, &hist_meas.rawhist1, sizeof(hist_meas.rawhist1));
662*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawhist2, &hist_meas.rawhist2, sizeof(hist_meas.rawhist2));
663*4882a593Smuzhiyun memcpy(&isp_cfg.meas.rawhist0, &hist_meas.rawhist0, sizeof(hist_meas.rawhist0));
664*4882a593Smuzhiyun #if defined(ISP_HW_V20) || defined(ISP_HW_V21)
665*4882a593Smuzhiyun ConvertAeHelper<T> helper;
666*4882a593Smuzhiyun helper.copyAeHistCfg(isp_cfg, hist_meas);
667*4882a593Smuzhiyun #endif
668*4882a593Smuzhiyun /*
669*4882a593Smuzhiyun * LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: hist_meas-isp_cfg size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
670*4882a593Smuzhiyun * sizeof(hist_meas.rawhist3),
671*4882a593Smuzhiyun * sizeof(isp_cfg.meas.rawhist3),
672*4882a593Smuzhiyun * sizeof(hist_meas.rawhist1),
673*4882a593Smuzhiyun * sizeof(isp_cfg.meas.rawhist1),
674*4882a593Smuzhiyun * sizeof(hist_meas.rawhist2),
675*4882a593Smuzhiyun * sizeof(isp_cfg.meas.rawhist2),
676*4882a593Smuzhiyun * sizeof(hist_meas.rawhist0),
677*4882a593Smuzhiyun * sizeof(isp_cfg.meas.rawhist0));
678*4882a593Smuzhiyun *
679*4882a593Smuzhiyun * LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: hist_meas: hist win size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
680*4882a593Smuzhiyun * hist_meas.rawhist0.win.h_size,
681*4882a593Smuzhiyun * hist_meas.rawhist0.win.v_size,
682*4882a593Smuzhiyun * hist_meas.rawhist1.win.h_size,
683*4882a593Smuzhiyun * hist_meas.rawhist1.win.v_size,
684*4882a593Smuzhiyun * hist_meas.rawhist2.win.h_size,
685*4882a593Smuzhiyun * hist_meas.rawhist2.win.v_size,
686*4882a593Smuzhiyun * hist_meas.rawhist3.win.h_size,
687*4882a593Smuzhiyun * hist_meas.rawhist3.win.v_size);
688*4882a593Smuzhiyun *
689*4882a593Smuzhiyun * LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: isp_cfg: hist win size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
690*4882a593Smuzhiyun * isp_cfg.meas.rawhist0.win.h_size,
691*4882a593Smuzhiyun * isp_cfg.meas.rawhist0.win.v_size,
692*4882a593Smuzhiyun * isp_cfg.meas.rawhist1.win.h_size,
693*4882a593Smuzhiyun * isp_cfg.meas.rawhist1.win.v_size,
694*4882a593Smuzhiyun * isp_cfg.meas.rawhist2.win.h_size,
695*4882a593Smuzhiyun * isp_cfg.meas.rawhist2.win.v_size,
696*4882a593Smuzhiyun * isp_cfg.meas.rawhist3.win.h_size,
697*4882a593Smuzhiyun * isp_cfg.meas.rawhist3.win.v_size);
698*4882a593Smuzhiyun */
699*4882a593Smuzhiyun #if defined(ISP_HW_V32) || defined(ISP_HW_V32_LITE)
700*4882a593Smuzhiyun mLatestMeasCfg.rawhist3 = isp_cfg.meas.rawhist3;
701*4882a593Smuzhiyun mLatestMeasCfg.rawhist1 = isp_cfg.meas.rawhist1;
702*4882a593Smuzhiyun mLatestMeasCfg.rawhist2 = isp_cfg.meas.rawhist2;
703*4882a593Smuzhiyun mLatestMeasCfg.rawhist0 = isp_cfg.meas.rawhist0;
704*4882a593Smuzhiyun #endif
705*4882a593Smuzhiyun }
706*4882a593Smuzhiyun
707*4882a593Smuzhiyun #if RKAIQ_HAVE_AWB_V20
708*4882a593Smuzhiyun template<class T>
709*4882a593Smuzhiyun void
convertAiqAwbToIsp20Params(T & isp_cfg,const rk_aiq_awb_stat_cfg_v200_t & awb_meas,bool awb_cfg_udpate)710*4882a593Smuzhiyun Isp20Params::convertAiqAwbToIsp20Params(T& isp_cfg,
711*4882a593Smuzhiyun const rk_aiq_awb_stat_cfg_v200_t& awb_meas, bool awb_cfg_udpate)
712*4882a593Smuzhiyun {
713*4882a593Smuzhiyun if(awb_cfg_udpate) {
714*4882a593Smuzhiyun if(awb_meas.awbEnable) {
715*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_RAWAWB;
716*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWAWB;
717*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_RAWAWB;
718*4882a593Smuzhiyun }
719*4882a593Smuzhiyun } else {
720*4882a593Smuzhiyun return;
721*4882a593Smuzhiyun }
722*4882a593Smuzhiyun
723*4882a593Smuzhiyun struct isp2x_rawawb_meas_cfg * awb_cfg_v200 = &isp_cfg.meas.rawawb;
724*4882a593Smuzhiyun awb_cfg_v200->rawawb_sel = awb_meas.frameChoose;
725*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_xy_en = awb_meas.xyDetectionEnable;
726*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_uv_en = awb_meas.uvDetectionEnable;
727*4882a593Smuzhiyun awb_cfg_v200->sw_rawlsc_bypass_en = awb_meas.lscBypEnable;
728*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_3dyuv_ls_idx0 = awb_meas.threeDyuvIllu[0];
729*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_3dyuv_ls_idx1 = awb_meas.threeDyuvIllu[1];
730*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_3dyuv_ls_idx2 = awb_meas.threeDyuvIllu[2];
731*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_3dyuv_ls_idx3 = awb_meas.threeDyuvIllu[3];
732*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_blk_measure_mode = awb_meas.blkMeasureMode;
733*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_store_wp_th0 = awb_meas.blkMeasWpTh[0];
734*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_store_wp_th1 = awb_meas.blkMeasWpTh[1];
735*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_store_wp_th2 = awb_meas.blkMeasWpTh[2];
736*4882a593Smuzhiyun
737*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_light_num = awb_meas.lightNum;
738*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_h_offs = awb_meas.windowSet[0];
739*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_v_offs = awb_meas.windowSet[1];
740*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_h_size = awb_meas.windowSet[2];
741*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_v_size = awb_meas.windowSet[3];
742*4882a593Smuzhiyun switch(awb_meas.dsMode) {
743*4882a593Smuzhiyun case RK_AIQ_AWB_DS_4X4:
744*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_wind_size = 0;
745*4882a593Smuzhiyun break;
746*4882a593Smuzhiyun default:
747*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_wind_size = 1;
748*4882a593Smuzhiyun }
749*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_r_max = awb_meas.maxR;
750*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_g_max = awb_meas.maxG;
751*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_b_max = awb_meas.maxB;
752*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_y_max = awb_meas.maxY;
753*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_r_min = awb_meas.minR;
754*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_g_min = awb_meas.minG;
755*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_b_min = awb_meas.minB;
756*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_y_min = awb_meas.minY;
757*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_c_range = awb_meas.rgb2yuv_c_range;
758*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_y_range = awb_meas.rgb2yuv_y_range;
759*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_coeff_y_r = awb_meas.rgb2yuv_matrix[0];
760*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_coeff_y_g = awb_meas.rgb2yuv_matrix[1];
761*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_coeff_y_b = awb_meas.rgb2yuv_matrix[2];
762*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_coeff_u_r = awb_meas.rgb2yuv_matrix[3];
763*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_coeff_u_g = awb_meas.rgb2yuv_matrix[4];
764*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_coeff_u_b = awb_meas.rgb2yuv_matrix[5];
765*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_coeff_v_r = awb_meas.rgb2yuv_matrix[6];
766*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_coeff_v_g = awb_meas.rgb2yuv_matrix[7];
767*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_coeff_v_b = awb_meas.rgb2yuv_matrix[8];
768*4882a593Smuzhiyun //uv
769*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_u_0 = awb_meas.uvRange_param[0].pu_region[0];
770*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_v_0 = awb_meas.uvRange_param[0].pv_region[0];
771*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_u_0 = awb_meas.uvRange_param[0].pu_region[1];
772*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_v_0 = awb_meas.uvRange_param[0].pv_region[1];
773*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_u_0 = awb_meas.uvRange_param[0].pu_region[2];
774*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_v_0 = awb_meas.uvRange_param[0].pv_region[2];
775*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_u_0 = awb_meas.uvRange_param[0].pu_region[3];
776*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_v_0 = awb_meas.uvRange_param[0].pv_region[3];
777*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope01_0 = awb_meas.uvRange_param[0].slope_inv[0];
778*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope12_0 = awb_meas.uvRange_param[0].slope_inv[1];
779*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope23_0 = awb_meas.uvRange_param[0].slope_inv[2];
780*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope30_0 = awb_meas.uvRange_param[0].slope_inv[3];
781*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_u_1 = awb_meas.uvRange_param[1].pu_region[0];
782*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_v_1 = awb_meas.uvRange_param[1].pv_region[0];
783*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_u_1 = awb_meas.uvRange_param[1].pu_region[1];
784*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_v_1 = awb_meas.uvRange_param[1].pv_region[1];
785*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_u_1 = awb_meas.uvRange_param[1].pu_region[2];
786*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_v_1 = awb_meas.uvRange_param[1].pv_region[2];
787*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_u_1 = awb_meas.uvRange_param[1].pu_region[3];
788*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_v_1 = awb_meas.uvRange_param[1].pv_region[3];
789*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope01_1 = awb_meas.uvRange_param[1].slope_inv[0];
790*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope12_1 = awb_meas.uvRange_param[1].slope_inv[1];
791*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope23_1 = awb_meas.uvRange_param[1].slope_inv[2];
792*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope30_1 = awb_meas.uvRange_param[1].slope_inv[3];
793*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_u_2 = awb_meas.uvRange_param[2].pu_region[0];
794*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_v_2 = awb_meas.uvRange_param[2].pv_region[0];
795*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_u_2 = awb_meas.uvRange_param[2].pu_region[1];
796*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_v_2 = awb_meas.uvRange_param[2].pv_region[1];
797*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_u_2 = awb_meas.uvRange_param[2].pu_region[2];
798*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_v_2 = awb_meas.uvRange_param[2].pv_region[2];
799*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_u_2 = awb_meas.uvRange_param[2].pu_region[3];
800*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_v_2 = awb_meas.uvRange_param[2].pv_region[3];
801*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope01_2 = awb_meas.uvRange_param[2].slope_inv[0];
802*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope12_2 = awb_meas.uvRange_param[2].slope_inv[1];
803*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope23_2 = awb_meas.uvRange_param[2].slope_inv[2];
804*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope30_2 = awb_meas.uvRange_param[2].slope_inv[3];
805*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_u_3 = awb_meas.uvRange_param[3].pu_region[0];
806*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_v_3 = awb_meas.uvRange_param[3].pv_region[0];
807*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_u_3 = awb_meas.uvRange_param[3].pu_region[1];
808*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_v_3 = awb_meas.uvRange_param[3].pv_region[1];
809*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_u_3 = awb_meas.uvRange_param[3].pu_region[2];
810*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_v_3 = awb_meas.uvRange_param[3].pv_region[2];
811*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_u_3 = awb_meas.uvRange_param[3].pu_region[3];
812*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_v_3 = awb_meas.uvRange_param[3].pv_region[3];
813*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope01_3 = awb_meas.uvRange_param[3].slope_inv[0];
814*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope12_3 = awb_meas.uvRange_param[3].slope_inv[1];
815*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope23_3 = awb_meas.uvRange_param[3].slope_inv[2];
816*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope30_3 = awb_meas.uvRange_param[3].slope_inv[3];
817*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_u_4 = awb_meas.uvRange_param[4].pu_region[0];
818*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_v_4 = awb_meas.uvRange_param[4].pv_region[0];
819*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_u_4 = awb_meas.uvRange_param[4].pu_region[1];
820*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_v_4 = awb_meas.uvRange_param[4].pv_region[1];
821*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_u_4 = awb_meas.uvRange_param[4].pu_region[2];
822*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_v_4 = awb_meas.uvRange_param[4].pv_region[2];
823*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_u_4 = awb_meas.uvRange_param[4].pu_region[3];
824*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_v_4 = awb_meas.uvRange_param[4].pv_region[3];
825*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope01_4 = awb_meas.uvRange_param[4].slope_inv[0];
826*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope12_4 = awb_meas.uvRange_param[4].slope_inv[1];
827*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope23_4 = awb_meas.uvRange_param[4].slope_inv[2];
828*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope30_4 = awb_meas.uvRange_param[4].slope_inv[3];
829*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_u_5 = awb_meas.uvRange_param[5].pu_region[0];
830*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_v_5 = awb_meas.uvRange_param[5].pv_region[0];
831*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_u_5 = awb_meas.uvRange_param[5].pu_region[1];
832*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_v_5 = awb_meas.uvRange_param[5].pv_region[1];
833*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_u_5 = awb_meas.uvRange_param[5].pu_region[2];
834*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_v_5 = awb_meas.uvRange_param[5].pv_region[2];
835*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_u_5 = awb_meas.uvRange_param[5].pu_region[3];
836*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_v_5 = awb_meas.uvRange_param[5].pv_region[3];
837*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope01_5 = awb_meas.uvRange_param[5].slope_inv[0];
838*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope12_5 = awb_meas.uvRange_param[5].slope_inv[1];
839*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope23_5 = awb_meas.uvRange_param[5].slope_inv[2];
840*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope30_5 = awb_meas.uvRange_param[5].slope_inv[3];
841*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_u_6 = awb_meas.uvRange_param[6].pu_region[0];
842*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex0_v_6 = awb_meas.uvRange_param[6].pv_region[0];
843*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_u_6 = awb_meas.uvRange_param[6].pu_region[1];
844*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex1_v_6 = awb_meas.uvRange_param[6].pv_region[1];
845*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_u_6 = awb_meas.uvRange_param[6].pu_region[2];
846*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex2_v_6 = awb_meas.uvRange_param[6].pv_region[2];
847*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_u_6 = awb_meas.uvRange_param[6].pu_region[3];
848*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_vertex3_v_6 = awb_meas.uvRange_param[6].pv_region[3];
849*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope01_6 = awb_meas.uvRange_param[6].slope_inv[0];
850*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope12_6 = awb_meas.uvRange_param[6].slope_inv[1];
851*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope23_6 = awb_meas.uvRange_param[6].slope_inv[2];
852*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_islope30_6 = awb_meas.uvRange_param[6].slope_inv[3];
853*4882a593Smuzhiyun //yuv
854*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_b_uv_0 = awb_meas.yuvRange_param[0].b_uv;
855*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_slope_ydis_0 = awb_meas.yuvRange_param[0].slope_ydis;
856*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_b_ydis_0 = awb_meas.yuvRange_param[0].b_ydis;
857*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_slope_vtcuv_0 = awb_meas.yuvRange_param[0].slope_inv_neg_uv;
858*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_inv_dslope_0 = awb_meas.yuvRange_param[0].slope_factor_uv;
859*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_b_uv_1 = awb_meas.yuvRange_param[1].b_uv;
860*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_slope_ydis_1 = awb_meas.yuvRange_param[1].slope_ydis;
861*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_b_ydis_1 = awb_meas.yuvRange_param[1].b_ydis;
862*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_slope_vtcuv_1 = awb_meas.yuvRange_param[1].slope_inv_neg_uv;
863*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_inv_dslope_1 = awb_meas.yuvRange_param[1].slope_factor_uv;
864*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_b_uv_2 = awb_meas.yuvRange_param[2].b_uv;
865*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_slope_ydis_2 = awb_meas.yuvRange_param[2].slope_ydis;
866*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_b_ydis_2 = awb_meas.yuvRange_param[2].b_ydis;
867*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_slope_vtcuv_2 = awb_meas.yuvRange_param[2].slope_inv_neg_uv;
868*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_inv_dslope_2 = awb_meas.yuvRange_param[2].slope_factor_uv;
869*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_b_uv_3 = awb_meas.yuvRange_param[3].b_uv;
870*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_slope_ydis_3 = awb_meas.yuvRange_param[3].slope_ydis;
871*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_b_ydis_3 = awb_meas.yuvRange_param[3].b_ydis;
872*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_slope_vtcuv_3 = awb_meas.yuvRange_param[3].slope_inv_neg_uv;
873*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_inv_dslope_3 = awb_meas.yuvRange_param[3].slope_factor_uv;
874*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_ref_u = awb_meas.yuvRange_param[0].ref_u;
875*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_ref_v_0 = awb_meas.yuvRange_param[0].ref_v;
876*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_ref_v_1 = awb_meas.yuvRange_param[1].ref_v;
877*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_ref_v_2 = awb_meas.yuvRange_param[2].ref_v;
878*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_ref_v_3 = awb_meas.yuvRange_param[3].ref_v;
879*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis0_0 = awb_meas.yuvRange_param[0].dis[0];
880*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis1_0 = awb_meas.yuvRange_param[0].dis[1];
881*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis2_0 = awb_meas.yuvRange_param[0].dis[2];
882*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis3_0 = awb_meas.yuvRange_param[0].dis[3];
883*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis4_0 = awb_meas.yuvRange_param[0].dis[4];
884*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis5_0 = awb_meas.yuvRange_param[0].dis[5];
885*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th0_0 = awb_meas.yuvRange_param[0].th[0];
886*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th1_0 = awb_meas.yuvRange_param[0].th[1];
887*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th2_0 = awb_meas.yuvRange_param[0].th[2];
888*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th3_0 = awb_meas.yuvRange_param[0].th[3];
889*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th4_0 = awb_meas.yuvRange_param[0].th[4];
890*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th5_0 = awb_meas.yuvRange_param[0].th[5];
891*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis0_1 = awb_meas.yuvRange_param[1].dis[0];
892*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis1_1 = awb_meas.yuvRange_param[1].dis[1];
893*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis2_1 = awb_meas.yuvRange_param[1].dis[2];
894*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis3_1 = awb_meas.yuvRange_param[1].dis[3];
895*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis4_1 = awb_meas.yuvRange_param[1].dis[4];
896*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis5_1 = awb_meas.yuvRange_param[1].dis[5];
897*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th0_1 = awb_meas.yuvRange_param[1].th[0];
898*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th1_1 = awb_meas.yuvRange_param[1].th[1];
899*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th2_1 = awb_meas.yuvRange_param[1].th[2];
900*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th3_1 = awb_meas.yuvRange_param[1].th[3];
901*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th4_1 = awb_meas.yuvRange_param[1].th[4];
902*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th5_1 = awb_meas.yuvRange_param[1].th[5];
903*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis0_2 = awb_meas.yuvRange_param[2].dis[0];
904*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis1_2 = awb_meas.yuvRange_param[2].dis[1];
905*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis2_2 = awb_meas.yuvRange_param[2].dis[2];
906*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis3_2 = awb_meas.yuvRange_param[2].dis[3];
907*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis4_2 = awb_meas.yuvRange_param[2].dis[4];
908*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis5_2 = awb_meas.yuvRange_param[2].dis[5];
909*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th0_2 = awb_meas.yuvRange_param[2].th[0];
910*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th1_2 = awb_meas.yuvRange_param[2].th[1];
911*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th2_2 = awb_meas.yuvRange_param[2].th[2];
912*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th3_2 = awb_meas.yuvRange_param[2].th[3];
913*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th4_2 = awb_meas.yuvRange_param[2].th[4];
914*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th5_2 = awb_meas.yuvRange_param[2].th[5];
915*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis0_3 = awb_meas.yuvRange_param[3].dis[0];
916*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis1_3 = awb_meas.yuvRange_param[3].dis[1];
917*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis2_3 = awb_meas.yuvRange_param[3].dis[2];
918*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis3_3 = awb_meas.yuvRange_param[3].dis[3];
919*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis4_3 = awb_meas.yuvRange_param[3].dis[4];
920*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_dis5_3 = awb_meas.yuvRange_param[3].dis[5];
921*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th0_3 = awb_meas.yuvRange_param[3].th[0];
922*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th1_3 = awb_meas.yuvRange_param[3].th[1];
923*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th2_3 = awb_meas.yuvRange_param[3].th[2];
924*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th3_3 = awb_meas.yuvRange_param[3].th[3];
925*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th4_3 = awb_meas.yuvRange_param[3].th[4];
926*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_th5_3 = awb_meas.yuvRange_param[3].th[5];
927*4882a593Smuzhiyun //xy
928*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_wt0 = awb_meas.rgb2xy_param.pseudoLuminanceWeight[0];
929*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_wt1 = awb_meas.rgb2xy_param.pseudoLuminanceWeight[1];
930*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_wt2 = awb_meas.rgb2xy_param.pseudoLuminanceWeight[2];
931*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_mat0_x = awb_meas.rgb2xy_param.rotationMat[0];
932*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_mat1_x = awb_meas.rgb2xy_param.rotationMat[1];
933*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_mat2_x = awb_meas.rgb2xy_param.rotationMat[2];
934*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_mat0_y = awb_meas.rgb2xy_param.rotationMat[3];
935*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_mat1_y = awb_meas.rgb2xy_param.rotationMat[4];
936*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_mat2_y = awb_meas.rgb2xy_param.rotationMat[5];
937*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x0_0 = awb_meas.xyRange_param[0].NorrangeX[0];
938*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x1_0 = awb_meas.xyRange_param[0].NorrangeX[1];
939*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y0_0 = awb_meas.xyRange_param[0].NorrangeY[0];
940*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y1_0 = awb_meas.xyRange_param[0].NorrangeY[1];
941*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x0_0 = awb_meas.xyRange_param[0].SperangeX[0];
942*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x1_0 = awb_meas.xyRange_param[0].SperangeX[1];
943*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y0_0 = awb_meas.xyRange_param[0].SperangeY[0];
944*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y1_0 = awb_meas.xyRange_param[0].SperangeY[1];
945*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x0_0 = awb_meas.xyRange_param[0].SmalrangeX[0];
946*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x1_0 = awb_meas.xyRange_param[0].SmalrangeX[1];
947*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y0_0 = awb_meas.xyRange_param[0].SmalrangeY[0];
948*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y1_0 = awb_meas.xyRange_param[0].SmalrangeY[1];
949*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x0_1 = awb_meas.xyRange_param[1].NorrangeX[0];
950*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x1_1 = awb_meas.xyRange_param[1].NorrangeX[1];
951*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y0_1 = awb_meas.xyRange_param[1].NorrangeY[0];
952*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y1_1 = awb_meas.xyRange_param[1].NorrangeY[1];
953*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x0_1 = awb_meas.xyRange_param[1].SperangeX[0];
954*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x1_1 = awb_meas.xyRange_param[1].SperangeX[1];
955*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y0_1 = awb_meas.xyRange_param[1].SperangeY[0];
956*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y1_1 = awb_meas.xyRange_param[1].SperangeY[1];
957*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x0_1 = awb_meas.xyRange_param[1].SmalrangeX[0];
958*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x1_1 = awb_meas.xyRange_param[1].SmalrangeX[1];
959*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y0_1 = awb_meas.xyRange_param[1].SmalrangeY[0];
960*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y1_1 = awb_meas.xyRange_param[1].SmalrangeY[1];
961*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x0_2 = awb_meas.xyRange_param[2].NorrangeX[0];
962*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x1_2 = awb_meas.xyRange_param[2].NorrangeX[1];
963*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y0_2 = awb_meas.xyRange_param[2].NorrangeY[0];
964*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y1_2 = awb_meas.xyRange_param[2].NorrangeY[1];
965*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x0_2 = awb_meas.xyRange_param[2].SperangeX[0];
966*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x1_2 = awb_meas.xyRange_param[2].SperangeX[1];
967*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y0_2 = awb_meas.xyRange_param[2].SperangeY[0];
968*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y1_2 = awb_meas.xyRange_param[2].SperangeY[1];
969*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x0_2 = awb_meas.xyRange_param[2].SmalrangeX[0];
970*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x1_2 = awb_meas.xyRange_param[2].SmalrangeX[1];
971*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y0_2 = awb_meas.xyRange_param[2].SmalrangeY[0];
972*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y1_2 = awb_meas.xyRange_param[2].SmalrangeY[1];
973*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x0_3 = awb_meas.xyRange_param[3].NorrangeX[0];
974*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x1_3 = awb_meas.xyRange_param[3].NorrangeX[1];
975*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y0_3 = awb_meas.xyRange_param[3].NorrangeY[0];
976*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y1_3 = awb_meas.xyRange_param[3].NorrangeY[1];
977*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x0_3 = awb_meas.xyRange_param[3].SperangeX[0];
978*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x1_3 = awb_meas.xyRange_param[3].SperangeX[1];
979*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y0_3 = awb_meas.xyRange_param[3].SperangeY[0];
980*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y1_3 = awb_meas.xyRange_param[3].SperangeY[1];
981*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x0_3 = awb_meas.xyRange_param[3].SmalrangeX[0];
982*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x1_3 = awb_meas.xyRange_param[3].SmalrangeX[1];
983*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y0_3 = awb_meas.xyRange_param[3].SmalrangeY[0];
984*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y1_3 = awb_meas.xyRange_param[3].SmalrangeY[1];
985*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x0_4 = awb_meas.xyRange_param[4].NorrangeX[0];
986*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x1_4 = awb_meas.xyRange_param[4].NorrangeX[1];
987*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y0_4 = awb_meas.xyRange_param[4].NorrangeY[0];
988*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y1_4 = awb_meas.xyRange_param[4].NorrangeY[1];
989*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x0_4 = awb_meas.xyRange_param[4].SperangeX[0];
990*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x1_4 = awb_meas.xyRange_param[4].SperangeX[1];
991*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y0_4 = awb_meas.xyRange_param[4].SperangeY[0];
992*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y1_4 = awb_meas.xyRange_param[4].SperangeY[1];
993*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x0_4 = awb_meas.xyRange_param[4].SmalrangeX[0];
994*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x1_4 = awb_meas.xyRange_param[4].SmalrangeX[1];
995*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y0_4 = awb_meas.xyRange_param[4].SmalrangeY[0];
996*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y1_4 = awb_meas.xyRange_param[4].SmalrangeY[1];
997*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x0_5 = awb_meas.xyRange_param[5].NorrangeX[0];
998*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x1_5 = awb_meas.xyRange_param[5].NorrangeX[1];
999*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y0_5 = awb_meas.xyRange_param[5].NorrangeY[0];
1000*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y1_5 = awb_meas.xyRange_param[5].NorrangeY[1];
1001*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x0_5 = awb_meas.xyRange_param[5].SperangeX[0];
1002*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x1_5 = awb_meas.xyRange_param[5].SperangeX[1];
1003*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y0_5 = awb_meas.xyRange_param[5].SperangeY[0];
1004*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y1_5 = awb_meas.xyRange_param[5].SperangeY[1];
1005*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x0_5 = awb_meas.xyRange_param[5].SmalrangeX[0];
1006*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x1_5 = awb_meas.xyRange_param[5].SmalrangeX[1];
1007*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y0_5 = awb_meas.xyRange_param[5].SmalrangeY[0];
1008*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y1_5 = awb_meas.xyRange_param[5].SmalrangeY[1];
1009*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x0_6 = awb_meas.xyRange_param[6].NorrangeX[0];
1010*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_x1_6 = awb_meas.xyRange_param[6].NorrangeX[1];
1011*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y0_6 = awb_meas.xyRange_param[6].NorrangeY[0];
1012*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_nor_y1_6 = awb_meas.xyRange_param[6].NorrangeY[1];
1013*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x0_6 = awb_meas.xyRange_param[6].SperangeX[0];
1014*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_x1_6 = awb_meas.xyRange_param[6].SperangeX[1];
1015*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y0_6 = awb_meas.xyRange_param[6].SperangeY[0];
1016*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_big_y1_6 = awb_meas.xyRange_param[6].SperangeY[1];
1017*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x0_6 = awb_meas.xyRange_param[6].SmalrangeX[0];
1018*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_x1_6 = awb_meas.xyRange_param[6].SmalrangeX[1];
1019*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y0_6 = awb_meas.xyRange_param[6].SmalrangeY[0];
1020*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_sma_y1_6 = awb_meas.xyRange_param[6].SmalrangeY[1];
1021*4882a593Smuzhiyun //multiwindow
1022*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow_en = awb_meas.multiwindow_en;
1023*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow0_h_offs = awb_meas.multiwindow[0][0];
1024*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow0_v_offs = awb_meas.multiwindow[0][1];
1025*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow0_h_size = awb_meas.multiwindow[0][2];
1026*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow0_v_size = awb_meas.multiwindow[0][3];
1027*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow1_h_offs = awb_meas.multiwindow[1][0];
1028*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow1_v_offs = awb_meas.multiwindow[1][1];
1029*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow1_h_size = awb_meas.multiwindow[1][2];
1030*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow1_v_size = awb_meas.multiwindow[1][3];
1031*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow2_h_offs = awb_meas.multiwindow[2][0];
1032*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow2_v_offs = awb_meas.multiwindow[2][1];
1033*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow2_h_size = awb_meas.multiwindow[2][2];
1034*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow2_v_size = awb_meas.multiwindow[2][3];
1035*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow3_h_offs = awb_meas.multiwindow[3][0];
1036*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow3_v_offs = awb_meas.multiwindow[3][1];
1037*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow3_h_size = awb_meas.multiwindow[3][2];
1038*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow3_v_size = awb_meas.multiwindow[3][3];
1039*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow4_h_offs = awb_meas.multiwindow[4][0];
1040*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow4_v_offs = awb_meas.multiwindow[4][1];
1041*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow4_h_size = awb_meas.multiwindow[4][2];
1042*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow4_v_size = awb_meas.multiwindow[4][3];
1043*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow5_h_offs = awb_meas.multiwindow[5][0];
1044*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow5_v_offs = awb_meas.multiwindow[5][1];
1045*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow5_h_size = awb_meas.multiwindow[5][2];
1046*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow5_v_size = awb_meas.multiwindow[5][3];
1047*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow6_h_offs = awb_meas.multiwindow[6][0];
1048*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow6_v_offs = awb_meas.multiwindow[6][1];
1049*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow6_h_size = awb_meas.multiwindow[6][2];
1050*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow6_v_size = awb_meas.multiwindow[6][3];
1051*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow7_h_offs = awb_meas.multiwindow[7][0];
1052*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow7_v_offs = awb_meas.multiwindow[7][1];
1053*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow7_h_size = awb_meas.multiwindow[7][2];
1054*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_multiwindow7_v_size = awb_meas.multiwindow[7][3];
1055*4882a593Smuzhiyun //exc range
1056*4882a593Smuzhiyun
1057*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region0_excen = awb_meas.excludeWpRange[0].excludeEnable;
1058*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region0_measen = awb_meas.excludeWpRange[0].measureEnable;
1059*4882a593Smuzhiyun switch(awb_meas.excludeWpRange[0].domain) {
1060*4882a593Smuzhiyun case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
1061*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region0_domain = 0;
1062*4882a593Smuzhiyun break;
1063*4882a593Smuzhiyun default:
1064*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region0_domain = 1;
1065*4882a593Smuzhiyun }
1066*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region0_xu0 = awb_meas.excludeWpRange[0].xu[0];
1067*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region0_xu1 = awb_meas.excludeWpRange[0].xu[1];
1068*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region0_yv0 = awb_meas.excludeWpRange[0].yv[0];
1069*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region0_yv1 = awb_meas.excludeWpRange[0].yv[1];
1070*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region1_excen = awb_meas.excludeWpRange[1].excludeEnable;
1071*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region1_measen = awb_meas.excludeWpRange[1].measureEnable;
1072*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region1_domain = awb_meas.excludeWpRange[1].domain;
1073*4882a593Smuzhiyun switch(awb_meas.excludeWpRange[1].domain) {
1074*4882a593Smuzhiyun case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
1075*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region1_domain = 0;
1076*4882a593Smuzhiyun break;
1077*4882a593Smuzhiyun default:
1078*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region1_domain = 1;
1079*4882a593Smuzhiyun }
1080*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region1_xu0 = awb_meas.excludeWpRange[1].xu[0];
1081*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region1_xu1 = awb_meas.excludeWpRange[1].xu[1];
1082*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region1_yv0 = awb_meas.excludeWpRange[1].yv[0];
1083*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region1_yv1 = awb_meas.excludeWpRange[1].yv[1];
1084*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region2_excen = awb_meas.excludeWpRange[2].excludeEnable;
1085*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region2_measen = awb_meas.excludeWpRange[2].measureEnable;
1086*4882a593Smuzhiyun switch(awb_meas.excludeWpRange[2].domain) {
1087*4882a593Smuzhiyun case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
1088*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region2_domain = 0;
1089*4882a593Smuzhiyun break;
1090*4882a593Smuzhiyun default:
1091*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region2_domain = 1;
1092*4882a593Smuzhiyun }
1093*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region2_xu0 = awb_meas.excludeWpRange[2].xu[0];
1094*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region2_xu1 = awb_meas.excludeWpRange[2].xu[1];
1095*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region2_yv0 = awb_meas.excludeWpRange[2].yv[0];
1096*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region2_yv1 = awb_meas.excludeWpRange[2].yv[1];
1097*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region3_excen = awb_meas.excludeWpRange[3].excludeEnable;
1098*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region3_measen = awb_meas.excludeWpRange[3].measureEnable;
1099*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region3_domain = awb_meas.excludeWpRange[3].domain;
1100*4882a593Smuzhiyun switch(awb_meas.excludeWpRange[3].domain) {
1101*4882a593Smuzhiyun case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
1102*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region3_domain = 0;
1103*4882a593Smuzhiyun break;
1104*4882a593Smuzhiyun default:
1105*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region3_domain = 1;
1106*4882a593Smuzhiyun }
1107*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region3_xu0 = awb_meas.excludeWpRange[3].xu[0];
1108*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region3_xu1 = awb_meas.excludeWpRange[3].xu[1];
1109*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region3_yv0 = awb_meas.excludeWpRange[3].yv[0];
1110*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region3_yv1 = awb_meas.excludeWpRange[3].yv[1];
1111*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region4_excen = awb_meas.excludeWpRange[4].excludeEnable;
1112*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region4_measen = awb_meas.excludeWpRange[4].measureEnable;
1113*4882a593Smuzhiyun switch(awb_meas.excludeWpRange[4].domain) {
1114*4882a593Smuzhiyun case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
1115*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region4_domain = 0;
1116*4882a593Smuzhiyun break;
1117*4882a593Smuzhiyun default:
1118*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region4_domain = 1;
1119*4882a593Smuzhiyun }
1120*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region4_xu0 = awb_meas.excludeWpRange[4].xu[0];
1121*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region4_xu1 = awb_meas.excludeWpRange[4].xu[1];
1122*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region4_yv0 = awb_meas.excludeWpRange[4].yv[0];
1123*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region4_yv1 = awb_meas.excludeWpRange[4].yv[1];
1124*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region5_excen = awb_meas.excludeWpRange[5].excludeEnable;
1125*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region5_measen = awb_meas.excludeWpRange[5].measureEnable;
1126*4882a593Smuzhiyun switch(awb_meas.excludeWpRange[5].domain) {
1127*4882a593Smuzhiyun case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
1128*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region5_domain = 0;
1129*4882a593Smuzhiyun break;
1130*4882a593Smuzhiyun default:
1131*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region5_domain = 1;
1132*4882a593Smuzhiyun }
1133*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region5_xu0 = awb_meas.excludeWpRange[5].xu[0];
1134*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region5_xu1 = awb_meas.excludeWpRange[5].xu[1];
1135*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region5_yv0 = awb_meas.excludeWpRange[5].yv[0];
1136*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region5_yv1 = awb_meas.excludeWpRange[5].yv[1];
1137*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region6_excen = awb_meas.excludeWpRange[6].excludeEnable;
1138*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region6_measen = awb_meas.excludeWpRange[6].measureEnable;
1139*4882a593Smuzhiyun switch(awb_meas.excludeWpRange[6].domain) {
1140*4882a593Smuzhiyun case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
1141*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region6_domain = 0;
1142*4882a593Smuzhiyun break;
1143*4882a593Smuzhiyun default:
1144*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region6_domain = 1;
1145*4882a593Smuzhiyun }
1146*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region6_xu0 = awb_meas.excludeWpRange[6].xu[0];
1147*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region6_xu1 = awb_meas.excludeWpRange[6].xu[1];
1148*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region6_yv0 = awb_meas.excludeWpRange[6].yv[0];
1149*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_exc_wp_region6_yv1 = awb_meas.excludeWpRange[6].yv[1];
1150*4882a593Smuzhiyun
1151*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_store_wp_flag_ls_idx0 = awb_meas.storeWpFlagIllu[0];
1152*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_store_wp_flag_ls_idx1 = awb_meas.storeWpFlagIllu[1];
1153*4882a593Smuzhiyun awb_cfg_v200->sw_rawawb_store_wp_flag_ls_idx2 = awb_meas.storeWpFlagIllu[2];
1154*4882a593Smuzhiyun }
1155*4882a593Smuzhiyun #endif
1156*4882a593Smuzhiyun #if RKAIQ_HAVE_MERGE_V10
1157*4882a593Smuzhiyun template<class T>
convertAiqMergeToIsp20Params(T & isp_cfg,const rk_aiq_isp_merge_t & amerge_data)1158*4882a593Smuzhiyun void Isp20Params::convertAiqMergeToIsp20Params(T& isp_cfg,
1159*4882a593Smuzhiyun const rk_aiq_isp_merge_t& amerge_data)
1160*4882a593Smuzhiyun {
1161*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_HDRMGE_ID;
1162*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_HDRMGE_ID;
1163*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_HDRMGE_ID;
1164*4882a593Smuzhiyun
1165*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.mode = amerge_data.Merge_v10.sw_hdrmge_mode;
1166*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.gain0_inv = amerge_data.Merge_v10.sw_hdrmge_gain0_inv;
1167*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.gain0 = amerge_data.Merge_v10.sw_hdrmge_gain0;
1168*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.gain1_inv = amerge_data.Merge_v10.sw_hdrmge_gain1_inv;
1169*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.gain1 = amerge_data.Merge_v10.sw_hdrmge_gain1;
1170*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.gain2 = amerge_data.Merge_v10.sw_hdrmge_gain2;
1171*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.lm_dif_0p15 = amerge_data.Merge_v10.sw_hdrmge_lm_dif_0p15;
1172*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.lm_dif_0p9 = amerge_data.Merge_v10.sw_hdrmge_lm_dif_0p9;
1173*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.ms_diff_0p15 = amerge_data.Merge_v10.sw_hdrmge_ms_dif_0p15;
1174*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.ms_dif_0p8 = amerge_data.Merge_v10.sw_hdrmge_ms_dif_0p8;
1175*4882a593Smuzhiyun for(int i = 0; i < ISP2X_HDRMGE_L_CURVE_NUM; i++) {
1176*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.curve.curve_0[i] = amerge_data.Merge_v10.sw_hdrmge_l0_y[i];
1177*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.curve.curve_1[i] = amerge_data.Merge_v10.sw_hdrmge_l1_y[i];
1178*4882a593Smuzhiyun }
1179*4882a593Smuzhiyun for(int i = 0; i < ISP2X_HDRMGE_E_CURVE_NUM; i++)
1180*4882a593Smuzhiyun isp_cfg.others.hdrmge_cfg.e_y[i] = amerge_data.Merge_v10.sw_hdrmge_e_y[i];
1181*4882a593Smuzhiyun
1182*4882a593Smuzhiyun #if 0
1183*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain0_inv %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain0_inv);
1184*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain0 %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain0);
1185*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain1_inv %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain1_inv);
1186*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain1 %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain1);
1187*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain2 %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain2);
1188*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lm_dif_0p15 %d", __LINE__, isp_cfg.others.hdrmge_cfg.lm_dif_0p15);
1189*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lm_dif_0p9 %d", __LINE__, isp_cfg.others.hdrmge_cfg.lm_dif_0p9);
1190*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ms_diff_0p15 %d", __LINE__, isp_cfg.others.hdrmge_cfg.ms_diff_0p15);
1191*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ms_dif_0p8 %d", __LINE__, isp_cfg.others.hdrmge_cfg.ms_dif_0p8);
1192*4882a593Smuzhiyun for(int i = 0 ; i < 17; i++)
1193*4882a593Smuzhiyun {
1194*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: curve_0[%d] %d", __LINE__, i, isp_cfg.others.hdrmge_cfg.curve.curve_0[i]);
1195*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: curve_1[%d] %d", __LINE__, i, isp_cfg.others.hdrmge_cfg.curve.curve_1[i]);
1196*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: e_y[%d] %d", __LINE__, i, isp_cfg.others.hdrmge_cfg.e_y[i]);
1197*4882a593Smuzhiyun }
1198*4882a593Smuzhiyun
1199*4882a593Smuzhiyun #endif
1200*4882a593Smuzhiyun }
1201*4882a593Smuzhiyun #endif
1202*4882a593Smuzhiyun
1203*4882a593Smuzhiyun template<class T>
convertAiqTmoToIsp20Params(T & isp_cfg,const rk_aiq_isp_tmo_t & atmo_data)1204*4882a593Smuzhiyun void Isp20Params::convertAiqTmoToIsp20Params(T& isp_cfg,
1205*4882a593Smuzhiyun const rk_aiq_isp_tmo_t& atmo_data)
1206*4882a593Smuzhiyun {
1207*4882a593Smuzhiyun if(atmo_data.bTmoEn)
1208*4882a593Smuzhiyun {
1209*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_HDRTMO_ID;
1210*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_HDRTMO_ID;
1211*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_HDRTMO_ID;
1212*4882a593Smuzhiyun }
1213*4882a593Smuzhiyun else
1214*4882a593Smuzhiyun {
1215*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_HDRTMO_ID;
1216*4882a593Smuzhiyun isp_cfg.module_ens &= ~(1LL << RK_ISP2X_HDRTMO_ID);
1217*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~(1LL << RK_ISP2X_HDRTMO_ID);
1218*4882a593Smuzhiyun }
1219*4882a593Smuzhiyun
1220*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.cnt_vsize = atmo_data.Res.sw_hdrtmo_cnt_vsize;
1221*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.gain_ld_off2 = atmo_data.Res.sw_hdrtmo_gain_ld_off2;
1222*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.gain_ld_off1 = atmo_data.Res.sw_hdrtmo_gain_ld_off1;
1223*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.big_en = atmo_data.Res.sw_hdrtmo_big_en;
1224*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.nobig_en = atmo_data.Res.sw_hdrtmo_nobig_en;
1225*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.newhst_en = atmo_data.Res.sw_hdrtmo_newhist_en;
1226*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.cnt_mode = atmo_data.Res.sw_hdrtmo_cnt_mode;
1227*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.expl_lgratio = atmo_data.Res.sw_hdrtmo_expl_lgratio;
1228*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.lgscl_ratio = atmo_data.Res.sw_hdrtmo_lgscl_ratio;
1229*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.cfg_alpha = atmo_data.Res.sw_hdrtmo_cfg_alpha;
1230*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.set_gainoff = atmo_data.Res.sw_hdrtmo_set_gainoff;
1231*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.set_palpha = atmo_data.Res.sw_hdrtmo_set_palpha;
1232*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.set_lgmax = atmo_data.Res.sw_hdrtmo_set_lgmax;
1233*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.set_lgmin = atmo_data.Res.sw_hdrtmo_set_lgmin;
1234*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.set_weightkey = atmo_data.Res.sw_hdrtmo_set_weightkey;
1235*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.set_lgmean = atmo_data.Res.sw_hdrtmo_set_lgmean;
1236*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.set_lgrange1 = atmo_data.Res.sw_hdrtmo_set_lgrange1;
1237*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.set_lgrange0 = atmo_data.Res.sw_hdrtmo_set_lgrange0;
1238*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.set_lgavgmax = atmo_data.Res.sw_hdrtmo_set_lgavgmax;
1239*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.clipgap1_i = atmo_data.Res.sw_hdrtmo_clipgap1;
1240*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.clipgap0_i = atmo_data.Res.sw_hdrtmo_clipgap0;
1241*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.clipratio1 = atmo_data.Res.sw_hdrtmo_clipratio1;
1242*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.clipratio0 = atmo_data.Res.sw_hdrtmo_clipratio0;
1243*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.ratiol = atmo_data.Res.sw_hdrtmo_ratiol;
1244*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.lgscl_inv = atmo_data.Res.sw_hdrtmo_lgscl_inv;
1245*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.lgscl = atmo_data.Res.sw_hdrtmo_lgscl;
1246*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.lgmax = atmo_data.Res.sw_hdrtmo_lgmax;
1247*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.hist_low = atmo_data.Res.sw_hdrtmo_hist_low;
1248*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.hist_min = atmo_data.Res.sw_hdrtmo_hist_min;
1249*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.hist_shift = atmo_data.Res.sw_hdrtmo_hist_shift;
1250*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.hist_0p3 = atmo_data.Res.sw_hdrtmo_hist_0p3;
1251*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.hist_high = atmo_data.Res.sw_hdrtmo_hist_high;
1252*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.palpha_lwscl = atmo_data.Res.sw_hdrtmo_palpha_lwscl;
1253*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.palpha_lw0p5 = atmo_data.Res.sw_hdrtmo_palpha_lw0p5;
1254*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.palpha_0p18 = atmo_data.Res.sw_hdrtmo_palpha_0p18;
1255*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.maxgain = atmo_data.Res.sw_hdrtmo_maxgain;
1256*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.maxpalpha = atmo_data.Res.sw_hdrtmo_maxpalpha;
1257*4882a593Smuzhiyun
1258*4882a593Smuzhiyun //tmo predict
1259*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.predict.global_tmo = atmo_data.isHdrGlobalTmo;
1260*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.predict.scene_stable = atmo_data.Predict.Scenestable;
1261*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.predict.k_rolgmean = atmo_data.Predict.K_Rolgmean;
1262*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.predict.iir = atmo_data.Predict.iir;
1263*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.predict.iir_max = atmo_data.Predict.iir_max;
1264*4882a593Smuzhiyun isp_cfg.others.hdrtmo_cfg.predict.global_tmo_strength = atmo_data.Predict.global_tmo_strength;
1265*4882a593Smuzhiyun #if 0
1266*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: cnt_vsize %d", __LINE__, isp_cfg.others.hdrtmo_cfg.cnt_vsize);
1267*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain_ld_off2 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.gain_ld_off2);
1268*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain_ld_off1 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.gain_ld_off1);
1269*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: big_en %d", __LINE__, isp_cfg.others.hdrtmo_cfg.big_en);
1270*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: nobig_en %d", __LINE__, isp_cfg.others.hdrtmo_cfg.nobig_en);
1271*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: newhst_en %d", __LINE__, isp_cfg.others.hdrtmo_cfg.newhst_en);
1272*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: cnt_mode %d", __LINE__, isp_cfg.others.hdrtmo_cfg.cnt_mode);
1273*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: expl_lgratio %d", __LINE__, isp_cfg.others.hdrtmo_cfg.expl_lgratio);
1274*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lgscl_ratio %d", __LINE__, isp_cfg.others.hdrtmo_cfg.lgscl_ratio);
1275*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: cfg_alpha %d", __LINE__, isp_cfg.others.hdrtmo_cfg.cfg_alpha);
1276*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_gainoff %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_gainoff);
1277*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_palpha %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_palpha);
1278*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgmax %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgmax);
1279*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgmin %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgmin);
1280*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_weightkey %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_weightkey);
1281*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgmean %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgmean);
1282*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgrange1 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgrange1);
1283*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgrange0 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgrange0);
1284*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgavgmax %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgavgmax);
1285*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: clipgap1_i %d", __LINE__, isp_cfg.others.hdrtmo_cfg.clipgap1_i);
1286*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: clipgap0_i %d", __LINE__, isp_cfg.others.hdrtmo_cfg.clipgap0_i);
1287*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: clipratio1 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.clipratio1);
1288*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: clipratio0 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.clipratio0);
1289*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ratiol %d", __LINE__, isp_cfg.others.hdrtmo_cfg.ratiol);
1290*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lgscl_inv %d", __LINE__, isp_cfg.others.hdrtmo_cfg.lgscl_inv);
1291*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lgscl %d", __LINE__, isp_cfg.others.hdrtmo_cfg.lgscl);
1292*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lgmax %d", __LINE__, isp_cfg.others.hdrtmo_cfg.lgmax);
1293*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: hist_low %d", __LINE__, isp_cfg.others.hdrtmo_cfg.hist_low);
1294*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: hist_min %d", __LINE__, isp_cfg.others.hdrtmo_cfg.hist_min);
1295*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: hist_shift %d", __LINE__, isp_cfg.others.hdrtmo_cfg.hist_shift);
1296*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: hist_0p3 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.hist_0p3);
1297*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: hist_high %d", __LINE__, isp_cfg.others.hdrtmo_cfg.hist_high);
1298*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: palpha_lwscl %d", __LINE__, isp_cfg.others.hdrtmo_cfg.palpha_lwscl);
1299*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: palpha_lw0p5 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.palpha_lw0p5);
1300*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: palpha_0p18 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.palpha_0p18);
1301*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: maxgain %d", __LINE__, isp_cfg.others.hdrtmo_cfg.maxgain);
1302*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: maxpalpha %d", __LINE__, isp_cfg.others.hdrtmo_cfg.maxpalpha);
1303*4882a593Smuzhiyun #endif
1304*4882a593Smuzhiyun }
1305*4882a593Smuzhiyun
1306*4882a593Smuzhiyun #if RKAIQ_HAVE_AF_V20 || RKAIQ_ONLY_AF_STATS_V20
1307*4882a593Smuzhiyun template<class T>
1308*4882a593Smuzhiyun void
convertAiqAfToIsp20Params(T & isp_cfg,const rk_aiq_isp_af_meas_t & af_data,bool af_cfg_udpate)1309*4882a593Smuzhiyun Isp20Params::convertAiqAfToIsp20Params(T& isp_cfg,
1310*4882a593Smuzhiyun const rk_aiq_isp_af_meas_t& af_data, bool af_cfg_udpate)
1311*4882a593Smuzhiyun {
1312*4882a593Smuzhiyun if (!af_cfg_udpate)
1313*4882a593Smuzhiyun return;
1314*4882a593Smuzhiyun
1315*4882a593Smuzhiyun if (af_data.contrast_af_en)
1316*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_RAWAF;
1317*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_RAWAF;
1318*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWAF;
1319*4882a593Smuzhiyun isp_cfg.meas.rawaf.rawaf_sel = af_data.rawaf_sel;
1320*4882a593Smuzhiyun isp_cfg.meas.rawaf.gamma_en = af_data.gamma_flt_en;
1321*4882a593Smuzhiyun isp_cfg.meas.rawaf.gaus_en = af_data.gaus_flt_en;
1322*4882a593Smuzhiyun isp_cfg.meas.rawaf.afm_thres = af_data.afm_thres;
1323*4882a593Smuzhiyun isp_cfg.meas.rawaf.gaus_coe_h0 = af_data.gaus_h0;
1324*4882a593Smuzhiyun isp_cfg.meas.rawaf.gaus_coe_h1 = af_data.gaus_h1;
1325*4882a593Smuzhiyun isp_cfg.meas.rawaf.gaus_coe_h2 = af_data.gaus_h2;
1326*4882a593Smuzhiyun memcpy(isp_cfg.meas.rawaf.lum_var_shift,
1327*4882a593Smuzhiyun af_data.lum_var_shift, ISP2X_RAWAF_WIN_NUM * sizeof(unsigned char));
1328*4882a593Smuzhiyun memcpy(isp_cfg.meas.rawaf.afm_var_shift,
1329*4882a593Smuzhiyun af_data.afm_var_shift, ISP2X_RAWAF_WIN_NUM * sizeof(unsigned char));
1330*4882a593Smuzhiyun memcpy(isp_cfg.meas.rawaf.line_en,
1331*4882a593Smuzhiyun af_data.line_en, ISP2X_RAWAF_LINE_NUM * sizeof(unsigned char));
1332*4882a593Smuzhiyun memcpy(isp_cfg.meas.rawaf.line_num,
1333*4882a593Smuzhiyun af_data.line_num, ISP2X_RAWAF_LINE_NUM * sizeof(unsigned char));
1334*4882a593Smuzhiyun memcpy(isp_cfg.meas.rawaf.gamma_y,
1335*4882a593Smuzhiyun af_data.gamma_y, ISP2X_RAWAF_GAMMA_NUM * sizeof(unsigned short));
1336*4882a593Smuzhiyun
1337*4882a593Smuzhiyun isp_cfg.meas.rawaf.num_afm_win = af_data.window_num;
1338*4882a593Smuzhiyun isp_cfg.meas.rawaf.win[0].h_offs = af_data.wina_h_offs;
1339*4882a593Smuzhiyun isp_cfg.meas.rawaf.win[0].v_offs = af_data.wina_v_offs;
1340*4882a593Smuzhiyun isp_cfg.meas.rawaf.win[0].h_size = af_data.wina_h_size;
1341*4882a593Smuzhiyun isp_cfg.meas.rawaf.win[0].v_size = af_data.wina_v_size;
1342*4882a593Smuzhiyun isp_cfg.meas.rawaf.win[1].h_offs = af_data.winb_h_offs;
1343*4882a593Smuzhiyun isp_cfg.meas.rawaf.win[1].v_offs = af_data.winb_v_offs;
1344*4882a593Smuzhiyun isp_cfg.meas.rawaf.win[1].h_size = af_data.winb_h_size;
1345*4882a593Smuzhiyun isp_cfg.meas.rawaf.win[1].v_size = af_data.winb_v_size;
1346*4882a593Smuzhiyun }
1347*4882a593Smuzhiyun #endif
1348*4882a593Smuzhiyun
1349*4882a593Smuzhiyun #define ISP2X_WBGAIN_FIXSCALE_BIT 8
1350*4882a593Smuzhiyun #define ISP2X_BLC_BIT_MAX 12
1351*4882a593Smuzhiyun
1352*4882a593Smuzhiyun template<class T>
1353*4882a593Smuzhiyun void
convertAiqAwbGainToIsp20Params(T & isp_cfg,const rk_aiq_wb_gain_t & awb_gain,const rk_aiq_isp_blc_t & blc,bool awb_gain_update)1354*4882a593Smuzhiyun Isp20Params::convertAiqAwbGainToIsp20Params(T& isp_cfg,
1355*4882a593Smuzhiyun const rk_aiq_wb_gain_t& awb_gain, const rk_aiq_isp_blc_t &blc, bool awb_gain_update)
1356*4882a593Smuzhiyun {
1357*4882a593Smuzhiyun
1358*4882a593Smuzhiyun if(awb_gain_update) {
1359*4882a593Smuzhiyun isp_cfg.module_ens |= 1LL << RK_ISP2X_AWB_GAIN_ID;
1360*4882a593Smuzhiyun isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_AWB_GAIN_ID;
1361*4882a593Smuzhiyun isp_cfg.module_en_update |= 1LL << RK_ISP2X_AWB_GAIN_ID;
1362*4882a593Smuzhiyun } else {
1363*4882a593Smuzhiyun return;
1364*4882a593Smuzhiyun }
1365*4882a593Smuzhiyun
1366*4882a593Smuzhiyun struct isp2x_awb_gain_cfg * cfg = &isp_cfg.others.awb_gain_cfg;
1367*4882a593Smuzhiyun uint16_t max_wb_gain = (1 << (ISP2X_WBGAIN_FIXSCALE_BIT + 2)) - 1;
1368*4882a593Smuzhiyun rk_aiq_wb_gain_t awb_gain1 = awb_gain;
1369*4882a593Smuzhiyun if(blc.enable) {
1370*4882a593Smuzhiyun awb_gain1.bgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc.blc_b);
1371*4882a593Smuzhiyun awb_gain1.gbgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc.blc_gb);
1372*4882a593Smuzhiyun awb_gain1.rgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc.blc_r);
1373*4882a593Smuzhiyun awb_gain1.grgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc.blc_gr);
1374*4882a593Smuzhiyun }
1375*4882a593Smuzhiyun // rescale
1376*4882a593Smuzhiyun float max_value = awb_gain1.bgain > awb_gain1.gbgain ? awb_gain1.bgain : awb_gain1.gbgain;
1377*4882a593Smuzhiyun max_value = max_value > awb_gain1.rgain ? max_value : awb_gain1.rgain;
1378*4882a593Smuzhiyun float max_wb_gain_f = (float)max_wb_gain / (1 << (ISP2X_WBGAIN_FIXSCALE_BIT));
1379*4882a593Smuzhiyun if (max_value > max_wb_gain_f ) {
1380*4882a593Smuzhiyun float scale = max_value / max_wb_gain_f;
1381*4882a593Smuzhiyun awb_gain1.bgain /= scale;
1382*4882a593Smuzhiyun awb_gain1.gbgain /= scale;
1383*4882a593Smuzhiyun awb_gain1.grgain /= scale;
1384*4882a593Smuzhiyun awb_gain1.rgain /= scale;
1385*4882a593Smuzhiyun LOGD_CAMHW("%s: scale %f, awbgain(r,g,g,b):[%f,%f,%f,%f]", __FUNCTION__, scale, awb_gain1.rgain, awb_gain1.grgain, awb_gain1.gbgain, awb_gain1.bgain);
1386*4882a593Smuzhiyun }
1387*4882a593Smuzhiyun //fix point
1388*4882a593Smuzhiyun //LOGE_CAMHW_SUBM(ISP20PARAM_SUBM,"max_wb_gain:%d\n",max_wb_gain);
1389*4882a593Smuzhiyun uint16_t R = (uint16_t)(0.5 + awb_gain1.rgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
1390*4882a593Smuzhiyun uint16_t B = (uint16_t)(0.5 + awb_gain1.bgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
1391*4882a593Smuzhiyun uint16_t Gr = (uint16_t)(0.5 + awb_gain1.grgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
1392*4882a593Smuzhiyun uint16_t Gb = (uint16_t)(0.5 + awb_gain1.gbgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
1393*4882a593Smuzhiyun cfg->gain_red = R > max_wb_gain ? max_wb_gain : R;
1394*4882a593Smuzhiyun cfg->gain_blue = B > max_wb_gain ? max_wb_gain : B;
1395*4882a593Smuzhiyun cfg->gain_green_r = Gr > max_wb_gain ? max_wb_gain : Gr ;
1396*4882a593Smuzhiyun cfg->gain_green_b = Gb > max_wb_gain ? max_wb_gain : Gb;
1397*4882a593Smuzhiyun }
1398*4882a593Smuzhiyun
1399*4882a593Smuzhiyun #if RKAIQ_HAVE_GAMMA_V10
1400*4882a593Smuzhiyun template<class T>
convertAiqAgammaToIsp20Params(T & isp_cfg,const AgammaProcRes_t & gamma_out_cfg)1401*4882a593Smuzhiyun void Isp20Params::convertAiqAgammaToIsp20Params(T& isp_cfg,
1402*4882a593Smuzhiyun const AgammaProcRes_t& gamma_out_cfg)
1403*4882a593Smuzhiyun {
1404*4882a593Smuzhiyun if (gamma_out_cfg.Gamma_v10.gamma_en) {
1405*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_GOC;
1406*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GOC;
1407*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_GOC;
1408*4882a593Smuzhiyun } else {
1409*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_GOC;
1410*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GOC;
1411*4882a593Smuzhiyun return;
1412*4882a593Smuzhiyun }
1413*4882a593Smuzhiyun
1414*4882a593Smuzhiyun struct isp2x_gammaout_cfg* cfg = &isp_cfg.others.gammaout_cfg;
1415*4882a593Smuzhiyun cfg->offset = gamma_out_cfg.Gamma_v10.offset;
1416*4882a593Smuzhiyun cfg->equ_segm = gamma_out_cfg.Gamma_v10.equ_segm;
1417*4882a593Smuzhiyun for (int i = 0; i < 45; i++) cfg->gamma_y[i] = gamma_out_cfg.Gamma_v10.gamma_y[i];
1418*4882a593Smuzhiyun
1419*4882a593Smuzhiyun #if 0
1420*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) gamma en:%d, offset:%d, equ_segm:%d\n", __FUNCTION__, __LINE__, gamma_out_cfg.Gamma_v10.gamma_en, cfg->offset, cfg->equ_segm);
1421*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "Gamma_Y:%d %d %d %d %d %d %d %d\n", cfg->gamma_y[0], cfg->gamma_y[1],
1422*4882a593Smuzhiyun cfg->gamma_y[2], cfg->gamma_y[3], cfg->gamma_y[4], cfg->gamma_y[5], cfg->gamma_y[6], cfg->gamma_y[7]);
1423*4882a593Smuzhiyun #endif
1424*4882a593Smuzhiyun }
1425*4882a593Smuzhiyun #endif
1426*4882a593Smuzhiyun
1427*4882a593Smuzhiyun template<class T>
convertAiqAdegammaToIsp20Params(T & isp_cfg,const AdegammaProcRes_t & degamma_cfg)1428*4882a593Smuzhiyun void Isp20Params::convertAiqAdegammaToIsp20Params(T& isp_cfg,
1429*4882a593Smuzhiyun const AdegammaProcRes_t& degamma_cfg)
1430*4882a593Smuzhiyun {
1431*4882a593Smuzhiyun if(degamma_cfg.degamma_en) {
1432*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_SDG;
1433*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_SDG;
1434*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_SDG;
1435*4882a593Smuzhiyun } else {
1436*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_SDG;
1437*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_SDG;
1438*4882a593Smuzhiyun return;
1439*4882a593Smuzhiyun }
1440*4882a593Smuzhiyun
1441*4882a593Smuzhiyun struct isp2x_sdg_cfg* cfg = &isp_cfg.others.sdg_cfg;
1442*4882a593Smuzhiyun cfg->xa_pnts.gamma_dx0 = degamma_cfg.degamma_X_d0;
1443*4882a593Smuzhiyun cfg->xa_pnts.gamma_dx1 = degamma_cfg.degamma_X_d1;
1444*4882a593Smuzhiyun for (int i = 0; i < 17; i++) {
1445*4882a593Smuzhiyun cfg->curve_r.gamma_y[i] = degamma_cfg.degamma_tableR[i];
1446*4882a593Smuzhiyun cfg->curve_g.gamma_y[i] = degamma_cfg.degamma_tableG[i];
1447*4882a593Smuzhiyun cfg->curve_b.gamma_y[i] = degamma_cfg.degamma_tableB[i];
1448*4882a593Smuzhiyun }
1449*4882a593Smuzhiyun
1450*4882a593Smuzhiyun #if 0
1451*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) DEGAMMA_DX0:%d DEGAMMA_DX0:%d\n", __FUNCTION__, __LINE__, cfg->xa_pnts.gamma_dx0, cfg->xa_pnts.gamma_dx1);
1452*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "DEGAMMA_R_Y:%d %d %d %d %d %d %d %d\n", cfg->curve_r.gamma_y[0], cfg->curve_r.gamma_y[1],
1453*4882a593Smuzhiyun cfg->curve_r.gamma_y[2], cfg->curve_r.gamma_y[3], cfg->curve_r.gamma_y[4], cfg->curve_r.gamma_y[5], cfg->curve_r.gamma_y[6], cfg->curve_r.gamma_y[7]);
1454*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "DEGAMMA_G_Y:%d %d %d %d %d %d %d %d\n", cfg->curve_g.gamma_y[0], cfg->curve_g.gamma_y[1],
1455*4882a593Smuzhiyun cfg->curve_g.gamma_y[2], cfg->curve_g.gamma_y[3], cfg->curve_g.gamma_y[4], cfg->curve_g.gamma_y[5], cfg->curve_g.gamma_y[6], cfg->curve_g.gamma_y[7]);
1456*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "DEGAMMA_B_Y:%d %d %d %d %d %d %d %d\n", cfg->curve_b.gamma_y[0], cfg->curve_b.gamma_y[1],
1457*4882a593Smuzhiyun cfg->curve_b.gamma_y[2], cfg->curve_b.gamma_y[3], cfg->curve_b.gamma_y[4], cfg->curve_b.gamma_y[5], cfg->curve_b.gamma_y[6], cfg->curve_b.gamma_y[7]);
1458*4882a593Smuzhiyun #endif
1459*4882a593Smuzhiyun
1460*4882a593Smuzhiyun }
1461*4882a593Smuzhiyun
1462*4882a593Smuzhiyun #if RKAIQ_HAVE_DEHAZE_V10
1463*4882a593Smuzhiyun template<class T>
convertAiqAdehazeToIsp20Params(T & isp_cfg,const rk_aiq_isp_dehaze_t & dhaze)1464*4882a593Smuzhiyun void Isp20Params::convertAiqAdehazeToIsp20Params(T& isp_cfg,
1465*4882a593Smuzhiyun const rk_aiq_isp_dehaze_t& dhaze )
1466*4882a593Smuzhiyun {
1467*4882a593Smuzhiyun int i;
1468*4882a593Smuzhiyun
1469*4882a593Smuzhiyun int rawWidth = 1920;
1470*4882a593Smuzhiyun int rawHeight = 1080;
1471*4882a593Smuzhiyun
1472*4882a593Smuzhiyun if (dhaze.ProcResV10.enable) {
1473*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_DHAZ;
1474*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_DHAZ;
1475*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_DHAZ;
1476*4882a593Smuzhiyun }
1477*4882a593Smuzhiyun struct isp2x_dhaz_cfg * cfg = &isp_cfg.others.dhaz_cfg;
1478*4882a593Smuzhiyun
1479*4882a593Smuzhiyun cfg->enhance_en = dhaze.ProcResV10.enhance_en;
1480*4882a593Smuzhiyun cfg->hist_chn = dhaze.ProcResV10.hist_chn;
1481*4882a593Smuzhiyun cfg->hpara_en = dhaze.ProcResV10.hpara_en;
1482*4882a593Smuzhiyun cfg->hist_en = dhaze.ProcResV10.hist_en;
1483*4882a593Smuzhiyun cfg->dc_en = dhaze.ProcResV10.dc_en;
1484*4882a593Smuzhiyun cfg->big_en = dhaze.ProcResV10.big_en;
1485*4882a593Smuzhiyun cfg->nobig_en = dhaze.ProcResV10.nobig_en;
1486*4882a593Smuzhiyun cfg->yblk_th = dhaze.ProcResV10.yblk_th;
1487*4882a593Smuzhiyun cfg->yhist_th = dhaze.ProcResV10.yhist_th;
1488*4882a593Smuzhiyun cfg->dc_max_th = dhaze.ProcResV10.dc_max_th;
1489*4882a593Smuzhiyun cfg->dc_min_th = dhaze.ProcResV10.dc_min_th;
1490*4882a593Smuzhiyun cfg->wt_max = dhaze.ProcResV10.wt_max;
1491*4882a593Smuzhiyun cfg->bright_max = dhaze.ProcResV10.bright_max;
1492*4882a593Smuzhiyun cfg->bright_min = dhaze.ProcResV10.bright_min;
1493*4882a593Smuzhiyun cfg->tmax_base = dhaze.ProcResV10.tmax_base;
1494*4882a593Smuzhiyun cfg->dark_th = dhaze.ProcResV10.dark_th;
1495*4882a593Smuzhiyun cfg->air_max = dhaze.ProcResV10.air_max;
1496*4882a593Smuzhiyun cfg->air_min = dhaze.ProcResV10.air_min;
1497*4882a593Smuzhiyun cfg->tmax_max = dhaze.ProcResV10.tmax_max;
1498*4882a593Smuzhiyun cfg->tmax_off = dhaze.ProcResV10.tmax_off;
1499*4882a593Smuzhiyun cfg->hist_k = dhaze.ProcResV10.hist_k;
1500*4882a593Smuzhiyun cfg->hist_th_off = dhaze.ProcResV10.hist_th_off;
1501*4882a593Smuzhiyun cfg->hist_min = dhaze.ProcResV10.hist_min;
1502*4882a593Smuzhiyun cfg->hist_gratio = dhaze.ProcResV10.hist_gratio;
1503*4882a593Smuzhiyun cfg->hist_scale = dhaze.ProcResV10.hist_scale;
1504*4882a593Smuzhiyun cfg->enhance_value = dhaze.ProcResV10.enhance_value;
1505*4882a593Smuzhiyun cfg->iir_wt_sigma = dhaze.ProcResV10.iir_wt_sigma;
1506*4882a593Smuzhiyun cfg->iir_sigma = dhaze.ProcResV10.iir_sigma;
1507*4882a593Smuzhiyun cfg->stab_fnum = dhaze.ProcResV10.stab_fnum;
1508*4882a593Smuzhiyun cfg->iir_tmax_sigma = dhaze.ProcResV10.iir_tmax_sigma;
1509*4882a593Smuzhiyun cfg->iir_air_sigma = dhaze.ProcResV10.iir_air_sigma;
1510*4882a593Smuzhiyun cfg->cfg_wt = dhaze.ProcResV10.cfg_wt;
1511*4882a593Smuzhiyun cfg->cfg_air = dhaze.ProcResV10.cfg_air;
1512*4882a593Smuzhiyun cfg->cfg_alpha = dhaze.ProcResV10.cfg_alpha;
1513*4882a593Smuzhiyun cfg->cfg_gratio = dhaze.ProcResV10.cfg_gratio;
1514*4882a593Smuzhiyun cfg->cfg_tmax = dhaze.ProcResV10.cfg_tmax;
1515*4882a593Smuzhiyun cfg->dc_weitcur = dhaze.ProcResV10.dc_weitcur;
1516*4882a593Smuzhiyun cfg->dc_thed = dhaze.ProcResV10.dc_thed;
1517*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h0 = dhaze.ProcResV10.sw_dhaz_dc_bf_h0;
1518*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h1 = dhaze.ProcResV10.sw_dhaz_dc_bf_h1;
1519*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h2 = dhaze.ProcResV10.sw_dhaz_dc_bf_h2;
1520*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h3 = dhaze.ProcResV10.sw_dhaz_dc_bf_h3;
1521*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h4 = dhaze.ProcResV10.sw_dhaz_dc_bf_h4;
1522*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h5 = dhaze.ProcResV10.sw_dhaz_dc_bf_h5;
1523*4882a593Smuzhiyun cfg->air_weitcur = dhaze.ProcResV10.air_weitcur;
1524*4882a593Smuzhiyun cfg->air_thed = dhaze.ProcResV10.air_thed;
1525*4882a593Smuzhiyun cfg->air_bf_h0 = dhaze.ProcResV10.air_bf_h0;
1526*4882a593Smuzhiyun cfg->air_bf_h1 = dhaze.ProcResV10.air_bf_h1;
1527*4882a593Smuzhiyun cfg->air_bf_h2 = dhaze.ProcResV10.air_bf_h2;
1528*4882a593Smuzhiyun cfg->gaus_h0 = dhaze.ProcResV10.gaus_h0;
1529*4882a593Smuzhiyun cfg->gaus_h1 = dhaze.ProcResV10.gaus_h1;
1530*4882a593Smuzhiyun cfg->gaus_h2 = dhaze.ProcResV10.gaus_h2;
1531*4882a593Smuzhiyun
1532*4882a593Smuzhiyun for(int i = 0; i < ISP2X_DHAZ_CONV_COEFF_NUM; i++) {
1533*4882a593Smuzhiyun cfg->conv_t0[i] = dhaze.ProcResV10.conv_t0[i];
1534*4882a593Smuzhiyun cfg->conv_t1[i] = dhaze.ProcResV10.conv_t1[i];
1535*4882a593Smuzhiyun cfg->conv_t2[i] = dhaze.ProcResV10.conv_t2[i];
1536*4882a593Smuzhiyun }
1537*4882a593Smuzhiyun
1538*4882a593Smuzhiyun #if 0
1539*4882a593Smuzhiyun // cfg->dehaze_en = int(dhaze.ProcResV10.dehaze_en[0]); //0~1 , (1bit) dehaze_en
1540*4882a593Smuzhiyun cfg->dc_en = int(dhaze.ProcResV10.dehaze_en[1]); //0~1 , (1bit) dc_en
1541*4882a593Smuzhiyun cfg->hist_en = int(dhaze.ProcResV10.dehaze_en[2]); //0~1 , (1bit) hist_en
1542*4882a593Smuzhiyun cfg->hist_chn = int(dhaze.ProcResV10.dehaze_en[3]); //0~1 , (1bit) hist_channel
1543*4882a593Smuzhiyun cfg->big_en = int(dhaze.ProcResV10.dehaze_en[4]); //0~1 , (1bit) gain_en
1544*4882a593Smuzhiyun cfg->dc_min_th = int(dhaze.ProcResV10.dehaze_self_adp[0]); //0~255, (8bit) dc_min_th
1545*4882a593Smuzhiyun cfg->dc_max_th = int(dhaze.ProcResV10.dehaze_self_adp[1] ); //0~255, (8bit) dc_max_th
1546*4882a593Smuzhiyun cfg->yhist_th = int(dhaze.ProcResV10.dehaze_self_adp[2] ); //0~255, (8bit) yhist_th
1547*4882a593Smuzhiyun cfg->yblk_th = int(dhaze.ProcResV10.dehaze_self_adp[3] * ((rawWidth + 15) / 16) * ((rawHeight + 15) / 16)); //default:28,(9bit) yblk_th
1548*4882a593Smuzhiyun cfg->dark_th = int(dhaze.ProcResV10.dehaze_self_adp[4] ); //0~255, (8bit) dark_th
1549*4882a593Smuzhiyun cfg->bright_min = int(dhaze.ProcResV10.dehaze_self_adp[5] ); //0~255, (8bit) bright_min
1550*4882a593Smuzhiyun cfg->bright_max = int(dhaze.ProcResV10.dehaze_self_adp[6] ); //0~255, (8bit) bright_max
1551*4882a593Smuzhiyun cfg->wt_max = int(dhaze.ProcResV10.dehaze_range_adj[0] * 256 ); //0~255, (9bit) wt_max
1552*4882a593Smuzhiyun cfg->air_min = int(dhaze.ProcResV10.dehaze_range_adj[2] ); //0~255, (8bit) air_min
1553*4882a593Smuzhiyun cfg->air_max = int(dhaze.ProcResV10.dehaze_range_adj[1] ); //0~256, (8bit) air_max
1554*4882a593Smuzhiyun cfg->tmax_base = int(dhaze.ProcResV10.dehaze_range_adj[3] ); //0~255, (8bit) tmax_base
1555*4882a593Smuzhiyun cfg->tmax_off = int(dhaze.ProcResV10.dehaze_range_adj[4] * 1024 ); //0~1024,(11bit) tmax_off
1556*4882a593Smuzhiyun cfg->tmax_max = int(dhaze.ProcResV10.dehaze_range_adj[5] * 1024 ); //0~1024,(11bit) tmax_max
1557*4882a593Smuzhiyun cfg->hist_gratio = int(dhaze.ProcResV10.dehaze_hist_para[0] * 8 ); // (8bit) hist_gratio
1558*4882a593Smuzhiyun cfg->hist_th_off = int(dhaze.ProcResV10.dehaze_hist_para[1] ); // (8bit) hist_th_off
1559*4882a593Smuzhiyun cfg->hist_k = int(dhaze.ProcResV10.dehaze_hist_para[2] * 4 + 0.5 ); //0~7 (5bit),3bit+2bit, hist_k
1560*4882a593Smuzhiyun cfg->hist_min = int(dhaze.ProcResV10.dehaze_hist_para[3] * 256 ); // (9bit) hist_min
1561*4882a593Smuzhiyun cfg->enhance_en = int(dhaze.ProcResV10.dehaze_enhance[0] ); //0~1 , (1bit) enhance_en
1562*4882a593Smuzhiyun cfg->enhance_value = int(dhaze.ProcResV10.dehaze_enhance[1] * 1024 + 0.5 ); // (14bit),4bit + 10bit, enhance_value
1563*4882a593Smuzhiyun cfg->hpara_en = int(dhaze.ProcResV10.dehaze_enhance[2] ); //0~1 , (1bit) sw_hist_para_en
1564*4882a593Smuzhiyun cfg->hist_scale = int(dhaze.ProcResV10.dehaze_enhance[3] * 256 + 0.5 ); // (13bit),5bit + 8bit, sw_hist_scale
1565*4882a593Smuzhiyun cfg->stab_fnum = int(dhaze.ProcResV10.dehaze_iir_control[0] ); //1~31, (5bit) stab_fnum
1566*4882a593Smuzhiyun cfg->iir_sigma = int(dhaze.ProcResV10.dehaze_iir_control[1] ); //0~255, (8bit) sigma
1567*4882a593Smuzhiyun cfg->iir_wt_sigma = int(dhaze.ProcResV10.dehaze_iir_control[2] * 8 + 0.5 ); // (11bit),8bit+3bit, wt_sigma
1568*4882a593Smuzhiyun cfg->iir_air_sigma = int(dhaze.ProcResV10.dehaze_iir_control[3] ); // (8bit) air_sigma
1569*4882a593Smuzhiyun cfg->iir_tmax_sigma = int(dhaze.ProcResV10.dehaze_iir_control[4] * 1024 + 0.5); // (11bit) tmax_sigma
1570*4882a593Smuzhiyun cfg->cfg_alpha = int(MIN(dhaze.ProcResV10.dehaze_user_config[0] * 256, 255)); //0~255, (8bit) cfg_alpha
1571*4882a593Smuzhiyun cfg->cfg_wt = int(dhaze.ProcResV10.dehaze_user_config[1] * 256 ); //0~256, (9bit) cfg_wt
1572*4882a593Smuzhiyun cfg->cfg_air = int(dhaze.ProcResV10.dehaze_user_config[2] ); //0~255, (8bit) cfg_air
1573*4882a593Smuzhiyun cfg->cfg_tmax = int(dhaze.ProcResV10.dehaze_user_config[3] * 1024 ); //0~1024,(11bit) cfg_tmax
1574*4882a593Smuzhiyun cfg->cfg_gratio = int(dhaze.ProcResV10.dehaze_user_config[4] * 256 ); // (13bit),5bit+8bit, cfg_gratio
1575*4882a593Smuzhiyun cfg->dc_thed = int(dhaze.ProcResV10.dehaze_bi_para[0] ); //0~255, (8bit) dc_thed
1576*4882a593Smuzhiyun cfg->dc_weitcur = int(dhaze.ProcResV10.dehaze_bi_para[1] * 256 + 0.5 ); //0~256, (9bit) dc_weitcur
1577*4882a593Smuzhiyun cfg->air_thed = int(dhaze.ProcResV10.dehaze_bi_para[2] ); //0~255, (8bit) air_thed
1578*4882a593Smuzhiyun cfg->air_weitcur = int(dhaze.ProcResV10.dehaze_bi_para[3] * 256 + 0.5 ); //0~256, (9bit) air_weitcur
1579*4882a593Smuzhiyun
1580*4882a593Smuzhiyun
1581*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h0 = int(dhaze.ProcResV10.dehaze_dc_bf_h[12]);//h0~h5 从大到小
1582*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h1 = int(dhaze.ProcResV10.dehaze_dc_bf_h[7]);
1583*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h2 = int(dhaze.ProcResV10.dehaze_dc_bf_h[6]);
1584*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h3 = int(dhaze.ProcResV10.dehaze_dc_bf_h[2]);
1585*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h4 = int(dhaze.ProcResV10.dehaze_dc_bf_h[1]);
1586*4882a593Smuzhiyun cfg->sw_dhaz_dc_bf_h5 = int(dhaze.ProcResV10.dehaze_dc_bf_h[0]);
1587*4882a593Smuzhiyun
1588*4882a593Smuzhiyun
1589*4882a593Smuzhiyun cfg->air_bf_h0 = int(dhaze.ProcResV10.dehaze_air_bf_h[4]);//h0~h2 从大到小
1590*4882a593Smuzhiyun cfg->air_bf_h1 = int(dhaze.ProcResV10.dehaze_air_bf_h[1]);
1591*4882a593Smuzhiyun cfg->air_bf_h2 = int(dhaze.ProcResV10.dehaze_air_bf_h[0]);
1592*4882a593Smuzhiyun
1593*4882a593Smuzhiyun cfg->gaus_h0 = int(dhaze.ProcResV10.dehaze_gaus_h[4]);//h0~h2 从大到小
1594*4882a593Smuzhiyun cfg->gaus_h1 = int(dhaze.ProcResV10.dehaze_gaus_h[1]);
1595*4882a593Smuzhiyun cfg->gaus_h2 = int(dhaze.ProcResV10.dehaze_gaus_h[0]);
1596*4882a593Smuzhiyun
1597*4882a593Smuzhiyun for (int i = 0; i < ISP2X_DHAZ_CONV_COEFF_NUM; i++)
1598*4882a593Smuzhiyun {
1599*4882a593Smuzhiyun cfg->conv_t0[i] = int(dhaze.ProcResV10.dehaze_hist_t0[i]);
1600*4882a593Smuzhiyun cfg->conv_t1[i] = int(dhaze.ProcResV10.dehaze_hist_t1[i]);
1601*4882a593Smuzhiyun cfg->conv_t2[i] = int(dhaze.ProcResV10.dehaze_hist_t2[i]);
1602*4882a593Smuzhiyun }
1603*4882a593Smuzhiyun #endif
1604*4882a593Smuzhiyun }
1605*4882a593Smuzhiyun #endif
1606*4882a593Smuzhiyun
1607*4882a593Smuzhiyun template<class T>
1608*4882a593Smuzhiyun void
convertAiqBlcToIsp20Params(T & isp_cfg,rk_aiq_isp_blc_t & blc)1609*4882a593Smuzhiyun Isp20Params::convertAiqBlcToIsp20Params(T& isp_cfg, rk_aiq_isp_blc_t &blc)
1610*4882a593Smuzhiyun {
1611*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
1612*4882a593Smuzhiyun
1613*4882a593Smuzhiyun if(blc.enable) {
1614*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_BLS;
1615*4882a593Smuzhiyun }
1616*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_BLS;
1617*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_BLS;
1618*4882a593Smuzhiyun
1619*4882a593Smuzhiyun isp_cfg.others.bls_cfg.enable_auto = 0;
1620*4882a593Smuzhiyun isp_cfg.others.bls_cfg.en_windows = 0;
1621*4882a593Smuzhiyun
1622*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window1.h_offs = 0;
1623*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window1.v_offs = 0;
1624*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window1.h_size = 0;
1625*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window1.v_size = 0;
1626*4882a593Smuzhiyun
1627*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window2.h_offs = 0;
1628*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window2.v_offs = 0;
1629*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window2.h_size = 0;
1630*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_window2.v_size = 0;
1631*4882a593Smuzhiyun
1632*4882a593Smuzhiyun isp_cfg.others.bls_cfg.bls_samples = 0;
1633*4882a593Smuzhiyun
1634*4882a593Smuzhiyun isp_cfg.others.bls_cfg.fixed_val.r = blc.blc_gr;
1635*4882a593Smuzhiyun isp_cfg.others.bls_cfg.fixed_val.gr = blc.blc_gr;
1636*4882a593Smuzhiyun isp_cfg.others.bls_cfg.fixed_val.gb = blc.blc_gr;
1637*4882a593Smuzhiyun isp_cfg.others.bls_cfg.fixed_val.b = blc.blc_gr;
1638*4882a593Smuzhiyun
1639*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
1640*4882a593Smuzhiyun }
1641*4882a593Smuzhiyun
1642*4882a593Smuzhiyun
1643*4882a593Smuzhiyun template<class T>
1644*4882a593Smuzhiyun void
convertAiqDpccToIsp20Params(T & isp_cfg,rk_aiq_isp_dpcc_t & dpcc)1645*4882a593Smuzhiyun Isp20Params::convertAiqDpccToIsp20Params(T& isp_cfg, rk_aiq_isp_dpcc_t &dpcc)
1646*4882a593Smuzhiyun {
1647*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
1648*4882a593Smuzhiyun
1649*4882a593Smuzhiyun struct isp2x_dpcc_cfg * pDpccCfg = &isp_cfg.others.dpcc_cfg;
1650*4882a593Smuzhiyun rk_aiq_isp_dpcc_t *pDpccRst = &dpcc;
1651*4882a593Smuzhiyun
1652*4882a593Smuzhiyun if(pDpccRst->stBasic.enable) {
1653*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_DPCC;
1654*4882a593Smuzhiyun }
1655*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_DPCC;
1656*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_DPCC;
1657*4882a593Smuzhiyun
1658*4882a593Smuzhiyun //mode 0x0000
1659*4882a593Smuzhiyun pDpccCfg->stage1_enable = pDpccRst->stBasic.stage1_enable;
1660*4882a593Smuzhiyun pDpccCfg->grayscale_mode = pDpccRst->stBasic.grayscale_mode;
1661*4882a593Smuzhiyun //pDpccCfg->enable = pDpccRst->stBasic.enable;
1662*4882a593Smuzhiyun
1663*4882a593Smuzhiyun //output_mode 0x0004
1664*4882a593Smuzhiyun pDpccCfg->sw_rk_out_sel = pDpccRst->stBasic.sw_rk_out_sel;
1665*4882a593Smuzhiyun pDpccCfg->sw_dpcc_output_sel = pDpccRst->stBasic.sw_dpcc_output_sel;
1666*4882a593Smuzhiyun pDpccCfg->stage1_rb_3x3 = pDpccRst->stBasic.stage1_rb_3x3;
1667*4882a593Smuzhiyun pDpccCfg->stage1_g_3x3 = pDpccRst->stBasic.stage1_g_3x3;
1668*4882a593Smuzhiyun pDpccCfg->stage1_incl_rb_center = pDpccRst->stBasic.stage1_incl_rb_center;
1669*4882a593Smuzhiyun pDpccCfg->stage1_incl_green_center = pDpccRst->stBasic.stage1_incl_green_center;
1670*4882a593Smuzhiyun
1671*4882a593Smuzhiyun //set_use 0x0008
1672*4882a593Smuzhiyun pDpccCfg->stage1_use_fix_set = pDpccRst->stBasic.stage1_use_fix_set;
1673*4882a593Smuzhiyun pDpccCfg->stage1_use_set_3 = pDpccRst->stBasic.stage1_use_set_3;
1674*4882a593Smuzhiyun pDpccCfg->stage1_use_set_2 = pDpccRst->stBasic.stage1_use_set_2;
1675*4882a593Smuzhiyun pDpccCfg->stage1_use_set_1 = pDpccRst->stBasic.stage1_use_set_1;
1676*4882a593Smuzhiyun
1677*4882a593Smuzhiyun //methods_set_1 0x000c
1678*4882a593Smuzhiyun pDpccCfg->sw_rk_red_blue1_en = pDpccRst->stBasic.sw_rk_red_blue1_en;
1679*4882a593Smuzhiyun pDpccCfg->rg_red_blue1_enable = pDpccRst->stBasic.rg_red_blue1_enable;
1680*4882a593Smuzhiyun pDpccCfg->rnd_red_blue1_enable = pDpccRst->stBasic.rnd_red_blue1_enable;
1681*4882a593Smuzhiyun pDpccCfg->ro_red_blue1_enable = pDpccRst->stBasic.ro_red_blue1_enable;
1682*4882a593Smuzhiyun pDpccCfg->lc_red_blue1_enable = pDpccRst->stBasic.lc_red_blue1_enable;
1683*4882a593Smuzhiyun pDpccCfg->pg_red_blue1_enable = pDpccRst->stBasic.pg_red_blue1_enable;
1684*4882a593Smuzhiyun pDpccCfg->sw_rk_green1_en = pDpccRst->stBasic.sw_rk_green1_en;
1685*4882a593Smuzhiyun pDpccCfg->rg_green1_enable = pDpccRst->stBasic.rg_green1_enable;
1686*4882a593Smuzhiyun pDpccCfg->rnd_green1_enable = pDpccRst->stBasic.rnd_green1_enable;
1687*4882a593Smuzhiyun pDpccCfg->ro_green1_enable = pDpccRst->stBasic.ro_green1_enable;
1688*4882a593Smuzhiyun pDpccCfg->lc_green1_enable = pDpccRst->stBasic.lc_green1_enable;
1689*4882a593Smuzhiyun pDpccCfg->pg_green1_enable = pDpccRst->stBasic.pg_green1_enable;
1690*4882a593Smuzhiyun
1691*4882a593Smuzhiyun //methods_set_2 0x0010
1692*4882a593Smuzhiyun pDpccCfg->sw_rk_red_blue2_en = pDpccRst->stBasic.sw_rk_red_blue2_en;
1693*4882a593Smuzhiyun pDpccCfg->rg_red_blue2_enable = pDpccRst->stBasic.rg_red_blue2_enable;
1694*4882a593Smuzhiyun pDpccCfg->rnd_red_blue2_enable = pDpccRst->stBasic.rnd_red_blue2_enable;
1695*4882a593Smuzhiyun pDpccCfg->ro_red_blue2_enable = pDpccRst->stBasic.ro_red_blue2_enable;
1696*4882a593Smuzhiyun pDpccCfg->lc_red_blue2_enable = pDpccRst->stBasic.lc_red_blue2_enable;
1697*4882a593Smuzhiyun pDpccCfg->pg_red_blue2_enable = pDpccRst->stBasic.pg_red_blue2_enable;
1698*4882a593Smuzhiyun pDpccCfg->sw_rk_green2_en = pDpccRst->stBasic.sw_rk_green2_en;
1699*4882a593Smuzhiyun pDpccCfg->rg_green2_enable = pDpccRst->stBasic.rg_green2_enable;
1700*4882a593Smuzhiyun pDpccCfg->rnd_green2_enable = pDpccRst->stBasic.rnd_green2_enable;
1701*4882a593Smuzhiyun pDpccCfg->ro_green2_enable = pDpccRst->stBasic.ro_green2_enable;
1702*4882a593Smuzhiyun pDpccCfg->lc_green2_enable = pDpccRst->stBasic.lc_green2_enable;
1703*4882a593Smuzhiyun pDpccCfg->pg_green2_enable = pDpccRst->stBasic.pg_green2_enable;
1704*4882a593Smuzhiyun
1705*4882a593Smuzhiyun //methods_set_3 0x0014
1706*4882a593Smuzhiyun pDpccCfg->sw_rk_red_blue3_en = pDpccRst->stBasic.sw_rk_red_blue3_en;
1707*4882a593Smuzhiyun pDpccCfg->rg_red_blue3_enable = pDpccRst->stBasic.rg_red_blue3_enable;
1708*4882a593Smuzhiyun pDpccCfg->rnd_red_blue3_enable = pDpccRst->stBasic.rnd_red_blue3_enable;
1709*4882a593Smuzhiyun pDpccCfg->ro_red_blue3_enable = pDpccRst->stBasic.ro_red_blue3_enable;
1710*4882a593Smuzhiyun pDpccCfg->lc_red_blue3_enable = pDpccRst->stBasic.lc_red_blue3_enable;
1711*4882a593Smuzhiyun pDpccCfg->pg_red_blue3_enable = pDpccRst->stBasic.pg_red_blue3_enable;
1712*4882a593Smuzhiyun pDpccCfg->sw_rk_green3_en = pDpccRst->stBasic.sw_rk_green3_en;
1713*4882a593Smuzhiyun pDpccCfg->rg_green3_enable = pDpccRst->stBasic.rg_green3_enable;
1714*4882a593Smuzhiyun pDpccCfg->rnd_green3_enable = pDpccRst->stBasic.rnd_green3_enable;
1715*4882a593Smuzhiyun pDpccCfg->ro_green3_enable = pDpccRst->stBasic.ro_green3_enable;
1716*4882a593Smuzhiyun pDpccCfg->lc_green3_enable = pDpccRst->stBasic.lc_green3_enable;
1717*4882a593Smuzhiyun pDpccCfg->pg_green3_enable = pDpccRst->stBasic.pg_green3_enable;
1718*4882a593Smuzhiyun
1719*4882a593Smuzhiyun //line_thresh_1 0x0018
1720*4882a593Smuzhiyun pDpccCfg->sw_mindis1_rb = pDpccRst->stBasic.sw_mindis1_rb;
1721*4882a593Smuzhiyun pDpccCfg->sw_mindis1_g = pDpccRst->stBasic.sw_mindis1_g;
1722*4882a593Smuzhiyun pDpccCfg->line_thr_1_rb = pDpccRst->stBasic.line_thr_1_rb;
1723*4882a593Smuzhiyun pDpccCfg->line_thr_1_g = pDpccRst->stBasic.line_thr_1_g;
1724*4882a593Smuzhiyun
1725*4882a593Smuzhiyun //line_mad_fac_1 0x001c
1726*4882a593Smuzhiyun pDpccCfg->sw_dis_scale_min1 = pDpccRst->stBasic.sw_dis_scale_min1;
1727*4882a593Smuzhiyun pDpccCfg->sw_dis_scale_max1 = pDpccRst->stBasic.sw_dis_scale_max1;
1728*4882a593Smuzhiyun pDpccCfg->line_mad_fac_1_rb = pDpccRst->stBasic.line_mad_fac_1_rb;
1729*4882a593Smuzhiyun pDpccCfg->line_mad_fac_1_g = pDpccRst->stBasic.line_mad_fac_1_g;
1730*4882a593Smuzhiyun
1731*4882a593Smuzhiyun //pg_fac_1 0x0020
1732*4882a593Smuzhiyun pDpccCfg->pg_fac_1_rb = pDpccRst->stBasic.pg_fac_1_rb;
1733*4882a593Smuzhiyun pDpccCfg->pg_fac_1_g = pDpccRst->stBasic.pg_fac_1_g;
1734*4882a593Smuzhiyun
1735*4882a593Smuzhiyun //rnd_thresh_1 0x0024
1736*4882a593Smuzhiyun pDpccCfg->rnd_thr_1_rb = pDpccRst->stBasic.rnd_thr_1_rb;
1737*4882a593Smuzhiyun pDpccCfg->rnd_thr_1_g = pDpccRst->stBasic.rnd_thr_1_g;
1738*4882a593Smuzhiyun
1739*4882a593Smuzhiyun //rg_fac_1 0x0028
1740*4882a593Smuzhiyun pDpccCfg->rg_fac_1_rb = pDpccRst->stBasic.rg_fac_1_rb;
1741*4882a593Smuzhiyun pDpccCfg->rg_fac_1_g = pDpccRst->stBasic.rg_fac_1_g;
1742*4882a593Smuzhiyun
1743*4882a593Smuzhiyun
1744*4882a593Smuzhiyun //line_thresh_2 0x002c
1745*4882a593Smuzhiyun pDpccCfg->sw_mindis2_rb = pDpccRst->stBasic.sw_mindis2_rb;
1746*4882a593Smuzhiyun pDpccCfg->sw_mindis2_g = pDpccRst->stBasic.sw_mindis2_g;
1747*4882a593Smuzhiyun pDpccCfg->line_thr_2_rb = pDpccRst->stBasic.line_thr_2_rb;
1748*4882a593Smuzhiyun pDpccCfg->line_thr_2_g = pDpccRst->stBasic.line_thr_2_g;
1749*4882a593Smuzhiyun
1750*4882a593Smuzhiyun //line_mad_fac_2 0x0030
1751*4882a593Smuzhiyun pDpccCfg->sw_dis_scale_min2 = pDpccRst->stBasic.sw_dis_scale_min2;
1752*4882a593Smuzhiyun pDpccCfg->sw_dis_scale_max2 = pDpccRst->stBasic.sw_dis_scale_max2;
1753*4882a593Smuzhiyun pDpccCfg->line_mad_fac_2_rb = pDpccRst->stBasic.line_mad_fac_2_rb;
1754*4882a593Smuzhiyun pDpccCfg->line_mad_fac_2_g = pDpccRst->stBasic.line_mad_fac_2_g;
1755*4882a593Smuzhiyun
1756*4882a593Smuzhiyun //pg_fac_2 0x0034
1757*4882a593Smuzhiyun pDpccCfg->pg_fac_2_rb = pDpccRst->stBasic.pg_fac_2_rb;
1758*4882a593Smuzhiyun pDpccCfg->pg_fac_2_g = pDpccRst->stBasic.pg_fac_2_g;
1759*4882a593Smuzhiyun
1760*4882a593Smuzhiyun //rnd_thresh_2 0x0038
1761*4882a593Smuzhiyun pDpccCfg->rnd_thr_2_rb = pDpccRst->stBasic.rnd_thr_2_rb;
1762*4882a593Smuzhiyun pDpccCfg->rnd_thr_2_g = pDpccRst->stBasic.rnd_thr_2_g;
1763*4882a593Smuzhiyun
1764*4882a593Smuzhiyun //rg_fac_2 0x003c
1765*4882a593Smuzhiyun pDpccCfg->rg_fac_2_rb = pDpccRst->stBasic.rg_fac_2_rb;
1766*4882a593Smuzhiyun pDpccCfg->rg_fac_2_g = pDpccRst->stBasic.rg_fac_2_g;
1767*4882a593Smuzhiyun
1768*4882a593Smuzhiyun
1769*4882a593Smuzhiyun //line_thresh_3 0x0040
1770*4882a593Smuzhiyun pDpccCfg->sw_mindis3_rb = pDpccRst->stBasic.sw_mindis3_rb;
1771*4882a593Smuzhiyun pDpccCfg->sw_mindis3_g = pDpccRst->stBasic.sw_mindis3_g;
1772*4882a593Smuzhiyun pDpccCfg->line_thr_3_rb = pDpccRst->stBasic.line_thr_3_rb;
1773*4882a593Smuzhiyun pDpccCfg->line_thr_3_g = pDpccRst->stBasic.line_thr_3_g;
1774*4882a593Smuzhiyun
1775*4882a593Smuzhiyun //line_mad_fac_3 0x0044
1776*4882a593Smuzhiyun pDpccCfg->sw_dis_scale_min3 = pDpccRst->stBasic.sw_dis_scale_min3;
1777*4882a593Smuzhiyun pDpccCfg->sw_dis_scale_max3 = pDpccRst->stBasic.sw_dis_scale_max3;
1778*4882a593Smuzhiyun pDpccCfg->line_mad_fac_3_rb = pDpccRst->stBasic.line_mad_fac_3_rb;
1779*4882a593Smuzhiyun pDpccCfg->line_mad_fac_3_g = pDpccRst->stBasic.line_mad_fac_3_g;
1780*4882a593Smuzhiyun
1781*4882a593Smuzhiyun //pg_fac_3 0x0048
1782*4882a593Smuzhiyun pDpccCfg->pg_fac_3_rb = pDpccRst->stBasic.pg_fac_3_rb;
1783*4882a593Smuzhiyun pDpccCfg->pg_fac_3_g = pDpccRst->stBasic.pg_fac_3_g;
1784*4882a593Smuzhiyun
1785*4882a593Smuzhiyun //rnd_thresh_3 0x004c
1786*4882a593Smuzhiyun pDpccCfg->rnd_thr_3_rb = pDpccRst->stBasic.rnd_thr_3_rb;
1787*4882a593Smuzhiyun pDpccCfg->rnd_thr_3_g = pDpccRst->stBasic.rnd_thr_3_g;
1788*4882a593Smuzhiyun
1789*4882a593Smuzhiyun //rg_fac_3 0x0050
1790*4882a593Smuzhiyun pDpccCfg->rg_fac_3_rb = pDpccRst->stBasic.rg_fac_3_rb;
1791*4882a593Smuzhiyun pDpccCfg->rg_fac_3_g = pDpccRst->stBasic.rg_fac_3_g;
1792*4882a593Smuzhiyun
1793*4882a593Smuzhiyun //ro_limits 0x0054
1794*4882a593Smuzhiyun pDpccCfg->ro_lim_3_rb = pDpccRst->stBasic.ro_lim_3_rb;
1795*4882a593Smuzhiyun pDpccCfg->ro_lim_3_g = pDpccRst->stBasic.ro_lim_3_g;
1796*4882a593Smuzhiyun pDpccCfg->ro_lim_2_rb = pDpccRst->stBasic.ro_lim_2_rb;
1797*4882a593Smuzhiyun pDpccCfg->ro_lim_2_g = pDpccRst->stBasic.ro_lim_2_g;
1798*4882a593Smuzhiyun pDpccCfg->ro_lim_1_rb = pDpccRst->stBasic.ro_lim_1_rb;
1799*4882a593Smuzhiyun pDpccCfg->ro_lim_1_g = pDpccRst->stBasic.ro_lim_1_g;
1800*4882a593Smuzhiyun
1801*4882a593Smuzhiyun //rnd_offs 0x0058
1802*4882a593Smuzhiyun pDpccCfg->rnd_offs_3_rb = pDpccRst->stBasic.rnd_offs_3_rb;
1803*4882a593Smuzhiyun pDpccCfg->rnd_offs_3_g = pDpccRst->stBasic.rnd_offs_3_g;
1804*4882a593Smuzhiyun pDpccCfg->rnd_offs_2_rb = pDpccRst->stBasic.rnd_offs_2_rb;
1805*4882a593Smuzhiyun pDpccCfg->rnd_offs_2_g = pDpccRst->stBasic.rnd_offs_2_g;
1806*4882a593Smuzhiyun pDpccCfg->rnd_offs_1_rb = pDpccRst->stBasic.rnd_offs_1_rb;
1807*4882a593Smuzhiyun pDpccCfg->rnd_offs_1_g = pDpccRst->stBasic.rnd_offs_1_g;
1808*4882a593Smuzhiyun
1809*4882a593Smuzhiyun //bpt_ctrl 0x005c
1810*4882a593Smuzhiyun pDpccCfg->bpt_rb_3x3 = pDpccRst->stBpt.bpt_rb_3x3;
1811*4882a593Smuzhiyun pDpccCfg->bpt_g_3x3 = pDpccRst->stBpt.bpt_g_3x3;
1812*4882a593Smuzhiyun pDpccCfg->bpt_incl_rb_center = pDpccRst->stBpt.bpt_incl_rb_center;
1813*4882a593Smuzhiyun pDpccCfg->bpt_incl_green_center = pDpccRst->stBpt.bpt_incl_green_center;
1814*4882a593Smuzhiyun pDpccCfg->bpt_use_fix_set = pDpccRst->stBpt.bpt_use_fix_set;
1815*4882a593Smuzhiyun pDpccCfg->bpt_use_set_3 = pDpccRst->stBpt.bpt_use_set_3;
1816*4882a593Smuzhiyun pDpccCfg->bpt_use_set_2 = pDpccRst->stBpt.bpt_use_set_2;
1817*4882a593Smuzhiyun pDpccCfg->bpt_use_set_1 = pDpccRst->stBpt.bpt_use_set_1;
1818*4882a593Smuzhiyun pDpccCfg->bpt_cor_en = pDpccRst->stBpt.bpt_cor_en;
1819*4882a593Smuzhiyun pDpccCfg->bpt_det_en = pDpccRst->stBpt.bpt_det_en;
1820*4882a593Smuzhiyun
1821*4882a593Smuzhiyun //bpt_number 0x0060
1822*4882a593Smuzhiyun pDpccCfg->bp_number = pDpccRst->stBpt.bp_number;
1823*4882a593Smuzhiyun
1824*4882a593Smuzhiyun //bpt_addr 0x0064
1825*4882a593Smuzhiyun pDpccCfg->bp_table_addr = pDpccRst->stBpt.bp_table_addr;
1826*4882a593Smuzhiyun
1827*4882a593Smuzhiyun //bpt_data 0x0068
1828*4882a593Smuzhiyun pDpccCfg->bpt_v_addr = pDpccRst->stBpt.bpt_v_addr;
1829*4882a593Smuzhiyun pDpccCfg->bpt_h_addr = pDpccRst->stBpt.bpt_h_addr;
1830*4882a593Smuzhiyun
1831*4882a593Smuzhiyun //bp_cnt 0x006c
1832*4882a593Smuzhiyun pDpccCfg->bp_cnt = pDpccRst->stBpt.bp_cnt;
1833*4882a593Smuzhiyun
1834*4882a593Smuzhiyun //pdaf_en 0x0070
1835*4882a593Smuzhiyun pDpccCfg->sw_pdaf_en = pDpccRst->stPdaf.sw_pdaf_en;
1836*4882a593Smuzhiyun
1837*4882a593Smuzhiyun //pdaf_point_en 0x0074
1838*4882a593Smuzhiyun for(int i = 0; i < ISP2X_DPCC_PDAF_POINT_NUM; i++) {
1839*4882a593Smuzhiyun pDpccCfg->pdaf_point_en[i] = pDpccRst->stPdaf.pdaf_point_en[i];
1840*4882a593Smuzhiyun }
1841*4882a593Smuzhiyun
1842*4882a593Smuzhiyun //pdaf_offset 0x0078
1843*4882a593Smuzhiyun pDpccCfg->pdaf_offsety = pDpccRst->stPdaf.pdaf_offsety;
1844*4882a593Smuzhiyun pDpccCfg->pdaf_offsetx = pDpccRst->stPdaf.pdaf_offsetx;
1845*4882a593Smuzhiyun
1846*4882a593Smuzhiyun //pdaf_wrap 0x007c
1847*4882a593Smuzhiyun pDpccCfg->pdaf_wrapy = pDpccRst->stPdaf.pdaf_wrapy;
1848*4882a593Smuzhiyun pDpccCfg->pdaf_wrapx = pDpccRst->stPdaf.pdaf_wrapx;
1849*4882a593Smuzhiyun
1850*4882a593Smuzhiyun //pdaf_scope 0x0080
1851*4882a593Smuzhiyun pDpccCfg->pdaf_wrapy_num = pDpccRst->stPdaf.pdaf_wrapy_num;
1852*4882a593Smuzhiyun pDpccCfg->pdaf_wrapx_num = pDpccRst->stPdaf.pdaf_wrapx_num;
1853*4882a593Smuzhiyun
1854*4882a593Smuzhiyun //pdaf_point_0 0x0084
1855*4882a593Smuzhiyun for(int i = 0; i < ISP2X_DPCC_PDAF_POINT_NUM; i++) {
1856*4882a593Smuzhiyun pDpccCfg->point[i].x = pDpccRst->stPdaf.point[i].x;
1857*4882a593Smuzhiyun pDpccCfg->point[i].y = pDpccRst->stPdaf.point[i].y;
1858*4882a593Smuzhiyun }
1859*4882a593Smuzhiyun
1860*4882a593Smuzhiyun //pdaf_forward_med 0x00a4
1861*4882a593Smuzhiyun pDpccCfg->pdaf_forward_med = pDpccRst->stPdaf.pdaf_forward_med;
1862*4882a593Smuzhiyun
1863*4882a593Smuzhiyun
1864*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
1865*4882a593Smuzhiyun }
1866*4882a593Smuzhiyun
1867*4882a593Smuzhiyun
1868*4882a593Smuzhiyun template<class T>
1869*4882a593Smuzhiyun void
convertAiqLscToIsp20Params(T & isp_cfg,const rk_aiq_lsc_cfg_t & lsc)1870*4882a593Smuzhiyun Isp20Params::convertAiqLscToIsp20Params(T& isp_cfg,
1871*4882a593Smuzhiyun const rk_aiq_lsc_cfg_t& lsc)
1872*4882a593Smuzhiyun {
1873*4882a593Smuzhiyun
1874*4882a593Smuzhiyun if(lsc.lsc_en) {
1875*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_LSC;
1876*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_LSC;
1877*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_LSC;
1878*4882a593Smuzhiyun _lsc_en = true;
1879*4882a593Smuzhiyun } else {
1880*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_LSC;
1881*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_LSC;
1882*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_LSC;
1883*4882a593Smuzhiyun _lsc_en = false;
1884*4882a593Smuzhiyun }
1885*4882a593Smuzhiyun
1886*4882a593Smuzhiyun #if defined (RKAIQ_HAVE_LSC_V2) || defined (RKAIQ_HAVE_LSC_V3)
1887*4882a593Smuzhiyun struct isp3x_lsc_cfg * cfg = &isp_cfg.others.lsc_cfg;
1888*4882a593Smuzhiyun cfg->sector_16x16 = true;
1889*4882a593Smuzhiyun #else
1890*4882a593Smuzhiyun struct isp2x_lsc_cfg * cfg = &isp_cfg.others.lsc_cfg;
1891*4882a593Smuzhiyun #endif
1892*4882a593Smuzhiyun memcpy(cfg->x_size_tbl, lsc.x_size_tbl, sizeof(cfg->x_size_tbl));
1893*4882a593Smuzhiyun memcpy(cfg->y_size_tbl, lsc.y_size_tbl, sizeof(cfg->y_size_tbl));
1894*4882a593Smuzhiyun memcpy(cfg->x_grad_tbl, lsc.x_grad_tbl, sizeof(cfg->x_grad_tbl));
1895*4882a593Smuzhiyun memcpy(cfg->y_grad_tbl, lsc.y_grad_tbl, sizeof(cfg->y_grad_tbl));
1896*4882a593Smuzhiyun
1897*4882a593Smuzhiyun memcpy(cfg->r_data_tbl, lsc.r_data_tbl, sizeof(lsc.r_data_tbl));
1898*4882a593Smuzhiyun memcpy(cfg->gr_data_tbl, lsc.gr_data_tbl, sizeof(lsc.gr_data_tbl));
1899*4882a593Smuzhiyun memcpy(cfg->gb_data_tbl, lsc.gb_data_tbl, sizeof(lsc.gb_data_tbl));
1900*4882a593Smuzhiyun memcpy(cfg->b_data_tbl, lsc.b_data_tbl, sizeof(lsc.b_data_tbl));
1901*4882a593Smuzhiyun #if 0//def ISP_HW_V30 // will be done Isp21Params::convertAiqExpIspDgainToIspParams
1902*4882a593Smuzhiyun #define MAX_LSC_VALUE 8191
1903*4882a593Smuzhiyun struct isp21_bls_cfg &bls_cfg = isp_cfg.others.bls_cfg;
1904*4882a593Smuzhiyun if(bls_cfg.bls1_en && bls_cfg.bls1_val.b > 0 && bls_cfg.bls1_val.r > 0
1905*4882a593Smuzhiyun && bls_cfg.bls1_val.gb > 0 && bls_cfg.bls1_val.gr > 0 ) {
1906*4882a593Smuzhiyun if(lsc.lsc_en) {
1907*4882a593Smuzhiyun for(int i = 0; i < ISP3X_LSC_DATA_TBL_SIZE; i++) {
1908*4882a593Smuzhiyun cfg->b_data_tbl[i] = cfg->b_data_tbl[i] * ((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.b);
1909*4882a593Smuzhiyun cfg->b_data_tbl[i] = MIN(cfg->b_data_tbl[i], MAX_LSC_VALUE);
1910*4882a593Smuzhiyun cfg->gb_data_tbl[i] = cfg->gb_data_tbl[i] * ((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.gb);
1911*4882a593Smuzhiyun cfg->gb_data_tbl[i] = MIN(cfg->gb_data_tbl[i], MAX_LSC_VALUE);
1912*4882a593Smuzhiyun cfg->r_data_tbl[i] = cfg->r_data_tbl[i] * ((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.r);
1913*4882a593Smuzhiyun cfg->r_data_tbl[i] = MIN(cfg->r_data_tbl[i], MAX_LSC_VALUE);
1914*4882a593Smuzhiyun cfg->gr_data_tbl[i] = cfg->gr_data_tbl[i] * ((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.gr);
1915*4882a593Smuzhiyun cfg->gr_data_tbl[i] = MIN(cfg->gr_data_tbl[i], MAX_LSC_VALUE);
1916*4882a593Smuzhiyun }
1917*4882a593Smuzhiyun } else {
1918*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_LSC; //force open lsc
1919*4882a593Smuzhiyun for(int i = 0; i < ISP3X_LSC_DATA_TBL_SIZE; i++) {
1920*4882a593Smuzhiyun cfg->b_data_tbl[i] = 1024 * ((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.b);
1921*4882a593Smuzhiyun cfg->b_data_tbl[i] = MIN(cfg->b_data_tbl[i], MAX_LSC_VALUE);
1922*4882a593Smuzhiyun cfg->gb_data_tbl[i] = 1024 * ((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.gb);
1923*4882a593Smuzhiyun cfg->gb_data_tbl[i] = MIN(cfg->gb_data_tbl[i], MAX_LSC_VALUE);
1924*4882a593Smuzhiyun cfg->r_data_tbl[i] = 1024 * ((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.r);
1925*4882a593Smuzhiyun cfg->r_data_tbl[i] = MIN(cfg->r_data_tbl[i], MAX_LSC_VALUE);
1926*4882a593Smuzhiyun cfg->gr_data_tbl[i] = 1024 * ((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - bls_cfg.bls1_val.gr);
1927*4882a593Smuzhiyun cfg->gr_data_tbl[i] = MIN(cfg->gr_data_tbl[i], MAX_LSC_VALUE);
1928*4882a593Smuzhiyun }
1929*4882a593Smuzhiyun }
1930*4882a593Smuzhiyun }
1931*4882a593Smuzhiyun #endif
1932*4882a593Smuzhiyun }
1933*4882a593Smuzhiyun
1934*4882a593Smuzhiyun #if RKAIQ_HAVE_CCM_V1
1935*4882a593Smuzhiyun template<class T>
convertAiqCcmToIsp20Params(T & isp_cfg,const rk_aiq_ccm_cfg_t & ccm)1936*4882a593Smuzhiyun void Isp20Params::convertAiqCcmToIsp20Params(T& isp_cfg,
1937*4882a593Smuzhiyun const rk_aiq_ccm_cfg_t& ccm)
1938*4882a593Smuzhiyun {
1939*4882a593Smuzhiyun if(ccm.ccmEnable) {
1940*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_CCM;
1941*4882a593Smuzhiyun }
1942*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CCM;
1943*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_CCM;
1944*4882a593Smuzhiyun
1945*4882a593Smuzhiyun struct isp2x_ccm_cfg * cfg = &isp_cfg.others.ccm_cfg;
1946*4882a593Smuzhiyun const float *coeff = ccm.matrix;
1947*4882a593Smuzhiyun const float *offset = ccm.offs;
1948*4882a593Smuzhiyun
1949*4882a593Smuzhiyun cfg->coeff0_r = (coeff[0] - 1) > 0 ? (short)((coeff[0] - 1) * 128 + 0.5) : (short)((coeff[0] - 1) * 128 - 0.5); //check -128?
1950*4882a593Smuzhiyun cfg->coeff1_r = coeff[1] > 0 ? (short)(coeff[1] * 128 + 0.5) : (short)(coeff[1] * 128 - 0.5);
1951*4882a593Smuzhiyun cfg->coeff2_r = coeff[2] > 0 ? (short)(coeff[2] * 128 + 0.5) : (short)(coeff[2] * 128 - 0.5);
1952*4882a593Smuzhiyun cfg->coeff0_g = coeff[3] > 0 ? (short)(coeff[3] * 128 + 0.5) : (short)(coeff[3] * 128 - 0.5);
1953*4882a593Smuzhiyun cfg->coeff1_g = (coeff[4] - 1) > 0 ? (short)((coeff[4] - 1) * 128 + 0.5) : (short)((coeff[4] - 1) * 128 - 0.5);
1954*4882a593Smuzhiyun cfg->coeff2_g = coeff[5] > 0 ? (short)(coeff[5] * 128 + 0.5) : (short)(coeff[5] * 128 - 0.5);
1955*4882a593Smuzhiyun cfg->coeff0_b = coeff[6] > 0 ? (short)(coeff[6] * 128 + 0.5) : (short)(coeff[6] * 128 - 0.5);
1956*4882a593Smuzhiyun cfg->coeff1_b = coeff[7] > 0 ? (short)(coeff[7] * 128 + 0.5) : (short)(coeff[7] * 128 - 0.5);
1957*4882a593Smuzhiyun cfg->coeff2_b = (coeff[8] - 1) > 0 ? (short)((coeff[8] - 1) * 128 + 0.5) : (short)((coeff[8] - 1) * 128 - 0.5);
1958*4882a593Smuzhiyun
1959*4882a593Smuzhiyun cfg->offset_r = offset[0] > 0 ? (short)(offset[0] + 0.5) : (short)(offset[0] - 0.5);// for 12bit
1960*4882a593Smuzhiyun cfg->offset_g = offset[1] > 0 ? (short)(offset[1] + 0.5) : (int)(offset[1] - 0.5);
1961*4882a593Smuzhiyun cfg->offset_b = offset[2] > 0 ? (short)(offset[2] + 0.5) : (short)(offset[2] - 0.5);
1962*4882a593Smuzhiyun
1963*4882a593Smuzhiyun cfg->coeff0_y = (u16 )ccm.rgb2y_para[0];
1964*4882a593Smuzhiyun cfg->coeff1_y = (u16 )ccm.rgb2y_para[1];
1965*4882a593Smuzhiyun cfg->coeff2_y = (u16 )ccm.rgb2y_para[2];
1966*4882a593Smuzhiyun cfg->bound_bit = (u8)ccm.bound_bit;//check
1967*4882a593Smuzhiyun
1968*4882a593Smuzhiyun for( int i = 0; i < 17; i++)
1969*4882a593Smuzhiyun {
1970*4882a593Smuzhiyun cfg->alp_y[i] = (u16)(ccm.alp_y[i]);
1971*4882a593Smuzhiyun }
1972*4882a593Smuzhiyun }
1973*4882a593Smuzhiyun #endif
1974*4882a593Smuzhiyun #if RKAIQ_HAVE_3DLUT_V1
1975*4882a593Smuzhiyun template<class T>
convertAiqA3dlutToIsp20Params(T & isp_cfg,const rk_aiq_lut3d_cfg_t & lut3d_cfg)1976*4882a593Smuzhiyun void Isp20Params::convertAiqA3dlutToIsp20Params(T& isp_cfg,
1977*4882a593Smuzhiyun const rk_aiq_lut3d_cfg_t& lut3d_cfg)
1978*4882a593Smuzhiyun {
1979*4882a593Smuzhiyun if(lut3d_cfg.enable) {
1980*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_3DLUT;
1981*4882a593Smuzhiyun }
1982*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_3DLUT;
1983*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_3DLUT;
1984*4882a593Smuzhiyun
1985*4882a593Smuzhiyun struct isp2x_3dlut_cfg* cfg = &isp_cfg.others.isp3dlut_cfg;
1986*4882a593Smuzhiyun #ifndef ISP_HW_V30 // isp3x has no bypass_en
1987*4882a593Smuzhiyun cfg->bypass_en = lut3d_cfg.bypass_en;
1988*4882a593Smuzhiyun #endif
1989*4882a593Smuzhiyun cfg->actual_size = lut3d_cfg.lut3d_lut_wsize;
1990*4882a593Smuzhiyun if (lut3d_cfg.enable || !lut3d_cfg.bypass_en) {
1991*4882a593Smuzhiyun memcpy(cfg->lut_r, lut3d_cfg.tbl.look_up_table_r, sizeof(cfg->lut_r));
1992*4882a593Smuzhiyun memcpy(cfg->lut_g, lut3d_cfg.tbl.look_up_table_g, sizeof(cfg->lut_g));
1993*4882a593Smuzhiyun memcpy(cfg->lut_b, lut3d_cfg.tbl.look_up_table_b, sizeof(cfg->lut_b));
1994*4882a593Smuzhiyun } else {
1995*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_3DLUT;
1996*4882a593Smuzhiyun }
1997*4882a593Smuzhiyun }
1998*4882a593Smuzhiyun #endif
1999*4882a593Smuzhiyun
2000*4882a593Smuzhiyun
2001*4882a593Smuzhiyun #if RKAIQ_HAVE_ANR_V1
2002*4882a593Smuzhiyun template<class T>
convertAiqRawnrToIsp20Params(T & isp_cfg,rk_aiq_isp_rawnr_t & rawnr)2003*4882a593Smuzhiyun void Isp20Params::convertAiqRawnrToIsp20Params(T& isp_cfg,
2004*4882a593Smuzhiyun rk_aiq_isp_rawnr_t& rawnr)
2005*4882a593Smuzhiyun {
2006*4882a593Smuzhiyun
2007*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
2008*4882a593Smuzhiyun
2009*4882a593Smuzhiyun struct isp2x_rawnr_cfg * pRawnrCfg = &isp_cfg.others.rawnr_cfg;
2010*4882a593Smuzhiyun if(rawnr.rawnr_en) {
2011*4882a593Smuzhiyun
2012*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_RAWNR;
2013*4882a593Smuzhiyun } else {
2014*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_RAWNR;
2015*4882a593Smuzhiyun }
2016*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_RAWNR;
2017*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWNR;
2018*4882a593Smuzhiyun
2019*4882a593Smuzhiyun int rawbit = 12;//rawBit;
2020*4882a593Smuzhiyun float tmp;
2021*4882a593Smuzhiyun
2022*4882a593Smuzhiyun //(0x0004)
2023*4882a593Smuzhiyun pRawnrCfg->gauss_en = rawnr.gauss_en;
2024*4882a593Smuzhiyun pRawnrCfg->log_bypass = rawnr.log_bypass;
2025*4882a593Smuzhiyun
2026*4882a593Smuzhiyun //(0x0008 - 0x0010)
2027*4882a593Smuzhiyun pRawnrCfg->filtpar0 = rawnr.filtpar0;
2028*4882a593Smuzhiyun pRawnrCfg->filtpar1 = rawnr.filtpar1;
2029*4882a593Smuzhiyun pRawnrCfg->filtpar2 = rawnr.filtpar2;
2030*4882a593Smuzhiyun
2031*4882a593Smuzhiyun //(0x0014 - 0x0001c)
2032*4882a593Smuzhiyun pRawnrCfg->dgain0 = rawnr.dgain0;
2033*4882a593Smuzhiyun pRawnrCfg->dgain1 = rawnr.dgain1;
2034*4882a593Smuzhiyun pRawnrCfg->dgain2 = rawnr.dgain2;
2035*4882a593Smuzhiyun
2036*4882a593Smuzhiyun //(0x0020 - 0x0002c)
2037*4882a593Smuzhiyun for(int i = 0; i < ISP2X_RAWNR_LUMA_RATION_NUM; i++) {
2038*4882a593Smuzhiyun pRawnrCfg->luration[i] = rawnr.luration[i];
2039*4882a593Smuzhiyun }
2040*4882a593Smuzhiyun
2041*4882a593Smuzhiyun //(0x0030 - 0x0003c)
2042*4882a593Smuzhiyun for(int i = 0; i < ISP2X_RAWNR_LUMA_RATION_NUM; i++) {
2043*4882a593Smuzhiyun pRawnrCfg->lulevel[i] = rawnr.lulevel[i];
2044*4882a593Smuzhiyun }
2045*4882a593Smuzhiyun
2046*4882a593Smuzhiyun //(0x0040)
2047*4882a593Smuzhiyun pRawnrCfg->gauss = rawnr.gauss;
2048*4882a593Smuzhiyun
2049*4882a593Smuzhiyun //(0x0044)
2050*4882a593Smuzhiyun pRawnrCfg->sigma = rawnr.sigma;
2051*4882a593Smuzhiyun
2052*4882a593Smuzhiyun //(0x0048)
2053*4882a593Smuzhiyun pRawnrCfg->pix_diff = rawnr.pix_diff;
2054*4882a593Smuzhiyun
2055*4882a593Smuzhiyun //(0x004c)
2056*4882a593Smuzhiyun pRawnrCfg->thld_diff = rawnr.thld_diff;
2057*4882a593Smuzhiyun
2058*4882a593Smuzhiyun //(0x0050)
2059*4882a593Smuzhiyun pRawnrCfg->gas_weig_scl1 = rawnr.gas_weig_scl1;
2060*4882a593Smuzhiyun pRawnrCfg->gas_weig_scl2 = rawnr.gas_weig_scl2;
2061*4882a593Smuzhiyun pRawnrCfg->thld_chanelw = rawnr.thld_chanelw;
2062*4882a593Smuzhiyun
2063*4882a593Smuzhiyun //(0x0054)
2064*4882a593Smuzhiyun pRawnrCfg->lamda = rawnr.lamda;
2065*4882a593Smuzhiyun
2066*4882a593Smuzhiyun //(0x0058 - 0x0005c)
2067*4882a593Smuzhiyun pRawnrCfg->fixw0 = rawnr.fixw0;
2068*4882a593Smuzhiyun pRawnrCfg->fixw1 = rawnr.fixw1;
2069*4882a593Smuzhiyun pRawnrCfg->fixw2 = rawnr.fixw2;
2070*4882a593Smuzhiyun pRawnrCfg->fixw3 = rawnr.fixw3;
2071*4882a593Smuzhiyun
2072*4882a593Smuzhiyun //(0x0060 - 0x00068)
2073*4882a593Smuzhiyun pRawnrCfg->wlamda0 = rawnr.wlamda0;
2074*4882a593Smuzhiyun pRawnrCfg->wlamda1 = rawnr.wlamda1;
2075*4882a593Smuzhiyun pRawnrCfg->wlamda2 = rawnr.wlamda2;
2076*4882a593Smuzhiyun
2077*4882a593Smuzhiyun //(0x006c)
2078*4882a593Smuzhiyun pRawnrCfg->rgain_filp = rawnr.rgain_filp;
2079*4882a593Smuzhiyun pRawnrCfg->bgain_filp = rawnr.bgain_filp;
2080*4882a593Smuzhiyun
2081*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
2082*4882a593Smuzhiyun }
2083*4882a593Smuzhiyun
2084*4882a593Smuzhiyun template<typename T>
convertAiqTnrToIsp20Params(T & pp_cfg,rk_aiq_isp_tnr_t & tnr)2085*4882a593Smuzhiyun void Isp20Params::convertAiqTnrToIsp20Params(T &pp_cfg,
2086*4882a593Smuzhiyun rk_aiq_isp_tnr_t& tnr)
2087*4882a593Smuzhiyun {
2088*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
2089*4882a593Smuzhiyun int i = 0;
2090*4882a593Smuzhiyun
2091*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "tnr_en %d", tnr.tnr_en);
2092*4882a593Smuzhiyun
2093*4882a593Smuzhiyun if(tnr.tnr_en) {
2094*4882a593Smuzhiyun pp_cfg.head.module_ens |= ISPP_MODULE_TNR;
2095*4882a593Smuzhiyun } else {
2096*4882a593Smuzhiyun //pp_cfg.head.module_init_ens &= ~ISPP_MODULE_TNR_3TO1;
2097*4882a593Smuzhiyun pp_cfg.head.module_ens &= ~ISPP_MODULE_TNR;
2098*4882a593Smuzhiyun }
2099*4882a593Smuzhiyun
2100*4882a593Smuzhiyun pp_cfg.head.module_en_update |= ISPP_MODULE_TNR;
2101*4882a593Smuzhiyun pp_cfg.head.module_cfg_update |= ISPP_MODULE_TNR;
2102*4882a593Smuzhiyun
2103*4882a593Smuzhiyun struct rkispp_tnr_config * pTnrCfg = &pp_cfg.tnr_cfg;
2104*4882a593Smuzhiyun
2105*4882a593Smuzhiyun //0x0080
2106*4882a593Smuzhiyun if (tnr.mode > 0) {
2107*4882a593Smuzhiyun pp_cfg.head.module_ens |= ISPP_MODULE_TNR_3TO1;
2108*4882a593Smuzhiyun } else {
2109*4882a593Smuzhiyun pp_cfg.head.module_ens |= ISPP_MODULE_TNR;
2110*4882a593Smuzhiyun }
2111*4882a593Smuzhiyun
2112*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "mode:%d pp_cfg:0x%x\n", tnr.mode, pp_cfg.head.module_ens);
2113*4882a593Smuzhiyun
2114*4882a593Smuzhiyun /* pTnrCfg->mode = tnr.mode; */
2115*4882a593Smuzhiyun pTnrCfg->opty_en = tnr.opty_en;
2116*4882a593Smuzhiyun pTnrCfg->optc_en = tnr.optc_en;
2117*4882a593Smuzhiyun pTnrCfg->gain_en = tnr.gain_en;
2118*4882a593Smuzhiyun
2119*4882a593Smuzhiyun //0x0088
2120*4882a593Smuzhiyun pTnrCfg->pk0_y = tnr.pk0_y;
2121*4882a593Smuzhiyun pTnrCfg->pk1_y = tnr.pk1_y;
2122*4882a593Smuzhiyun pTnrCfg->pk0_c = tnr.pk0_c;
2123*4882a593Smuzhiyun pTnrCfg->pk1_c = tnr.pk1_c;
2124*4882a593Smuzhiyun
2125*4882a593Smuzhiyun //0x008c
2126*4882a593Smuzhiyun pTnrCfg->glb_gain_cur = tnr.glb_gain_cur;
2127*4882a593Smuzhiyun pTnrCfg->glb_gain_nxt = tnr.glb_gain_nxt;
2128*4882a593Smuzhiyun
2129*4882a593Smuzhiyun //0x0090
2130*4882a593Smuzhiyun pTnrCfg->glb_gain_cur_div = tnr.glb_gain_cur_div;
2131*4882a593Smuzhiyun pTnrCfg->glb_gain_cur_sqrt = tnr.glb_gain_cur_sqrt;
2132*4882a593Smuzhiyun
2133*4882a593Smuzhiyun //0x0094 - 0x0098
2134*4882a593Smuzhiyun for(i = 0; i < TNR_SIGMA_CURVE_SIZE - 1; i++) {
2135*4882a593Smuzhiyun pTnrCfg->sigma_x[i] = tnr.sigma_x[i];
2136*4882a593Smuzhiyun }
2137*4882a593Smuzhiyun
2138*4882a593Smuzhiyun
2139*4882a593Smuzhiyun
2140*4882a593Smuzhiyun //0x009c - 0x00bc
2141*4882a593Smuzhiyun for(i = 0; i < TNR_SIGMA_CURVE_SIZE; i++) {
2142*4882a593Smuzhiyun pTnrCfg->sigma_y[i] = tnr.sigma_y[i];
2143*4882a593Smuzhiyun }
2144*4882a593Smuzhiyun
2145*4882a593Smuzhiyun //0x00c4 - 0x00cc
2146*4882a593Smuzhiyun for(i = 0; i < TNR_LUMA_CURVE_SIZE; i++) {
2147*4882a593Smuzhiyun pTnrCfg->luma_curve[i] = tnr.luma_curve[i];
2148*4882a593Smuzhiyun }
2149*4882a593Smuzhiyun
2150*4882a593Smuzhiyun //0x00d0
2151*4882a593Smuzhiyun pTnrCfg->txt_th0_y = tnr.txt_th0_y;
2152*4882a593Smuzhiyun pTnrCfg->txt_th1_y = tnr.txt_th1_y;
2153*4882a593Smuzhiyun
2154*4882a593Smuzhiyun //0x00d4
2155*4882a593Smuzhiyun pTnrCfg->txt_th0_c = tnr.txt_th0_c;
2156*4882a593Smuzhiyun pTnrCfg->txt_th1_c = tnr.txt_th1_c;
2157*4882a593Smuzhiyun
2158*4882a593Smuzhiyun //0x00d8
2159*4882a593Smuzhiyun pTnrCfg->txt_thy_dlt = tnr.txt_thy_dlt;
2160*4882a593Smuzhiyun pTnrCfg->txt_thc_dlt = tnr.txt_thc_dlt;
2161*4882a593Smuzhiyun
2162*4882a593Smuzhiyun //0x00dc - 0x00ec
2163*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF6_SIZE; i++) {
2164*4882a593Smuzhiyun pTnrCfg->gfcoef_y0[i] = tnr.gfcoef_y0[i];
2165*4882a593Smuzhiyun }
2166*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2167*4882a593Smuzhiyun pTnrCfg->gfcoef_y1[i] = tnr.gfcoef_y1[i];
2168*4882a593Smuzhiyun }
2169*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2170*4882a593Smuzhiyun pTnrCfg->gfcoef_y2[i] = tnr.gfcoef_y2[i];
2171*4882a593Smuzhiyun }
2172*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2173*4882a593Smuzhiyun pTnrCfg->gfcoef_y3[i] = tnr.gfcoef_y3[i];
2174*4882a593Smuzhiyun }
2175*4882a593Smuzhiyun
2176*4882a593Smuzhiyun //0x00f0 - 0x0100
2177*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF6_SIZE; i++) {
2178*4882a593Smuzhiyun pTnrCfg->gfcoef_yg0[i] = tnr.gfcoef_yg0[i];
2179*4882a593Smuzhiyun }
2180*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2181*4882a593Smuzhiyun pTnrCfg->gfcoef_yg1[i] = tnr.gfcoef_yg1[i];
2182*4882a593Smuzhiyun }
2183*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2184*4882a593Smuzhiyun pTnrCfg->gfcoef_yg2[i] = tnr.gfcoef_yg2[i];
2185*4882a593Smuzhiyun }
2186*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2187*4882a593Smuzhiyun pTnrCfg->gfcoef_yg3[i] = tnr.gfcoef_yg3[i];
2188*4882a593Smuzhiyun }
2189*4882a593Smuzhiyun
2190*4882a593Smuzhiyun //0x0104 - 0x0110
2191*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF6_SIZE; i++) {
2192*4882a593Smuzhiyun pTnrCfg->gfcoef_yl0[i] = tnr.gfcoef_yl0[i];
2193*4882a593Smuzhiyun }
2194*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2195*4882a593Smuzhiyun pTnrCfg->gfcoef_yl1[i] = tnr.gfcoef_yl1[i];
2196*4882a593Smuzhiyun }
2197*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2198*4882a593Smuzhiyun pTnrCfg->gfcoef_yl2[i] = tnr.gfcoef_yl2[i];
2199*4882a593Smuzhiyun }
2200*4882a593Smuzhiyun
2201*4882a593Smuzhiyun //0x0114 - 0x0120
2202*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF6_SIZE; i++) {
2203*4882a593Smuzhiyun pTnrCfg->gfcoef_cg0[i] = tnr.gfcoef_cg0[i];
2204*4882a593Smuzhiyun }
2205*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2206*4882a593Smuzhiyun pTnrCfg->gfcoef_cg1[i] = tnr.gfcoef_cg1[i];
2207*4882a593Smuzhiyun }
2208*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2209*4882a593Smuzhiyun pTnrCfg->gfcoef_cg2[i] = tnr.gfcoef_cg2[i];
2210*4882a593Smuzhiyun }
2211*4882a593Smuzhiyun
2212*4882a593Smuzhiyun //0x0124 - 0x012c
2213*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF6_SIZE; i++) {
2214*4882a593Smuzhiyun pTnrCfg->gfcoef_cl0[i] = tnr.gfcoef_cl0[i];
2215*4882a593Smuzhiyun }
2216*4882a593Smuzhiyun for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
2217*4882a593Smuzhiyun pTnrCfg->gfcoef_cl1[i] = tnr.gfcoef_cl1[i];
2218*4882a593Smuzhiyun }
2219*4882a593Smuzhiyun
2220*4882a593Smuzhiyun //0x0130 - 0x0134
2221*4882a593Smuzhiyun for(i = 0; i < TNR_SCALE_YG_SIZE; i++) {
2222*4882a593Smuzhiyun pTnrCfg->scale_yg[i] = tnr.scale_yg[i];
2223*4882a593Smuzhiyun }
2224*4882a593Smuzhiyun
2225*4882a593Smuzhiyun //0x0138 - 0x013c
2226*4882a593Smuzhiyun for(i = 0; i < TNR_SCALE_YL_SIZE; i++) {
2227*4882a593Smuzhiyun pTnrCfg->scale_yl[i] = tnr.scale_yl[i];
2228*4882a593Smuzhiyun }
2229*4882a593Smuzhiyun
2230*4882a593Smuzhiyun //0x0140 - 0x0148
2231*4882a593Smuzhiyun for(i = 0; i < TNR_SCALE_CG_SIZE; i++) {
2232*4882a593Smuzhiyun pTnrCfg->scale_cg[i] = tnr.scale_cg[i];
2233*4882a593Smuzhiyun pTnrCfg->scale_y2cg[i] = tnr.scale_y2cg[i];
2234*4882a593Smuzhiyun }
2235*4882a593Smuzhiyun
2236*4882a593Smuzhiyun //0x014c - 0x0154
2237*4882a593Smuzhiyun for(i = 0; i < TNR_SCALE_CL_SIZE; i++) {
2238*4882a593Smuzhiyun pTnrCfg->scale_cl[i] = tnr.scale_cl[i];
2239*4882a593Smuzhiyun }
2240*4882a593Smuzhiyun for(i = 0; i < TNR_SCALE_Y2CL_SIZE; i++) {
2241*4882a593Smuzhiyun pTnrCfg->scale_y2cl[i] = tnr.scale_y2cl[i];
2242*4882a593Smuzhiyun }
2243*4882a593Smuzhiyun //0x0158
2244*4882a593Smuzhiyun for(i = 0; i < TNR_WEIGHT_Y_SIZE; i++) {
2245*4882a593Smuzhiyun pTnrCfg->weight_y[i] = tnr.weight_y[i];
2246*4882a593Smuzhiyun }
2247*4882a593Smuzhiyun
2248*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
2249*4882a593Smuzhiyun }
2250*4882a593Smuzhiyun
2251*4882a593Smuzhiyun template<typename T>
convertAiqUvnrToIsp20Params(T & pp_cfg,rk_aiq_isp_uvnr_t & uvnr)2252*4882a593Smuzhiyun void Isp20Params::convertAiqUvnrToIsp20Params(T &pp_cfg,
2253*4882a593Smuzhiyun rk_aiq_isp_uvnr_t& uvnr)
2254*4882a593Smuzhiyun {
2255*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
2256*4882a593Smuzhiyun
2257*4882a593Smuzhiyun int i = 0;
2258*4882a593Smuzhiyun struct rkispp_nr_config * pNrCfg = &pp_cfg.nr_cfg;
2259*4882a593Smuzhiyun
2260*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "uvnr_en %d", uvnr.uvnr_en);
2261*4882a593Smuzhiyun if(uvnr.uvnr_en) {
2262*4882a593Smuzhiyun pp_cfg.head.module_ens |= ISPP_MODULE_NR;
2263*4882a593Smuzhiyun //pp_cfg.head.module_init_ens |= ISPP_MODULE_NR;
2264*4882a593Smuzhiyun } else {
2265*4882a593Smuzhiyun // NR bit used by ynr and uvnr together, so couldn't be
2266*4882a593Smuzhiyun // disabled if it was enabled
2267*4882a593Smuzhiyun if (!(pp_cfg.head.module_ens & ISPP_MODULE_NR))
2268*4882a593Smuzhiyun pp_cfg.head.module_ens &= ~ISPP_MODULE_NR;
2269*4882a593Smuzhiyun }
2270*4882a593Smuzhiyun
2271*4882a593Smuzhiyun pp_cfg.head.module_en_update |= ISPP_MODULE_NR;
2272*4882a593Smuzhiyun pp_cfg.head.module_cfg_update |= ISPP_MODULE_NR;
2273*4882a593Smuzhiyun
2274*4882a593Smuzhiyun //0x0080
2275*4882a593Smuzhiyun pNrCfg->uvnr_step1_en = uvnr.uvnr_step1_en;
2276*4882a593Smuzhiyun pNrCfg->uvnr_step2_en = uvnr.uvnr_step2_en;
2277*4882a593Smuzhiyun pNrCfg->nr_gain_en = uvnr.nr_gain_en;
2278*4882a593Smuzhiyun pNrCfg->uvnr_nobig_en = uvnr.uvnr_nobig_en;
2279*4882a593Smuzhiyun pNrCfg->uvnr_big_en = uvnr.uvnr_big_en;
2280*4882a593Smuzhiyun
2281*4882a593Smuzhiyun
2282*4882a593Smuzhiyun //0x0084
2283*4882a593Smuzhiyun pNrCfg->uvnr_gain_1sigma = uvnr.uvnr_gain_1sigma;
2284*4882a593Smuzhiyun
2285*4882a593Smuzhiyun //0x0088
2286*4882a593Smuzhiyun pNrCfg->uvnr_gain_offset = uvnr.uvnr_gain_offset;
2287*4882a593Smuzhiyun
2288*4882a593Smuzhiyun //0x008c
2289*4882a593Smuzhiyun pNrCfg->uvnr_gain_uvgain[0] = uvnr.uvnr_gain_uvgain[0];
2290*4882a593Smuzhiyun pNrCfg->uvnr_gain_uvgain[1] = uvnr.uvnr_gain_uvgain[1];
2291*4882a593Smuzhiyun pNrCfg->uvnr_gain_t2gen = uvnr.uvnr_gain_t2gen;
2292*4882a593Smuzhiyun // no need set
2293*4882a593Smuzhiyun pNrCfg->uvnr_gain_iso = uvnr.uvnr_gain_iso;
2294*4882a593Smuzhiyun
2295*4882a593Smuzhiyun //0x0090
2296*4882a593Smuzhiyun pNrCfg->uvnr_t1gen_m3alpha = uvnr.uvnr_t1gen_m3alpha;
2297*4882a593Smuzhiyun
2298*4882a593Smuzhiyun //0x0094
2299*4882a593Smuzhiyun pNrCfg->uvnr_t1flt_mode = uvnr.uvnr_t1flt_mode;
2300*4882a593Smuzhiyun
2301*4882a593Smuzhiyun //0x0098
2302*4882a593Smuzhiyun pNrCfg->uvnr_t1flt_msigma = uvnr.uvnr_t1flt_msigma;
2303*4882a593Smuzhiyun
2304*4882a593Smuzhiyun //0x009c
2305*4882a593Smuzhiyun pNrCfg->uvnr_t1flt_wtp = uvnr.uvnr_t1flt_wtp;
2306*4882a593Smuzhiyun
2307*4882a593Smuzhiyun //0x00a0-0x00a4
2308*4882a593Smuzhiyun for(i = 0; i < NR_UVNR_T1FLT_WTQ_SIZE; i++) {
2309*4882a593Smuzhiyun pNrCfg->uvnr_t1flt_wtq[i] = uvnr.uvnr_t1flt_wtq[i];
2310*4882a593Smuzhiyun }
2311*4882a593Smuzhiyun
2312*4882a593Smuzhiyun //0x00a8
2313*4882a593Smuzhiyun pNrCfg->uvnr_t2gen_m3alpha = uvnr.uvnr_t2gen_m3alpha;
2314*4882a593Smuzhiyun
2315*4882a593Smuzhiyun //0x00ac
2316*4882a593Smuzhiyun pNrCfg->uvnr_t2gen_msigma = uvnr.uvnr_t2gen_msigma;
2317*4882a593Smuzhiyun
2318*4882a593Smuzhiyun //0x00b0
2319*4882a593Smuzhiyun pNrCfg->uvnr_t2gen_wtp = uvnr.uvnr_t2gen_wtp;
2320*4882a593Smuzhiyun
2321*4882a593Smuzhiyun //0x00b4
2322*4882a593Smuzhiyun for(i = 0; i < NR_UVNR_T2GEN_WTQ_SIZE; i++) {
2323*4882a593Smuzhiyun pNrCfg->uvnr_t2gen_wtq[i] = uvnr.uvnr_t2gen_wtq[i];
2324*4882a593Smuzhiyun }
2325*4882a593Smuzhiyun
2326*4882a593Smuzhiyun //0x00b8
2327*4882a593Smuzhiyun pNrCfg->uvnr_t2flt_msigma = uvnr.uvnr_t2flt_msigma;
2328*4882a593Smuzhiyun
2329*4882a593Smuzhiyun //0x00bc
2330*4882a593Smuzhiyun pNrCfg->uvnr_t2flt_wtp = uvnr.uvnr_t2flt_wtp;
2331*4882a593Smuzhiyun for(i = 0; i < NR_UVNR_T2FLT_WT_SIZE; i++) {
2332*4882a593Smuzhiyun pNrCfg->uvnr_t2flt_wt[i] = uvnr.uvnr_t2flt_wt[i];
2333*4882a593Smuzhiyun }
2334*4882a593Smuzhiyun
2335*4882a593Smuzhiyun
2336*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
2337*4882a593Smuzhiyun }
2338*4882a593Smuzhiyun
2339*4882a593Smuzhiyun
2340*4882a593Smuzhiyun template<typename T>
convertAiqYnrToIsp20Params(T & pp_cfg,rk_aiq_isp_ynr_t & ynr)2341*4882a593Smuzhiyun void Isp20Params::convertAiqYnrToIsp20Params(T &pp_cfg,
2342*4882a593Smuzhiyun rk_aiq_isp_ynr_t& ynr)
2343*4882a593Smuzhiyun {
2344*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
2345*4882a593Smuzhiyun
2346*4882a593Smuzhiyun int i = 0;
2347*4882a593Smuzhiyun struct rkispp_nr_config * pNrCfg = &pp_cfg.nr_cfg;
2348*4882a593Smuzhiyun
2349*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "ynr_en %d", ynr.ynr_en);
2350*4882a593Smuzhiyun if(ynr.ynr_en) {
2351*4882a593Smuzhiyun pp_cfg.head.module_ens |= ISPP_MODULE_NR;
2352*4882a593Smuzhiyun //pp_cfg.head.module_init_ens |= ISPP_MODULE_NR;
2353*4882a593Smuzhiyun } else {
2354*4882a593Smuzhiyun // NR bit used by ynr and uvnr together, so couldn't be
2355*4882a593Smuzhiyun // disabled if it was enabled
2356*4882a593Smuzhiyun if (!(pp_cfg.head.module_ens & ISPP_MODULE_NR))
2357*4882a593Smuzhiyun pp_cfg.head.module_ens &= ~ISPP_MODULE_NR;
2358*4882a593Smuzhiyun }
2359*4882a593Smuzhiyun
2360*4882a593Smuzhiyun pp_cfg.head.module_en_update |= ISPP_MODULE_NR;
2361*4882a593Smuzhiyun pp_cfg.head.module_cfg_update |= ISPP_MODULE_NR;
2362*4882a593Smuzhiyun
2363*4882a593Smuzhiyun //0x0104 - 0x0108
2364*4882a593Smuzhiyun for(i = 0; i < NR_YNR_SGM_DX_SIZE; i++) {
2365*4882a593Smuzhiyun pNrCfg->ynr_sgm_dx[i] = ynr.ynr_sgm_dx[i];
2366*4882a593Smuzhiyun }
2367*4882a593Smuzhiyun
2368*4882a593Smuzhiyun //0x010c - 0x012c
2369*4882a593Smuzhiyun for(i = 0; i < NR_YNR_SGM_Y_SIZE; i++) {
2370*4882a593Smuzhiyun pNrCfg->ynr_lsgm_y[i] = ynr.ynr_lsgm_y[i];
2371*4882a593Smuzhiyun }
2372*4882a593Smuzhiyun
2373*4882a593Smuzhiyun
2374*4882a593Smuzhiyun //0x0130
2375*4882a593Smuzhiyun for(i = 0; i < NR_YNR_CI_SIZE; i++) {
2376*4882a593Smuzhiyun pNrCfg->ynr_lci[i] = ynr.ynr_lci[i];
2377*4882a593Smuzhiyun }
2378*4882a593Smuzhiyun
2379*4882a593Smuzhiyun //0x0134
2380*4882a593Smuzhiyun for(i = 0; i < NR_YNR_LGAIN_MIN_SIZE; i++) {
2381*4882a593Smuzhiyun pNrCfg->ynr_lgain_min[i] = ynr.ynr_lgain_min[i];
2382*4882a593Smuzhiyun }
2383*4882a593Smuzhiyun
2384*4882a593Smuzhiyun //0x0138
2385*4882a593Smuzhiyun pNrCfg->ynr_lgain_max = ynr.ynr_lgain_max;
2386*4882a593Smuzhiyun
2387*4882a593Smuzhiyun
2388*4882a593Smuzhiyun //0x013c
2389*4882a593Smuzhiyun pNrCfg->ynr_lmerge_bound = ynr.ynr_lmerge_bound;
2390*4882a593Smuzhiyun pNrCfg->ynr_lmerge_ratio = ynr.ynr_lmerge_ratio;
2391*4882a593Smuzhiyun
2392*4882a593Smuzhiyun //0x0140
2393*4882a593Smuzhiyun for(i = 0; i < NR_YNR_LWEIT_FLT_SIZE; i++) {
2394*4882a593Smuzhiyun pNrCfg->ynr_lweit_flt[i] = ynr.ynr_lweit_flt[i];
2395*4882a593Smuzhiyun }
2396*4882a593Smuzhiyun
2397*4882a593Smuzhiyun //0x0144 - 0x0164
2398*4882a593Smuzhiyun for(i = 0; i < NR_YNR_SGM_Y_SIZE; i++) {
2399*4882a593Smuzhiyun pNrCfg->ynr_hsgm_y[i] = ynr.ynr_hsgm_y[i];
2400*4882a593Smuzhiyun }
2401*4882a593Smuzhiyun
2402*4882a593Smuzhiyun //0x0168
2403*4882a593Smuzhiyun for(i = 0; i < NR_YNR_CI_SIZE; i++) {
2404*4882a593Smuzhiyun pNrCfg->ynr_hlci[i] = ynr.ynr_hlci[i];
2405*4882a593Smuzhiyun }
2406*4882a593Smuzhiyun
2407*4882a593Smuzhiyun //0x016c
2408*4882a593Smuzhiyun for(i = 0; i < NR_YNR_CI_SIZE; i++) {
2409*4882a593Smuzhiyun pNrCfg->ynr_lhci[i] = ynr.ynr_lhci[i];
2410*4882a593Smuzhiyun }
2411*4882a593Smuzhiyun
2412*4882a593Smuzhiyun //0x0170
2413*4882a593Smuzhiyun for(i = 0; i < NR_YNR_CI_SIZE; i++) {
2414*4882a593Smuzhiyun pNrCfg->ynr_hhci[i] = ynr.ynr_hhci[i];
2415*4882a593Smuzhiyun }
2416*4882a593Smuzhiyun
2417*4882a593Smuzhiyun //0x0174
2418*4882a593Smuzhiyun for(i = 0; i < NR_YNR_HGAIN_SGM_SIZE; i++) {
2419*4882a593Smuzhiyun pNrCfg->ynr_hgain_sgm[i] = ynr.ynr_hgain_sgm[i];
2420*4882a593Smuzhiyun }
2421*4882a593Smuzhiyun
2422*4882a593Smuzhiyun //0x0178 - 0x0188
2423*4882a593Smuzhiyun for(i = 0; i < NR_YNR_HWEIT_D_SIZE; i++) {
2424*4882a593Smuzhiyun pNrCfg->ynr_hweit_d[i] = ynr.ynr_hweit_d[i];
2425*4882a593Smuzhiyun }
2426*4882a593Smuzhiyun
2427*4882a593Smuzhiyun
2428*4882a593Smuzhiyun //0x018c - 0x01a0
2429*4882a593Smuzhiyun for(i = 0; i < NR_YNR_HGRAD_Y_SIZE; i++) {
2430*4882a593Smuzhiyun pNrCfg->ynr_hgrad_y[i] = ynr.ynr_hgrad_y[i];
2431*4882a593Smuzhiyun }
2432*4882a593Smuzhiyun
2433*4882a593Smuzhiyun //0x01a4 -0x01a8
2434*4882a593Smuzhiyun for(i = 0; i < NR_YNR_HWEIT_SIZE; i++) {
2435*4882a593Smuzhiyun pNrCfg->ynr_hweit[i] = ynr.ynr_hweit[i];
2436*4882a593Smuzhiyun }
2437*4882a593Smuzhiyun
2438*4882a593Smuzhiyun //0x01b0
2439*4882a593Smuzhiyun pNrCfg->ynr_hmax_adjust = ynr.ynr_hmax_adjust;
2440*4882a593Smuzhiyun
2441*4882a593Smuzhiyun //0x01b4
2442*4882a593Smuzhiyun pNrCfg->ynr_hstrength = ynr.ynr_hstrength;
2443*4882a593Smuzhiyun
2444*4882a593Smuzhiyun //0x01b8
2445*4882a593Smuzhiyun pNrCfg->ynr_lweit_cmp[0] = ynr.ynr_lweit_cmp[0];
2446*4882a593Smuzhiyun pNrCfg->ynr_lweit_cmp[1] = ynr.ynr_lweit_cmp[1];
2447*4882a593Smuzhiyun
2448*4882a593Smuzhiyun
2449*4882a593Smuzhiyun //0x01bc
2450*4882a593Smuzhiyun pNrCfg->ynr_lmaxgain_lv4 = ynr.ynr_lmaxgain_lv4;
2451*4882a593Smuzhiyun
2452*4882a593Smuzhiyun //0x01c0 - 0x01e0
2453*4882a593Smuzhiyun for(i = 0; i < NR_YNR_HSTV_Y_SIZE; i++) {
2454*4882a593Smuzhiyun pNrCfg->ynr_hstv_y[i] = ynr.ynr_hstv_y[i];
2455*4882a593Smuzhiyun }
2456*4882a593Smuzhiyun
2457*4882a593Smuzhiyun //0x01e4 - 0x01e8
2458*4882a593Smuzhiyun for(i = 0; i < NR_YNR_ST_SCALE_SIZE; i++) {
2459*4882a593Smuzhiyun pNrCfg->ynr_st_scale[i] = ynr.ynr_st_scale[i];
2460*4882a593Smuzhiyun }
2461*4882a593Smuzhiyun
2462*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
2463*4882a593Smuzhiyun
2464*4882a593Smuzhiyun }
2465*4882a593Smuzhiyun
2466*4882a593Smuzhiyun template<typename T>
convertAiqSharpenToIsp20Params(T & pp_cfg,rk_aiq_isp_sharpen_t & sharp,rk_aiq_isp_edgeflt_t & edgeflt)2467*4882a593Smuzhiyun void Isp20Params::convertAiqSharpenToIsp20Params(T &pp_cfg,
2468*4882a593Smuzhiyun rk_aiq_isp_sharpen_t& sharp, rk_aiq_isp_edgeflt_t& edgeflt)
2469*4882a593Smuzhiyun {
2470*4882a593Smuzhiyun int i = 0;
2471*4882a593Smuzhiyun struct rkispp_sharp_config * pSharpCfg = &pp_cfg.shp_cfg;
2472*4882a593Smuzhiyun RKAsharp_Sharp_HW_Fix_t *pSharpV1 = &sharp.stSharpFixV1;
2473*4882a593Smuzhiyun
2474*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "sharp_en %d edgeflt_en %d", pSharpV1->sharp_en, edgeflt.edgeflt_en);
2475*4882a593Smuzhiyun
2476*4882a593Smuzhiyun if(pSharpV1->sharp_en && edgeflt.edgeflt_en) {
2477*4882a593Smuzhiyun pp_cfg.head.module_ens |= ISPP_MODULE_SHP;
2478*4882a593Smuzhiyun //pp_cfg.head.module_init_ens |= ISPP_MODULE_SHP;
2479*4882a593Smuzhiyun } else {
2480*4882a593Smuzhiyun pp_cfg.head.module_ens &= ~ISPP_MODULE_SHP;
2481*4882a593Smuzhiyun }
2482*4882a593Smuzhiyun
2483*4882a593Smuzhiyun pp_cfg.head.module_en_update |= ISPP_MODULE_SHP;
2484*4882a593Smuzhiyun pp_cfg.head.module_cfg_update |= ISPP_MODULE_SHP;
2485*4882a593Smuzhiyun #if 1
2486*4882a593Smuzhiyun //0x0080
2487*4882a593Smuzhiyun pSharpCfg->alpha_adp_en = edgeflt.alpha_adp_en;
2488*4882a593Smuzhiyun pSharpCfg->yin_flt_en = pSharpV1->yin_flt_en;
2489*4882a593Smuzhiyun pSharpCfg->edge_avg_en = pSharpV1->edge_avg_en;
2490*4882a593Smuzhiyun
2491*4882a593Smuzhiyun //0x0084
2492*4882a593Smuzhiyun pSharpCfg->hbf_ratio = pSharpV1->hbf_ratio;
2493*4882a593Smuzhiyun pSharpCfg->ehf_th = pSharpV1->ehf_th;
2494*4882a593Smuzhiyun pSharpCfg->pbf_ratio = pSharpV1->pbf_ratio;
2495*4882a593Smuzhiyun
2496*4882a593Smuzhiyun //0x0088
2497*4882a593Smuzhiyun pSharpCfg->edge_thed = edgeflt.edge_thed;
2498*4882a593Smuzhiyun pSharpCfg->dir_min = edgeflt.dir_min;
2499*4882a593Smuzhiyun pSharpCfg->smoth_th4 = edgeflt.smoth_th4;
2500*4882a593Smuzhiyun
2501*4882a593Smuzhiyun //0x008c
2502*4882a593Smuzhiyun pSharpCfg->l_alpha = edgeflt.l_alpha;
2503*4882a593Smuzhiyun pSharpCfg->g_alpha = edgeflt.g_alpha;
2504*4882a593Smuzhiyun
2505*4882a593Smuzhiyun
2506*4882a593Smuzhiyun //0x0090
2507*4882a593Smuzhiyun for(i = 0; i < SHP_PBF_KERNEL_SIZE; i++) {
2508*4882a593Smuzhiyun pSharpCfg->pbf_k[i] = pSharpV1->pbf_k[i];
2509*4882a593Smuzhiyun }
2510*4882a593Smuzhiyun
2511*4882a593Smuzhiyun //0x0094 - 0x0098
2512*4882a593Smuzhiyun for(i = 0; i < SHP_MRF_KERNEL_SIZE; i++) {
2513*4882a593Smuzhiyun pSharpCfg->mrf_k[i] = pSharpV1->mrf_k[i];
2514*4882a593Smuzhiyun }
2515*4882a593Smuzhiyun
2516*4882a593Smuzhiyun //0x009c -0x00a4
2517*4882a593Smuzhiyun for(i = 0; i < SHP_MBF_KERNEL_SIZE; i++) {
2518*4882a593Smuzhiyun pSharpCfg->mbf_k[i] = pSharpV1->mbf_k[i];
2519*4882a593Smuzhiyun }
2520*4882a593Smuzhiyun
2521*4882a593Smuzhiyun //0x00a8 -0x00ac
2522*4882a593Smuzhiyun for(i = 0; i < SHP_HRF_KERNEL_SIZE; i++) {
2523*4882a593Smuzhiyun pSharpCfg->hrf_k[i] = pSharpV1->hrf_k[i];
2524*4882a593Smuzhiyun }
2525*4882a593Smuzhiyun
2526*4882a593Smuzhiyun //0x00b0
2527*4882a593Smuzhiyun for(i = 0; i < SHP_HBF_KERNEL_SIZE; i++) {
2528*4882a593Smuzhiyun pSharpCfg->hbf_k[i] = pSharpV1->hbf_k[i];
2529*4882a593Smuzhiyun }
2530*4882a593Smuzhiyun
2531*4882a593Smuzhiyun //0x00b4
2532*4882a593Smuzhiyun for(i = 0; i < SHP_EDGE_COEF_SIZE; i++) {
2533*4882a593Smuzhiyun pSharpCfg->eg_coef[i] = edgeflt.eg_coef[i];
2534*4882a593Smuzhiyun }
2535*4882a593Smuzhiyun
2536*4882a593Smuzhiyun //0x00b8
2537*4882a593Smuzhiyun for(i = 0; i < SHP_EDGE_SMOTH_SIZE; i++) {
2538*4882a593Smuzhiyun pSharpCfg->eg_smoth[i] = edgeflt.eg_smoth[i];
2539*4882a593Smuzhiyun }
2540*4882a593Smuzhiyun
2541*4882a593Smuzhiyun //0x00bc - 0x00c0
2542*4882a593Smuzhiyun for(i = 0; i < SHP_EDGE_GAUS_SIZE; i++) {
2543*4882a593Smuzhiyun pSharpCfg->eg_gaus[i] = edgeflt.eg_gaus[i];
2544*4882a593Smuzhiyun }
2545*4882a593Smuzhiyun
2546*4882a593Smuzhiyun //0x00c4 - 0x00c8
2547*4882a593Smuzhiyun for(i = 0; i < SHP_DOG_KERNEL_SIZE; i++) {
2548*4882a593Smuzhiyun pSharpCfg->dog_k[i] = edgeflt.dog_k[i];
2549*4882a593Smuzhiyun }
2550*4882a593Smuzhiyun
2551*4882a593Smuzhiyun //0x00cc - 0x00d0
2552*4882a593Smuzhiyun for(i = 0; i < 6; i++) {
2553*4882a593Smuzhiyun pSharpCfg->lum_point[i] = pSharpV1->lum_point[i];
2554*4882a593Smuzhiyun }
2555*4882a593Smuzhiyun
2556*4882a593Smuzhiyun //0x00d4
2557*4882a593Smuzhiyun pSharpCfg->pbf_shf_bits = pSharpV1->pbf_shf_bits;
2558*4882a593Smuzhiyun pSharpCfg->mbf_shf_bits = pSharpV1->mbf_shf_bits;
2559*4882a593Smuzhiyun pSharpCfg->hbf_shf_bits = pSharpV1->hbf_shf_bits;
2560*4882a593Smuzhiyun
2561*4882a593Smuzhiyun
2562*4882a593Smuzhiyun //0x00d8 - 0x00dc
2563*4882a593Smuzhiyun for(i = 0; i < 8; i++) {
2564*4882a593Smuzhiyun pSharpCfg->pbf_sigma[i] = pSharpV1->pbf_sigma[i];
2565*4882a593Smuzhiyun }
2566*4882a593Smuzhiyun
2567*4882a593Smuzhiyun //0x00e0 - 0x00e4
2568*4882a593Smuzhiyun for(i = 0; i < 8; i++) {
2569*4882a593Smuzhiyun pSharpCfg->lum_clp_m[i] = pSharpV1->lum_clp_m[i];
2570*4882a593Smuzhiyun }
2571*4882a593Smuzhiyun
2572*4882a593Smuzhiyun //0x00e8 - 0x00ec
2573*4882a593Smuzhiyun for(i = 0; i < 8; i++) {
2574*4882a593Smuzhiyun pSharpCfg->lum_min_m[i] = pSharpV1->lum_min_m[i];
2575*4882a593Smuzhiyun }
2576*4882a593Smuzhiyun
2577*4882a593Smuzhiyun //0x00f0 - 0x00f4
2578*4882a593Smuzhiyun for(i = 0; i < 8; i++) {
2579*4882a593Smuzhiyun pSharpCfg->mbf_sigma[i] = pSharpV1->mbf_sigma[i];
2580*4882a593Smuzhiyun }
2581*4882a593Smuzhiyun
2582*4882a593Smuzhiyun //0x00f8 - 0x00fc
2583*4882a593Smuzhiyun for(i = 0; i < 8; i++) {
2584*4882a593Smuzhiyun pSharpCfg->lum_clp_h[i] = pSharpV1->lum_clp_h[i];
2585*4882a593Smuzhiyun }
2586*4882a593Smuzhiyun
2587*4882a593Smuzhiyun //0x0100 - 0x0104
2588*4882a593Smuzhiyun for(i = 0; i < 8; i++) {
2589*4882a593Smuzhiyun pSharpCfg->hbf_sigma[i] = pSharpV1->hbf_sigma[i];
2590*4882a593Smuzhiyun }
2591*4882a593Smuzhiyun
2592*4882a593Smuzhiyun //0x0108 - 0x010c
2593*4882a593Smuzhiyun for(i = 0; i < 8; i++) {
2594*4882a593Smuzhiyun pSharpCfg->edge_lum_thed[i] = edgeflt.edge_lum_thed[i];
2595*4882a593Smuzhiyun }
2596*4882a593Smuzhiyun
2597*4882a593Smuzhiyun //0x0110 - 0x0114
2598*4882a593Smuzhiyun for(i = 0; i < 8; i++) {
2599*4882a593Smuzhiyun pSharpCfg->clamp_pos[i] = edgeflt.clamp_pos[i];
2600*4882a593Smuzhiyun }
2601*4882a593Smuzhiyun
2602*4882a593Smuzhiyun //0x0118 - 0x011c
2603*4882a593Smuzhiyun for(i = 0; i < 8; i++) {
2604*4882a593Smuzhiyun pSharpCfg->clamp_neg[i] = edgeflt.clamp_neg[i];
2605*4882a593Smuzhiyun }
2606*4882a593Smuzhiyun
2607*4882a593Smuzhiyun //0x0120 - 0x0124
2608*4882a593Smuzhiyun for(i = 0; i < 8; i++) {
2609*4882a593Smuzhiyun pSharpCfg->detail_alpha[i] = edgeflt.detail_alpha[i];
2610*4882a593Smuzhiyun }
2611*4882a593Smuzhiyun
2612*4882a593Smuzhiyun //0x0128
2613*4882a593Smuzhiyun pSharpCfg->rfl_ratio = pSharpV1->rfl_ratio;
2614*4882a593Smuzhiyun pSharpCfg->rfh_ratio = pSharpV1->rfh_ratio;
2615*4882a593Smuzhiyun //0x012C
2616*4882a593Smuzhiyun pSharpCfg->m_ratio = pSharpV1->m_ratio;
2617*4882a593Smuzhiyun pSharpCfg->h_ratio = pSharpV1->h_ratio;
2618*4882a593Smuzhiyun #endif
2619*4882a593Smuzhiyun }
2620*4882a593Smuzhiyun #endif
2621*4882a593Smuzhiyun
2622*4882a593Smuzhiyun template<class T>
2623*4882a593Smuzhiyun void
convertAiqGainToIsp20Params(T & isp_cfg,rk_aiq_isp_gain_t & gain)2624*4882a593Smuzhiyun Isp20Params::convertAiqGainToIsp20Params(T& isp_cfg,
2625*4882a593Smuzhiyun rk_aiq_isp_gain_t& gain)
2626*4882a593Smuzhiyun {
2627*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
2628*4882a593Smuzhiyun
2629*4882a593Smuzhiyun int i = 0;
2630*4882a593Smuzhiyun struct isp2x_gain_cfg * pGainCfg = &isp_cfg.others.gain_cfg;
2631*4882a593Smuzhiyun
2632*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "gain table en %d \n", gain.gain_table_en);
2633*4882a593Smuzhiyun if(gain.gain_table_en) {
2634*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_GAIN;
2635*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GAIN;
2636*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_GAIN;
2637*4882a593Smuzhiyun }
2638*4882a593Smuzhiyun
2639*4882a593Smuzhiyun #if 0
2640*4882a593Smuzhiyun pGainCfg->dhaz_en = 0;
2641*4882a593Smuzhiyun pGainCfg->wdr_en = 0;
2642*4882a593Smuzhiyun pGainCfg->tmo_en = 0;
2643*4882a593Smuzhiyun pGainCfg->lsc_en = 0;
2644*4882a593Smuzhiyun pGainCfg->mge_en = 0;
2645*4882a593Smuzhiyun
2646*4882a593Smuzhiyun if(isp_cfg.module_ens & ISP2X_MODULE_DHAZ) {
2647*4882a593Smuzhiyun pGainCfg->dhaz_en = 1;
2648*4882a593Smuzhiyun }
2649*4882a593Smuzhiyun
2650*4882a593Smuzhiyun if(isp_cfg.module_ens & ISP2X_MODULE_WDR) {
2651*4882a593Smuzhiyun pGainCfg->wdr_en = 1;
2652*4882a593Smuzhiyun }
2653*4882a593Smuzhiyun
2654*4882a593Smuzhiyun if(isp_cfg.others.hdrmge_cfg.mode) {
2655*4882a593Smuzhiyun pGainCfg->tmo_en = 1;
2656*4882a593Smuzhiyun pGainCfg->mge_en = 1;
2657*4882a593Smuzhiyun }
2658*4882a593Smuzhiyun
2659*4882a593Smuzhiyun if(isp_cfg.module_ens & ISP2X_MODULE_LSC) {
2660*4882a593Smuzhiyun pGainCfg->lsc_en = 1;
2661*4882a593Smuzhiyun }
2662*4882a593Smuzhiyun
2663*4882a593Smuzhiyun
2664*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:%d gain en: %d %d %d %d %d\n",
2665*4882a593Smuzhiyun __FUNCTION__, __LINE__,
2666*4882a593Smuzhiyun pGainCfg->dhaz_en, pGainCfg->wdr_en,
2667*4882a593Smuzhiyun pGainCfg->tmo_en, pGainCfg->lsc_en,
2668*4882a593Smuzhiyun pGainCfg->mge_en);
2669*4882a593Smuzhiyun #endif
2670*4882a593Smuzhiyun
2671*4882a593Smuzhiyun for(i = 0; i < ISP2X_GAIN_HDRMGE_GAIN_NUM; i++) {
2672*4882a593Smuzhiyun pGainCfg->mge_gain[i] = gain.mge_gain[i];
2673*4882a593Smuzhiyun }
2674*4882a593Smuzhiyun
2675*4882a593Smuzhiyun for(i = 0; i < ISP2X_GAIN_IDX_NUM; i++) {
2676*4882a593Smuzhiyun pGainCfg->idx[i] = gain.idx[i];
2677*4882a593Smuzhiyun }
2678*4882a593Smuzhiyun
2679*4882a593Smuzhiyun for(i = 0; i < ISP2X_GAIN_LUT_NUM; i++) {
2680*4882a593Smuzhiyun pGainCfg->lut[i] = gain.lut[i];
2681*4882a593Smuzhiyun }
2682*4882a593Smuzhiyun
2683*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
2684*4882a593Smuzhiyun }
2685*4882a593Smuzhiyun
2686*4882a593Smuzhiyun
2687*4882a593Smuzhiyun template<typename T>
convertAiqFecToIsp20Params(T & pp_cfg,rk_aiq_isp_fec_t & fec)2688*4882a593Smuzhiyun void Isp20Params::convertAiqFecToIsp20Params(T &pp_cfg,
2689*4882a593Smuzhiyun rk_aiq_isp_fec_t& fec)
2690*4882a593Smuzhiyun {
2691*4882a593Smuzhiyun /* FEC module can't be enable/disable dynamically, the mode should
2692*4882a593Smuzhiyun * be decided in init params. we'll check if the module_init_ens
2693*4882a593Smuzhiyun * changed in CamIsp20Hw.cpp
2694*4882a593Smuzhiyun */
2695*4882a593Smuzhiyun
2696*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "fec update params, enable %d usage %d", fec.sw_fec_en, fec.usage);
2697*4882a593Smuzhiyun if(fec.sw_fec_en) {
2698*4882a593Smuzhiyun if (fec.usage == ISPP_MODULE_FEC_ST) {
2699*4882a593Smuzhiyun pp_cfg.head.module_ens |= ISPP_MODULE_FEC_ST;
2700*4882a593Smuzhiyun pp_cfg.head.module_en_update |= ISPP_MODULE_FEC_ST;
2701*4882a593Smuzhiyun } else if (fec.usage == ISPP_MODULE_FEC) {
2702*4882a593Smuzhiyun pp_cfg.head.module_ens |= ISPP_MODULE_FEC;
2703*4882a593Smuzhiyun pp_cfg.head.module_en_update |= ISPP_MODULE_FEC;
2704*4882a593Smuzhiyun }
2705*4882a593Smuzhiyun
2706*4882a593Smuzhiyun if (/*!fec.config*/0) {
2707*4882a593Smuzhiyun pp_cfg.head.module_cfg_update &= ~ISPP_MODULE_FEC;
2708*4882a593Smuzhiyun } else {
2709*4882a593Smuzhiyun struct rkispp_fec_config *pFecCfg = &pp_cfg.fec_cfg;
2710*4882a593Smuzhiyun
2711*4882a593Smuzhiyun pFecCfg->crop_en = fec.crop_en;
2712*4882a593Smuzhiyun pFecCfg->crop_width = fec.crop_width;
2713*4882a593Smuzhiyun pFecCfg->crop_height = fec.crop_height;
2714*4882a593Smuzhiyun pFecCfg->mesh_density = fec.mesh_density;
2715*4882a593Smuzhiyun pFecCfg->mesh_size = fec.mesh_size;
2716*4882a593Smuzhiyun pFecCfg->buf_fd = fec.mesh_buf_fd;
2717*4882a593Smuzhiyun //pp_cfg.fec_output_buf_index = fec.img_buf_index;
2718*4882a593Smuzhiyun //pp_cfg.fec_output_buf_size = fec.img_buf_size;
2719*4882a593Smuzhiyun
2720*4882a593Smuzhiyun pp_cfg.head.module_cfg_update |= ISPP_MODULE_FEC;
2721*4882a593Smuzhiyun }
2722*4882a593Smuzhiyun } else {
2723*4882a593Smuzhiyun pp_cfg.head.module_ens &= ~(ISPP_MODULE_FEC_ST | ISPP_MODULE_FEC);
2724*4882a593Smuzhiyun pp_cfg.head.module_en_update |= (ISPP_MODULE_FEC_ST | ISPP_MODULE_FEC);
2725*4882a593Smuzhiyun }
2726*4882a593Smuzhiyun }
2727*4882a593Smuzhiyun
2728*4882a593Smuzhiyun XCamReturn
checkIsp20Params(struct isp2x_isp_params_cfg & isp_cfg)2729*4882a593Smuzhiyun Isp20Params::checkIsp20Params(struct isp2x_isp_params_cfg& isp_cfg)
2730*4882a593Smuzhiyun {
2731*4882a593Smuzhiyun //TODO
2732*4882a593Smuzhiyun return XCAM_RETURN_NO_ERROR;
2733*4882a593Smuzhiyun }
2734*4882a593Smuzhiyun
2735*4882a593Smuzhiyun template<class T>
2736*4882a593Smuzhiyun void
convertAiqAdemosaicToIsp20Params(T & isp_cfg,rk_aiq_isp_debayer_t & demosaic)2737*4882a593Smuzhiyun Isp20Params::convertAiqAdemosaicToIsp20Params(T& isp_cfg, rk_aiq_isp_debayer_t &demosaic)
2738*4882a593Smuzhiyun {
2739*4882a593Smuzhiyun if (demosaic.updatecfg) {
2740*4882a593Smuzhiyun if (demosaic.enable) {
2741*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_DEBAYER;
2742*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_DEBAYER;
2743*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_DEBAYER;
2744*4882a593Smuzhiyun } else {
2745*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_DEBAYER;
2746*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_DEBAYER;
2747*4882a593Smuzhiyun }
2748*4882a593Smuzhiyun } else {
2749*4882a593Smuzhiyun return;
2750*4882a593Smuzhiyun }
2751*4882a593Smuzhiyun
2752*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.clip_en = demosaic.clip_en;
2753*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter_c_en = demosaic.filter_c_en;
2754*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter_g_en = demosaic.filter_g_en;
2755*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.gain_offset = demosaic.gain_offset;
2756*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.offset = demosaic.offset;
2757*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.hf_offset = demosaic.hf_offset;
2758*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.thed0 = demosaic.thed0;
2759*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.thed1 = demosaic.thed1;
2760*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.dist_scale = demosaic.dist_scale;
2761*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.shift_num = demosaic.shift_num;
2762*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter1_coe1 = demosaic.filter1_coe[0];
2763*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter1_coe2 = demosaic.filter1_coe[1];
2764*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter1_coe3 = demosaic.filter1_coe[2];
2765*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter1_coe4 = demosaic.filter1_coe[3];
2766*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter1_coe5 = demosaic.filter1_coe[4];
2767*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter2_coe1 = demosaic.filter2_coe[0];
2768*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter2_coe2 = demosaic.filter2_coe[1];
2769*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter2_coe3 = demosaic.filter2_coe[2];
2770*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter2_coe4 = demosaic.filter2_coe[3];
2771*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.filter2_coe5 = demosaic.filter2_coe[4];
2772*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.max_ratio = demosaic.max_ratio;
2773*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.order_max = demosaic.order_max;
2774*4882a593Smuzhiyun isp_cfg.others.debayer_cfg.order_min = demosaic.order_min;
2775*4882a593Smuzhiyun }
2776*4882a593Smuzhiyun #if RKAIQ_HAVE_ACP_V10
2777*4882a593Smuzhiyun template<class T>
2778*4882a593Smuzhiyun void
convertAiqCpToIsp20Params(T & isp_cfg,const rk_aiq_acp_params_t & cp_cfg)2779*4882a593Smuzhiyun Isp20Params::convertAiqCpToIsp20Params(T& isp_cfg,
2780*4882a593Smuzhiyun const rk_aiq_acp_params_t& cp_cfg)
2781*4882a593Smuzhiyun {
2782*4882a593Smuzhiyun struct isp2x_cproc_cfg* cproc_cfg = &isp_cfg.others.cproc_cfg;
2783*4882a593Smuzhiyun
2784*4882a593Smuzhiyun // TODO: set range
2785*4882a593Smuzhiyun /* cproc_cfg->y_in_range = 1; */
2786*4882a593Smuzhiyun /* cproc_cfg->y_out_range = 1; */
2787*4882a593Smuzhiyun /* cproc_cfg->c_out_range = 1; */
2788*4882a593Smuzhiyun
2789*4882a593Smuzhiyun if (cp_cfg.enable) {
2790*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_CPROC;
2791*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CPROC;
2792*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_CPROC;
2793*4882a593Smuzhiyun } else {
2794*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_CPROC;
2795*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CPROC;
2796*4882a593Smuzhiyun }
2797*4882a593Smuzhiyun
2798*4882a593Smuzhiyun cproc_cfg->contrast = (uint8_t)(cp_cfg.contrast);
2799*4882a593Smuzhiyun cproc_cfg->sat = (uint8_t)(cp_cfg.saturation);
2800*4882a593Smuzhiyun cproc_cfg->brightness = (uint8_t)(cp_cfg.brightness - 128);
2801*4882a593Smuzhiyun cproc_cfg->hue = (uint8_t)(cp_cfg.hue - 128);
2802*4882a593Smuzhiyun }
2803*4882a593Smuzhiyun #endif
2804*4882a593Smuzhiyun #if RKAIQ_HAVE_AIE_V10
2805*4882a593Smuzhiyun template<class T>
2806*4882a593Smuzhiyun void
convertAiqIeToIsp20Params(T & isp_cfg,const rk_aiq_isp_ie_t & ie_cfg)2807*4882a593Smuzhiyun Isp20Params::convertAiqIeToIsp20Params(T& isp_cfg,
2808*4882a593Smuzhiyun const rk_aiq_isp_ie_t& ie_cfg)
2809*4882a593Smuzhiyun {
2810*4882a593Smuzhiyun struct isp2x_ie_cfg* ie_config = &isp_cfg.others.ie_cfg;
2811*4882a593Smuzhiyun
2812*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_IE;
2813*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_IE;
2814*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_IE;
2815*4882a593Smuzhiyun
2816*4882a593Smuzhiyun switch (ie_cfg.base.mode) {
2817*4882a593Smuzhiyun case RK_AIQ_IE_EFFECT_BW:
2818*4882a593Smuzhiyun ie_config->effect = V4L2_COLORFX_BW;
2819*4882a593Smuzhiyun break;
2820*4882a593Smuzhiyun case RK_AIQ_IE_EFFECT_NEGATIVE:
2821*4882a593Smuzhiyun ie_config->effect = V4L2_COLORFX_NEGATIVE;
2822*4882a593Smuzhiyun break;
2823*4882a593Smuzhiyun case RK_AIQ_IE_EFFECT_SEPIA:
2824*4882a593Smuzhiyun ie_config->effect = V4L2_COLORFX_SEPIA;
2825*4882a593Smuzhiyun break;
2826*4882a593Smuzhiyun case RK_AIQ_IE_EFFECT_EMBOSS:
2827*4882a593Smuzhiyun {
2828*4882a593Smuzhiyun ie_config->effect = V4L2_COLORFX_EMBOSS;
2829*4882a593Smuzhiyun ie_config->eff_mat_1 = (uint16_t)(ie_cfg.extra.mode_coeffs[0])
2830*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[1]) << 0x4)
2831*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[2]) << 0x8)
2832*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[3]) << 0xc);
2833*4882a593Smuzhiyun ie_config->eff_mat_2 = (uint16_t)(ie_cfg.extra.mode_coeffs[4])
2834*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[5]) << 0x4)
2835*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[6]) << 0x8)
2836*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[7]) << 0xc);
2837*4882a593Smuzhiyun ie_config->eff_mat_3 = (ie_cfg.extra.mode_coeffs[8]);
2838*4882a593Smuzhiyun /*not used for this effect*/
2839*4882a593Smuzhiyun ie_config->eff_mat_4 = 0;
2840*4882a593Smuzhiyun ie_config->eff_mat_5 = 0;
2841*4882a593Smuzhiyun ie_config->color_sel = 0;
2842*4882a593Smuzhiyun ie_config->eff_tint = 0;
2843*4882a593Smuzhiyun }
2844*4882a593Smuzhiyun break;
2845*4882a593Smuzhiyun case RK_AIQ_IE_EFFECT_SKETCH:
2846*4882a593Smuzhiyun {
2847*4882a593Smuzhiyun ie_config->effect = V4L2_COLORFX_SKETCH;
2848*4882a593Smuzhiyun ie_config->eff_mat_3 = ((uint16_t)(ie_cfg.extra.mode_coeffs[0]) << 0x4)
2849*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[1]) << 0x8)
2850*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[2]) << 0xc);
2851*4882a593Smuzhiyun /*not used for this effect*/
2852*4882a593Smuzhiyun ie_config->eff_mat_4 = (uint16_t)(ie_cfg.extra.mode_coeffs[3])
2853*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[4]) << 0x4)
2854*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[5]) << 0x8)
2855*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[6]) << 0xc);
2856*4882a593Smuzhiyun ie_config->eff_mat_5 = (uint16_t)(ie_cfg.extra.mode_coeffs[7])
2857*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[8]) << 0x4);
2858*4882a593Smuzhiyun
2859*4882a593Smuzhiyun /*not used for this effect*/
2860*4882a593Smuzhiyun ie_config->eff_mat_1 = 0;
2861*4882a593Smuzhiyun ie_config->eff_mat_2 = 0;
2862*4882a593Smuzhiyun ie_config->color_sel = 0;
2863*4882a593Smuzhiyun ie_config->eff_tint = 0;
2864*4882a593Smuzhiyun }
2865*4882a593Smuzhiyun break;
2866*4882a593Smuzhiyun case RK_AIQ_IE_EFFECT_SHARPEN:
2867*4882a593Smuzhiyun {
2868*4882a593Smuzhiyun /* TODO: can't find related mode in v4l2_colorfx*/
2869*4882a593Smuzhiyun //ie_config->effect =
2870*4882a593Smuzhiyun // V4L2_COLORFX_EMBOSS;
2871*4882a593Smuzhiyun ie_config->eff_mat_1 = (uint16_t)(ie_cfg.extra.mode_coeffs[0])
2872*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[1]) << 0x4)
2873*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[2]) << 0x8)
2874*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[3]) << 0xc);
2875*4882a593Smuzhiyun ie_config->eff_mat_2 = (uint16_t)(ie_cfg.extra.mode_coeffs[4])
2876*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[5]) << 0x4)
2877*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[6]) << 0x8)
2878*4882a593Smuzhiyun | ((uint16_t)(ie_cfg.extra.mode_coeffs[7]) << 0xc);
2879*4882a593Smuzhiyun ie_config->eff_mat_3 = (ie_cfg.extra.mode_coeffs[8]);
2880*4882a593Smuzhiyun /*not used for this effect*/
2881*4882a593Smuzhiyun ie_config->eff_mat_4 = 0;
2882*4882a593Smuzhiyun ie_config->eff_mat_5 = 0;
2883*4882a593Smuzhiyun ie_config->color_sel = 0;
2884*4882a593Smuzhiyun ie_config->eff_tint = 0;
2885*4882a593Smuzhiyun }
2886*4882a593Smuzhiyun break;
2887*4882a593Smuzhiyun case RK_AIQ_IE_EFFECT_NONE:
2888*4882a593Smuzhiyun {
2889*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_IE;
2890*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_IE;
2891*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_IE;
2892*4882a593Smuzhiyun }
2893*4882a593Smuzhiyun break;
2894*4882a593Smuzhiyun default:
2895*4882a593Smuzhiyun break;
2896*4882a593Smuzhiyun }
2897*4882a593Smuzhiyun }
2898*4882a593Smuzhiyun #endif
2899*4882a593Smuzhiyun template<class T>
2900*4882a593Smuzhiyun void
convertAiqAldchToIsp20Params(T & isp_cfg,const rk_aiq_isp_ldch_t & ldch_cfg)2901*4882a593Smuzhiyun Isp20Params::convertAiqAldchToIsp20Params(T& isp_cfg,
2902*4882a593Smuzhiyun const rk_aiq_isp_ldch_t& ldch_cfg)
2903*4882a593Smuzhiyun {
2904*4882a593Smuzhiyun struct isp2x_ldch_cfg *pLdchCfg = &isp_cfg.others.ldch_cfg;
2905*4882a593Smuzhiyun
2906*4882a593Smuzhiyun // TODO: add update flag for ldch
2907*4882a593Smuzhiyun if (ldch_cfg.sw_ldch_en) {
2908*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_LDCH;
2909*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_LDCH;
2910*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_LDCH;
2911*4882a593Smuzhiyun
2912*4882a593Smuzhiyun pLdchCfg->hsize = ldch_cfg.lut_h_size;
2913*4882a593Smuzhiyun pLdchCfg->vsize = ldch_cfg.lut_v_size;
2914*4882a593Smuzhiyun pLdchCfg->buf_fd = ldch_cfg.lut_mapxy_buf_fd;
2915*4882a593Smuzhiyun } else {
2916*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_LDCH;
2917*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_LDCH;
2918*4882a593Smuzhiyun }
2919*4882a593Smuzhiyun }
2920*4882a593Smuzhiyun
2921*4882a593Smuzhiyun template<class T>
2922*4882a593Smuzhiyun void
convertAiqGicToIsp20Params(T & isp_cfg,const rk_aiq_isp_gic_t & gic_cfg)2923*4882a593Smuzhiyun Isp20Params::convertAiqGicToIsp20Params(T& isp_cfg,
2924*4882a593Smuzhiyun const rk_aiq_isp_gic_t& gic_cfg)
2925*4882a593Smuzhiyun {
2926*4882a593Smuzhiyun struct isp2x_gic_cfg *isp_gic_cfg = &isp_cfg.others.gic_cfg;
2927*4882a593Smuzhiyun
2928*4882a593Smuzhiyun if (gic_cfg.gic_en) {
2929*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_GIC;
2930*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GIC;
2931*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_GIC;
2932*4882a593Smuzhiyun } else {
2933*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_GIC;
2934*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GIC;
2935*4882a593Smuzhiyun }
2936*4882a593Smuzhiyun
2937*4882a593Smuzhiyun isp_gic_cfg->edge_open = gic_cfg.ProcResV20.edge_open;
2938*4882a593Smuzhiyun isp_gic_cfg->regmingradthrdark2 = gic_cfg.ProcResV20.regmingradthrdark2;
2939*4882a593Smuzhiyun isp_gic_cfg->regmingradthrdark1 = gic_cfg.ProcResV20.regmingradthrdark1;
2940*4882a593Smuzhiyun isp_gic_cfg->regminbusythre = gic_cfg.ProcResV20.regminbusythre;
2941*4882a593Smuzhiyun isp_gic_cfg->regdarkthre = gic_cfg.ProcResV20.regdarkthre;
2942*4882a593Smuzhiyun isp_gic_cfg->regmaxcorvboth = gic_cfg.ProcResV20.regmaxcorvboth;
2943*4882a593Smuzhiyun isp_gic_cfg->regdarktthrehi = gic_cfg.ProcResV20.regdarktthrehi;
2944*4882a593Smuzhiyun isp_gic_cfg->regkgrad2dark = gic_cfg.ProcResV20.regkgrad2dark;
2945*4882a593Smuzhiyun isp_gic_cfg->regkgrad1dark = gic_cfg.ProcResV20.regkgrad1dark;
2946*4882a593Smuzhiyun isp_gic_cfg->regstrengthglobal_fix = gic_cfg.ProcResV20.regstrengthglobal_fix;
2947*4882a593Smuzhiyun isp_gic_cfg->regdarkthrestep = gic_cfg.ProcResV20.regdarkthrestep;
2948*4882a593Smuzhiyun isp_gic_cfg->regkgrad2 = gic_cfg.ProcResV20.regkgrad2;
2949*4882a593Smuzhiyun isp_gic_cfg->regkgrad1 = gic_cfg.ProcResV20.regkgrad1;
2950*4882a593Smuzhiyun isp_gic_cfg->reggbthre = gic_cfg.ProcResV20.reggbthre;
2951*4882a593Smuzhiyun isp_gic_cfg->regmaxcorv = gic_cfg.ProcResV20.regmaxcorv;
2952*4882a593Smuzhiyun isp_gic_cfg->regmingradthr2 = gic_cfg.ProcResV20.regmingradthr2;
2953*4882a593Smuzhiyun isp_gic_cfg->regmingradthr1 = gic_cfg.ProcResV20.regmingradthr1;
2954*4882a593Smuzhiyun isp_gic_cfg->gr_ratio = gic_cfg.ProcResV20.gr_ratio;
2955*4882a593Smuzhiyun isp_gic_cfg->dnhiscale = gic_cfg.ProcResV20.dnhiscale;
2956*4882a593Smuzhiyun isp_gic_cfg->dnloscale = gic_cfg.ProcResV20.dnloscale;
2957*4882a593Smuzhiyun isp_gic_cfg->reglumapointsstep = gic_cfg.ProcResV20.reglumapointsstep;
2958*4882a593Smuzhiyun isp_gic_cfg->gvaluelimithi = gic_cfg.ProcResV20.gvaluelimithi;
2959*4882a593Smuzhiyun isp_gic_cfg->gvaluelimitlo = gic_cfg.ProcResV20.gvaluelimitlo;
2960*4882a593Smuzhiyun isp_gic_cfg->fusionratiohilimt1 = gic_cfg.ProcResV20.fusionratiohilimt1;
2961*4882a593Smuzhiyun isp_gic_cfg->regstrength_fix = gic_cfg.ProcResV20.regstrength_fix;
2962*4882a593Smuzhiyun isp_gic_cfg->noise_cut_en = gic_cfg.ProcResV20.noise_cut_en;
2963*4882a593Smuzhiyun isp_gic_cfg->noise_coe_a = gic_cfg.ProcResV20.noise_coe_a;
2964*4882a593Smuzhiyun isp_gic_cfg->noise_coe_b = gic_cfg.ProcResV20.noise_coe_b;
2965*4882a593Smuzhiyun isp_gic_cfg->diff_clip = gic_cfg.ProcResV20.diff_clip;
2966*4882a593Smuzhiyun for(int i = 0; i < 15; i++)
2967*4882a593Smuzhiyun isp_gic_cfg->sigma_y[i] = gic_cfg.ProcResV20.sigma_y[i];
2968*4882a593Smuzhiyun }
2969*4882a593Smuzhiyun
2970*4882a593Smuzhiyun void
set_working_mode(int mode)2971*4882a593Smuzhiyun Isp20Params::set_working_mode(int mode)
2972*4882a593Smuzhiyun {
2973*4882a593Smuzhiyun _working_mode = mode;
2974*4882a593Smuzhiyun }
2975*4882a593Smuzhiyun
2976*4882a593Smuzhiyun template<typename T>
convertAiqOrbToIsp20Params(T & pp_cfg,rk_aiq_isp_orb_t & orb)2977*4882a593Smuzhiyun void Isp20Params::convertAiqOrbToIsp20Params(T &pp_cfg,
2978*4882a593Smuzhiyun rk_aiq_isp_orb_t& orb)
2979*4882a593Smuzhiyun {
2980*4882a593Smuzhiyun if(orb.orb_en) {
2981*4882a593Smuzhiyun pp_cfg.head.module_ens |= ISPP_MODULE_ORB;
2982*4882a593Smuzhiyun pp_cfg.head.module_en_update |= ISPP_MODULE_ORB;
2983*4882a593Smuzhiyun pp_cfg.head.module_cfg_update |= ISPP_MODULE_ORB;
2984*4882a593Smuzhiyun //pp_cfg.head.module_init_ens |= ISPP_MODULE_ORB;
2985*4882a593Smuzhiyun
2986*4882a593Smuzhiyun struct rkispp_orb_config *pOrbCfg = &pp_cfg.orb_cfg;
2987*4882a593Smuzhiyun
2988*4882a593Smuzhiyun pOrbCfg->limit_value = orb.limit_value;
2989*4882a593Smuzhiyun pOrbCfg->max_feature = orb.max_feature;
2990*4882a593Smuzhiyun } else {
2991*4882a593Smuzhiyun pp_cfg.head.module_ens &= ~ISPP_MODULE_ORB;
2992*4882a593Smuzhiyun }
2993*4882a593Smuzhiyun }
2994*4882a593Smuzhiyun
setModuleStatus(rk_aiq_module_id_t mId,bool en)2995*4882a593Smuzhiyun void Isp20Params::setModuleStatus(rk_aiq_module_id_t mId, bool en)
2996*4882a593Smuzhiyun {
2997*4882a593Smuzhiyun #define _ISP_MODULE_CFG_(id) \
2998*4882a593Smuzhiyun {\
2999*4882a593Smuzhiyun _force_module_flags |= 1LL << id;\
3000*4882a593Smuzhiyun if(en)\
3001*4882a593Smuzhiyun _force_isp_module_ens |= 1LL << id;\
3002*4882a593Smuzhiyun else\
3003*4882a593Smuzhiyun _force_isp_module_ens &= ~(1LL << id);\
3004*4882a593Smuzhiyun }
3005*4882a593Smuzhiyun
3006*4882a593Smuzhiyun #define _ISPP_MODULE_CFG_(id, mod_en) \
3007*4882a593Smuzhiyun {\
3008*4882a593Smuzhiyun _force_module_flags |= 1LL << id;\
3009*4882a593Smuzhiyun if(en)\
3010*4882a593Smuzhiyun _force_ispp_module_ens |= mod_en;\
3011*4882a593Smuzhiyun else\
3012*4882a593Smuzhiyun _force_ispp_module_ens &= ~(mod_en);\
3013*4882a593Smuzhiyun }
3014*4882a593Smuzhiyun
3015*4882a593Smuzhiyun SmartLock locker (_mutex);
3016*4882a593Smuzhiyun switch (mId) {
3017*4882a593Smuzhiyun case RK_MODULE_INVAL:
3018*4882a593Smuzhiyun break;
3019*4882a593Smuzhiyun case RK_MODULE_MAX:
3020*4882a593Smuzhiyun break;
3021*4882a593Smuzhiyun case RK_MODULE_FEC:
3022*4882a593Smuzhiyun break;
3023*4882a593Smuzhiyun case RK_MODULE_TNR:
3024*4882a593Smuzhiyun _ISPP_MODULE_CFG_(RK_ISP2X_PP_TNR_ID, ISPP_MODULE_TNR);
3025*4882a593Smuzhiyun break;
3026*4882a593Smuzhiyun case RK_MODULE_NR:
3027*4882a593Smuzhiyun _ISPP_MODULE_CFG_(RK_ISP2X_PP_NR_ID, ISPP_MODULE_NR);
3028*4882a593Smuzhiyun break;
3029*4882a593Smuzhiyun case RK_MODULE_RAWNR:
3030*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_RAWNR_ID);
3031*4882a593Smuzhiyun break;
3032*4882a593Smuzhiyun case RK_MODULE_DPCC:
3033*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_DPCC_ID);
3034*4882a593Smuzhiyun break;
3035*4882a593Smuzhiyun case RK_MODULE_BLS:
3036*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_BLS_ID);
3037*4882a593Smuzhiyun break;
3038*4882a593Smuzhiyun case RK_MODULE_LSC:
3039*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_LSC_ID);
3040*4882a593Smuzhiyun break;
3041*4882a593Smuzhiyun case RK_MODULE_CTK:
3042*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_CTK_ID);
3043*4882a593Smuzhiyun break;
3044*4882a593Smuzhiyun case RK_MODULE_AWB:
3045*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_RAWAWB_ID);
3046*4882a593Smuzhiyun break;
3047*4882a593Smuzhiyun case RK_MODULE_GOC:
3048*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_GOC_ID);
3049*4882a593Smuzhiyun break;
3050*4882a593Smuzhiyun case RK_MODULE_3DLUT:
3051*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_3DLUT_ID);
3052*4882a593Smuzhiyun break;
3053*4882a593Smuzhiyun case RK_MODULE_LDCH:
3054*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_LDCH_ID);
3055*4882a593Smuzhiyun break;
3056*4882a593Smuzhiyun case RK_MODULE_GIC:
3057*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_GIC_ID);
3058*4882a593Smuzhiyun break;
3059*4882a593Smuzhiyun case RK_MODULE_AWB_GAIN:
3060*4882a593Smuzhiyun _ISP_MODULE_CFG_(RK_ISP2X_GAIN_ID);
3061*4882a593Smuzhiyun break;
3062*4882a593Smuzhiyun case RK_MODULE_SHARP:
3063*4882a593Smuzhiyun _ISPP_MODULE_CFG_(RK_ISP2X_PP_TSHP_ID, ISPP_MODULE_SHP);
3064*4882a593Smuzhiyun break;
3065*4882a593Smuzhiyun case RK_MODULE_AE:
3066*4882a593Smuzhiyun break;
3067*4882a593Smuzhiyun //case RK_MODULE_DHAZ:
3068*4882a593Smuzhiyun // _ISP_MODULE_CFG_(RK_ISP2X_DHAZ_ID);
3069*4882a593Smuzhiyun //break;
3070*4882a593Smuzhiyun }
3071*4882a593Smuzhiyun }
3072*4882a593Smuzhiyun
getModuleStatus(rk_aiq_module_id_t mId,bool & en)3073*4882a593Smuzhiyun void Isp20Params::getModuleStatus(rk_aiq_module_id_t mId, bool& en)
3074*4882a593Smuzhiyun {
3075*4882a593Smuzhiyun int mod_id = -1;
3076*4882a593Smuzhiyun switch (mId) {
3077*4882a593Smuzhiyun case RK_MODULE_INVAL:
3078*4882a593Smuzhiyun break;
3079*4882a593Smuzhiyun case RK_MODULE_MAX:
3080*4882a593Smuzhiyun break;
3081*4882a593Smuzhiyun case RK_MODULE_TNR:
3082*4882a593Smuzhiyun mod_id = RK_ISP2X_PP_TNR_ID;
3083*4882a593Smuzhiyun break;
3084*4882a593Smuzhiyun case RK_MODULE_RAWNR:
3085*4882a593Smuzhiyun mod_id = RK_ISP2X_RAWNR_ID;
3086*4882a593Smuzhiyun break;
3087*4882a593Smuzhiyun case RK_MODULE_DPCC:
3088*4882a593Smuzhiyun mod_id = RK_ISP2X_DPCC_ID;
3089*4882a593Smuzhiyun break;
3090*4882a593Smuzhiyun case RK_MODULE_BLS:
3091*4882a593Smuzhiyun mod_id = RK_ISP2X_BLS_ID;
3092*4882a593Smuzhiyun break;
3093*4882a593Smuzhiyun case RK_MODULE_LSC:
3094*4882a593Smuzhiyun mod_id = RK_ISP2X_LSC_ID;
3095*4882a593Smuzhiyun break;
3096*4882a593Smuzhiyun case RK_MODULE_CTK:
3097*4882a593Smuzhiyun mod_id = RK_ISP2X_CTK_ID;
3098*4882a593Smuzhiyun break;
3099*4882a593Smuzhiyun case RK_MODULE_AWB:
3100*4882a593Smuzhiyun mod_id = RK_ISP2X_RAWAWB_ID;
3101*4882a593Smuzhiyun break;
3102*4882a593Smuzhiyun case RK_MODULE_GOC:
3103*4882a593Smuzhiyun mod_id = RK_ISP2X_GOC_ID;
3104*4882a593Smuzhiyun break;
3105*4882a593Smuzhiyun case RK_MODULE_NR:
3106*4882a593Smuzhiyun mod_id = RK_ISP2X_PP_NR_ID;
3107*4882a593Smuzhiyun break;
3108*4882a593Smuzhiyun case RK_MODULE_3DLUT:
3109*4882a593Smuzhiyun mod_id = RK_ISP2X_3DLUT_ID;
3110*4882a593Smuzhiyun break;
3111*4882a593Smuzhiyun case RK_MODULE_LDCH:
3112*4882a593Smuzhiyun mod_id = RK_ISP2X_LDCH_ID;
3113*4882a593Smuzhiyun break;
3114*4882a593Smuzhiyun case RK_MODULE_GIC:
3115*4882a593Smuzhiyun mod_id = RK_ISP2X_GIC_ID;
3116*4882a593Smuzhiyun break;
3117*4882a593Smuzhiyun case RK_MODULE_AWB_GAIN:
3118*4882a593Smuzhiyun mod_id = RK_ISP2X_GAIN_ID;
3119*4882a593Smuzhiyun break;
3120*4882a593Smuzhiyun case RK_MODULE_SHARP:
3121*4882a593Smuzhiyun mod_id = RK_ISP2X_PP_TSHP_ID;
3122*4882a593Smuzhiyun break;
3123*4882a593Smuzhiyun case RK_MODULE_AE:
3124*4882a593Smuzhiyun mod_id = RK_ISP2X_RAWAE0_ID;
3125*4882a593Smuzhiyun break;
3126*4882a593Smuzhiyun case RK_MODULE_FEC:
3127*4882a593Smuzhiyun mod_id = RK_ISP2X_PP_TFEC_ID;
3128*4882a593Smuzhiyun break;
3129*4882a593Smuzhiyun //case RK_MODULE_DHAZ:
3130*4882a593Smuzhiyun // mod_id = RK_ISP2X_DHAZ_ID;
3131*4882a593Smuzhiyun break;
3132*4882a593Smuzhiyun }
3133*4882a593Smuzhiyun
3134*4882a593Smuzhiyun if (mod_id < 0)
3135*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "input param: module ID is wrong!");
3136*4882a593Smuzhiyun else
3137*4882a593Smuzhiyun en = getModuleForceEn(mod_id);
3138*4882a593Smuzhiyun }
3139*4882a593Smuzhiyun
getModuleForceFlag(int module_id)3140*4882a593Smuzhiyun bool Isp20Params::getModuleForceFlag(int module_id)
3141*4882a593Smuzhiyun {
3142*4882a593Smuzhiyun SmartLock locker (_mutex);
3143*4882a593Smuzhiyun return ((_force_module_flags & (1LL << module_id)) >> module_id);
3144*4882a593Smuzhiyun }
3145*4882a593Smuzhiyun
setModuleForceFlagInverse(int module_id)3146*4882a593Smuzhiyun void Isp20Params::setModuleForceFlagInverse(int module_id)
3147*4882a593Smuzhiyun {
3148*4882a593Smuzhiyun SmartLock locker (_mutex);
3149*4882a593Smuzhiyun _force_module_flags &= (~(1LL << module_id));
3150*4882a593Smuzhiyun }
3151*4882a593Smuzhiyun
getModuleForceEn(int module_id)3152*4882a593Smuzhiyun bool Isp20Params::getModuleForceEn(int module_id)
3153*4882a593Smuzhiyun {
3154*4882a593Smuzhiyun SmartLock locker (_mutex);
3155*4882a593Smuzhiyun if(module_id == RK_ISP2X_PP_TNR_ID)
3156*4882a593Smuzhiyun return (_force_ispp_module_ens & ISPP_MODULE_TNR) >> 0;
3157*4882a593Smuzhiyun else if(module_id == RK_ISP2X_PP_NR_ID)
3158*4882a593Smuzhiyun return (_force_ispp_module_ens & ISPP_MODULE_NR) >> 1;
3159*4882a593Smuzhiyun else if(module_id == RK_ISP2X_PP_TSHP_ID)
3160*4882a593Smuzhiyun return (_force_ispp_module_ens & ISPP_MODULE_SHP) >> 2;
3161*4882a593Smuzhiyun else if(module_id == RK_ISP2X_PP_TFEC_ID)
3162*4882a593Smuzhiyun return (_force_ispp_module_ens & ISPP_MODULE_FEC) >> 3;
3163*4882a593Smuzhiyun else
3164*4882a593Smuzhiyun return ((_force_isp_module_ens & (1LL << module_id)) >> module_id);
3165*4882a593Smuzhiyun }
3166*4882a593Smuzhiyun
updateIspModuleForceEns(u64 module_ens)3167*4882a593Smuzhiyun void Isp20Params::updateIspModuleForceEns(u64 module_ens)
3168*4882a593Smuzhiyun {
3169*4882a593Smuzhiyun SmartLock locker (_mutex);
3170*4882a593Smuzhiyun _force_isp_module_ens = module_ens;
3171*4882a593Smuzhiyun }
3172*4882a593Smuzhiyun
updateIsppModuleForceEns(u32 module_ens)3173*4882a593Smuzhiyun void Isp20Params::updateIsppModuleForceEns(u32 module_ens)
3174*4882a593Smuzhiyun {
3175*4882a593Smuzhiyun SmartLock locker (_mutex);
3176*4882a593Smuzhiyun _force_ispp_module_ens = module_ens;
3177*4882a593Smuzhiyun }
3178*4882a593Smuzhiyun
3179*4882a593Smuzhiyun #if 0
3180*4882a593Smuzhiyun void
3181*4882a593Smuzhiyun Isp20Params::forceOverwriteAiqIsppCfg(struct rkispp_params_cfg& pp_cfg,
3182*4882a593Smuzhiyun SmartPtr<RkAiqIspParamsProxy> aiq_meas_results,
3183*4882a593Smuzhiyun SmartPtr<RkAiqIspParamsProxy> aiq_other_results)
3184*4882a593Smuzhiyun {
3185*4882a593Smuzhiyun rk_aiq_ispp_meas_params_t* ispp_meas_param =
3186*4882a593Smuzhiyun static_cast<rk_aiq_ispp_meas_params_t*>(aiq_meas_results->data().ptr());
3187*4882a593Smuzhiyun rk_aiq_ispp_other_params_t* ispp_other_param =
3188*4882a593Smuzhiyun static_cast<rk_aiq_ispp_other_params_t*>(aiq_other_results->data().ptr());
3189*4882a593Smuzhiyun
3190*4882a593Smuzhiyun for (int i = RK_ISP2X_PP_TNR_ID; i <= RK_ISP2X_PP_MAX_ID; i++) {
3191*4882a593Smuzhiyun if (getModuleForceFlag(i)) {
3192*4882a593Smuzhiyun switch (i) {
3193*4882a593Smuzhiyun case RK_ISP2X_PP_TNR_ID:
3194*4882a593Smuzhiyun if (!ispp_other_param)
3195*4882a593Smuzhiyun break;
3196*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_PP_TNR_ID)) {
3197*4882a593Smuzhiyun if(ispp_other_param->tnr.tnr_en) {
3198*4882a593Smuzhiyun pp_cfg.module_ens |= ISPP_MODULE_TNR;
3199*4882a593Smuzhiyun pp_cfg.module_en_update |= ISPP_MODULE_TNR;
3200*4882a593Smuzhiyun pp_cfg.module_cfg_update |= ISPP_MODULE_TNR;
3201*4882a593Smuzhiyun } else {
3202*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_PP_TNR_ID);
3203*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "algo isn't enabled, so enable module failed!");
3204*4882a593Smuzhiyun }
3205*4882a593Smuzhiyun } else {
3206*4882a593Smuzhiyun pp_cfg.module_ens &= ~ISPP_MODULE_TNR;
3207*4882a593Smuzhiyun pp_cfg.module_en_update |= ISPP_MODULE_TNR;
3208*4882a593Smuzhiyun pp_cfg.module_cfg_update &= ~ISPP_MODULE_TNR;
3209*4882a593Smuzhiyun }
3210*4882a593Smuzhiyun break;
3211*4882a593Smuzhiyun case RK_ISP2X_PP_NR_ID:
3212*4882a593Smuzhiyun if (!ispp_other_param)
3213*4882a593Smuzhiyun break;
3214*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_PP_NR_ID)) {
3215*4882a593Smuzhiyun if( ispp_other_param->tnr.tnr_en) {
3216*4882a593Smuzhiyun pp_cfg.module_ens |= ISPP_MODULE_NR;
3217*4882a593Smuzhiyun pp_cfg.module_en_update |= ISPP_MODULE_NR;
3218*4882a593Smuzhiyun pp_cfg.module_cfg_update |= ISPP_MODULE_NR;
3219*4882a593Smuzhiyun } else {
3220*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_PP_NR_ID);
3221*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "algo isn't enabled, so enable module failed!");
3222*4882a593Smuzhiyun }
3223*4882a593Smuzhiyun } else {
3224*4882a593Smuzhiyun pp_cfg.module_ens &= ~ISPP_MODULE_NR;
3225*4882a593Smuzhiyun pp_cfg.module_en_update |= ISPP_MODULE_NR;
3226*4882a593Smuzhiyun pp_cfg.module_cfg_update &= ~ISPP_MODULE_NR;
3227*4882a593Smuzhiyun }
3228*4882a593Smuzhiyun break;
3229*4882a593Smuzhiyun case RK_ISP2X_PP_TSHP_ID:
3230*4882a593Smuzhiyun if (!ispp_other_param)
3231*4882a593Smuzhiyun break;
3232*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_PP_TSHP_ID)) {
3233*4882a593Smuzhiyun if(ispp_other_param->sharpen.stSharpFixV1.sharp_en ||
3234*4882a593Smuzhiyun ispp_other_param->edgeflt.edgeflt_en) {
3235*4882a593Smuzhiyun pp_cfg.module_ens |= ISPP_MODULE_SHP;
3236*4882a593Smuzhiyun pp_cfg.module_en_update |= ISPP_MODULE_SHP;
3237*4882a593Smuzhiyun pp_cfg.module_cfg_update |= ISPP_MODULE_SHP;
3238*4882a593Smuzhiyun } else {
3239*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_PP_TSHP_ID);
3240*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "algo isn't enabled, so enable module failed!");
3241*4882a593Smuzhiyun }
3242*4882a593Smuzhiyun } else {
3243*4882a593Smuzhiyun pp_cfg.module_ens &= ~ISPP_MODULE_SHP;
3244*4882a593Smuzhiyun pp_cfg.module_en_update |= ISPP_MODULE_SHP;
3245*4882a593Smuzhiyun pp_cfg.module_cfg_update &= ~ISPP_MODULE_SHP;
3246*4882a593Smuzhiyun }
3247*4882a593Smuzhiyun break;
3248*4882a593Smuzhiyun }
3249*4882a593Smuzhiyun }
3250*4882a593Smuzhiyun }
3251*4882a593Smuzhiyun updateIsppModuleForceEns(pp_cfg.module_ens);
3252*4882a593Smuzhiyun }
3253*4882a593Smuzhiyun
3254*4882a593Smuzhiyun void
3255*4882a593Smuzhiyun Isp20Params::forceOverwriteAiqIspCfg(struct isp2x_isp_params_cfg& isp_cfg,
3256*4882a593Smuzhiyun SmartPtr<RkAiqIspParamsProxy> aiq_results,
3257*4882a593Smuzhiyun SmartPtr<RkAiqIspParamsProxy> aiq_other_results)
3258*4882a593Smuzhiyun {
3259*4882a593Smuzhiyun rk_aiq_isp_meas_params_v20_t* isp20_meas_result =
3260*4882a593Smuzhiyun static_cast<rk_aiq_isp_meas_params_v20_t*>(aiq_results->data().ptr());
3261*4882a593Smuzhiyun rk_aiq_isp_other_params_v20_t* isp20_other_result =
3262*4882a593Smuzhiyun static_cast<rk_aiq_isp_other_params_v20_t*>(aiq_other_results->data().ptr());
3263*4882a593Smuzhiyun for (int i = 0; i <= RK_ISP2X_MAX_ID; i++) {
3264*4882a593Smuzhiyun if (getModuleForceFlag(i)) {
3265*4882a593Smuzhiyun switch (i) {
3266*4882a593Smuzhiyun case RK_ISP2X_DPCC_ID:
3267*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_DPCC_ID)) {
3268*4882a593Smuzhiyun if(isp20_meas_result->dpcc.stBasic.enable) {
3269*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_DPCC;
3270*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_DPCC;
3271*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_DPCC;
3272*4882a593Smuzhiyun } else {
3273*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_DPCC_ID);
3274*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "dpcc algo isn't enabled, so enable module failed!");
3275*4882a593Smuzhiyun }
3276*4882a593Smuzhiyun } else {
3277*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_DPCC;
3278*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_DPCC;
3279*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_DPCC;
3280*4882a593Smuzhiyun }
3281*4882a593Smuzhiyun break;
3282*4882a593Smuzhiyun case RK_ISP2X_BLS_ID:
3283*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_BLS_ID)) {
3284*4882a593Smuzhiyun if(isp20_other_result->blc.enable) {
3285*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_BLS;
3286*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_BLS;
3287*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_BLS;
3288*4882a593Smuzhiyun } else {
3289*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_BLS_ID);
3290*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "bls algo isn't enabled, so enable module failed!");
3291*4882a593Smuzhiyun }
3292*4882a593Smuzhiyun } else {
3293*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_BLS;
3294*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_BLS;
3295*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_BLS;
3296*4882a593Smuzhiyun }
3297*4882a593Smuzhiyun break;
3298*4882a593Smuzhiyun case RK_ISP2X_LSC_ID:
3299*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_LSC_ID)) {
3300*4882a593Smuzhiyun if(isp20_meas_result->lsc.lsc_en) {
3301*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_LSC;
3302*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_LSC;
3303*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_LSC;
3304*4882a593Smuzhiyun } else {
3305*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_LSC_ID);
3306*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "lsc algo isn't enabled, so enable module failed!");
3307*4882a593Smuzhiyun }
3308*4882a593Smuzhiyun } else {
3309*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_LSC;
3310*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_LSC;
3311*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_LSC;
3312*4882a593Smuzhiyun }
3313*4882a593Smuzhiyun break;
3314*4882a593Smuzhiyun case RK_ISP2X_CTK_ID:
3315*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_CTK_ID)) {
3316*4882a593Smuzhiyun if(isp20_meas_result->lsc.lsc_en) {
3317*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_CCM;
3318*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CCM;
3319*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_CCM;
3320*4882a593Smuzhiyun } else {
3321*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_CTK_ID);
3322*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "ccm algo isn't enabled, so enable module failed!");
3323*4882a593Smuzhiyun }
3324*4882a593Smuzhiyun } else {
3325*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_CCM;
3326*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_CCM;
3327*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_CCM;
3328*4882a593Smuzhiyun }
3329*4882a593Smuzhiyun break;
3330*4882a593Smuzhiyun case RK_ISP2X_RAWAWB_ID:
3331*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_RAWAWB_ID)) {
3332*4882a593Smuzhiyun if(isp20_meas_result->awb_cfg.awbEnable) {
3333*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_RAWAWB;
3334*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_RAWAWB;
3335*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWAWB;
3336*4882a593Smuzhiyun } else {
3337*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_RAWAWB_ID);
3338*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "awb algo isn't enabled, so enable module failed!");
3339*4882a593Smuzhiyun }
3340*4882a593Smuzhiyun } else {
3341*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_RAWAWB;
3342*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_RAWAWB;
3343*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_RAWAWB;
3344*4882a593Smuzhiyun }
3345*4882a593Smuzhiyun break;
3346*4882a593Smuzhiyun case RK_ISP2X_GOC_ID:
3347*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_GOC_ID)) {
3348*4882a593Smuzhiyun if(isp20_other_result->agamma.gamma_en) {
3349*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_GOC;
3350*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GOC;
3351*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_GOC;
3352*4882a593Smuzhiyun } else {
3353*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_GOC_ID);
3354*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "goc algo isn't enabled, so enable module failed!");
3355*4882a593Smuzhiyun }
3356*4882a593Smuzhiyun } else {
3357*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_GOC;
3358*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GOC;
3359*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_GOC;
3360*4882a593Smuzhiyun }
3361*4882a593Smuzhiyun break;
3362*4882a593Smuzhiyun case RK_ISP2X_RAWNR_ID:
3363*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_RAWNR_ID)) {
3364*4882a593Smuzhiyun if(isp20_other_result->rawnr.rawnr_en) {
3365*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_RAWNR;
3366*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_RAWNR;
3367*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWNR;
3368*4882a593Smuzhiyun } else {
3369*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_RAWNR_ID);
3370*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "rawnr algo isn't enabled, so enable module failed!");
3371*4882a593Smuzhiyun }
3372*4882a593Smuzhiyun } else {
3373*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_RAWNR;
3374*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_RAWNR;
3375*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_RAWNR;
3376*4882a593Smuzhiyun }
3377*4882a593Smuzhiyun break;
3378*4882a593Smuzhiyun case RK_ISP2X_3DLUT_ID:
3379*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_3DLUT_ID)) {
3380*4882a593Smuzhiyun if(isp20_other_result->rawnr.rawnr_en) {
3381*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_3DLUT;
3382*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_3DLUT;
3383*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_3DLUT;
3384*4882a593Smuzhiyun } else {
3385*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_3DLUT_ID);
3386*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "3dlut algo isn't enabled, so enable module failed!");
3387*4882a593Smuzhiyun }
3388*4882a593Smuzhiyun } else {
3389*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_3DLUT;
3390*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_3DLUT;
3391*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_3DLUT;
3392*4882a593Smuzhiyun }
3393*4882a593Smuzhiyun break;
3394*4882a593Smuzhiyun case RK_ISP2X_LDCH_ID:
3395*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_LDCH_ID)) {
3396*4882a593Smuzhiyun if(isp20_other_result->ldch.ldch_en) {
3397*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_LDCH;
3398*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_LDCH;
3399*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_LDCH;
3400*4882a593Smuzhiyun } else {
3401*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_LDCH_ID);
3402*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "ldch algo isn't enabled, so enable module failed!");
3403*4882a593Smuzhiyun }
3404*4882a593Smuzhiyun } else {
3405*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_LDCH;
3406*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_LDCH;
3407*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_LDCH;
3408*4882a593Smuzhiyun }
3409*4882a593Smuzhiyun break;
3410*4882a593Smuzhiyun case RK_ISP2X_GIC_ID:
3411*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_GIC_ID)) {
3412*4882a593Smuzhiyun if(isp20_other_result->gic.gic_en) {
3413*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_GIC;
3414*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GIC;
3415*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_GIC;
3416*4882a593Smuzhiyun } else {
3417*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_GIC_ID);
3418*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "gic algo isn't enabled, so enable module failed!");
3419*4882a593Smuzhiyun }
3420*4882a593Smuzhiyun } else {
3421*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_GIC;
3422*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GIC;
3423*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_GIC;
3424*4882a593Smuzhiyun }
3425*4882a593Smuzhiyun break;
3426*4882a593Smuzhiyun case RK_ISP2X_GAIN_ID:
3427*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_GAIN_ID)) {
3428*4882a593Smuzhiyun if(isp20_other_result->gain_config.gain_table_en) {
3429*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_GAIN;
3430*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GAIN;
3431*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_GAIN;
3432*4882a593Smuzhiyun } else {
3433*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_GAIN_ID);
3434*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "gain algo isn't enabled, so enable module failed!");
3435*4882a593Smuzhiyun }
3436*4882a593Smuzhiyun } else {
3437*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_GAIN;
3438*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_GAIN;
3439*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_GAIN;
3440*4882a593Smuzhiyun }
3441*4882a593Smuzhiyun break;
3442*4882a593Smuzhiyun case RK_ISP2X_DHAZ_ID:
3443*4882a593Smuzhiyun if (getModuleForceEn(RK_ISP2X_DHAZ_ID)) {
3444*4882a593Smuzhiyun if(isp20_other_result->adhaz.enable) {
3445*4882a593Smuzhiyun isp_cfg.module_ens |= ISP2X_MODULE_DHAZ;
3446*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_DHAZ;
3447*4882a593Smuzhiyun isp_cfg.module_cfg_update |= ISP2X_MODULE_DHAZ;
3448*4882a593Smuzhiyun } else {
3449*4882a593Smuzhiyun setModuleForceFlagInverse(RK_ISP2X_DHAZ_ID);
3450*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "dehaze algo isn't enabled, so enable module failed!");
3451*4882a593Smuzhiyun }
3452*4882a593Smuzhiyun } else {
3453*4882a593Smuzhiyun isp_cfg.module_ens &= ~ISP2X_MODULE_DHAZ;
3454*4882a593Smuzhiyun isp_cfg.module_en_update |= ISP2X_MODULE_DHAZ;
3455*4882a593Smuzhiyun isp_cfg.module_cfg_update &= ~ISP2X_MODULE_DHAZ;
3456*4882a593Smuzhiyun }
3457*4882a593Smuzhiyun break;
3458*4882a593Smuzhiyun }
3459*4882a593Smuzhiyun }
3460*4882a593Smuzhiyun }
3461*4882a593Smuzhiyun updateIspModuleForceEns(isp_cfg.module_ens);
3462*4882a593Smuzhiyun }
3463*4882a593Smuzhiyun #endif
3464*4882a593Smuzhiyun
3465*4882a593Smuzhiyun void
hdrtmoGetLumaInfo(rk_aiq_luma_params_t * Next,rk_aiq_luma_params_t * Cur,s32 frameNum,int PixelNumBlock,float blc,float * luma)3466*4882a593Smuzhiyun Isp20Params::hdrtmoGetLumaInfo(rk_aiq_luma_params_t * Next, rk_aiq_luma_params_t *Cur,
3467*4882a593Smuzhiyun s32 frameNum, int PixelNumBlock, float blc, float *luma)
3468*4882a593Smuzhiyun {
3469*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "PixelNumBlock:%d blc:%f\n", PixelNumBlock, blc);
3470*4882a593Smuzhiyun
3471*4882a593Smuzhiyun float nextSLuma[16] ;
3472*4882a593Smuzhiyun float curSLuma[16] ;
3473*4882a593Smuzhiyun float nextMLuma[16] ;
3474*4882a593Smuzhiyun float curMLuma[16] ;
3475*4882a593Smuzhiyun float nextLLuma[16];
3476*4882a593Smuzhiyun float curLLuma[16];
3477*4882a593Smuzhiyun
3478*4882a593Smuzhiyun if (frameNum == 1)
3479*4882a593Smuzhiyun {
3480*4882a593Smuzhiyun for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++) {
3481*4882a593Smuzhiyun nextLLuma[i] = 0;
3482*4882a593Smuzhiyun curLLuma[i] = 0;
3483*4882a593Smuzhiyun nextMLuma[i] = 0;
3484*4882a593Smuzhiyun curMLuma[i] = 0;
3485*4882a593Smuzhiyun nextSLuma[i] = (float)Next->luma[0][i];
3486*4882a593Smuzhiyun nextSLuma[i] /= (float)PixelNumBlock;
3487*4882a593Smuzhiyun nextSLuma[i] -= blc;
3488*4882a593Smuzhiyun curSLuma[i] = (float)Cur->luma[0][i];
3489*4882a593Smuzhiyun curSLuma[i] /= (float)PixelNumBlock;
3490*4882a593Smuzhiyun curSLuma[i] -= blc;
3491*4882a593Smuzhiyun }
3492*4882a593Smuzhiyun } else if (frameNum == 2) {
3493*4882a593Smuzhiyun for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++) {
3494*4882a593Smuzhiyun nextSLuma[i] = (float)Next->luma[1][i];
3495*4882a593Smuzhiyun nextSLuma[i] /= (float)PixelNumBlock;
3496*4882a593Smuzhiyun nextSLuma[i] -= blc;
3497*4882a593Smuzhiyun curSLuma[i] = (float)Cur->luma[1][i];
3498*4882a593Smuzhiyun curSLuma[i] /= (float)PixelNumBlock;
3499*4882a593Smuzhiyun curSLuma[i] -= blc;
3500*4882a593Smuzhiyun nextMLuma[i] = 0;
3501*4882a593Smuzhiyun curMLuma[i] = 0;
3502*4882a593Smuzhiyun nextLLuma[i] = (float)Next->luma[0][i];
3503*4882a593Smuzhiyun nextLLuma[i] /= (float)PixelNumBlock;
3504*4882a593Smuzhiyun nextLLuma[i] -= blc;
3505*4882a593Smuzhiyun curLLuma[i] = (float)Cur->luma[0][i];
3506*4882a593Smuzhiyun curLLuma[i] /= (float)PixelNumBlock;
3507*4882a593Smuzhiyun curLLuma[i] -= blc;
3508*4882a593Smuzhiyun }
3509*4882a593Smuzhiyun } else if (frameNum == 3) {
3510*4882a593Smuzhiyun
3511*4882a593Smuzhiyun for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++) {
3512*4882a593Smuzhiyun nextSLuma[i] = (float)Next->luma[2][i];
3513*4882a593Smuzhiyun nextSLuma[i] /= (float)PixelNumBlock;
3514*4882a593Smuzhiyun nextSLuma[i] -= blc;
3515*4882a593Smuzhiyun curSLuma[i] = (float)Cur->luma[2][i];
3516*4882a593Smuzhiyun curSLuma[i] /= (float)PixelNumBlock;
3517*4882a593Smuzhiyun curSLuma[i] -= blc;
3518*4882a593Smuzhiyun nextMLuma[i] = (float)Next->luma[1][i];
3519*4882a593Smuzhiyun nextMLuma[i] /= (float)PixelNumBlock;
3520*4882a593Smuzhiyun nextMLuma[i] -= blc;
3521*4882a593Smuzhiyun curMLuma[i] = (float)Cur->luma[1][i];
3522*4882a593Smuzhiyun curMLuma[i] /= (float)PixelNumBlock;
3523*4882a593Smuzhiyun curMLuma[i] -= blc;
3524*4882a593Smuzhiyun nextLLuma[i] = (float)Next->luma[0][i];
3525*4882a593Smuzhiyun nextLLuma[i] /= (float)PixelNumBlock;
3526*4882a593Smuzhiyun nextLLuma[i] -= blc;
3527*4882a593Smuzhiyun curLLuma[i] = (float)Cur->luma[0][i];
3528*4882a593Smuzhiyun curLLuma[i] /= (float)PixelNumBlock;
3529*4882a593Smuzhiyun curLLuma[i] -= blc;
3530*4882a593Smuzhiyun }
3531*4882a593Smuzhiyun }
3532*4882a593Smuzhiyun
3533*4882a593Smuzhiyun for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++) {
3534*4882a593Smuzhiyun luma[i] = curSLuma[i];
3535*4882a593Smuzhiyun luma[i + 16] = curMLuma[i];
3536*4882a593Smuzhiyun luma[i + 32] = curLLuma[i];
3537*4882a593Smuzhiyun luma[i + 48] = nextSLuma[i];
3538*4882a593Smuzhiyun luma[i + 64] = nextMLuma[i];
3539*4882a593Smuzhiyun luma[i + 80] = nextLLuma[i];
3540*4882a593Smuzhiyun }
3541*4882a593Smuzhiyun }
3542*4882a593Smuzhiyun
3543*4882a593Smuzhiyun void
hdrtmoGetAeInfo(RKAiqAecExpInfo_t * Next,RKAiqAecExpInfo_t * Cur,s32 frameNum,float * expo)3544*4882a593Smuzhiyun Isp20Params::hdrtmoGetAeInfo(RKAiqAecExpInfo_t* Next, RKAiqAecExpInfo_t* Cur, s32 frameNum, float* expo)
3545*4882a593Smuzhiyun {
3546*4882a593Smuzhiyun float nextLExpo = 0;
3547*4882a593Smuzhiyun float curLExpo = 0;
3548*4882a593Smuzhiyun float nextMExpo = 0;
3549*4882a593Smuzhiyun float curMExpo = 0;
3550*4882a593Smuzhiyun float nextSExpo = 0;
3551*4882a593Smuzhiyun float curSExpo = 0;
3552*4882a593Smuzhiyun
3553*4882a593Smuzhiyun if (frameNum == 1)
3554*4882a593Smuzhiyun {
3555*4882a593Smuzhiyun nextLExpo = 0;
3556*4882a593Smuzhiyun curLExpo = 0;
3557*4882a593Smuzhiyun nextMExpo = 0;
3558*4882a593Smuzhiyun curMExpo = 0;
3559*4882a593Smuzhiyun nextSExpo = Next->LinearExp.exp_real_params.analog_gain * \
3560*4882a593Smuzhiyun Next->LinearExp.exp_real_params.integration_time;
3561*4882a593Smuzhiyun curSExpo = Cur->LinearExp.exp_real_params.analog_gain * \
3562*4882a593Smuzhiyun Cur->LinearExp.exp_real_params.integration_time;
3563*4882a593Smuzhiyun } else if (frameNum == 2) {
3564*4882a593Smuzhiyun nextLExpo = Next->HdrExp[1].exp_real_params.analog_gain * \
3565*4882a593Smuzhiyun Next->HdrExp[1].exp_real_params.integration_time;
3566*4882a593Smuzhiyun curLExpo = Cur->HdrExp[1].exp_real_params.analog_gain * \
3567*4882a593Smuzhiyun Cur->HdrExp[1].exp_real_params.integration_time;
3568*4882a593Smuzhiyun nextMExpo = nextLExpo;
3569*4882a593Smuzhiyun curMExpo = curLExpo;
3570*4882a593Smuzhiyun nextSExpo = Next->HdrExp[0].exp_real_params.analog_gain * \
3571*4882a593Smuzhiyun Next->HdrExp[0].exp_real_params.integration_time;
3572*4882a593Smuzhiyun curSExpo = Cur->HdrExp[0].exp_real_params.analog_gain * \
3573*4882a593Smuzhiyun Cur->HdrExp[0].exp_real_params.integration_time;
3574*4882a593Smuzhiyun } else if (frameNum == 3) {
3575*4882a593Smuzhiyun nextLExpo = Next->HdrExp[2].exp_real_params.analog_gain * \
3576*4882a593Smuzhiyun Next->HdrExp[2].exp_real_params.integration_time;
3577*4882a593Smuzhiyun curLExpo = Cur->HdrExp[2].exp_real_params.analog_gain * \
3578*4882a593Smuzhiyun Cur->HdrExp[2].exp_real_params.integration_time;
3579*4882a593Smuzhiyun nextMExpo = Next->HdrExp[1].exp_real_params.analog_gain * \
3580*4882a593Smuzhiyun Next->HdrExp[1].exp_real_params.integration_time;
3581*4882a593Smuzhiyun curMExpo = Cur->HdrExp[1].exp_real_params.analog_gain * \
3582*4882a593Smuzhiyun Cur->HdrExp[1].exp_real_params.integration_time;
3583*4882a593Smuzhiyun nextSExpo = Next->HdrExp[0].exp_real_params.analog_gain * \
3584*4882a593Smuzhiyun Next->HdrExp[0].exp_real_params.integration_time;
3585*4882a593Smuzhiyun curSExpo = Cur->HdrExp[0].exp_real_params.analog_gain * \
3586*4882a593Smuzhiyun Cur->HdrExp[0].exp_real_params.integration_time;
3587*4882a593Smuzhiyun }
3588*4882a593Smuzhiyun
3589*4882a593Smuzhiyun expo[0] = curSExpo;
3590*4882a593Smuzhiyun expo[1] = curMExpo;
3591*4882a593Smuzhiyun expo[2] = curLExpo;
3592*4882a593Smuzhiyun expo[3] = nextSExpo;
3593*4882a593Smuzhiyun expo[4] = nextMExpo;
3594*4882a593Smuzhiyun expo[5] = nextLExpo;
3595*4882a593Smuzhiyun
3596*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "Cur Expo: S:%f M:%f L:%f\n", curSExpo, curMExpo, curLExpo);
3597*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "Next Expo: S:%f M:%f L:%f\n", nextSExpo, nextMExpo, nextLExpo);
3598*4882a593Smuzhiyun
3599*4882a593Smuzhiyun }
3600*4882a593Smuzhiyun
3601*4882a593Smuzhiyun bool
hdrtmoSceneStable(uint32_t frameId,int IIRMAX,int IIR,int SetWeight,s32 frameNum,float * LumaDeviation,float StableThr)3602*4882a593Smuzhiyun Isp20Params::hdrtmoSceneStable(uint32_t frameId, int IIRMAX, int IIR, int SetWeight, s32 frameNum, float *LumaDeviation, float StableThr)
3603*4882a593Smuzhiyun {
3604*4882a593Smuzhiyun bool SceneStable = true;
3605*4882a593Smuzhiyun float LumaDeviationL = 0;
3606*4882a593Smuzhiyun float LumaDeviationM = 0;
3607*4882a593Smuzhiyun float LumaDeviationS = 0;
3608*4882a593Smuzhiyun float LumaDeviationLinear = 0;
3609*4882a593Smuzhiyun float LumaDeviationFinnal = 0;
3610*4882a593Smuzhiyun
3611*4882a593Smuzhiyun //set default value when secne change or flow restart
3612*4882a593Smuzhiyun if(AntiTmoFlicker.preFrameNum != frameNum || frameId == 0) {
3613*4882a593Smuzhiyun AntiTmoFlicker.preFrameNum = 0;
3614*4882a593Smuzhiyun AntiTmoFlicker.FirstChange = false;
3615*4882a593Smuzhiyun AntiTmoFlicker.FirstChangeNum = 0;
3616*4882a593Smuzhiyun AntiTmoFlicker.FirstChangeDone = false;
3617*4882a593Smuzhiyun AntiTmoFlicker.FirstChangeDoneNum = 0;
3618*4882a593Smuzhiyun }
3619*4882a593Smuzhiyun
3620*4882a593Smuzhiyun //get LumaDeviationFinnal value
3621*4882a593Smuzhiyun if(frameNum == 1) {
3622*4882a593Smuzhiyun LumaDeviationLinear = LumaDeviation[0];
3623*4882a593Smuzhiyun LumaDeviationFinnal = LumaDeviationLinear;
3624*4882a593Smuzhiyun }
3625*4882a593Smuzhiyun else if(frameNum == 2) {
3626*4882a593Smuzhiyun LumaDeviationS = LumaDeviation[0];
3627*4882a593Smuzhiyun LumaDeviationL = LumaDeviation[1];
3628*4882a593Smuzhiyun
3629*4882a593Smuzhiyun if(LumaDeviationL > 0)
3630*4882a593Smuzhiyun LumaDeviationFinnal = LumaDeviationL;
3631*4882a593Smuzhiyun else if(LumaDeviationL == 0 && LumaDeviationS > 0)
3632*4882a593Smuzhiyun LumaDeviationFinnal = LumaDeviationS;
3633*4882a593Smuzhiyun
3634*4882a593Smuzhiyun }
3635*4882a593Smuzhiyun else if(frameNum == 3) {
3636*4882a593Smuzhiyun LumaDeviationS = LumaDeviation[0];
3637*4882a593Smuzhiyun LumaDeviationM = LumaDeviation[1];
3638*4882a593Smuzhiyun LumaDeviationL = LumaDeviation[2];
3639*4882a593Smuzhiyun
3640*4882a593Smuzhiyun if(LumaDeviationM > 0)
3641*4882a593Smuzhiyun LumaDeviationFinnal = LumaDeviationM;
3642*4882a593Smuzhiyun else if(LumaDeviationM == 0 && LumaDeviationL > 0)
3643*4882a593Smuzhiyun LumaDeviationFinnal = LumaDeviationL;
3644*4882a593Smuzhiyun else if(LumaDeviationM == 0 && LumaDeviationL == 0 && LumaDeviationS == 0)
3645*4882a593Smuzhiyun LumaDeviationFinnal = LumaDeviationS;
3646*4882a593Smuzhiyun
3647*4882a593Smuzhiyun }
3648*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "frameId:%ld LumaDeviationLinear:%f LumaDeviationS:%f LumaDeviationM:%f LumaDeviationL:%f\n",
3649*4882a593Smuzhiyun frameId, LumaDeviationLinear, LumaDeviationS, LumaDeviationM, LumaDeviationL);
3650*4882a593Smuzhiyun
3651*4882a593Smuzhiyun //skip first N frame for starting
3652*4882a593Smuzhiyun if(AntiTmoFlicker.FirstChange == false) {
3653*4882a593Smuzhiyun if(LumaDeviationFinnal) {
3654*4882a593Smuzhiyun AntiTmoFlicker.FirstChange = true;
3655*4882a593Smuzhiyun AntiTmoFlicker.FirstChangeNum = frameId;
3656*4882a593Smuzhiyun }
3657*4882a593Smuzhiyun }
3658*4882a593Smuzhiyun
3659*4882a593Smuzhiyun if(AntiTmoFlicker.FirstChangeDone == false && AntiTmoFlicker.FirstChange == true) {
3660*4882a593Smuzhiyun if(LumaDeviationFinnal == 0) {
3661*4882a593Smuzhiyun AntiTmoFlicker.FirstChangeDone = true;
3662*4882a593Smuzhiyun AntiTmoFlicker.FirstChangeDoneNum = frameId;
3663*4882a593Smuzhiyun }
3664*4882a593Smuzhiyun }
3665*4882a593Smuzhiyun
3666*4882a593Smuzhiyun //detect stable
3667*4882a593Smuzhiyun if(AntiTmoFlicker.FirstChangeDoneNum && AntiTmoFlicker.FirstChangeNum) {
3668*4882a593Smuzhiyun if(LumaDeviationFinnal <= StableThr)
3669*4882a593Smuzhiyun SceneStable = true;
3670*4882a593Smuzhiyun else
3671*4882a593Smuzhiyun SceneStable = false;
3672*4882a593Smuzhiyun }
3673*4882a593Smuzhiyun else
3674*4882a593Smuzhiyun SceneStable = true;
3675*4882a593Smuzhiyun
3676*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "preFrameNum:%d frameNum:%d FirstChange:%d FirstChangeNum:%d FirstChangeDone:%d FirstChangeDoneNum:%d\n",
3677*4882a593Smuzhiyun AntiTmoFlicker.preFrameNum, frameNum, AntiTmoFlicker.FirstChange, AntiTmoFlicker.FirstChangeNum,
3678*4882a593Smuzhiyun AntiTmoFlicker.FirstChangeDone, AntiTmoFlicker.FirstChangeDoneNum);
3679*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "LumaDeviationFinnal:%f StableThr:%f SceneStable:%d \n", LumaDeviationFinnal, StableThr, SceneStable);
3680*4882a593Smuzhiyun
3681*4882a593Smuzhiyun //store framrnum
3682*4882a593Smuzhiyun AntiTmoFlicker.preFrameNum = frameNum;
3683*4882a593Smuzhiyun
3684*4882a593Smuzhiyun return SceneStable;
3685*4882a593Smuzhiyun }
3686*4882a593Smuzhiyun
3687*4882a593Smuzhiyun s32
hdrtmoPredictK(float * luma,float * expo,s32 frameNum,PredictKPara_t * TmoPara)3688*4882a593Smuzhiyun Isp20Params::hdrtmoPredictK(float* luma, float* expo, s32 frameNum, PredictKPara_t *TmoPara)
3689*4882a593Smuzhiyun {
3690*4882a593Smuzhiyun int PredictK = 0;
3691*4882a593Smuzhiyun float PredictKfloat = 0;
3692*4882a593Smuzhiyun
3693*4882a593Smuzhiyun float curSExpo = expo[0];
3694*4882a593Smuzhiyun float curMExpo = expo[1];
3695*4882a593Smuzhiyun float curLExpo = expo[2];
3696*4882a593Smuzhiyun float nextSExpo = expo[3];
3697*4882a593Smuzhiyun float nextMExpo = expo[4];
3698*4882a593Smuzhiyun float nextLExpo = expo[5];
3699*4882a593Smuzhiyun
3700*4882a593Smuzhiyun float nextLLuma[16];
3701*4882a593Smuzhiyun float curLLuma[16];
3702*4882a593Smuzhiyun float nextSLuma[16];
3703*4882a593Smuzhiyun float curSLuma[16];
3704*4882a593Smuzhiyun float nextMLuma[16];
3705*4882a593Smuzhiyun float curMLuma[16];
3706*4882a593Smuzhiyun
3707*4882a593Smuzhiyun for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++)
3708*4882a593Smuzhiyun {
3709*4882a593Smuzhiyun curSLuma[i] = luma[i];
3710*4882a593Smuzhiyun curMLuma[i] = luma[i + 16];
3711*4882a593Smuzhiyun curLLuma[i] = luma[i + 32];
3712*4882a593Smuzhiyun nextSLuma[i] = luma[i + 48];
3713*4882a593Smuzhiyun nextMLuma[i] = luma[i + 64];
3714*4882a593Smuzhiyun nextLLuma[i] = luma[i + 80];
3715*4882a593Smuzhiyun }
3716*4882a593Smuzhiyun
3717*4882a593Smuzhiyun float correction_factor = TmoPara->correction_factor;
3718*4882a593Smuzhiyun float ratio = 1;
3719*4882a593Smuzhiyun float offset = TmoPara->correction_offset;
3720*4882a593Smuzhiyun float LongExpoRatio = 1;
3721*4882a593Smuzhiyun float ShortExpoRatio = 1;
3722*4882a593Smuzhiyun float MiddleExpoRatio = 1;
3723*4882a593Smuzhiyun float MiddleLumaChange = 1;
3724*4882a593Smuzhiyun float LongLumaChange = 1;
3725*4882a593Smuzhiyun float ShortLumaChange = 1;
3726*4882a593Smuzhiyun float EnvLvChange = 0;
3727*4882a593Smuzhiyun
3728*4882a593Smuzhiyun //get expo change
3729*4882a593Smuzhiyun if(frameNum == 3 || frameNum == 2) {
3730*4882a593Smuzhiyun if(nextLExpo != 0 && curLExpo != 0)
3731*4882a593Smuzhiyun LongExpoRatio = nextLExpo / curLExpo;
3732*4882a593Smuzhiyun else
3733*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "Wrong Long frame expo!!!");
3734*4882a593Smuzhiyun }
3735*4882a593Smuzhiyun
3736*4882a593Smuzhiyun if(frameNum == 3) {
3737*4882a593Smuzhiyun if(nextMExpo != 0 && curMExpo != 0)
3738*4882a593Smuzhiyun ShortExpoRatio = nextMExpo / curMExpo;
3739*4882a593Smuzhiyun else
3740*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "Wrong Short frame expo!!!");
3741*4882a593Smuzhiyun }
3742*4882a593Smuzhiyun
3743*4882a593Smuzhiyun if(nextSExpo != 0 && curSExpo != 0)
3744*4882a593Smuzhiyun ShortExpoRatio = nextSExpo / curSExpo;
3745*4882a593Smuzhiyun else
3746*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "Wrong Short frame expo!!!");
3747*4882a593Smuzhiyun
3748*4882a593Smuzhiyun float nextLMeanLuma = 0;
3749*4882a593Smuzhiyun float curLMeanLuma = 0;
3750*4882a593Smuzhiyun float curMMeanLuma = 0;
3751*4882a593Smuzhiyun float nextMMeanLuma = 0;
3752*4882a593Smuzhiyun float nextSMeanLuma = 0;
3753*4882a593Smuzhiyun float curSMeanLuma = 0;
3754*4882a593Smuzhiyun for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++)
3755*4882a593Smuzhiyun {
3756*4882a593Smuzhiyun nextLMeanLuma += nextLLuma[i];
3757*4882a593Smuzhiyun curLMeanLuma += curLLuma[i];
3758*4882a593Smuzhiyun nextMMeanLuma += nextMLuma[i];
3759*4882a593Smuzhiyun curMMeanLuma += curMLuma[i];
3760*4882a593Smuzhiyun nextSMeanLuma += nextSLuma[i];
3761*4882a593Smuzhiyun curSMeanLuma += curSLuma[i];
3762*4882a593Smuzhiyun }
3763*4882a593Smuzhiyun nextLMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
3764*4882a593Smuzhiyun curLMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
3765*4882a593Smuzhiyun nextMMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
3766*4882a593Smuzhiyun curMMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
3767*4882a593Smuzhiyun nextSMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
3768*4882a593Smuzhiyun curSMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
3769*4882a593Smuzhiyun
3770*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextLLuma:%f curLLuma:%f\n", nextLMeanLuma, curLMeanLuma);
3771*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextSLuma:%f curSLuma:%f\n", nextSMeanLuma, curSMeanLuma);
3772*4882a593Smuzhiyun
3773*4882a593Smuzhiyun //get luma change
3774*4882a593Smuzhiyun if(frameNum == 3 || frameNum == 2) {
3775*4882a593Smuzhiyun if(nextLMeanLuma > 0 && curLMeanLuma > 0)
3776*4882a593Smuzhiyun LongLumaChange = nextLMeanLuma / curLMeanLuma;
3777*4882a593Smuzhiyun else if(nextLMeanLuma <= 0 && curLMeanLuma > 0)
3778*4882a593Smuzhiyun {
3779*4882a593Smuzhiyun nextLMeanLuma = 1;
3780*4882a593Smuzhiyun LongLumaChange = nextLMeanLuma / curLMeanLuma;
3781*4882a593Smuzhiyun }
3782*4882a593Smuzhiyun else if(nextLMeanLuma > 0 && curLMeanLuma <= 0)
3783*4882a593Smuzhiyun {
3784*4882a593Smuzhiyun curLMeanLuma = 1;
3785*4882a593Smuzhiyun LongLumaChange = nextLMeanLuma / curLMeanLuma;
3786*4882a593Smuzhiyun }
3787*4882a593Smuzhiyun else {
3788*4882a593Smuzhiyun curLMeanLuma = 1;
3789*4882a593Smuzhiyun nextLMeanLuma = 1;
3790*4882a593Smuzhiyun LongLumaChange = nextLMeanLuma / curLMeanLuma;
3791*4882a593Smuzhiyun }
3792*4882a593Smuzhiyun }
3793*4882a593Smuzhiyun
3794*4882a593Smuzhiyun if(frameNum == 3) {
3795*4882a593Smuzhiyun if(nextMMeanLuma > 0 && curMMeanLuma > 0)
3796*4882a593Smuzhiyun MiddleLumaChange = nextMMeanLuma / curMMeanLuma;
3797*4882a593Smuzhiyun else if(nextMMeanLuma <= 0 && curMMeanLuma > 0)
3798*4882a593Smuzhiyun {
3799*4882a593Smuzhiyun nextMMeanLuma = 1;
3800*4882a593Smuzhiyun MiddleLumaChange = nextMMeanLuma / curMMeanLuma;
3801*4882a593Smuzhiyun }
3802*4882a593Smuzhiyun else if(nextMMeanLuma > 0 && curMMeanLuma <= 0)
3803*4882a593Smuzhiyun {
3804*4882a593Smuzhiyun curMMeanLuma = 1;
3805*4882a593Smuzhiyun MiddleLumaChange = nextMMeanLuma / curMMeanLuma;
3806*4882a593Smuzhiyun }
3807*4882a593Smuzhiyun else {
3808*4882a593Smuzhiyun curMMeanLuma = 1;
3809*4882a593Smuzhiyun nextMMeanLuma = 1;
3810*4882a593Smuzhiyun MiddleLumaChange = nextMMeanLuma / curMMeanLuma;
3811*4882a593Smuzhiyun }
3812*4882a593Smuzhiyun }
3813*4882a593Smuzhiyun
3814*4882a593Smuzhiyun if(nextSMeanLuma > 0 && curSMeanLuma > 0)
3815*4882a593Smuzhiyun ShortLumaChange = nextSMeanLuma / curSMeanLuma;
3816*4882a593Smuzhiyun else if(nextSMeanLuma <= 0 && curSMeanLuma > 0)
3817*4882a593Smuzhiyun {
3818*4882a593Smuzhiyun nextSMeanLuma = 1;
3819*4882a593Smuzhiyun ShortLumaChange = nextSMeanLuma / curSMeanLuma;
3820*4882a593Smuzhiyun }
3821*4882a593Smuzhiyun else if(nextSMeanLuma > 0 && curSMeanLuma <= 0)
3822*4882a593Smuzhiyun {
3823*4882a593Smuzhiyun curSMeanLuma = 1;
3824*4882a593Smuzhiyun ShortLumaChange = nextSMeanLuma / curSMeanLuma;
3825*4882a593Smuzhiyun }
3826*4882a593Smuzhiyun else {
3827*4882a593Smuzhiyun curSMeanLuma = 1;
3828*4882a593Smuzhiyun nextSMeanLuma = 1;
3829*4882a593Smuzhiyun ShortLumaChange = nextSMeanLuma / curSMeanLuma;
3830*4882a593Smuzhiyun }
3831*4882a593Smuzhiyun
3832*4882a593Smuzhiyun //cal predictK
3833*4882a593Smuzhiyun if (frameNum == 1)
3834*4882a593Smuzhiyun {
3835*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextLuma:%f curLuma:%f LumaChange:%f\n", nextSMeanLuma, curSMeanLuma, ShortLumaChange);
3836*4882a593Smuzhiyun ratio = ShortLumaChange;
3837*4882a593Smuzhiyun
3838*4882a593Smuzhiyun EnvLvChange = nextSMeanLuma / nextSExpo - curSMeanLuma / curSExpo;
3839*4882a593Smuzhiyun EnvLvChange = EnvLvChange >= 0 ? EnvLvChange : (-EnvLvChange);
3840*4882a593Smuzhiyun EnvLvChange /= curSMeanLuma / curSExpo;
3841*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextEnvLv:%f curEnvLv:%f EnvLvChange:%f\n", nextSMeanLuma / nextSExpo,
3842*4882a593Smuzhiyun curSMeanLuma / curSExpo, EnvLvChange);
3843*4882a593Smuzhiyun }
3844*4882a593Smuzhiyun else if (frameNum == 2)
3845*4882a593Smuzhiyun {
3846*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextLLuma:%f curLLuma:%f LongLumaChange:%f\n", nextLMeanLuma, curLMeanLuma, LongLumaChange);
3847*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextSLuma:%f curSLuma:%f ShortLumaChange:%f\n", nextSMeanLuma, curSMeanLuma, ShortLumaChange);
3848*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "LongPercent:%f UseLongLowTh:%f UseLongUpTh:%f\n", 1, TmoPara->UseLongLowTh, TmoPara->UseLongUpTh);
3849*4882a593Smuzhiyun
3850*4882a593Smuzhiyun if(LongLumaChange > TmoPara->UseLongLowTh || LongLumaChange < TmoPara->UseLongUpTh)
3851*4882a593Smuzhiyun ratio = LongLumaChange;
3852*4882a593Smuzhiyun else
3853*4882a593Smuzhiyun ratio = ShortLumaChange;
3854*4882a593Smuzhiyun
3855*4882a593Smuzhiyun EnvLvChange = nextLMeanLuma / nextLExpo - curLMeanLuma / curLExpo;
3856*4882a593Smuzhiyun EnvLvChange = EnvLvChange >= 0 ? EnvLvChange : (-EnvLvChange);
3857*4882a593Smuzhiyun EnvLvChange /= curLMeanLuma / curLExpo;
3858*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextEnvLv:%f curEnvLv:%f EnvLvChange:%f\n", nextLMeanLuma / nextLExpo,
3859*4882a593Smuzhiyun curLMeanLuma / curLExpo, EnvLvChange);
3860*4882a593Smuzhiyun
3861*4882a593Smuzhiyun }
3862*4882a593Smuzhiyun else if (frameNum == 3)
3863*4882a593Smuzhiyun {
3864*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextLLuma:%f curLLuma:%f LongLumaChange:%f\n", nextLMeanLuma, curLMeanLuma, LongLumaChange);
3865*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextMLuma:%f curMLuma:%f MiddleLumaChange:%f\n", nextMMeanLuma, curMMeanLuma, MiddleLumaChange);
3866*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextSLuma:%f curSLuma:%f ShortLumaChange:%f\n", nextSMeanLuma, curSMeanLuma, ShortLumaChange);
3867*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "LongPercent:%f UseLongLowTh:%f UseLongUpTh:%f\n", TmoPara->Hdr3xLongPercent,
3868*4882a593Smuzhiyun TmoPara->UseLongLowTh, TmoPara->UseLongUpTh);
3869*4882a593Smuzhiyun
3870*4882a593Smuzhiyun float LongLumaChangeNew = TmoPara->Hdr3xLongPercent * LongLumaChange + (1 - TmoPara->Hdr3xLongPercent) * MiddleLumaChange;
3871*4882a593Smuzhiyun if(LongLumaChangeNew > TmoPara->UseLongLowTh || LongLumaChangeNew < TmoPara->UseLongUpTh)
3872*4882a593Smuzhiyun ratio = LongLumaChangeNew;
3873*4882a593Smuzhiyun else
3874*4882a593Smuzhiyun ratio = ShortLumaChange;
3875*4882a593Smuzhiyun
3876*4882a593Smuzhiyun EnvLvChange = nextMMeanLuma / nextMExpo - curMMeanLuma / curMExpo;
3877*4882a593Smuzhiyun EnvLvChange = EnvLvChange >= 0 ? EnvLvChange : (-EnvLvChange);
3878*4882a593Smuzhiyun EnvLvChange /= curMMeanLuma / curMExpo;
3879*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextEnvLv:%f curEnvLv:%f EnvLvChange:%f\n", nextMMeanLuma / nextMExpo,
3880*4882a593Smuzhiyun curMMeanLuma / curMExpo, EnvLvChange);
3881*4882a593Smuzhiyun }
3882*4882a593Smuzhiyun
3883*4882a593Smuzhiyun if(ratio >= 1)
3884*4882a593Smuzhiyun PredictKfloat = log(correction_factor * ratio + offset) / log(2);
3885*4882a593Smuzhiyun else if(ratio < 1 && ratio > 0)
3886*4882a593Smuzhiyun {
3887*4882a593Smuzhiyun float tmp = ratio / correction_factor - offset;
3888*4882a593Smuzhiyun tmp = tmp >= 1 ? 1 : tmp <= 0 ? 0.00001 : tmp;
3889*4882a593Smuzhiyun PredictKfloat = log(tmp) / log(2);
3890*4882a593Smuzhiyun }
3891*4882a593Smuzhiyun else
3892*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "Wrong luma change!!!");
3893*4882a593Smuzhiyun
3894*4882a593Smuzhiyun //add EnvLv judge
3895*4882a593Smuzhiyun if(EnvLvChange > 0.005) {
3896*4882a593Smuzhiyun float tmp = curLMeanLuma - nextLMeanLuma;
3897*4882a593Smuzhiyun tmp = tmp >= 0 ? tmp : (-tmp);
3898*4882a593Smuzhiyun if(tmp < 1)
3899*4882a593Smuzhiyun PredictKfloat = 0;
3900*4882a593Smuzhiyun }
3901*4882a593Smuzhiyun else
3902*4882a593Smuzhiyun PredictKfloat = 0;
3903*4882a593Smuzhiyun
3904*4882a593Smuzhiyun PredictKfloat *= 2048;
3905*4882a593Smuzhiyun PredictK = (int)PredictKfloat;
3906*4882a593Smuzhiyun
3907*4882a593Smuzhiyun LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "ratio:%f EnvLvChange:%f PredictKfloat:%f PredictK:%d\n",
3908*4882a593Smuzhiyun ratio, EnvLvChange, PredictKfloat, PredictK);
3909*4882a593Smuzhiyun return PredictK;
3910*4882a593Smuzhiyun }
3911*4882a593Smuzhiyun
convert3aResultsToIspCfg(SmartPtr<cam3aResult> & result,void * isp_cfg_p,bool is_multi_isp)3912*4882a593Smuzhiyun bool Isp20Params::convert3aResultsToIspCfg(SmartPtr<cam3aResult> &result,
3913*4882a593Smuzhiyun void* isp_cfg_p, bool is_multi_isp)
3914*4882a593Smuzhiyun {
3915*4882a593Smuzhiyun struct isp2x_isp_params_cfg& isp_cfg = *(struct isp2x_isp_params_cfg*)isp_cfg_p;
3916*4882a593Smuzhiyun
3917*4882a593Smuzhiyun if (result.ptr() == NULL) {
3918*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "3A result empty");
3919*4882a593Smuzhiyun return false;
3920*4882a593Smuzhiyun }
3921*4882a593Smuzhiyun
3922*4882a593Smuzhiyun int32_t type = result->getType();
3923*4882a593Smuzhiyun // LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, module (0x%x) convert params!\n", __FUNCTION__, type);
3924*4882a593Smuzhiyun switch (type)
3925*4882a593Smuzhiyun {
3926*4882a593Smuzhiyun case RESULT_TYPE_AEC_PARAM:
3927*4882a593Smuzhiyun {
3928*4882a593Smuzhiyun RkAiqIspAecParamsProxy* params = result.get_cast_ptr<RkAiqIspAecParamsProxy>();
3929*4882a593Smuzhiyun if (params) {
3930*4882a593Smuzhiyun convertAiqAeToIsp20Params(isp_cfg, params->data()->result);
3931*4882a593Smuzhiyun }
3932*4882a593Smuzhiyun }
3933*4882a593Smuzhiyun break;
3934*4882a593Smuzhiyun case RESULT_TYPE_HIST_PARAM:
3935*4882a593Smuzhiyun {
3936*4882a593Smuzhiyun
3937*4882a593Smuzhiyun RkAiqIspHistParamsProxy* params = result.get_cast_ptr<RkAiqIspHistParamsProxy>();
3938*4882a593Smuzhiyun if (params)
3939*4882a593Smuzhiyun convertAiqHistToIsp20Params(isp_cfg, params->data()->result);
3940*4882a593Smuzhiyun }
3941*4882a593Smuzhiyun case RESULT_TYPE_EXPOSURE_PARAM:
3942*4882a593Smuzhiyun {
3943*4882a593Smuzhiyun // TODO
3944*4882a593Smuzhiyun }
3945*4882a593Smuzhiyun break;
3946*4882a593Smuzhiyun case RESULT_TYPE_AWB_PARAM:
3947*4882a593Smuzhiyun {
3948*4882a593Smuzhiyun #if RKAIQ_HAVE_AWB_V20
3949*4882a593Smuzhiyun RkAiqIspAwbParamsProxy* params = result.get_cast_ptr<RkAiqIspAwbParamsProxy>();
3950*4882a593Smuzhiyun if (params)
3951*4882a593Smuzhiyun convertAiqAwbToIsp20Params(isp_cfg, params->data()->result, true);
3952*4882a593Smuzhiyun #endif
3953*4882a593Smuzhiyun }
3954*4882a593Smuzhiyun break;
3955*4882a593Smuzhiyun case RESULT_TYPE_AWBGAIN_PARAM:
3956*4882a593Smuzhiyun {
3957*4882a593Smuzhiyun RkAiqIspAwbGainParamsProxy* awb_gain = result.get_cast_ptr<RkAiqIspAwbGainParamsProxy>();
3958*4882a593Smuzhiyun if (awb_gain && mBlcResult) {
3959*4882a593Smuzhiyun RkAiqIspBlcParamsProxy* blc = dynamic_cast<RkAiqIspBlcParamsProxy*>(mBlcResult);
3960*4882a593Smuzhiyun convertAiqAwbGainToIsp20Params(isp_cfg,
3961*4882a593Smuzhiyun awb_gain->data()->result, blc->data()->result, true);
3962*4882a593Smuzhiyun
3963*4882a593Smuzhiyun } else
3964*4882a593Smuzhiyun LOGE("don't get %s params, convert awbgain params failed!",
3965*4882a593Smuzhiyun awb_gain ? "blc" : "awb_gain");
3966*4882a593Smuzhiyun }
3967*4882a593Smuzhiyun break;
3968*4882a593Smuzhiyun case RESULT_TYPE_AF_PARAM:
3969*4882a593Smuzhiyun {
3970*4882a593Smuzhiyun #if RKAIQ_HAVE_AF_V20 || RKAIQ_ONLY_AF_STATS_V20
3971*4882a593Smuzhiyun RkAiqIspAfParamsProxy* params = result.get_cast_ptr<RkAiqIspAfParamsProxy>();
3972*4882a593Smuzhiyun if (params)
3973*4882a593Smuzhiyun convertAiqAfToIsp20Params(isp_cfg, params->data()->result, true);
3974*4882a593Smuzhiyun #endif
3975*4882a593Smuzhiyun }
3976*4882a593Smuzhiyun break;
3977*4882a593Smuzhiyun case RESULT_TYPE_DPCC_PARAM:
3978*4882a593Smuzhiyun {
3979*4882a593Smuzhiyun RkAiqIspDpccParamsProxy* params = result.get_cast_ptr<RkAiqIspDpccParamsProxy>();
3980*4882a593Smuzhiyun if (params)
3981*4882a593Smuzhiyun convertAiqDpccToIsp20Params(isp_cfg, params->data()->result);
3982*4882a593Smuzhiyun }
3983*4882a593Smuzhiyun break;
3984*4882a593Smuzhiyun case RESULT_TYPE_MERGE_PARAM:
3985*4882a593Smuzhiyun {
3986*4882a593Smuzhiyun #if RKAIQ_HAVE_MERGE_V10
3987*4882a593Smuzhiyun RkAiqIspMergeParamsProxy* params = result.get_cast_ptr<RkAiqIspMergeParamsProxy>();
3988*4882a593Smuzhiyun if (params) {
3989*4882a593Smuzhiyun convertAiqMergeToIsp20Params(isp_cfg, params->data()->result);
3990*4882a593Smuzhiyun }
3991*4882a593Smuzhiyun #endif
3992*4882a593Smuzhiyun }
3993*4882a593Smuzhiyun break;
3994*4882a593Smuzhiyun case RESULT_TYPE_TMO_PARAM:
3995*4882a593Smuzhiyun {
3996*4882a593Smuzhiyun RkAiqIspTmoParamsProxy* params = result.get_cast_ptr<RkAiqIspTmoParamsProxy>();
3997*4882a593Smuzhiyun if (params) {
3998*4882a593Smuzhiyun convertAiqTmoToIsp20Params(isp_cfg, params->data()->result);
3999*4882a593Smuzhiyun }
4000*4882a593Smuzhiyun }
4001*4882a593Smuzhiyun break;
4002*4882a593Smuzhiyun case RESULT_TYPE_CCM_PARAM:
4003*4882a593Smuzhiyun {
4004*4882a593Smuzhiyun #if RKAIQ_HAVE_CCM_V1
4005*4882a593Smuzhiyun RkAiqIspCcmParamsProxy* params = result.get_cast_ptr<RkAiqIspCcmParamsProxy>();
4006*4882a593Smuzhiyun if (params)
4007*4882a593Smuzhiyun convertAiqCcmToIsp20Params(isp_cfg, params->data()->result);
4008*4882a593Smuzhiyun #endif
4009*4882a593Smuzhiyun }
4010*4882a593Smuzhiyun break;
4011*4882a593Smuzhiyun case RESULT_TYPE_LSC_PARAM:
4012*4882a593Smuzhiyun {
4013*4882a593Smuzhiyun #ifdef RKAIQ_HAVE_LSC_V1
4014*4882a593Smuzhiyun RkAiqIspLscParamsProxy* params = result.get_cast_ptr<RkAiqIspLscParamsProxy>();
4015*4882a593Smuzhiyun if (params)
4016*4882a593Smuzhiyun convertAiqLscToIsp20Params(isp_cfg, params->data()->result);
4017*4882a593Smuzhiyun #endif
4018*4882a593Smuzhiyun }
4019*4882a593Smuzhiyun break;
4020*4882a593Smuzhiyun case RESULT_TYPE_BLC_PARAM:
4021*4882a593Smuzhiyun {
4022*4882a593Smuzhiyun RkAiqIspBlcParamsProxy* params = result.get_cast_ptr<RkAiqIspBlcParamsProxy>();
4023*4882a593Smuzhiyun if (params)
4024*4882a593Smuzhiyun convertAiqBlcToIsp20Params(isp_cfg, params->data()->result);
4025*4882a593Smuzhiyun }
4026*4882a593Smuzhiyun break;
4027*4882a593Smuzhiyun case RESULT_TYPE_RAWNR_PARAM:
4028*4882a593Smuzhiyun {
4029*4882a593Smuzhiyun #if RKAIQ_HAVE_ANR_V1
4030*4882a593Smuzhiyun RkAiqIspRawnrParamsProxy* params = result.get_cast_ptr<RkAiqIspRawnrParamsProxy>();
4031*4882a593Smuzhiyun if (params)
4032*4882a593Smuzhiyun convertAiqRawnrToIsp20Params(isp_cfg, params->data()->result);
4033*4882a593Smuzhiyun #endif
4034*4882a593Smuzhiyun }
4035*4882a593Smuzhiyun break;
4036*4882a593Smuzhiyun case RESULT_TYPE_GIC_PARAM:
4037*4882a593Smuzhiyun {
4038*4882a593Smuzhiyun RkAiqIspGicParamsProxy* params = result.get_cast_ptr<RkAiqIspGicParamsProxy>();
4039*4882a593Smuzhiyun if (params)
4040*4882a593Smuzhiyun convertAiqGicToIsp20Params(isp_cfg, params->data()->result);
4041*4882a593Smuzhiyun }
4042*4882a593Smuzhiyun break;
4043*4882a593Smuzhiyun case RESULT_TYPE_DEBAYER_PARAM:
4044*4882a593Smuzhiyun {
4045*4882a593Smuzhiyun RkAiqIspDebayerParamsProxy* params = result.get_cast_ptr<RkAiqIspDebayerParamsProxy>();
4046*4882a593Smuzhiyun if (params)
4047*4882a593Smuzhiyun convertAiqAdemosaicToIsp20Params(isp_cfg, params->data()->result);
4048*4882a593Smuzhiyun }
4049*4882a593Smuzhiyun break;
4050*4882a593Smuzhiyun case RESULT_TYPE_LDCH_PARAM:
4051*4882a593Smuzhiyun {
4052*4882a593Smuzhiyun RkAiqIspLdchParamsProxy* params = result.get_cast_ptr<RkAiqIspLdchParamsProxy>();
4053*4882a593Smuzhiyun if (params)
4054*4882a593Smuzhiyun convertAiqAldchToIsp20Params(isp_cfg, params->data()->result);
4055*4882a593Smuzhiyun }
4056*4882a593Smuzhiyun break;
4057*4882a593Smuzhiyun case RESULT_TYPE_LUT3D_PARAM:
4058*4882a593Smuzhiyun {
4059*4882a593Smuzhiyun #if RKAIQ_HAVE_3DLUT_V1
4060*4882a593Smuzhiyun RkAiqIspLut3dParamsProxy* params = result.get_cast_ptr<RkAiqIspLut3dParamsProxy>();
4061*4882a593Smuzhiyun if (params)
4062*4882a593Smuzhiyun convertAiqA3dlutToIsp20Params(isp_cfg, params->data()->result);
4063*4882a593Smuzhiyun #endif
4064*4882a593Smuzhiyun }
4065*4882a593Smuzhiyun break;
4066*4882a593Smuzhiyun case RESULT_TYPE_DEHAZE_PARAM:
4067*4882a593Smuzhiyun {
4068*4882a593Smuzhiyun #if RKAIQ_HAVE_DEHAZE_V10
4069*4882a593Smuzhiyun RkAiqIspDehazeParamsProxy* params = result.get_cast_ptr<RkAiqIspDehazeParamsProxy>();
4070*4882a593Smuzhiyun if (params)
4071*4882a593Smuzhiyun convertAiqAdehazeToIsp20Params(isp_cfg, params->data()->result);
4072*4882a593Smuzhiyun #endif
4073*4882a593Smuzhiyun }
4074*4882a593Smuzhiyun break;
4075*4882a593Smuzhiyun case RESULT_TYPE_AGAMMA_PARAM:
4076*4882a593Smuzhiyun {
4077*4882a593Smuzhiyun #if RKAIQ_HAVE_GAMMA_V10
4078*4882a593Smuzhiyun RkAiqIspAgammaParamsProxy* params = result.get_cast_ptr<RkAiqIspAgammaParamsProxy>();
4079*4882a593Smuzhiyun if (params)
4080*4882a593Smuzhiyun convertAiqAgammaToIsp20Params(isp_cfg, params->data()->result);
4081*4882a593Smuzhiyun #endif
4082*4882a593Smuzhiyun }
4083*4882a593Smuzhiyun break;
4084*4882a593Smuzhiyun case RESULT_TYPE_ADEGAMMA_PARAM:
4085*4882a593Smuzhiyun {
4086*4882a593Smuzhiyun RkAiqIspAdegammaParamsProxy* params = result.get_cast_ptr<RkAiqIspAdegammaParamsProxy>();
4087*4882a593Smuzhiyun if (params)
4088*4882a593Smuzhiyun convertAiqAdegammaToIsp20Params(isp_cfg, params->data()->result);
4089*4882a593Smuzhiyun }
4090*4882a593Smuzhiyun break;
4091*4882a593Smuzhiyun case RESULT_TYPE_WDR_PARAM:
4092*4882a593Smuzhiyun #if 0
4093*4882a593Smuzhiyun {
4094*4882a593Smuzhiyun SmartPtr<RkAiqIspWdrParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspWdrParamsProxy>();
4095*4882a593Smuzhiyun if (params.ptr())
4096*4882a593Smuzhiyun convertAiqWdrToIsp20Params(isp_cfg, params->data()->result);
4097*4882a593Smuzhiyun }
4098*4882a593Smuzhiyun #endif
4099*4882a593Smuzhiyun break;
4100*4882a593Smuzhiyun case RESULT_TYPE_CSM_PARAM:
4101*4882a593Smuzhiyun #if 0
4102*4882a593Smuzhiyun {
4103*4882a593Smuzhiyun SmartPtr<RkAiqIspCsmParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspCsmParamsProxy>();
4104*4882a593Smuzhiyun if (params.ptr())
4105*4882a593Smuzhiyun convertAiqToIsp20Params(isp_cfg, params->data()->result);
4106*4882a593Smuzhiyun }
4107*4882a593Smuzhiyun #endif
4108*4882a593Smuzhiyun break;
4109*4882a593Smuzhiyun case RESULT_TYPE_CGC_PARAM:
4110*4882a593Smuzhiyun break;
4111*4882a593Smuzhiyun case RESULT_TYPE_CONV422_PARAM:
4112*4882a593Smuzhiyun break;
4113*4882a593Smuzhiyun case RESULT_TYPE_YUVCONV_PARAM:
4114*4882a593Smuzhiyun break;
4115*4882a593Smuzhiyun case RESULT_TYPE_GAIN_PARAM:
4116*4882a593Smuzhiyun {
4117*4882a593Smuzhiyun RkAiqIspGainParamsProxy* params = result.get_cast_ptr<RkAiqIspGainParamsProxy>();
4118*4882a593Smuzhiyun if (params)
4119*4882a593Smuzhiyun convertAiqGainToIsp20Params(isp_cfg, params->data()->result);
4120*4882a593Smuzhiyun }
4121*4882a593Smuzhiyun break;
4122*4882a593Smuzhiyun case RESULT_TYPE_CP_PARAM:
4123*4882a593Smuzhiyun {
4124*4882a593Smuzhiyun #if RKAIQ_HAVE_ACP_V10
4125*4882a593Smuzhiyun RkAiqIspCpParamsProxy* params = result.get_cast_ptr<RkAiqIspCpParamsProxy>();
4126*4882a593Smuzhiyun if (params)
4127*4882a593Smuzhiyun convertAiqCpToIsp20Params(isp_cfg, params->data()->result);
4128*4882a593Smuzhiyun #endif
4129*4882a593Smuzhiyun }
4130*4882a593Smuzhiyun break;
4131*4882a593Smuzhiyun case RESULT_TYPE_IE_PARAM:
4132*4882a593Smuzhiyun {
4133*4882a593Smuzhiyun #if RKAIQ_HAVE_AIE_V10
4134*4882a593Smuzhiyun RkAiqIspIeParamsProxy* params = result.get_cast_ptr<RkAiqIspIeParamsProxy>();
4135*4882a593Smuzhiyun if (params)
4136*4882a593Smuzhiyun convertAiqIeToIsp20Params(isp_cfg, params->data()->result);
4137*4882a593Smuzhiyun #endif
4138*4882a593Smuzhiyun }
4139*4882a593Smuzhiyun break;
4140*4882a593Smuzhiyun default:
4141*4882a593Smuzhiyun LOGE("unknown param type: 0x%x!", type);
4142*4882a593Smuzhiyun return false;
4143*4882a593Smuzhiyun }
4144*4882a593Smuzhiyun
4145*4882a593Smuzhiyun /*
4146*4882a593Smuzhiyun * cam3aResultList &list = _cam3aConfig[result->getFrameId()];
4147*4882a593Smuzhiyun * list.push_back(result);
4148*4882a593Smuzhiyun */
4149*4882a593Smuzhiyun
4150*4882a593Smuzhiyun return true;
4151*4882a593Smuzhiyun }
4152*4882a593Smuzhiyun
merge_isp_results(cam3aResultList & results,void * isp_cfg,bool is_multi_isp)4153*4882a593Smuzhiyun XCamReturn Isp20Params::merge_isp_results(cam3aResultList &results, void* isp_cfg, bool is_multi_isp)
4154*4882a593Smuzhiyun {
4155*4882a593Smuzhiyun if (results.empty())
4156*4882a593Smuzhiyun return XCAM_RETURN_ERROR_PARAM;
4157*4882a593Smuzhiyun
4158*4882a593Smuzhiyun mBlcResult = get_3a_result(results, RESULT_TYPE_BLC_PARAM).ptr();
4159*4882a593Smuzhiyun
4160*4882a593Smuzhiyun LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, isp cam3a results size: %d\n", __FUNCTION__, results.size());
4161*4882a593Smuzhiyun for (cam3aResultList::iterator iter = results.begin ();
4162*4882a593Smuzhiyun iter != results.end (); iter++)
4163*4882a593Smuzhiyun {
4164*4882a593Smuzhiyun SmartPtr<cam3aResult> &cam3a_result = *iter;
4165*4882a593Smuzhiyun
4166*4882a593Smuzhiyun convert3aResultsToIspCfg(cam3a_result, isp_cfg, is_multi_isp);
4167*4882a593Smuzhiyun }
4168*4882a593Smuzhiyun results.clear();
4169*4882a593Smuzhiyun return XCAM_RETURN_NO_ERROR;
4170*4882a593Smuzhiyun }
4171*4882a593Smuzhiyun
4172*4882a593Smuzhiyun template<>
merge_results(cam3aResultList & results,struct rkispp_params_nrcfg & pp_cfg)4173*4882a593Smuzhiyun XCamReturn Isp20Params::merge_results<struct rkispp_params_nrcfg>(cam3aResultList &results, struct rkispp_params_nrcfg &pp_cfg)
4174*4882a593Smuzhiyun {
4175*4882a593Smuzhiyun if (results.empty())
4176*4882a593Smuzhiyun return XCAM_RETURN_ERROR_PARAM;
4177*4882a593Smuzhiyun
4178*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, pp cam3a results size: %d\n", __FUNCTION__, results.size());
4179*4882a593Smuzhiyun
4180*4882a593Smuzhiyun RkAiqIspSharpenParamsProxy* sharpen = nullptr;
4181*4882a593Smuzhiyun RkAiqIspEdgefltParamsProxy* edgeflt = nullptr;
4182*4882a593Smuzhiyun
4183*4882a593Smuzhiyun for (cam3aResultList::iterator iter = results.begin ();
4184*4882a593Smuzhiyun iter != results.end ();)
4185*4882a593Smuzhiyun {
4186*4882a593Smuzhiyun SmartPtr<cam3aResult> &cam3a_result = *iter;
4187*4882a593Smuzhiyun
4188*4882a593Smuzhiyun if (cam3a_result->getType() == RESULT_TYPE_SHARPEN_PARAM || \
4189*4882a593Smuzhiyun cam3a_result->getType() == RESULT_TYPE_EDGEFLT_PARAM) {
4190*4882a593Smuzhiyun if (cam3a_result->getType() == RESULT_TYPE_SHARPEN_PARAM)
4191*4882a593Smuzhiyun sharpen = cam3a_result.get_cast_ptr<RkAiqIspSharpenParamsProxy>();
4192*4882a593Smuzhiyun else if (cam3a_result->getType() == RESULT_TYPE_EDGEFLT_PARAM)
4193*4882a593Smuzhiyun edgeflt = cam3a_result.get_cast_ptr<RkAiqIspEdgefltParamsProxy>();
4194*4882a593Smuzhiyun #if RKAIQ_HAVE_ANR_V1
4195*4882a593Smuzhiyun if (sharpen && edgeflt)
4196*4882a593Smuzhiyun convertAiqSharpenToIsp20Params(pp_cfg, sharpen->data()->result, edgeflt->data()->result);
4197*4882a593Smuzhiyun
4198*4882a593Smuzhiyun iter = results.erase (iter);
4199*4882a593Smuzhiyun #endif
4200*4882a593Smuzhiyun continue;
4201*4882a593Smuzhiyun }
4202*4882a593Smuzhiyun if (cam3a_result->getType() == RESULT_TYPE_UVNR_PARAM) {
4203*4882a593Smuzhiyun RkAiqIspUvnrParamsProxy* uvnr = cam3a_result.get_cast_ptr<RkAiqIspUvnrParamsProxy>();
4204*4882a593Smuzhiyun #if RKAIQ_HAVE_ANR_V1
4205*4882a593Smuzhiyun convertAiqUvnrToIsp20Params(pp_cfg, uvnr->data()->result);
4206*4882a593Smuzhiyun iter = results.erase (iter);
4207*4882a593Smuzhiyun #endif
4208*4882a593Smuzhiyun continue;
4209*4882a593Smuzhiyun }
4210*4882a593Smuzhiyun if (cam3a_result->getType() == RESULT_TYPE_YNR_PARAM) {
4211*4882a593Smuzhiyun RkAiqIspYnrParamsProxy* ynr = cam3a_result.get_cast_ptr<RkAiqIspYnrParamsProxy>();
4212*4882a593Smuzhiyun #if RKAIQ_HAVE_ANR_V1
4213*4882a593Smuzhiyun convertAiqYnrToIsp20Params(pp_cfg, ynr->data()->result);
4214*4882a593Smuzhiyun iter = results.erase (iter);
4215*4882a593Smuzhiyun #endif
4216*4882a593Smuzhiyun continue;
4217*4882a593Smuzhiyun }
4218*4882a593Smuzhiyun if (cam3a_result->getType() == RESULT_TYPE_ORB_PARAM) {
4219*4882a593Smuzhiyun RkAiqIspOrbParamsProxy* orb = cam3a_result.get_cast_ptr<RkAiqIspOrbParamsProxy>();
4220*4882a593Smuzhiyun convertAiqOrbToIsp20Params(pp_cfg, orb->data()->result);
4221*4882a593Smuzhiyun iter = results.erase (iter);
4222*4882a593Smuzhiyun continue;
4223*4882a593Smuzhiyun }
4224*4882a593Smuzhiyun ++iter;
4225*4882a593Smuzhiyun }
4226*4882a593Smuzhiyun return XCAM_RETURN_NO_ERROR;
4227*4882a593Smuzhiyun }
4228*4882a593Smuzhiyun
get_tnr_cfg_params(cam3aResultList & results,struct rkispp_params_tnrcfg & tnr_cfg)4229*4882a593Smuzhiyun XCamReturn Isp20Params::get_tnr_cfg_params(cam3aResultList &results, struct rkispp_params_tnrcfg &tnr_cfg)
4230*4882a593Smuzhiyun {
4231*4882a593Smuzhiyun if (results.empty())
4232*4882a593Smuzhiyun return XCAM_RETURN_ERROR_PARAM;
4233*4882a593Smuzhiyun
4234*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, pp cam3a results size: %d\n", __FUNCTION__, results.size());
4235*4882a593Smuzhiyun SmartPtr<cam3aResult> cam3a_result = get_3a_result(results, RESULT_TYPE_TNR_PARAM);
4236*4882a593Smuzhiyun if (cam3a_result.ptr()) {
4237*4882a593Smuzhiyun RkAiqIspTnrParamsProxy* tnr = nullptr;
4238*4882a593Smuzhiyun tnr = cam3a_result.get_cast_ptr<RkAiqIspTnrParamsProxy>();
4239*4882a593Smuzhiyun #if RKAIQ_HAVE_ANR_V1
4240*4882a593Smuzhiyun if (tnr.ptr())
4241*4882a593Smuzhiyun convertAiqTnrToIsp20Params(tnr_cfg, tnr->data()->result);
4242*4882a593Smuzhiyun #endif
4243*4882a593Smuzhiyun }
4244*4882a593Smuzhiyun return XCAM_RETURN_NO_ERROR;
4245*4882a593Smuzhiyun }
4246*4882a593Smuzhiyun
get_fec_cfg_params(cam3aResultList & results,struct rkispp_params_feccfg & fec_cfg)4247*4882a593Smuzhiyun XCamReturn Isp20Params::get_fec_cfg_params(cam3aResultList &results, struct rkispp_params_feccfg &fec_cfg)
4248*4882a593Smuzhiyun {
4249*4882a593Smuzhiyun if (results.empty())
4250*4882a593Smuzhiyun return XCAM_RETURN_ERROR_PARAM;
4251*4882a593Smuzhiyun
4252*4882a593Smuzhiyun LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, pp cam3a results size: %d\n", __FUNCTION__, results.size());
4253*4882a593Smuzhiyun SmartPtr<cam3aResult> cam3a_result = get_3a_result(results, RESULT_TYPE_FEC_PARAM);
4254*4882a593Smuzhiyun if (cam3a_result.ptr()) {
4255*4882a593Smuzhiyun RkAiqIspFecParamsProxy* fec = nullptr;
4256*4882a593Smuzhiyun fec = cam3a_result.get_cast_ptr<RkAiqIspFecParamsProxy>();
4257*4882a593Smuzhiyun if (fec) {
4258*4882a593Smuzhiyun convertAiqFecToIsp20Params(fec_cfg, fec->data()->result);
4259*4882a593Smuzhiyun }
4260*4882a593Smuzhiyun }
4261*4882a593Smuzhiyun return XCAM_RETURN_NO_ERROR;
4262*4882a593Smuzhiyun }
4263*4882a593Smuzhiyun
4264*4882a593Smuzhiyun SmartPtr<cam3aResult>
get_3a_result(cam3aResultList & results,int32_t type)4265*4882a593Smuzhiyun Isp20Params::get_3a_result (cam3aResultList &results, int32_t type)
4266*4882a593Smuzhiyun {
4267*4882a593Smuzhiyun cam3aResultList::iterator i_res = results.begin();
4268*4882a593Smuzhiyun SmartPtr<cam3aResult> res = NULL;
4269*4882a593Smuzhiyun
4270*4882a593Smuzhiyun for ( ; i_res != results.end(); ++i_res) {
4271*4882a593Smuzhiyun if (type == (*i_res)->getType ()) {
4272*4882a593Smuzhiyun res = (*i_res);
4273*4882a593Smuzhiyun break;
4274*4882a593Smuzhiyun }
4275*4882a593Smuzhiyun }
4276*4882a593Smuzhiyun
4277*4882a593Smuzhiyun return res;
4278*4882a593Smuzhiyun }
4279*4882a593Smuzhiyun
4280*4882a593Smuzhiyun } //namspace RkCam
4281*4882a593Smuzhiyun //TODO: to solve template ld compile issue, add isp21 source file here now.
4282*4882a593Smuzhiyun #include "isp21/Isp21Params.cpp"
4283*4882a593Smuzhiyun #include "isp3x/Isp3xParams.cpp"
4284*4882a593Smuzhiyun #include "isp32/Isp32Params.cpp"
4285