xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/uAPI2/rk_aiq_user_api2_custom_awb_v32.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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