1 /*
2 * Copyright (c) 2021 Rockchip Corporation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 */
17
18 //#include "RkAiqCalibDbV2Helper.h"
19
20
21 #include "rk_aiq_user_api2_custom_awb_type_v32.h"
22
23 RKAIQ_BEGIN_DECLARE
24
25
26 /* awb config of AIQ framework */
27 #define WRITE_DEBUG_LOG false
28
29 typedef struct rk_aiq_rkAwb_config_s {
30 int Working_mode;//values look up in rk_aiq_working_mode_t definiton
31 int RawWidth;
32 int RawHeight;
33 rk_aiq_isp_awb_meas_cfg_v32_t awbHwConfig;
34 } rk_aiq_rkAwb_config_t;
initCustomAwbHwConfigGw(rk_aiq_customAwb_hw_cfg_t * awbHwConfig)35 static XCamReturn initCustomAwbHwConfigGw(rk_aiq_customAwb_hw_cfg_t *awbHwConfig)
36 {
37 LOG1_AWB_SUBM(0xff, "%s ENTER", __func__);
38 XCamReturn ret = XCAM_RETURN_NO_ERROR;
39 memset(awbHwConfig,0,sizeof(rk_aiq_customAwb_hw_cfg_t));
40 awbHwConfig->awbEnable = 1;
41 awbHwConfig->lightNum = 4;
42 awbHwConfig->windowSet[0] = 0;
43 awbHwConfig->windowSet[1] = 0;
44 awbHwConfig->windowSet[2] = 3840;
45 awbHwConfig->windowSet[3] = 2160;
46 awbHwConfig->maxR = 230*16;
47 awbHwConfig->maxG = 230*16;
48 awbHwConfig->maxB = 230*16;
49 awbHwConfig->maxY = 230*16;
50 awbHwConfig->minR = 3*16;;
51 awbHwConfig->minG = 3*16;;
52 awbHwConfig->minB = 3*16;;
53 awbHwConfig->minY = 3*16;;
54 awbHwConfig->multiwindow_en = 0;
55 LOG1_AWB_SUBM(0xff, "%s EXIT", __func__);
56 return ret;
57 }
58
59
initAwbHwFullConfigGw(rk_aiq_isp_awb_meas_cfg_v32_t * awbHwConfig)60 static XCamReturn initAwbHwFullConfigGw(rk_aiq_isp_awb_meas_cfg_v32_t *awbHwConfig)
61 {
62 LOG1_AWB_SUBM(0xff, "%s ENTER", __func__);
63 XCamReturn ret = XCAM_RETURN_NO_ERROR;
64 memset(awbHwConfig,0,sizeof(rk_aiq_isp_awb_meas_cfg_v32_t));
65 awbHwConfig->awbEnable = 1;
66 awbHwConfig->xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = 0;
67 awbHwConfig->uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = 0;
68 awbHwConfig->threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = 0;
69 awbHwConfig->xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = 0;
70 awbHwConfig->uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = 0;
71 awbHwConfig->threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = 0;
72 awbHwConfig->blkWeightEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = 0;
73 awbHwConfig->blkWeightEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = 0;
74 awbHwConfig->lscBypEnable = 0;
75 awbHwConfig->blkStatisticsEnable = 1;
76 awbHwConfig->blkMeasureMode = RK_AIQ_AWB_BLK_STAT_MODE_REALWP_V201;
77 awbHwConfig->xyRangeTypeForBlkStatistics = (rk_aiq_awb_xy_type_v201_t)0;
78 awbHwConfig->illIdxForBlkStatistics = (rk_aiq_awb_blk_stat_realwp_ill_e)7;
79 awbHwConfig->blkStatisticsWithLumaWeightEn = 0;
80 awbHwConfig->wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = 0;
81 awbHwConfig->wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = 0;
82 awbHwConfig->xyRangeTypeForWpHist = (rk_aiq_awb_xy_type_v201_t)0;
83 awbHwConfig->lightNum = 4;
84 awbHwConfig->windowSet[0] = 0;
85 awbHwConfig->windowSet[1] = 0;
86 awbHwConfig->windowSet[2] = 3840;
87 awbHwConfig->windowSet[3] = 2160;
88 awbHwConfig->dsMode = (rk_aiq_down_scale_mode_t)1;
89 awbHwConfig->maxR = 230*16;;
90 awbHwConfig->maxG = 230*16;;
91 awbHwConfig->maxB = 230*16;;
92 awbHwConfig->maxY = 230*16;;
93 awbHwConfig->minR = 3*16;;
94 awbHwConfig->minG = 3*16;;
95 awbHwConfig->minB = 3*16;;
96 awbHwConfig->minY = 3*16;;
97 awbHwConfig->pre_wbgain_inv_r = 256;
98 awbHwConfig->pre_wbgain_inv_g = 256;
99 awbHwConfig->pre_wbgain_inv_b = 256;
100 awbHwConfig->multiwindow_en = 0;
101 awbHwConfig->blk_rtdw_measure_en = 0;
102 LOG1_AWB_SUBM(0xff, "%s EXIT", __func__);
103 return ret;
104 }
105
initCustomAwbRes(rk_aiq_customeAwb_results_t * customAwb,rk_aiq_rkAwb_config_t * pConfig)106 static void initCustomAwbRes(rk_aiq_customeAwb_results_t* customAwb, rk_aiq_rkAwb_config_t* pConfig)
107 {
108 customAwb->IsConverged = false;
109 customAwb->awb_gain_algo.rgain =1.0;
110 customAwb->awb_gain_algo.bgain =1.0;
111 customAwb->awb_gain_algo.grgain =1.0;
112 customAwb->awb_gain_algo.gbgain =1.0;
113 customAwb->awb_smooth_factor = 0.5;
114 rk_aiq_customAwb_hw_cfg_t *awbHwConfig = &customAwb->awbHwConfig;
115 const rk_aiq_isp_awb_meas_cfg_v32_t *awbHwConfigFull = &pConfig->awbHwConfig;
116 awbHwConfig->awbEnable = awbHwConfigFull->awbEnable;
117 awbHwConfig->multiwindow_en = awbHwConfigFull->multiwindow_en;
118 memcpy(awbHwConfig->multiwindow, awbHwConfigFull->multiwindow,sizeof(awbHwConfigFull->multiwindow));
119 awbHwConfig->frameChoose = (rk_aiq_customAwb_Raw_Select_Mode_e)awbHwConfigFull->frameChoose;
120 memcpy(awbHwConfig->windowSet,awbHwConfigFull->windowSet,sizeof(awbHwConfigFull->windowSet));
121 awbHwConfig->lightNum = awbHwConfigFull->lightNum;
122 awbHwConfig->maxR = awbHwConfigFull->maxR;
123 awbHwConfig->minR = awbHwConfigFull->minR;
124 awbHwConfig->maxG = awbHwConfigFull->maxG;
125 awbHwConfig->minG = awbHwConfigFull->minG;
126 awbHwConfig->maxB = awbHwConfigFull->maxB;
127 awbHwConfig->minB = awbHwConfigFull->minB;
128 awbHwConfig->maxY = awbHwConfigFull->maxY;
129 awbHwConfig->minY = awbHwConfigFull->minY;
130
131 }
132
calcInputBitIs12Bit(bool * inputBitIs12Bit,int frameChoose,int working_mode,const AblcProc_V32_t * ablc_res_v32)133 static XCamReturn calcInputBitIs12Bit( bool *inputBitIs12Bit, int frameChoose,int working_mode,const AblcProc_V32_t *ablc_res_v32)
134 {
135 //call after frameChoose calculation
136 //inputShiftEnable is true for 20bit ipnut ,for CUSTOM_AWB_INPUT_BAYERNR + (hdr case or dgainInAwbGain) is enbale case
137 bool selectBayerNrData = (frameChoose == CUSTOM_AWB_INPUT_BAYERNR);
138 bool dgainEn = ablc_res_v32 && ablc_res_v32->isp_ob_predgain > 1;
139 if (selectBayerNrData
140 && (dgainEn ||(rk_aiq_working_mode_t)working_mode != RK_AIQ_WORKING_MODE_NORMAL)) {
141 *inputBitIs12Bit = false;
142 }else{
143 *inputBitIs12Bit = true;
144 }
145 return XCAM_RETURN_NO_ERROR;
146 }
147
calcInputRightShift212Bit(bool * inputShiftEnable,int frameChoose,int working_mode,const AblcProc_V32_t * ablc_res_v32)148 static XCamReturn calcInputRightShift212Bit( bool *inputShiftEnable, int frameChoose,int working_mode,const AblcProc_V32_t *ablc_res_v32)
149 {
150 //call after frameChoose calculation
151 //inputShiftEnable is true for 20bit ipnut ,for CUSTOM_AWB_INPUT_BAYERNR + (hdr case or dgainInAwbGain) is enbale case
152 bool selectBayerNrData = (frameChoose == CUSTOM_AWB_INPUT_BAYERNR);
153 bool dgainEn = ablc_res_v32 && ablc_res_v32->isp_ob_predgain > 1;
154 if (selectBayerNrData
155 && (dgainEn ||(rk_aiq_working_mode_t)working_mode != RK_AIQ_WORKING_MODE_NORMAL)) {
156 *inputShiftEnable = true;
157 }else{
158 *inputShiftEnable = false;
159 }
160 return XCAM_RETURN_NO_ERROR;
161 }
162
163
awb_window_init(void * ctx,rk_aiq_rkAwb_config_t * rkCfg)164 int32_t awb_window_init(void* ctx, rk_aiq_rkAwb_config_t *rkCfg)
165 {
166 rkCfg->awbHwConfig.windowSet[0]=0;
167 rkCfg->awbHwConfig.windowSet[1]=0;
168 rkCfg->awbHwConfig.windowSet[2]=rkCfg->RawWidth;
169 rkCfg->awbHwConfig.windowSet[3]=rkCfg->RawHeight;
170 return 0;
171 }
frame_choose_init(void * ctx,rk_aiq_rkAwb_config_t * rkCfg)172 int32_t frame_choose_init(void* ctx, rk_aiq_rkAwb_config_t *rkCfg)
173 {
174
175 rkCfg->awbHwConfig.frameChoose = CUSTOM_AWB_INPUT_BAYERNR;
176 return 0;
177 }
178
awb_window_check(const rk_aiq_rkAwb_config_t * rkCfg,unsigned short * windowSet)179 int32_t awb_window_check(const rk_aiq_rkAwb_config_t *rkCfg, unsigned short *windowSet)
180 {
181
182 if(windowSet[0] > rkCfg->RawWidth ||
183 windowSet[0] + windowSet[2] > rkCfg->RawWidth ||
184 windowSet[1] > rkCfg->RawHeight ||
185 windowSet[1] + windowSet[3] > rkCfg->RawHeight ) {
186 LOGW_AWB("windowSet[%d,%d,%d,%d]is invaild!!! Reset to full window\n", windowSet[0],
187 windowSet[1], windowSet[2], windowSet[3]);
188 windowSet[0]=0;
189 windowSet[1]=0;
190 windowSet[2]=rkCfg->RawWidth;
191 windowSet[3]=rkCfg->RawHeight;
192 }
193
194 return 0;
195 }
196
197 static
_rkAwbStats2CustomAwbStats(rk_aiq_customAwb_stats_t * customAwb,rk_aiq_awb_stat_res_v32_t * rkAwb)198 void _rkAwbStats2CustomAwbStats(rk_aiq_customAwb_stats_t* customAwb,
199 rk_aiq_awb_stat_res_v32_t* rkAwb)
200 {
201 LOG1_AWB_SUBM(0xff, "%s ENTER", __func__);
202 memcpy(customAwb->light,rkAwb->light,sizeof(customAwb->light));
203 memcpy(customAwb->WpNo2,rkAwb->WpNo2,sizeof(customAwb->WpNo2));
204 memcpy(customAwb->blockResult,rkAwb->blockResult,sizeof(customAwb->blockResult));
205 memcpy(customAwb->excWpRangeResult,rkAwb->excWpRangeResult,sizeof(customAwb->excWpRangeResult));
206 memcpy(customAwb->WpNoHist,rkAwb->WpNoHist,sizeof(customAwb->WpNoHist));
207 LOG1_AWB_SUBM(0xff, "%s EXIT", __func__);
208 }
209
_customAwbHw2rkAwbHwCfg(const rk_aiq_customeAwb_results_t * customAwbProcRes,rk_aiq_isp_awb_meas_cfg_v32_t * awbHwConfigFull)210 static void _customAwbHw2rkAwbHwCfg( const rk_aiq_customeAwb_results_t* customAwbProcRes, rk_aiq_isp_awb_meas_cfg_v32_t *awbHwConfigFull)
211 {
212 const rk_aiq_customAwb_hw_cfg_t *awbHwConfig = &customAwbProcRes->awbHwConfig;
213 awbHwConfigFull->awbEnable = awbHwConfig->awbEnable;
214 awbHwConfigFull->multiwindow_en = awbHwConfig->multiwindow_en;
215 memcpy(awbHwConfigFull->multiwindow, awbHwConfig->multiwindow,sizeof(awbHwConfig->multiwindow));
216 awbHwConfigFull->frameChoose = awbHwConfig->frameChoose;
217 memcpy(awbHwConfigFull->windowSet,awbHwConfig->windowSet,sizeof(awbHwConfig->windowSet));
218 awbHwConfigFull->lightNum = awbHwConfig->lightNum;
219 awbHwConfigFull->maxR = awbHwConfig->maxR;
220 awbHwConfigFull->minR = awbHwConfig->minR;
221 awbHwConfigFull->maxG = awbHwConfig->maxG;
222 awbHwConfigFull->minG = awbHwConfig->minG;
223 awbHwConfigFull->maxB = awbHwConfig->maxB;
224 awbHwConfigFull->minB = awbHwConfig->minB;
225 awbHwConfigFull->maxY = awbHwConfig->maxY;
226 awbHwConfigFull->minY = awbHwConfig->minY;
227
228 }
229
230 static
_customAwbRes2rkAwbRes(RkAiqAlgoProcResAwb * rkAwbProcRes,rk_aiq_customeAwb_results_t * customAwbProcRes,const rk_aiq_isp_awb_meas_cfg_v32_t & awbHwConfig)231 void _customAwbRes2rkAwbRes( RkAiqAlgoProcResAwb* rkAwbProcRes,
232 rk_aiq_customeAwb_results_t* customAwbProcRes, const rk_aiq_isp_awb_meas_cfg_v32_t &awbHwConfig)
233 {
234
235 rkAwbProcRes->awbConverged = customAwbProcRes->IsConverged;
236 memcpy(rkAwbProcRes->awb_gain_algo, &customAwbProcRes->awb_gain_algo, sizeof(rk_aiq_wb_gain_t));
237 rkAwbProcRes->awb_smooth_factor = customAwbProcRes->awb_smooth_factor;
238 *rkAwbProcRes->awb_hw32_para= awbHwConfig;
239 }
240
customAwbStatsRelease(rk_aiq_customAwb_stats_t * customStats)241 static XCamReturn customAwbStatsRelease( rk_aiq_customAwb_stats_t *customStats)
242 {
243 LOG1_AWB_SUBM(0xff, "%s ENTER", __func__);
244 XCamReturn ret = XCAM_RETURN_NO_ERROR;
245 rk_aiq_customAwb_stats_t *awbStat = customStats->next;
246 rk_aiq_customAwb_stats_t *awbStat2;
247 while(awbStat!=nullptr){
248 awbStat2 = awbStat->next;
249 //LOGE_AWB_SUBM(0xff, "%s free awbStat %p ", __func__,awbStat);
250 free(awbStat);
251 awbStat = awbStat2;
252 }
253 LOG1_AWB_SUBM(0xff, "%s EXIT", __func__);
254 return(ret);
255
256 }
257
258
ConfigBlc2(const AblcProc_V32_t * ablc,const rk_aiq_wb_gain_t & awb_gain_algo,rk_aiq_wb_gapin_aplly_pos_e wbgainApplyPosition,int working_mode,rk_aiq_isp_awb_meas_cfg_v32_t * awb_hw32_para)259 static XCamReturn ConfigBlc2(const AblcProc_V32_t *ablc, const rk_aiq_wb_gain_t &awb_gain_algo,
260 rk_aiq_wb_gapin_aplly_pos_e wbgainApplyPosition,int working_mode,
261 rk_aiq_isp_awb_meas_cfg_v32_t* awb_hw32_para)
262 {
263 XCamReturn ret = XCAM_RETURN_NO_ERROR;
264 awb_hw32_para->blc.enable = false;
265 memset(awb_hw32_para->blc.blc,0,sizeof(awb_hw32_para->blc.blc));
266 if(awb_hw32_para->frameChoose == CUSTOM_AWB_INPUT_DRC ||
267 (awb_hw32_para->frameChoose == CUSTOM_AWB_INPUT_BAYERNR && working_mode!= RK_AIQ_WORKING_MODE_NORMAL )){
268 //don't support to use blc2
269 return(ret);
270 }
271 awb_hw32_para->blc.enable = true;
272 float offset[AWB_CHANNEL_MAX]={0,0,0,0};
273 short ob2=0;
274 // 1 interpolation
275
276 // 2 blc2 recalc base on ablc
277 short int rawAwbPieplBlc[AWB_CHANNEL_MAX]={0,0,0,0};
278 short int blc1[AWB_CHANNEL_MAX]={0,0,0,0};
279 short ob =0;
280 float dgain2 = 1.0;
281 if(ablc){
282 ob = ablc->isp_ob_offset;
283 float isp_ob_predgain = ablc->isp_ob_predgain;
284 if(isp_ob_predgain >1){
285 dgain2 = isp_ob_predgain;
286 }
287 if(ablc->blc1_enable){
288 blc1[AWB_CHANNEL_R] = ablc->blc1_r;
289 blc1[AWB_CHANNEL_GR] = ablc->blc1_gr;
290 blc1[AWB_CHANNEL_GB] = ablc->blc1_gb;
291 blc1[AWB_CHANNEL_B] = ablc->blc1_b;
292 }
293 }
294 /*if (awb_hw32_para->frameChoose == CUSTOM_AWB_INPUT_DRC) {
295 //update by dgain* wbgain0*wbgain1*offset
296 ob2 = ob;//add ob2 to make total ob equal to 0 ,since blc0 +ob,blc1-ob,blc2-ob;
297 for(int i=0; i<AWB_CHANNEL_MAX; i++){
298 awb_hw32_para->blc.blc[i] = offset[i] * dgain2 * stat3aAwbGainOut2[i] + ob2 +0.5;
299 }
300 }else */if(awb_hw32_para->frameChoose == CUSTOM_AWB_INPUT_BAYERNR) {
301 //update by dgain* wbgain0*offset +blc1
302 // wbgain0 only used for hdr mode
303 if(ablc->blc1_enable){
304 ob2 = 0;
305 }else{
306 ob2 = ob;
307 }
308 if(wbgainApplyPosition == IN_AWBGAIN0){
309 float stat3aAwbGainOut2[AWB_CHANNEL_MAX];
310 stat3aAwbGainOut2[AWB_CHANNEL_R] = awb_gain_algo.rgain;
311 stat3aAwbGainOut2[AWB_CHANNEL_GR] = awb_gain_algo.grgain;
312 stat3aAwbGainOut2[AWB_CHANNEL_GB] = awb_gain_algo.gbgain;
313 stat3aAwbGainOut2[AWB_CHANNEL_B] = awb_gain_algo.bgain;
314 for(int i=0; i<AWB_CHANNEL_MAX; i++){
315 awb_hw32_para->blc.blc[i] = (offset[i] + blc1[i]) * dgain2 * stat3aAwbGainOut2[i] + ob2 +0.5;
316 }
317 }else{
318 for(int i=0; i<AWB_CHANNEL_MAX; i++){
319 awb_hw32_para->blc.blc[i] = (offset[i] + blc1[i]) * dgain2 + ob2 +0.5;
320 }
321 }
322 }else {//select raw
323 //update by offset +blc1
324 if(ablc->blc1_enable){
325 ob2 = 0;
326 }else{
327 ob2 = ob;
328 }
329 for(int i=0; i<AWB_CHANNEL_MAX; i++){
330 awb_hw32_para->blc.blc[i] = offset[i] + blc1[i] + ob2 +0.5;
331 }
332 }
333 LOGV_AWB("offset =(%f,%f,%f,%f), ob2= %d,blc2=(%d,%d,%d,%d)", offset[0], offset[1],offset[2], offset[3],ob2,
334 awb_hw32_para->blc.blc[0],awb_hw32_para->blc.blc[1],awb_hw32_para->blc.blc[2],awb_hw32_para->blc.blc[3]);
335
336 return(ret);
337
338 }
339
340 //call after blc2 calc
ConfigOverexposureValue(const AblcProc_V32_t * ablc,float hdrmge_gain0_1,int working_mode,rk_aiq_isp_awb_meas_cfg_v32_t * awb_hw32_para)341 static XCamReturn ConfigOverexposureValue(const AblcProc_V32_t *ablc,
342 float hdrmge_gain0_1, int working_mode, rk_aiq_isp_awb_meas_cfg_v32_t* awb_hw32_para)
343 {
344 XCamReturn ret = XCAM_RETURN_NO_ERROR;
345 float dgain = 1.0;
346 int max_blc = 0;
347 short ob = ablc->isp_ob_offset;
348 int overexposure_value = 254;
349 if (awb_hw32_para->frameChoose == CUSTOM_AWB_INPUT_DRC) {
350 awb_hw32_para->overexposure_value = overexposure_value;
351 }else if(awb_hw32_para->frameChoose == CUSTOM_AWB_INPUT_BAYERNR) {
352 if(ablc && ablc->isp_ob_predgain > 1){
353 dgain = ablc->isp_ob_predgain;
354 }
355 if(working_mode != RK_AIQ_WORKING_MODE_NORMAL){
356 //hdr mode,awbgain0 will reset to full range
357 LOGV_AWB("hdrmge_gain0_1 %f",hdrmge_gain0_1);
358 awb_hw32_para->overexposure_value = overexposure_value * hdrmge_gain0_1 * dgain;
359 }else{
360 //need check
361 short int blc[AWB_CHANNEL_MAX]={0,0,0,0};
362 if(ablc && ablc->enable){
363 blc[AWB_CHANNEL_R] = ablc->blc_r *dgain- ob;
364 blc[AWB_CHANNEL_GR] = ablc->blc_gr*dgain - ob;
365 blc[AWB_CHANNEL_GB] = ablc->blc_gb*dgain - ob;
366 blc[AWB_CHANNEL_B] = ablc->blc_b*dgain - ob;
367 }
368 for(int i=0;i<AWB_CHANNEL_MAX;i++){
369 if(blc[i]<0){
370 blc[i] = 0;
371 }
372 blc[i] += awb_hw32_para->blc.blc[i]+ ob;
373 }
374 for(int i=0;i<AWB_CHANNEL_MAX;i++){
375 if(blc[i]>max_blc){
376 max_blc = blc[i];
377 }
378 }
379 if(max_blc<0){
380 max_blc = 0;
381 }
382 awb_hw32_para->overexposure_value = overexposure_value * dgain -max_blc/16;
383 }
384
385 }else{
386 //raw
387 //need check
388 short int blc[AWB_CHANNEL_MAX]={0,0,0,0};
389 if(ablc && ablc->enable){
390 blc[AWB_CHANNEL_R] = ablc->blc_r - ob;
391 blc[AWB_CHANNEL_GR] = ablc->blc_gr - ob;
392 blc[AWB_CHANNEL_GB] = ablc->blc_gb - ob;
393 blc[AWB_CHANNEL_B] = ablc->blc_b - ob;
394 }
395 for(int i=0;i<AWB_CHANNEL_MAX;i++){
396 if(blc[i]<0){
397 blc[i] = 0;
398 }
399 blc[i] += awb_hw32_para->blc.blc[i] + ob;
400 }
401 for(int i=0;i<AWB_CHANNEL_MAX;i++){
402 if(blc[i]>max_blc){
403 max_blc = blc[i];
404 }
405 }
406 if(max_blc<0){
407 max_blc = 0;
408 }
409 awb_hw32_para->overexposure_value = overexposure_value - max_blc/16;
410 }
411 return(ret);
412
413 }
414
415 //call afte ablc_res_v32 got
ConfigWbgainBaseOnBlc(const AblcProc_V32_t * blc,rk_aiq_wb_gapin_aplly_pos_e wbgainApplyPosition,rk_aiq_wb_gain_t * awb_gain_algo)416 void ConfigWbgainBaseOnBlc(const AblcProc_V32_t *blc,rk_aiq_wb_gapin_aplly_pos_e wbgainApplyPosition,
417 rk_aiq_wb_gain_t *awb_gain_algo)
418 {
419 float stat3aAwbGainOut2[AWB_CHANNEL_MAX];
420 stat3aAwbGainOut2[AWB_CHANNEL_R] = awb_gain_algo->rgain;
421 stat3aAwbGainOut2[AWB_CHANNEL_GR] = awb_gain_algo->grgain;
422 stat3aAwbGainOut2[AWB_CHANNEL_GB] = awb_gain_algo->gbgain;
423 stat3aAwbGainOut2[AWB_CHANNEL_B] = awb_gain_algo->bgain;
424
425 short int mainPieplineBLC[AWB_CHANNEL_MAX];
426 memset(mainPieplineBLC,0,sizeof(mainPieplineBLC[0])*AWB_CHANNEL_MAX);
427 if(blc->enable){
428 mainPieplineBLC[AWB_CHANNEL_R] += blc->blc_r - blc->isp_ob_offset;
429 mainPieplineBLC[AWB_CHANNEL_GR] += blc->blc_gr - blc->isp_ob_offset;
430 mainPieplineBLC[AWB_CHANNEL_B] += blc->blc_b - blc->isp_ob_offset;
431 mainPieplineBLC[AWB_CHANNEL_GB] += blc->blc_gb - blc->isp_ob_offset;
432 }
433 if(wbgainApplyPosition == IN_AWBGAIN1 && blc->blc1_enable){
434 mainPieplineBLC[AWB_CHANNEL_R] += blc->blc1_r + blc->isp_ob_offset;
435 mainPieplineBLC[AWB_CHANNEL_GR] += blc->blc1_gr + blc->isp_ob_offset;
436 mainPieplineBLC[AWB_CHANNEL_B] += blc->blc1_b + blc->isp_ob_offset;
437 mainPieplineBLC[AWB_CHANNEL_GB] += blc->blc1_gb + blc->isp_ob_offset;
438 }
439 float maxg1=0;
440 for(int i=0;i<AWB_CHANNEL_MAX;i++){
441 if(mainPieplineBLC[i]>0){
442 stat3aAwbGainOut2[i]*=4095.0/(4095-mainPieplineBLC[i]);//max_value=4095
443 }
444 if(maxg1<stat3aAwbGainOut2[i]){
445 maxg1 = stat3aAwbGainOut2[i];
446 }
447 }
448 if(maxg1>8){//max_wbgain=8.0
449 float scale = 8/maxg1;
450 for(int i=0;i<4;i++){
451 stat3aAwbGainOut2[i] *= scale;
452 }
453 LOGW_AWB("max wbgain is %f, maybe error case",maxg1);
454 }
455 awb_gain_algo->rgain = stat3aAwbGainOut2[AWB_CHANNEL_R];
456 awb_gain_algo->grgain = stat3aAwbGainOut2[AWB_CHANNEL_GR];
457 awb_gain_algo->gbgain = stat3aAwbGainOut2[AWB_CHANNEL_GB];
458 awb_gain_algo->bgain = stat3aAwbGainOut2[AWB_CHANNEL_B];
459 LOGD_AWB("wbggain :(%f,%f,%f,%f)\n",awb_gain_algo->rgain,
460 awb_gain_algo->grgain,awb_gain_algo->gbgain,
461 awb_gain_algo->bgain);
462
463 }
464
465 //call after stat3aAwbGainOut2 calc
ConfigPreWbgain2(rk_aiq_isp_awb_meas_cfg_v32_t * awb_hw32_para,const rk_aiq_wb_gain_t & stat3aAwbGainOut,rk_aiq_wb_gapin_aplly_pos_e wbgainApplyPosition)466 static XCamReturn ConfigPreWbgain2(rk_aiq_isp_awb_meas_cfg_v32_t* awb_hw32_para, const rk_aiq_wb_gain_t &stat3aAwbGainOut,
467 rk_aiq_wb_gapin_aplly_pos_e wbgainApplyPosition )
468 {
469 //call after wbgain and frameChoose calculation
470 XCamReturn ret = XCAM_RETURN_NO_ERROR;
471
472 awb_hw32_para->pre_wbgain_inv_b = (1<<RK_AIQ_AWB_PRE_WBGAIN_FRAC_BIT);//0X100
473 awb_hw32_para->pre_wbgain_inv_g = (1<<RK_AIQ_AWB_PRE_WBGAIN_FRAC_BIT);
474 awb_hw32_para->pre_wbgain_inv_r = (1<<RK_AIQ_AWB_PRE_WBGAIN_FRAC_BIT);
475
476 //pre_wbgain_inv_b is updating for awb0-gain enable+select = bnr/hdrc case
477 if(awb_hw32_para->frameChoose == CUSTOM_AWB_INPUT_DRC ||
478 (wbgainApplyPosition == IN_AWBGAIN0 && awb_hw32_para->frameChoose == CUSTOM_AWB_INPUT_BAYERNR)){
479 if(stat3aAwbGainOut.rgain< DIVMIN
480 ||stat3aAwbGainOut.grgain< DIVMIN
481 || stat3aAwbGainOut.bgain< DIVMIN){
482 LOGE_AWB("%s stat3aAwbGainOut[%f,%f,%f,%f] must be bigger than %f!\n", __FUNCTION__,
483 stat3aAwbGainOut.rgain,
484 stat3aAwbGainOut.grgain,
485 stat3aAwbGainOut.gbgain,
486 stat3aAwbGainOut.bgain,DIVMIN);
487 return(XCAM_RETURN_ERROR_FAILED);
488 }
489 awb_hw32_para->pre_wbgain_inv_r = awb_hw32_para->pre_wbgain_inv_r / stat3aAwbGainOut.rgain +0.5;
490 awb_hw32_para->pre_wbgain_inv_g = awb_hw32_para->pre_wbgain_inv_g / stat3aAwbGainOut.grgain+0.5;
491 awb_hw32_para->pre_wbgain_inv_b = awb_hw32_para->pre_wbgain_inv_b/ stat3aAwbGainOut.bgain+0.5;
492 }
493 return(ret);
494 }
495
496
WriteMeasureResult(rk_aiq_awb_stat_res_v32_t & awb_measure_result,int log_level,int camera_id=0)497 static void WriteMeasureResult(rk_aiq_awb_stat_res_v32_t &awb_measure_result, int log_level ,int camera_id = 0)
498 {
499 #if WRITE_DEBUG_LOG
500 if(log_level <XCORE_LOG_LEVEL_LOW1) {
501 return;
502 }
503 FILE * fid;
504 char fName[100];
505 sprintf(fName, "./tmp/MeasureResultByCustom_camera%d.txt",camera_id);
506 fid = fopen(fName, "w");
507 if (fid == NULL) {
508 return;
509 }
510 fprintf(fid, "WpNoHist: ");
511 for (int i = 0; i < RK_AIQ_AWB_WP_HIST_BIN_NUM; i++) {
512 fprintf(fid, "%6d,", awb_measure_result.WpNoHist[i]);
513 }
514 fprintf(fid, "\n");
515 {
516 for (int i = 0; i < RK_AIQ_AWB_MAX_WHITEREGIONS_NUM_V32; i++)
517 {
518 fprintf(fid, " illuminant %dth:\n", i);
519 fprintf(fid, "WPNUM2[%d]= %7d\n", i, awb_measure_result.WpNo2[i]);
520 fprintf(fid, "SUM_RGain_NOR[%d]=%7lld\n", i, awb_measure_result.light[i].xYType[0].RgainValue);
521 fprintf(fid, "SUM_BGain_NOR[%d]=%7lld\n", i, awb_measure_result.light[i].xYType[0].BgainValue);
522 fprintf(fid, "WPNUM_NOR[%d]= %7lld\n", i, awb_measure_result.light[i].xYType[0].WpNo);
523 fprintf(fid, "SUM_RGain_BIG[%d]=%7lld\n", i, awb_measure_result.light[i].xYType[1].RgainValue);
524 fprintf(fid, "SUM_BGain_BIG[%d]=%7lld\n", i, awb_measure_result.light[i].xYType[1].BgainValue);
525 fprintf(fid, "WPNUM_BIG[%d]= %7lld\n", i, awb_measure_result.light[i].xYType[1].WpNo);
526
527
528 }
529 fprintf(fid, "blockresult[15][15]:\n");
530 for (int i = 0; i < RK_AIQ_AWB_GRID_NUM_VERHOR * RK_AIQ_AWB_GRID_NUM_VERHOR; i++)
531 {
532
533 fprintf(fid, "blk[%2d,%2d]: blk_sum_r=%7lld, blk_sum_g=%7lld, blk_sum_b=%7lld, blk_sum_num=%7lld\n"
534 , i / 15, i % 15, awb_measure_result.blockResult[i].Rvalue,
535 awb_measure_result.blockResult[i].Gvalue, awb_measure_result.blockResult[i].Bvalue,
536 awb_measure_result.blockResult[i].WpNo);
537
538 }
539 fprintf(fid, "\n");
540 }
541 //new measurement
542 {
543 fprintf(fid, " excWpRangeResult:\n");
544 for (int i = 0; i < RK_AIQ_AWB_STAT_WP_RANGE_NUM_V201; i++)
545 {
546 fprintf(fid, " %d:\n", i);
547 fprintf(fid, " SUM_RGain[%d]=%7lld\n", i, awb_measure_result.excWpRangeResult[i].RgainValue);
548 fprintf(fid, " SUM_RGain[%d]=%7lld\n", i, awb_measure_result.excWpRangeResult[i].BgainValue);
549 fprintf(fid, " WPNUM_NOR[%d]=%7lld\n", i, awb_measure_result.excWpRangeResult[i].WpNo);
550 }
551 }
552 fclose(fid);
553 #endif
554 }
555
556
WriteDataForThirdParty(const rk_aiq_isp_awb_meas_cfg_v32_t & wpDetectPara,int log_level,int camera_id=0)557 static void WriteDataForThirdParty(const rk_aiq_isp_awb_meas_cfg_v32_t &wpDetectPara,int log_level ,int camera_id=0)
558 {
559 #if WRITE_DEBUG_LOG
560
561 if(log_level < XCORE_LOG_LEVEL_LOW1){
562 return;
563 }
564 char fName[100];
565 sprintf(fName, "./tmp/awbHwConfigByCustom_%d.txt",camera_id);
566 FILE* fp = fopen(fName, "wb");
567 if(fp != NULL)
568 {
569
570 fprintf(fp, "awbHwConfig->awbEnable = %d;//rawawb enable\n", wpDetectPara.awbEnable);
571 fprintf(fp, "awbHwConfig->xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;//xy detect enable for all light\n", wpDetectPara.xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]);
572 fprintf(fp, "awbHwConfig->uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;//uv detect enable for all light\n", wpDetectPara.uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]);
573 fprintf(fp, "awbHwConfig->threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;//uv detect enable for all light\n", wpDetectPara.threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]);
574 fprintf(fp, "awbHwConfig->xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;//xy detect enable for all light\n", wpDetectPara.xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]);
575 fprintf(fp, "awbHwConfig->uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;//uv detect enable for all light\n", wpDetectPara.uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]);
576 fprintf(fp, "awbHwConfig->threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;//uv detect enable for all light\n", wpDetectPara.threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]);
577 fprintf(fp, "awbHwConfig->blkWeightEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;\n", wpDetectPara.blkWeightEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]);
578 fprintf(fp, "awbHwConfig->blkWeightEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;\n", wpDetectPara.blkWeightEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]);
579 fprintf(fp, "awbHwConfig->lscBypEnable = %d;\n", wpDetectPara.lscBypEnable);
580
581 fprintf(fp, "awbHwConfig->blkStatisticsEnable = %d;\n", wpDetectPara.blkStatisticsEnable);
582 fprintf(fp, "awbHwConfig->blkMeasureMode = (rk_aiq_awb_blk_stat_mode_v201_t)%d;\n", wpDetectPara.blkMeasureMode);
583 fprintf(fp, "awbHwConfig->xyRangeTypeForBlkStatistics = (rk_aiq_awb_xy_type_v201_t)%d;\n", wpDetectPara.xyRangeTypeForBlkStatistics);
584 fprintf(fp, "awbHwConfig->illIdxForBlkStatistics = (rk_aiq_awb_blk_stat_realwp_ill_e)%d;\n", wpDetectPara.illIdxForBlkStatistics);
585 fprintf(fp, "awbHwConfig->blkStatisticsWithLumaWeightEn = %d;\n", wpDetectPara.blkStatisticsWithLumaWeightEn);
586
587 fprintf(fp, "awbHwConfig->wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;\n", wpDetectPara.wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]);
588 fprintf(fp, "awbHwConfig->wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;\n", wpDetectPara.wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]);
589 fprintf(fp, "awbHwConfig->xyRangeTypeForWpHist = (rk_aiq_awb_xy_type_v201_t)%d;\n", wpDetectPara.xyRangeTypeForWpHist);
590
591 fprintf(fp, "awbHwConfig->threeDyuvIllu[0] = %d;\n", wpDetectPara.threeDyuvIllu[0]);
592 fprintf(fp, "awbHwConfig->threeDyuvIllu[1] = %d;\n", wpDetectPara.threeDyuvIllu[1]);
593 fprintf(fp, "awbHwConfig->threeDyuvIllu[2] = %d;\n", wpDetectPara.threeDyuvIllu[2]);
594 fprintf(fp, "awbHwConfig->threeDyuvIllu[3] = %d;\n", wpDetectPara.threeDyuvIllu[3]);
595
596
597
598 fprintf(fp, "awbHwConfig->lightNum = %d; //measurment light num ,0~7\n", wpDetectPara.lightNum );
599 fprintf(fp, "awbHwConfig->windowSet[0] = %d;//crop h_offs mod 2 == 0\n", wpDetectPara.windowSet[0] );
600 fprintf(fp, "awbHwConfig->windowSet[1] = %d;//crop v_offs mod 2 == 0\n", wpDetectPara.windowSet[1] );
601 fprintf(fp, "awbHwConfig->windowSet[2] = %d;//crop h_size,8x8:mod 8==0,4x4:mod 4==0\n", wpDetectPara.windowSet[2] );
602 fprintf(fp, "awbHwConfig->windowSet[3] = %d;//crop v_size,8x8:mod 8==0,4x4:mod 4==0\n", wpDetectPara.windowSet[3] );
603
604 /*if (wpDetectPara.windowSet[2]>2560||wpDetectPara.windowSet[3]>2560)
605 Ds_rate = 8;*/
606 int tmp;
607 switch (wpDetectPara.dsMode)
608 {
609 case RK_AIQ_AWB_DS_4X4:
610 tmp = 0;
611 break;
612 default:
613 tmp = 1;
614 }
615 fprintf(fp, "awbHwConfig->dsMode = (rk_aiq_down_scale_mode_t)%d;//downscale,1:8x8,0:4x4\n", tmp );
616 fprintf(fp, "awbHwConfig->maxR = %d;\n", wpDetectPara.maxR );
617 fprintf(fp, "awbHwConfig->maxG = %d;\n", wpDetectPara.maxG );
618 fprintf(fp, "awbHwConfig->maxB = %d;\n", wpDetectPara.maxB );
619 fprintf(fp, "awbHwConfig->maxY = %d;\n", wpDetectPara.maxY );
620 fprintf(fp, "awbHwConfig->minR = %d;\n", wpDetectPara.minR );
621 fprintf(fp, "awbHwConfig->minG = %d;\n", wpDetectPara.minG );
622 fprintf(fp, "awbHwConfig->minB = %d;\n", wpDetectPara.minB );
623 fprintf(fp, "awbHwConfig->minY = %d;\n", wpDetectPara.minY );
624 fprintf(fp, "awbHwConfig->uvRange_param[0].pu_region[0] = %d;//uv detect white point region vertex and inverse slope\n", wpDetectPara.uvRange_param[0].pu_region[0]);
625 fprintf(fp, "awbHwConfig->uvRange_param[0].pv_region[0] = %d;\n", wpDetectPara.uvRange_param[0].pv_region[0]);
626 fprintf(fp, "awbHwConfig->uvRange_param[0].pu_region[1] = %d;\n", wpDetectPara.uvRange_param[0].pu_region[1]);
627 fprintf(fp, "awbHwConfig->uvRange_param[0].pv_region[1] = %d;\n", wpDetectPara.uvRange_param[0].pv_region[1]);
628 fprintf(fp, "awbHwConfig->uvRange_param[0].pu_region[2] = %d;\n", wpDetectPara.uvRange_param[0].pu_region[2]);
629 fprintf(fp, "awbHwConfig->uvRange_param[0].pv_region[2] = %d;\n", wpDetectPara.uvRange_param[0].pv_region[2]);
630 fprintf(fp, "awbHwConfig->uvRange_param[0].pu_region[3] = %d;\n", wpDetectPara.uvRange_param[0].pu_region[3]);
631 fprintf(fp, "awbHwConfig->uvRange_param[0].pv_region[3] = %d;\n", wpDetectPara.uvRange_param[0].pv_region[3]);
632 fprintf(fp, "awbHwConfig->uvRange_param[0].slope_inv[0] = %d;\n", wpDetectPara.uvRange_param[0].slope_inv[0]);
633 fprintf(fp, "awbHwConfig->uvRange_param[0].slope_inv[1] = %d;\n", wpDetectPara.uvRange_param[0].slope_inv[1]);
634 fprintf(fp, "awbHwConfig->uvRange_param[0].slope_inv[2] = %d;\n", wpDetectPara.uvRange_param[0].slope_inv[2]);
635 fprintf(fp, "awbHwConfig->uvRange_param[0].slope_inv[3] = %d;\n", wpDetectPara.uvRange_param[0].slope_inv[3]);
636 fprintf(fp, "awbHwConfig->uvRange_param[1].pu_region[0] = %d;\n", wpDetectPara.uvRange_param[1].pu_region[0]);
637 fprintf(fp, "awbHwConfig->uvRange_param[1].pv_region[0] = %d;\n", wpDetectPara.uvRange_param[1].pv_region[0]);
638 fprintf(fp, "awbHwConfig->uvRange_param[1].pu_region[1] = %d;\n", wpDetectPara.uvRange_param[1].pu_region[1]);
639 fprintf(fp, "awbHwConfig->uvRange_param[1].pv_region[1] = %d;\n", wpDetectPara.uvRange_param[1].pv_region[1]);
640 fprintf(fp, "awbHwConfig->uvRange_param[1].pu_region[2] = %d;\n", wpDetectPara.uvRange_param[1].pu_region[2]);
641 fprintf(fp, "awbHwConfig->uvRange_param[1].pv_region[2] = %d;\n", wpDetectPara.uvRange_param[1].pv_region[2]);
642 fprintf(fp, "awbHwConfig->uvRange_param[1].pu_region[3] = %d;\n", wpDetectPara.uvRange_param[1].pu_region[3]);
643 fprintf(fp, "awbHwConfig->uvRange_param[1].pv_region[3] = %d;\n", wpDetectPara.uvRange_param[1].pv_region[3]);
644 fprintf(fp, "awbHwConfig->uvRange_param[1].slope_inv[0] = %d;\n", wpDetectPara.uvRange_param[1].slope_inv[0]);
645 fprintf(fp, "awbHwConfig->uvRange_param[1].slope_inv[1] = %d;\n", wpDetectPara.uvRange_param[1].slope_inv[1]);
646 fprintf(fp, "awbHwConfig->uvRange_param[1].slope_inv[2] = %d;\n", wpDetectPara.uvRange_param[1].slope_inv[2]);
647 fprintf(fp, "awbHwConfig->uvRange_param[1].slope_inv[3] = %d;\n", wpDetectPara.uvRange_param[1].slope_inv[3]);
648 fprintf(fp, "awbHwConfig->uvRange_param[2].pu_region[0] = %d;\n", wpDetectPara.uvRange_param[2].pu_region[0]);
649 fprintf(fp, "awbHwConfig->uvRange_param[2].pv_region[0] = %d;\n", wpDetectPara.uvRange_param[2].pv_region[0]);
650 fprintf(fp, "awbHwConfig->uvRange_param[2].pu_region[1] = %d;\n", wpDetectPara.uvRange_param[2].pu_region[1]);
651 fprintf(fp, "awbHwConfig->uvRange_param[2].pv_region[1] = %d;\n", wpDetectPara.uvRange_param[2].pv_region[1]);
652 fprintf(fp, "awbHwConfig->uvRange_param[2].pu_region[2] = %d;\n", wpDetectPara.uvRange_param[2].pu_region[2]);
653 fprintf(fp, "awbHwConfig->uvRange_param[2].pv_region[2] = %d;\n", wpDetectPara.uvRange_param[2].pv_region[2]);
654 fprintf(fp, "awbHwConfig->uvRange_param[2].pu_region[3] = %d;\n", wpDetectPara.uvRange_param[2].pu_region[3]);
655 fprintf(fp, "awbHwConfig->uvRange_param[2].pv_region[3] = %d;\n", wpDetectPara.uvRange_param[2].pv_region[3]);
656 fprintf(fp, "awbHwConfig->uvRange_param[2].slope_inv[0] = %d;\n", wpDetectPara.uvRange_param[2].slope_inv[0]);
657 fprintf(fp, "awbHwConfig->uvRange_param[2].slope_inv[1] = %d;\n", wpDetectPara.uvRange_param[2].slope_inv[1]);
658 fprintf(fp, "awbHwConfig->uvRange_param[2].slope_inv[2] = %d;\n", wpDetectPara.uvRange_param[2].slope_inv[2]);
659 fprintf(fp, "awbHwConfig->uvRange_param[2].slope_inv[3] = %d;\n", wpDetectPara.uvRange_param[2].slope_inv[3]);
660 fprintf(fp, "awbHwConfig->uvRange_param[3].pu_region[0] = %d;\n", wpDetectPara.uvRange_param[3].pu_region[0]);
661 fprintf(fp, "awbHwConfig->uvRange_param[3].pv_region[0] = %d;\n", wpDetectPara.uvRange_param[3].pv_region[0]);
662 fprintf(fp, "awbHwConfig->uvRange_param[3].pu_region[1] = %d;\n", wpDetectPara.uvRange_param[3].pu_region[1]);
663 fprintf(fp, "awbHwConfig->uvRange_param[3].pv_region[1] = %d;\n", wpDetectPara.uvRange_param[3].pv_region[1]);
664 fprintf(fp, "awbHwConfig->uvRange_param[3].pu_region[2] = %d;\n", wpDetectPara.uvRange_param[3].pu_region[2]);
665 fprintf(fp, "awbHwConfig->uvRange_param[3].pv_region[2] = %d;\n", wpDetectPara.uvRange_param[3].pv_region[2]);
666 fprintf(fp, "awbHwConfig->uvRange_param[3].pu_region[3] = %d;\n", wpDetectPara.uvRange_param[3].pu_region[3]);
667 fprintf(fp, "awbHwConfig->uvRange_param[3].pv_region[3] = %d;\n", wpDetectPara.uvRange_param[3].pv_region[3]);
668 fprintf(fp, "awbHwConfig->uvRange_param[3].slope_inv[0] = %d;\n", wpDetectPara.uvRange_param[3].slope_inv[0]);
669 fprintf(fp, "awbHwConfig->uvRange_param[3].slope_inv[1] = %d;\n", wpDetectPara.uvRange_param[3].slope_inv[1]);
670 fprintf(fp, "awbHwConfig->uvRange_param[3].slope_inv[2] = %d;\n", wpDetectPara.uvRange_param[3].slope_inv[2]);
671 fprintf(fp, "awbHwConfig->uvRange_param[3].slope_inv[3] = %d;\n", wpDetectPara.uvRange_param[3].slope_inv[3]);
672
673 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[0] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[0]);
674 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[1] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[1]);
675 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[2] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[2]);
676 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[3] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[3]);
677 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[4] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[4]);
678 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[5] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[5]);
679 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[6] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[6]);
680 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[7] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[7]);
681 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[8] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[8]);
682 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[9] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[9]);
683 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[10] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[10]);
684 fprintf(fp, "awbHwConfig->icrgb2RYuv_matrix[11] = %d;\n", wpDetectPara.icrgb2RYuv_matrix[11]);
685
686 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcurve_u[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcurve_u[0]);
687 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcurve_u[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcurve_u[1]);
688 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcurve_u[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcurve_u[2]);
689 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcurve_u[3] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcurve_u[3]);
690 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcurve_u[4] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcurve_u[4]);
691 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcurve_u[5] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcurve_u[5]);
692 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcure_th[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcure_th[0]);
693 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcure_th[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcure_th[1]);
694 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcure_th[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcure_th[2]);
695 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcure_th[3] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcure_th[3]);
696 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcure_th[4] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcure_th[4]);
697 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].thcure_th[5] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].thcure_th[5]);
698 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].lineP1[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].lineP1[0]);
699 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].lineP1[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].lineP1[1]);
700 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].lineP1[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].lineP1[2]);
701 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].vP1P2[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].vP1P2[0]);
702 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].vP1P2[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].vP1P2[1]);
703 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].vP1P2[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].vP1P2[2]);
704 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[0].disP1P2 = %d;\n", wpDetectPara.ic3Dyuv2Range_param[0].disP1P2);
705
706 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcurve_u[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcurve_u[0]);
707 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcurve_u[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcurve_u[1]);
708 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcurve_u[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcurve_u[2]);
709 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcurve_u[3] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcurve_u[3]);
710 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcurve_u[4] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcurve_u[4]);
711 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcurve_u[5] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcurve_u[5]);
712 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcure_th[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcure_th[0]);
713 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcure_th[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcure_th[1]);
714 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcure_th[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcure_th[2]);
715 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcure_th[3] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcure_th[3]);
716 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcure_th[4] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcure_th[4]);
717 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].thcure_th[5] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].thcure_th[5]);
718 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].lineP1[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].lineP1[0]);
719 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].lineP1[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].lineP1[1]);
720 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].lineP1[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].lineP1[2]);
721 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].vP1P2[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].vP1P2[0]);
722 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].vP1P2[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].vP1P2[1]);
723 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].vP1P2[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].vP1P2[2]);
724 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[1].disP1P2 = %d;\n", wpDetectPara.ic3Dyuv2Range_param[1].disP1P2);
725
726 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcurve_u[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcurve_u[0]);
727 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcurve_u[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcurve_u[1]);
728 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcurve_u[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcurve_u[2]);
729 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcurve_u[3] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcurve_u[3]);
730 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcurve_u[4] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcurve_u[4]);
731 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcurve_u[5] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcurve_u[5]);
732 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcure_th[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcure_th[0]);
733 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcure_th[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcure_th[1]);
734 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcure_th[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcure_th[2]);
735 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcure_th[3] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcure_th[3]);
736 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcure_th[4] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcure_th[4]);
737 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].thcure_th[5] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].thcure_th[5]);
738 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].lineP1[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].lineP1[0]);
739 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].lineP1[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].lineP1[1]);
740 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].lineP1[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].lineP1[2]);
741 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].vP1P2[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].vP1P2[0]);
742 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].vP1P2[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].vP1P2[1]);
743 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].vP1P2[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].vP1P2[2]);
744 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[2].disP1P2 = %d;\n", wpDetectPara.ic3Dyuv2Range_param[2].disP1P2);
745
746 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcurve_u[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcurve_u[0]);
747 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcurve_u[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcurve_u[1]);
748 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcurve_u[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcurve_u[2]);
749 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcurve_u[3] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcurve_u[3]);
750 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcurve_u[4] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcurve_u[4]);
751 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcurve_u[5] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcurve_u[5]);
752 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcure_th[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcure_th[0]);
753 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcure_th[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcure_th[1]);
754 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcure_th[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcure_th[2]);
755 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcure_th[3] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcure_th[3]);
756 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcure_th[4] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcure_th[4]);
757 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].thcure_th[5] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].thcure_th[5]);
758 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].lineP1[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].lineP1[0]);
759 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].lineP1[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].lineP1[1]);
760 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].lineP1[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].lineP1[2]);
761 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].vP1P2[0] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].vP1P2[0]);
762 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].vP1P2[1] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].vP1P2[1]);
763 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].vP1P2[2] = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].vP1P2[2]);
764 fprintf(fp, "awbHwConfig->ic3Dyuv2Range_param[3].disP1P2 = %d;\n", wpDetectPara.ic3Dyuv2Range_param[3].disP1P2);
765 fprintf(fp, "awbHwConfig->rgb2xy_param.pseudoLuminanceWeight[0] = %d;\n", wpDetectPara.rgb2xy_param.pseudoLuminanceWeight[0] ); //rgb2xy parpmeter
766 fprintf(fp, "awbHwConfig->rgb2xy_param.pseudoLuminanceWeight[1] = %d;\n", wpDetectPara.rgb2xy_param.pseudoLuminanceWeight[1] ); //rgb2xy parpmeter
767 fprintf(fp, "awbHwConfig->rgb2xy_param.pseudoLuminanceWeight[2] = %d;\n", wpDetectPara.rgb2xy_param.pseudoLuminanceWeight[2] ); //rgb2xy parpmeter
768 fprintf(fp, "awbHwConfig->rgb2xy_param.rotationMat[0] = %d;\n", wpDetectPara.rgb2xy_param.rotationMat[0] ); //rgb2xy parpmeter
769 fprintf(fp, "awbHwConfig->rgb2xy_param.rotationMat[1] = %d;\n", wpDetectPara.rgb2xy_param.rotationMat[1] ); //rgb2xy parpmeter
770 fprintf(fp, "awbHwConfig->rgb2xy_param.rotationMat[2] = %d;\n", wpDetectPara.rgb2xy_param.rotationMat[2] ); //rgb2xy parpmeter
771 fprintf(fp, "awbHwConfig->rgb2xy_param.rotationMat[3] = %d;\n", wpDetectPara.rgb2xy_param.rotationMat[3] ); //rgb2xy parpmeter
772 fprintf(fp, "awbHwConfig->rgb2xy_param.rotationMat[4] = %d;\n", wpDetectPara.rgb2xy_param.rotationMat[4] ); //rgb2xy parpmeter
773 fprintf(fp, "awbHwConfig->rgb2xy_param.rotationMat[5] = %d;\n", wpDetectPara.rgb2xy_param.rotationMat[5] ); //rgb2xy parpmeter
774 fprintf(fp, "awbHwConfig->xyRange_param[0].NorrangeX[0] = %d;\n", wpDetectPara.xyRange_param[0].NorrangeX[0] ); //xy detect xy region
775 fprintf(fp, "awbHwConfig->xyRange_param[0].NorrangeX[1] = %d;\n", wpDetectPara.xyRange_param[0].NorrangeX[1] ); //xy detect xy region
776 fprintf(fp, "awbHwConfig->xyRange_param[0].NorrangeY[0] = %d;\n", wpDetectPara.xyRange_param[0].NorrangeY[0] ); //xy detect xy region
777 fprintf(fp, "awbHwConfig->xyRange_param[0].NorrangeY[1] = %d;\n", wpDetectPara.xyRange_param[0].NorrangeY[1] ); //xy detect xy region
778 fprintf(fp, "awbHwConfig->xyRange_param[0].SperangeX[0] = %d;\n", wpDetectPara.xyRange_param[0].SperangeX[0] ); //xy detect xy region
779 fprintf(fp, "awbHwConfig->xyRange_param[0].SperangeX[1] = %d;\n", wpDetectPara.xyRange_param[0].SperangeX[1] ); //xy detect xy region
780 fprintf(fp, "awbHwConfig->xyRange_param[0].SperangeY[0] = %d;\n", wpDetectPara.xyRange_param[0].SperangeY[0] ); //xy detect xy region
781 fprintf(fp, "awbHwConfig->xyRange_param[0].SperangeY[1] = %d;\n", wpDetectPara.xyRange_param[0].SperangeY[1] ); //xy detect xy region
782 fprintf(fp, "awbHwConfig->xyRange_param[1].NorrangeX[0] = %d;\n", wpDetectPara.xyRange_param[1].NorrangeX[0] );
783 fprintf(fp, "awbHwConfig->xyRange_param[1].NorrangeX[1] = %d;\n", wpDetectPara.xyRange_param[1].NorrangeX[1] );
784 fprintf(fp, "awbHwConfig->xyRange_param[1].NorrangeY[0] = %d;\n", wpDetectPara.xyRange_param[1].NorrangeY[0] );
785 fprintf(fp, "awbHwConfig->xyRange_param[1].NorrangeY[1] = %d;\n", wpDetectPara.xyRange_param[1].NorrangeY[1] );
786 fprintf(fp, "awbHwConfig->xyRange_param[1].SperangeX[0] = %d;\n", wpDetectPara.xyRange_param[1].SperangeX[0] );
787 fprintf(fp, "awbHwConfig->xyRange_param[1].SperangeX[1] = %d;\n", wpDetectPara.xyRange_param[1].SperangeX[1] );
788 fprintf(fp, "awbHwConfig->xyRange_param[1].SperangeY[0] = %d;\n", wpDetectPara.xyRange_param[1].SperangeY[0] );
789 fprintf(fp, "awbHwConfig->xyRange_param[1].SperangeY[1] = %d;\n", wpDetectPara.xyRange_param[1].SperangeY[1] );
790 fprintf(fp, "awbHwConfig->xyRange_param[2].NorrangeX[0] = %d;\n", wpDetectPara.xyRange_param[2].NorrangeX[0] );
791 fprintf(fp, "awbHwConfig->xyRange_param[2].NorrangeX[1] = %d;\n", wpDetectPara.xyRange_param[2].NorrangeX[1] );
792 fprintf(fp, "awbHwConfig->xyRange_param[2].NorrangeY[0] = %d;\n", wpDetectPara.xyRange_param[2].NorrangeY[0] );
793 fprintf(fp, "awbHwConfig->xyRange_param[2].NorrangeY[1] = %d;\n", wpDetectPara.xyRange_param[2].NorrangeY[1] );
794 fprintf(fp, "awbHwConfig->xyRange_param[2].SperangeX[0] = %d;\n", wpDetectPara.xyRange_param[2].SperangeX[0] );
795 fprintf(fp, "awbHwConfig->xyRange_param[2].SperangeX[1] = %d;\n", wpDetectPara.xyRange_param[2].SperangeX[1] );
796 fprintf(fp, "awbHwConfig->xyRange_param[2].SperangeY[0] = %d;\n", wpDetectPara.xyRange_param[2].SperangeY[0] );
797 fprintf(fp, "awbHwConfig->xyRange_param[2].SperangeY[1] = %d;\n", wpDetectPara.xyRange_param[2].SperangeY[1] );
798 fprintf(fp, "awbHwConfig->xyRange_param[3].NorrangeX[0] = %d;\n", wpDetectPara.xyRange_param[3].NorrangeX[0] );
799 fprintf(fp, "awbHwConfig->xyRange_param[3].NorrangeX[1] = %d;\n", wpDetectPara.xyRange_param[3].NorrangeX[1] );
800 fprintf(fp, "awbHwConfig->xyRange_param[3].NorrangeY[0] = %d;\n", wpDetectPara.xyRange_param[3].NorrangeY[0] );
801 fprintf(fp, "awbHwConfig->xyRange_param[3].NorrangeY[1] = %d;\n", wpDetectPara.xyRange_param[3].NorrangeY[1] );
802 fprintf(fp, "awbHwConfig->xyRange_param[3].SperangeX[0] = %d;\n", wpDetectPara.xyRange_param[3].SperangeX[0] );
803 fprintf(fp, "awbHwConfig->xyRange_param[3].SperangeX[1] = %d;\n", wpDetectPara.xyRange_param[3].SperangeX[1] );
804 fprintf(fp, "awbHwConfig->xyRange_param[3].SperangeY[0] = %d;\n", wpDetectPara.xyRange_param[3].SperangeY[0] );
805 fprintf(fp, "awbHwConfig->xyRange_param[3].SperangeY[1] = %d;\n", wpDetectPara.xyRange_param[3].SperangeY[1] );
806 fprintf(fp, "awbHwConfig->pre_wbgain_inv_r = %d;\n", wpDetectPara.pre_wbgain_inv_r);
807 fprintf(fp, "awbHwConfig->pre_wbgain_inv_g = %d;\n", wpDetectPara.pre_wbgain_inv_g);
808 fprintf(fp, "awbHwConfig->pre_wbgain_inv_b = %d;\n", wpDetectPara.pre_wbgain_inv_b);
809 //add new
810 fprintf(fp, "awbHwConfig->multiwindow_en = %d;\n", wpDetectPara.multiwindow_en); // multiwindow auto white balance measure enable
811 fprintf(fp, "awbHwConfig->multiwindow[0][0] = %d;\n", wpDetectPara.multiwindow[0][0]); // multiwindow0 row start
812 fprintf(fp, "awbHwConfig->multiwindow[0][1] = %d;\n", wpDetectPara.multiwindow[0][1]); // multiwindow0 column start
813 fprintf(fp, "awbHwConfig->multiwindow[0][2] = %d;\n", wpDetectPara.multiwindow[0][2]); // multiwindow0 row size
814 fprintf(fp, "awbHwConfig->multiwindow[0][3] = %d;\n", wpDetectPara.multiwindow[0][3]); // multiwindow0 column size
815 fprintf(fp, "awbHwConfig->multiwindow[1][0] = %d;\n", wpDetectPara.multiwindow[1][0]); // multiwindow1 row start
816 fprintf(fp, "awbHwConfig->multiwindow[1][1] = %d;\n", wpDetectPara.multiwindow[1][1]); // multiwindow1 column start
817 fprintf(fp, "awbHwConfig->multiwindow[1][2] = %d;\n", wpDetectPara.multiwindow[1][2]); // multiwindow1 row size
818 fprintf(fp, "awbHwConfig->multiwindow[1][3] = %d;\n", wpDetectPara.multiwindow[1][3]); // multiwindow1 column size
819 fprintf(fp, "awbHwConfig->multiwindow[2][0] = %d;\n", wpDetectPara.multiwindow[2][0]); // multiwindow2 row start
820 fprintf(fp, "awbHwConfig->multiwindow[2][1] = %d;\n", wpDetectPara.multiwindow[2][1]); // multiwindow2 column start
821 fprintf(fp, "awbHwConfig->multiwindow[2][2] = %d;\n", wpDetectPara.multiwindow[2][2]); // multiwindow2 row size
822 fprintf(fp, "awbHwConfig->multiwindow[2][3] = %d;\n", wpDetectPara.multiwindow[2][3]); // multiwindow2 column size
823 fprintf(fp, "awbHwConfig->multiwindow[3][0] = %d;\n", wpDetectPara.multiwindow[3][0]); // multiwindow3 row start
824 fprintf(fp, "awbHwConfig->multiwindow[3][1] = %d;\n", wpDetectPara.multiwindow[3][1]); // multiwindow3 column start
825 fprintf(fp, "awbHwConfig->multiwindow[3][2] = %d;\n", wpDetectPara.multiwindow[3][2]); // multiwindow3 row size
826 fprintf(fp, "awbHwConfig->multiwindow[3][3] = %d;\n", wpDetectPara.multiwindow[3][3]); // multiwindow3 column size
827 fprintf(fp, "awbHwConfig->excludeWpRange[0].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;\n", wpDetectPara.excludeWpRange[0].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]); //white points region0 exclusion enable
828 fprintf(fp, "awbHwConfig->excludeWpRange[0].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;\n", wpDetectPara.excludeWpRange[0].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]); //white points region0 exclusion enable
829 fprintf(fp, "awbHwConfig->excludeWpRange[0].measureEnable = %d;\n", wpDetectPara.excludeWpRange[0].measureEnable); //white points region0 measure enable
830 fprintf(fp, "awbHwConfig->excludeWpRange[0].domain = (rk_aiq_awb_exc_range_domain_t)%d;\n", wpDetectPara.excludeWpRange[0].domain ); //white points region0 exclusion in domain,1 uv domain,2 xy domain.
831 fprintf(fp, "awbHwConfig->excludeWpRange[0].xu[0] = %d;\n", wpDetectPara.excludeWpRange[0].xu[0] ); //left x/u boundary of white points exclusion region0
832 fprintf(fp, "awbHwConfig->excludeWpRange[0].xu[1] = %d;\n", wpDetectPara.excludeWpRange[0].xu[1] ); //right x/u boundary of white points exclusion region0
833 fprintf(fp, "awbHwConfig->excludeWpRange[0].yv[0] = %d;\n", wpDetectPara.excludeWpRange[0].yv[0] ); //up y/v boundary of white points exclusion region0
834 fprintf(fp, "awbHwConfig->excludeWpRange[0].yv[1] = %d;\n", wpDetectPara.excludeWpRange[0].yv[1] ); //down y/v boundary of white points exclusion region0
835 fprintf(fp, "awbHwConfig->excludeWpRange[0].weightInculde = %d;\n", wpDetectPara.excludeWpRange[0].weightInculde); //white points region0 exclusion in domain,1 uv domain,2 xy domain.
836 fprintf(fp, "awbHwConfig->excludeWpRange[1].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;\n", wpDetectPara.excludeWpRange[1].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]); //white points region0 exclusion enable
837 fprintf(fp, "awbHwConfig->excludeWpRange[1].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;\n", wpDetectPara.excludeWpRange[1].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]); //white points region0 exclusion enable
838 fprintf(fp, "awbHwConfig->excludeWpRange[1].measureEnable = %d;\n", wpDetectPara.excludeWpRange[1].measureEnable); //white points region1 measure enable
839 fprintf(fp, "awbHwConfig->excludeWpRange[1].domain = (rk_aiq_awb_exc_range_domain_t)%d;\n", wpDetectPara.excludeWpRange[1].domain ); //white points region1 exclusion in domain,1 uv domain,2 xy domain.
840 fprintf(fp, "awbHwConfig->excludeWpRange[1].xu[0] = %d;\n", wpDetectPara.excludeWpRange[1].xu[0] ); //left x/u boundary of white points exclusion region1
841 fprintf(fp, "awbHwConfig->excludeWpRange[1].xu[1] = %d;\n", wpDetectPara.excludeWpRange[1].xu[1] ); //right x/u boundary of white points exclusion region1
842 fprintf(fp, "awbHwConfig->excludeWpRange[1].yv[0] = %d;\n", wpDetectPara.excludeWpRange[1].yv[0] ); //up y/v boundary of white points exclusion region1
843 fprintf(fp, "awbHwConfig->excludeWpRange[1].yv[1] = %d;\n", wpDetectPara.excludeWpRange[1].yv[1] ); //down y/v boundary of white points exclusion region1
844 fprintf(fp, "awbHwConfig->excludeWpRange[1].weightInculde = %d;\n", wpDetectPara.excludeWpRange[1].weightInculde); //white points region0 exclusion in domain,1 uv domain,2 xy domain.
845 fprintf(fp, "awbHwConfig->excludeWpRange[2].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;\n", wpDetectPara.excludeWpRange[2].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]); //white points region0 exclusion enable
846 fprintf(fp, "awbHwConfig->excludeWpRange[2].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;\n", wpDetectPara.excludeWpRange[2].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]); //white points region0 exclusion enable
847 fprintf(fp, "awbHwConfig->excludeWpRange[2].measureEnable = %d;\n", wpDetectPara.excludeWpRange[2].measureEnable); //white points region2 measure enable
848 fprintf(fp, "awbHwConfig->excludeWpRange[2].domain = (rk_aiq_awb_exc_range_domain_t)%d;\n", wpDetectPara.excludeWpRange[2].domain ); //white points region2 exclusion in domain,1 uv domain,2 xy domain.
849 fprintf(fp, "awbHwConfig->excludeWpRange[2].xu[0] = %d;\n", wpDetectPara.excludeWpRange[2].xu[0] ); //left x/u boundary of white points exclusion region2
850 fprintf(fp, "awbHwConfig->excludeWpRange[2].xu[1] = %d;\n", wpDetectPara.excludeWpRange[2].xu[1] ); //right x/u boundary of white points exclusion region2
851 fprintf(fp, "awbHwConfig->excludeWpRange[2].yv[0] = %d;\n", wpDetectPara.excludeWpRange[2].yv[0] ); //up y/v boundary of white points exclusion region2
852 fprintf(fp, "awbHwConfig->excludeWpRange[2].yv[1] = %d;\n", wpDetectPara.excludeWpRange[2].yv[1] ); //down y/v boundary of white points exclusion region2
853 fprintf(fp, "awbHwConfig->excludeWpRange[2].weightInculde = %d;\n", wpDetectPara.excludeWpRange[2].weightInculde); //white points region0 exclusion in domain,1 uv domain,2 xy domain.
854 fprintf(fp, "awbHwConfig->excludeWpRange[3].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;\n", wpDetectPara.excludeWpRange[3].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]); //white points region0 exclusion enable
855 fprintf(fp, "awbHwConfig->excludeWpRange[3].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;\n", wpDetectPara.excludeWpRange[3].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]); //white points region0 exclusion enable
856 fprintf(fp, "awbHwConfig->excludeWpRange[3].measureEnable = %d;\n", wpDetectPara.excludeWpRange[3].measureEnable); //white points region3 measure enable
857 fprintf(fp, "awbHwConfig->excludeWpRange[3].domain = (rk_aiq_awb_exc_range_domain_t)%d;\n", wpDetectPara.excludeWpRange[3].domain ); //white points region3 exclusion in domain,1 uv domain,2 xy domain.
858 fprintf(fp, "awbHwConfig->excludeWpRange[3].xu[0] = %d;\n", wpDetectPara.excludeWpRange[3].xu[0] ); //left x/u boundary of white points exclusion region3
859 fprintf(fp, "awbHwConfig->excludeWpRange[3].xu[1] = %d;\n", wpDetectPara.excludeWpRange[3].xu[1] ); //right x/u boundary of white points exclusion region3
860 fprintf(fp, "awbHwConfig->excludeWpRange[3].yv[0] = %d;\n", wpDetectPara.excludeWpRange[3].yv[0] ); //up y/v boundary of white points exclusion region3
861 fprintf(fp, "awbHwConfig->excludeWpRange[3].yv[1] = %d;\n", wpDetectPara.excludeWpRange[3].yv[1] ); //down y/v boundary of white points exclusion region3
862 fprintf(fp, "awbHwConfig->excludeWpRange[3].weightInculde = %d;\n", wpDetectPara.excludeWpRange[3].weightInculde); //white points region0 exclusion in domain,1 uv domain,2 xy domain.
863 fprintf(fp, "awbHwConfig->excludeWpRange[4].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;\n", wpDetectPara.excludeWpRange[4].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]); //white points region0 exclusion enable
864 fprintf(fp, "awbHwConfig->excludeWpRange[4].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;\n", wpDetectPara.excludeWpRange[4].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]); //white points region0 exclusion enable
865 fprintf(fp, "awbHwConfig->excludeWpRange[4].measureEnable = %d;\n", wpDetectPara.excludeWpRange[4].measureEnable); //white points region4 measure enable
866 fprintf(fp, "awbHwConfig->excludeWpRange[4].domain = (rk_aiq_awb_exc_range_domain_t)%d;\n", wpDetectPara.excludeWpRange[4].domain ); //white points region4 exclusion in domain,1 uv domain,2 xy domain.
867 fprintf(fp, "awbHwConfig->excludeWpRange[4].xu[0] = %d;\n", wpDetectPara.excludeWpRange[4].xu[0] ); //left x/u boundary of white points exclusion region4
868 fprintf(fp, "awbHwConfig->excludeWpRange[4].xu[1] = %d;\n", wpDetectPara.excludeWpRange[4].xu[1] ); //right x/u boundary of white points exclusion region4
869 fprintf(fp, "awbHwConfig->excludeWpRange[4].yv[0] = %d;\n", wpDetectPara.excludeWpRange[4].yv[0] ); //up y/v boundary of white points exclusion region4
870 fprintf(fp, "awbHwConfig->excludeWpRange[4].yv[1] = %d;\n", wpDetectPara.excludeWpRange[4].yv[1] ); //down y/v boundary of white points exclusion region4
871 fprintf(fp, "awbHwConfig->excludeWpRange[4].weightInculde = %d;\n", wpDetectPara.excludeWpRange[4].weightInculde); //white points region0 exclusion in domain,1 uv domain,2 xy domain.
872 fprintf(fp, "awbHwConfig->excludeWpRange[5].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;\n", wpDetectPara.excludeWpRange[5].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]); //white points region0 exclusion enable
873 fprintf(fp, "awbHwConfig->excludeWpRange[5].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;\n", wpDetectPara.excludeWpRange[5].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]); //white points region0 exclusion enable
874 fprintf(fp, "awbHwConfig->excludeWpRange[5].measureEnable = %d;\n", wpDetectPara.excludeWpRange[5].measureEnable); //white points region5 measure enable
875 fprintf(fp, "awbHwConfig->excludeWpRange[5].domain = (rk_aiq_awb_exc_range_domain_t)%d;\n", wpDetectPara.excludeWpRange[5].domain ); //white points region5 exclusion in domain,1 uv domain,2 xy domain.
876 fprintf(fp, "awbHwConfig->excludeWpRange[5].xu[0] = %d;\n", wpDetectPara.excludeWpRange[5].xu[0] ); //left x/u boundary of white points exclusion region5
877 fprintf(fp, "awbHwConfig->excludeWpRange[5].xu[1] = %d;\n", wpDetectPara.excludeWpRange[5].xu[1] ); //right x/u boundary of white points exclusion region5
878 fprintf(fp, "awbHwConfig->excludeWpRange[5].yv[0] = %d;\n", wpDetectPara.excludeWpRange[5].yv[0] ); //up y/v boundary of white points exclusion region5
879 fprintf(fp, "awbHwConfig->excludeWpRange[5].yv[1] = %d;\n", wpDetectPara.excludeWpRange[5].yv[1] ); //down y/v boundary of white points exclusion region5
880 fprintf(fp, "awbHwConfig->excludeWpRange[5].weightInculde = %d;\n", wpDetectPara.excludeWpRange[5].weightInculde); //white points region0 exclusion in domain,1 uv domain,2 xy domain.
881 fprintf(fp, "awbHwConfig->excludeWpRange[6].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201] = %d;\n", wpDetectPara.excludeWpRange[6].excludeEnable[RK_AIQ_AWB_XY_TYPE_NORMAL_V201]); //white points region0 exclusion enable
882 fprintf(fp, "awbHwConfig->excludeWpRange[6].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201] = %d;\n", wpDetectPara.excludeWpRange[6].excludeEnable[RK_AIQ_AWB_XY_TYPE_BIG_V201]); //white points region0 exclusion enable
883 fprintf(fp, "awbHwConfig->excludeWpRange[6].measureEnable = %d;\n", wpDetectPara.excludeWpRange[6].measureEnable); //white points region6 measure enable
884 fprintf(fp, "awbHwConfig->excludeWpRange[6].domain = (rk_aiq_awb_exc_range_domain_t)%d;\n", wpDetectPara.excludeWpRange[6].domain ); //white points region6 exclusion in domain,1 uv domain,2 xy domain.
885 fprintf(fp, "awbHwConfig->excludeWpRange[6].xu[0] = %d;\n", wpDetectPara.excludeWpRange[6].xu[0] ); //left x/u boundary of white points exclusion region6
886 fprintf(fp, "awbHwConfig->excludeWpRange[6].xu[1] = %d;\n", wpDetectPara.excludeWpRange[6].xu[1] ); //right x/u boundary of white points exclusion region6
887 fprintf(fp, "awbHwConfig->excludeWpRange[6].yv[0] = %d;\n", wpDetectPara.excludeWpRange[6].yv[0] ); //up y/v boundary of white points exclusion region6
888 fprintf(fp, "awbHwConfig->excludeWpRange[6].yv[1] = %d;\n", wpDetectPara.excludeWpRange[6].yv[1] ); //down y/v boundary of white points exclusion region6
889 fprintf(fp, "awbHwConfig->excludeWpRange[6].weightInculde = %d;\n", wpDetectPara.excludeWpRange[6].weightInculde); //white points region0 exclusion in domain,1 uv domain,2 xy domain.
890 for (int i = 0; i < RK_AIQ_AWBWP_WEIGHT_CURVE_DOT_NUM; i++) {
891 fprintf(fp, "awbHwConfig->wpDiffwei_y[%d] =%d;\n", i, wpDetectPara.wpDiffwei_y[i]);
892 }
893 for (int i = 0; i < RK_AIQ_AWBWP_WEIGHT_CURVE_DOT_NUM; i++) {
894 fprintf(fp, "awbHwConfig->wpDiffwei_w[%d] =%d;\n", i, wpDetectPara.wpDiffwei_w[i]);
895 }
896 for (int i = 0; i < RK_AIQ_AWB_GRID_NUM_TOTAL; i++) {
897 fprintf(fp, "awbHwConfig->blkWeight[%d] =%d;\n", i, wpDetectPara.blkWeight[i]);
898 }
899 fprintf(fp, "awbHwConfig->blk_rtdw_measure_en = %d;\n", wpDetectPara.blk_rtdw_measure_en );
900 fprintf(fp, "awbHwConfig->inputShiftEnable = %d;\n", wpDetectPara.inputShiftEnable);
901 fprintf(fp, "awbHwConfig->overexposure_value = %d; //not the final value\n", wpDetectPara.overexposure_value);
902 fprintf(fp, "awbHwConfig->inputBitIs12Bit = %d;\n", wpDetectPara.inputBitIs12Bit);
903 fprintf(fp, "awbHwConfig->frameChoose = %d;\n", wpDetectPara.frameChoose);
904
905 if (wpDetectPara.frameChoose == CUSTOM_AWB_INPUT_DRC) {
906 fprintf(fp, "//g_awb_para.sw_drc2awb_sel_en = %d;\n", 1);
907 }
908 else {
909 fprintf(fp, "//g_awb_para.sw_drc2awb_sel_en = %d;\n", 0);
910 if (wpDetectPara.frameChoose == CUSTOM_AWB_INPUT_BAYERNR) {
911 fprintf(fp, "//g_awb_para.sw_bnr2awb_sel_en = %d;\n", 1);
912 }
913 else {
914 fprintf(fp, "//g_awb_para.sw_bnr2awb_sel_en = %d;\n", 0);
915 fprintf(fp, "//g_awb_para.sw_3a_rawawb_sel = %d;\n", wpDetectPara.frameChoose);
916 }
917 }
918 fprintf(fp, "awbHwConfig->blc.enable = %d;\n", wpDetectPara.blc.enable);
919 fprintf(fp, "awbHwConfig->blc.blc[0] = %d;\n", wpDetectPara.blc.blc[0]);
920 fprintf(fp, "awbHwConfig->blc.blc[1] = %d;\n", wpDetectPara.blc.blc[1]);
921 fprintf(fp, "awbHwConfig->blc.blc[2] = %d;\n", wpDetectPara.blc.blc[2]);
922 fprintf(fp, "awbHwConfig->blc.blc[3] = %d;\n", wpDetectPara.blc.blc[3]);
923 fclose(fp);
924
925 }
926 #endif
927 }
928
929
930 RKAIQ_END_DECLARE
931