hc
2024-08-16 a24a44ff9ca902811b99aa9663d697cf452e08ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
/*
 * Copyright (c) 2019-2022 Rockchip Eletronics Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include "rk_aiq_user_api_adehaze.h"
 
#include "algo_handlers/RkAiqAdhazHandle.h"
#include "uAPI2/rk_aiq_user_api2_adehaze.h"
 
RKAIQ_BEGIN_DECLARE
 
#ifdef RK_SIMULATOR_HW
#define CHECK_USER_API_ENABLE
#endif
 
/*
void
DehazeTransferSetToolData(CalibDbV2_dehaze_V20_t* DehazeV2, CalibDbDehaze_t *DehazeV1)
{
    //len
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_min_th_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_max_th_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yhist_th_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yblk_th_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dark_th_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_max_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_min_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.wt_max_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_max_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_min_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_max_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_base_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_off_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_wt_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_air_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_tmax_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_thed_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_weitcur_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_weitcur_len = 9;
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_thed_len = 9;
 
    DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO_len = 9;
    DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.enhance_value_len = 9;
 
    DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO_len = 9;
    DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_gratio_len = 9;
    DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_th_off_len = 9;
    DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_k_len = 9;
    DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_min_len = 9;
    DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_scale_len = 9;
    DehazeV2->DehazeTuningPara.hist_setting.HistData.cfg_gratio_len = 9;
 
    //malloc
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_min_th = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_max_th = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yhist_th = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yblk_th = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dark_th = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_max = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_min = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.wt_max = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_max = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_min = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_max = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_base = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_off = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_wt = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_air = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_tmax = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_thed = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_weitcur = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_weitcur = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_thed = (float *) malloc(sizeof(float) * 9);
 
    DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.enhance_value = (float *) malloc(sizeof(float) * 9);
 
    DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_gratio = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_th_off = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_k = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_min = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_scale = (float *) malloc(sizeof(float) * 9);
    DehazeV2->DehazeTuningPara.hist_setting.HistData.cfg_gratio = (float *) malloc(sizeof(float) * 9);
 
    DehazeV2->DehazeTuningPara.Enable = DehazeV1->en ? true : false;
    DehazeV2->DehazeTuningPara.cfg_alpha = DehazeV1->cfg_alpha_normal;
    //dehaze
    DehazeV2->DehazeTuningPara.dehaze_setting.en = DehazeV1->dehaze_setting[0].en ? true : false;
    for(int i = 0; i < 9; i++) {
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO[i] = DehazeV1->dehaze_setting[0].iso[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_min_th[i] = DehazeV1->dehaze_setting[0].dc_min_th[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_max_th[i] = DehazeV1->dehaze_setting[0].dc_max_th[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yhist_th[i] = DehazeV1->dehaze_setting[0].yhist_th[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yblk_th[i] = DehazeV1->dehaze_setting[0].yblk_th[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dark_th[i] = DehazeV1->dehaze_setting[0].dark_th[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_max[i] = DehazeV1->dehaze_setting[0].bright_max[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_min[i] = DehazeV1->dehaze_setting[0].bright_min[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.wt_max[i] = DehazeV1->dehaze_setting[0].wt_max[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_max[i] = DehazeV1->dehaze_setting[0].air_max[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_min[i] = DehazeV1->dehaze_setting[0].air_min[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_base[i] = DehazeV1->dehaze_setting[0].tmax_base[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_off[i] = DehazeV1->dehaze_setting[0].tmax_off[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_max[i] = DehazeV1->dehaze_setting[0].tmax_max[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_wt[i] = DehazeV1->dehaze_setting[0].cfg_wt[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_air[i] = DehazeV1->dehaze_setting[0].cfg_air[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_tmax[i] = DehazeV1->dehaze_setting[0].cfg_tmax[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_thed[i] = DehazeV1->dehaze_setting[0].dc_thed[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_weitcur[i] = DehazeV1->dehaze_setting[0].dc_weitcur[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_thed[i] = DehazeV1->dehaze_setting[0].air_thed[i];
        DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_weitcur[i] = DehazeV1->dehaze_setting[0].air_weitcur[i];
    }
    DehazeV2->DehazeTuningPara.dehaze_setting.stab_fnum = DehazeV1->dehaze_setting[0].IIR_setting.stab_fnum;
    DehazeV2->DehazeTuningPara.dehaze_setting.sigma = DehazeV1->dehaze_setting[0].IIR_setting.sigma;
    DehazeV2->DehazeTuningPara.dehaze_setting.wt_sigma = DehazeV1->dehaze_setting[0].IIR_setting.wt_sigma;
    DehazeV2->DehazeTuningPara.dehaze_setting.air_sigma = DehazeV1->dehaze_setting[0].IIR_setting.air_sigma;
    DehazeV2->DehazeTuningPara.dehaze_setting.tmax_sigma = DehazeV1->dehaze_setting[0].IIR_setting.tmax_sigma;
    //enhance
    DehazeV2->DehazeTuningPara.enhance_setting.en = DehazeV1->enhance_setting[0].en ? true : false;
    for(int i = 0; i < 9; i++) {
        DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO[i] = DehazeV1->enhance_setting[0].iso[i];
        DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.enhance_value[i] = DehazeV1->enhance_setting[0].enhance_value[i];
    }
    //hist
    DehazeV2->DehazeTuningPara.hist_setting.en = DehazeV1->hist_setting[0].en ? true : false;
    DehazeV2->DehazeTuningPara.hist_setting.hist_para_en = DehazeV1->hist_setting[0].hist_para_en[0] ? true : false;
    DehazeV2->DehazeTuningPara.hist_setting.hist_channel = DehazeV1->hist_setting[0].hist_channel[0] ? true : false;
    for(int i = 0; i < 9; i++) {
        DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO[i] = DehazeV1->hist_setting[0].iso[i];
        DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_gratio[i] = DehazeV1->hist_setting[0].hist_gratio[i];
        DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_th_off[i] = DehazeV1->hist_setting[0].hist_th_off[i];
        DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_k[i] = DehazeV1->hist_setting[0].hist_k[i];
        DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_min[i] = DehazeV1->hist_setting[0].hist_min[i];
        DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_scale[i] = DehazeV1->hist_setting[0].hist_scale[i];
        DehazeV2->DehazeTuningPara.hist_setting.HistData.cfg_gratio[i] = DehazeV1->hist_setting[0].cfg_gratio[i];
    }
}
 
void
DehazeTransferGetToolData(CalibDbV2_dehaze_V20_t* DehazeV2, CalibDbDehaze_t *DehazeV1)
{
 
    DehazeV1->en = DehazeV2->DehazeTuningPara.Enable ? 1 : 0;
    DehazeV1->cfg_alpha_normal = DehazeV2->DehazeTuningPara.cfg_alpha;
    DehazeV1->cfg_alpha_hdr = DehazeV2->DehazeTuningPara.cfg_alpha;
    DehazeV1->cfg_alpha_night = DehazeV2->DehazeTuningPara.cfg_alpha;
 
    //dehaze
    if(DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO_len >= 9)
        for(int j = 0; j < 5; j++ ) {
            DehazeV1->dehaze_setting[j].en = DehazeV2->DehazeTuningPara.dehaze_setting.en ? 1 : 0;
            for(int i = 0; i < 9; i++) {
                DehazeV1->dehaze_setting[j].iso[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO[i];
                DehazeV1->dehaze_setting[j].dc_min_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_min_th[i] ;
                DehazeV1->dehaze_setting[j].dc_max_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_max_th[i];
                DehazeV1->dehaze_setting[j].yhist_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yhist_th[i];
                DehazeV1->dehaze_setting[j].yblk_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yblk_th[i];
                DehazeV1->dehaze_setting[j].dark_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dark_th[i];
                DehazeV1->dehaze_setting[j].bright_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_max[i];
                DehazeV1->dehaze_setting[j].bright_min[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_min[i];
                DehazeV1->dehaze_setting[j].wt_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.wt_max[i];
                DehazeV1->dehaze_setting[j].air_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_max[i];
                DehazeV1->dehaze_setting[j].air_min[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_min[i];
                DehazeV1->dehaze_setting[j].tmax_base[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_base[i];
                DehazeV1->dehaze_setting[j].tmax_off[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_off[i];
                DehazeV1->dehaze_setting[j].tmax_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_max[i];
                DehazeV1->dehaze_setting[j].cfg_wt[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_wt[i];
                DehazeV1->dehaze_setting[j].cfg_air[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_air[i];
                DehazeV1->dehaze_setting[j].cfg_tmax[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_tmax[i];
                DehazeV1->dehaze_setting[j].dc_thed[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_thed[i];
                DehazeV1->dehaze_setting[j].dc_weitcur[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_weitcur[i];
                DehazeV1->dehaze_setting[j].air_thed[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_thed[i];
                DehazeV1->dehaze_setting[j].air_weitcur[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_weitcur[i];
            }
            DehazeV1->dehaze_setting[j].IIR_setting.stab_fnum = DehazeV2->DehazeTuningPara.dehaze_setting.stab_fnum;
            DehazeV1->dehaze_setting[j].IIR_setting.sigma = DehazeV2->DehazeTuningPara.dehaze_setting.sigma;
            DehazeV1->dehaze_setting[j].IIR_setting.wt_sigma = DehazeV2->DehazeTuningPara.dehaze_setting.wt_sigma;
            DehazeV1->dehaze_setting[j].IIR_setting.air_sigma = DehazeV2->DehazeTuningPara.dehaze_setting.air_sigma ;
            DehazeV1->dehaze_setting[j].IIR_setting.tmax_sigma = DehazeV2->DehazeTuningPara.dehaze_setting.tmax_sigma;
        }
    else if(DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO_len >= 1 && DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO_len < 9) {
        for(int j = 0; j < 5; j++ ) {
            //dehaze
            DehazeV1->dehaze_setting[j].en = DehazeV2->DehazeTuningPara.dehaze_setting.en ? 1 : 0;
            for(int i = 0; i < DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO_len; i++) {
                DehazeV1->dehaze_setting[j].iso[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO[i];
                DehazeV1->dehaze_setting[j].dc_min_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_min_th[i] ;
                DehazeV1->dehaze_setting[j].dc_max_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_max_th[i];
                DehazeV1->dehaze_setting[j].yhist_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yhist_th[i];
                DehazeV1->dehaze_setting[j].yblk_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yblk_th[i];
                DehazeV1->dehaze_setting[j].dark_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dark_th[i];
                DehazeV1->dehaze_setting[j].bright_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_max[i];
                DehazeV1->dehaze_setting[j].bright_min[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_min[i];
                DehazeV1->dehaze_setting[j].wt_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.wt_max[i];
                DehazeV1->dehaze_setting[j].air_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_max[i];
                DehazeV1->dehaze_setting[j].air_min[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_min[i];
                DehazeV1->dehaze_setting[j].tmax_base[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_base[i];
                DehazeV1->dehaze_setting[j].tmax_off[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_off[i];
                DehazeV1->dehaze_setting[j].tmax_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_max[i];
                DehazeV1->dehaze_setting[j].cfg_wt[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_wt[i];
                DehazeV1->dehaze_setting[j].cfg_air[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_air[i];
                DehazeV1->dehaze_setting[j].cfg_tmax[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_tmax[i];
                DehazeV1->dehaze_setting[j].dc_thed[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_thed[i];
                DehazeV1->dehaze_setting[j].dc_weitcur[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_weitcur[i];
                DehazeV1->dehaze_setting[j].air_thed[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_thed[i];
                DehazeV1->dehaze_setting[j].air_weitcur[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_weitcur[i];
            }
            DehazeV1->dehaze_setting[j].IIR_setting.stab_fnum = DehazeV2->DehazeTuningPara.dehaze_setting.stab_fnum;
            DehazeV1->dehaze_setting[j].IIR_setting.sigma = DehazeV2->DehazeTuningPara.dehaze_setting.sigma;
            DehazeV1->dehaze_setting[j].IIR_setting.wt_sigma = DehazeV2->DehazeTuningPara.dehaze_setting.wt_sigma;
            DehazeV1->dehaze_setting[j].IIR_setting.air_sigma = DehazeV2->DehazeTuningPara.dehaze_setting.air_sigma ;
            DehazeV1->dehaze_setting[j].IIR_setting.tmax_sigma = DehazeV2->DehazeTuningPara.dehaze_setting.tmax_sigma;
        }
        int k = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO_len - 1;
        for(int j = 0; j < 5; j++ ) {
            //dehaze
            DehazeV1->dehaze_setting[j].en = DehazeV2->DehazeTuningPara.dehaze_setting.en ? 1 : 0;
            for(int i = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO_len; i < 9; i++) {
                DehazeV1->dehaze_setting[j].iso[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.ISO[k];
                DehazeV1->dehaze_setting[j].dc_min_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_min_th[k] ;
                DehazeV1->dehaze_setting[j].dc_max_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_max_th[k];
                DehazeV1->dehaze_setting[j].yhist_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yhist_th[k];
                DehazeV1->dehaze_setting[j].yblk_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.yblk_th[k];
                DehazeV1->dehaze_setting[j].dark_th[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dark_th[k];
                DehazeV1->dehaze_setting[j].bright_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_max[k];
                DehazeV1->dehaze_setting[j].bright_min[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.bright_min[k];
                DehazeV1->dehaze_setting[j].wt_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.wt_max[k];
                DehazeV1->dehaze_setting[j].air_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_max[k];
                DehazeV1->dehaze_setting[j].air_min[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_min[k];
                DehazeV1->dehaze_setting[j].tmax_base[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_base[k];
                DehazeV1->dehaze_setting[j].tmax_off[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_off[k];
                DehazeV1->dehaze_setting[j].tmax_max[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.tmax_max[k];
                DehazeV1->dehaze_setting[j].cfg_wt[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_wt[k];
                DehazeV1->dehaze_setting[j].cfg_air[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_air[k];
                DehazeV1->dehaze_setting[j].cfg_tmax[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.cfg_tmax[k];
                DehazeV1->dehaze_setting[j].dc_thed[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_thed[k];
                DehazeV1->dehaze_setting[j].dc_weitcur[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.dc_weitcur[k];
                DehazeV1->dehaze_setting[j].air_thed[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_thed[k];
                DehazeV1->dehaze_setting[j].air_weitcur[i] = DehazeV2->DehazeTuningPara.dehaze_setting.DehazeData.air_weitcur[k];
            }
            DehazeV1->dehaze_setting[j].IIR_setting.stab_fnum = DehazeV2->DehazeTuningPara.dehaze_setting.stab_fnum;
            DehazeV1->dehaze_setting[j].IIR_setting.sigma = DehazeV2->DehazeTuningPara.dehaze_setting.sigma;
            DehazeV1->dehaze_setting[j].IIR_setting.wt_sigma = DehazeV2->DehazeTuningPara.dehaze_setting.wt_sigma;
            DehazeV1->dehaze_setting[j].IIR_setting.air_sigma = DehazeV2->DehazeTuningPara.dehaze_setting.air_sigma ;
            DehazeV1->dehaze_setting[j].IIR_setting.tmax_sigma = DehazeV2->DehazeTuningPara.dehaze_setting.tmax_sigma;
        }
    }
 
    //enhance
    if(DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO_len >= 9)
        for(int j = 0; j < 5; j++ ) {
            DehazeV1->enhance_setting[j].en = DehazeV2->DehazeTuningPara.enhance_setting.en ? 1 : 0;
            for(int i = 0; i < 9; i++) {
                DehazeV1->enhance_setting[j].iso[i] = DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO[i];
                DehazeV1->enhance_setting[j].enhance_value[i] = DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.enhance_value[i];
            }
        }
    else if(DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO_len >= 1 && DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO_len < 9) {
        for(int j = 0; j < 5; j++ ) {
            DehazeV1->enhance_setting[j].en = DehazeV2->DehazeTuningPara.enhance_setting.en ? 1 : 0;
            for(int i = 0; i < DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO_len; i++) {
                DehazeV1->enhance_setting[j].iso[i] = DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO[i];
                DehazeV1->enhance_setting[j].enhance_value[i] = DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.enhance_value[i];
            }
        }
        int k = DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO_len - 1;
        for(int j = 0; j < 5; j++ ) {
            DehazeV1->enhance_setting[j].en = DehazeV2->DehazeTuningPara.enhance_setting.en ? 1 : 0;
            for(int i = DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO_len; i < 9; i++) {
                DehazeV1->enhance_setting[j].iso[i] = DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.ISO[k];
                DehazeV1->enhance_setting[j].enhance_value[i] = DehazeV2->DehazeTuningPara.enhance_setting.EnhanceData.enhance_value[k];
            }
        }
    }
 
    //hist
    if(DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO_len >= 9)
        for(int j = 0; j < 5; j++ ) {
            DehazeV1->hist_setting[j].en = DehazeV2->DehazeTuningPara.hist_setting.en ? 1 : 0;
            for(int i = 0; i < 9; i++) {
                DehazeV1->hist_setting[j].hist_para_en[i] = DehazeV2->DehazeTuningPara.hist_setting.hist_para_en ? 1 : 0;
                DehazeV1->hist_setting[j].hist_channel[i] = DehazeV2->DehazeTuningPara.hist_setting.hist_channel ? 1 : 0;
                DehazeV1->hist_setting[j].iso[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO[i];
                DehazeV1->hist_setting[j].hist_gratio[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_gratio[i];
                DehazeV1->hist_setting[j].hist_th_off[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_th_off[i];
                DehazeV1->hist_setting[j].hist_k[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_k[i];
                DehazeV1->hist_setting[j].hist_min[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_min[i];
                DehazeV1->hist_setting[j].hist_scale[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_scale[i];
                DehazeV1->hist_setting[j].cfg_gratio[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.cfg_gratio[i];
            }
        }
    else if(DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO_len >= 1 && DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO_len < 9) {
        for(int j = 0; j < 5; j++ ) {
            DehazeV1->hist_setting[j].en = DehazeV2->DehazeTuningPara.hist_setting.en ? 1 : 0;
            for(int i = 0; i < DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO_len; i++) {
                DehazeV1->hist_setting[j].hist_para_en[i] = DehazeV2->DehazeTuningPara.hist_setting.hist_para_en  ? 1 : 0;
                DehazeV1->hist_setting[j].hist_channel[i] = DehazeV2->DehazeTuningPara.hist_setting.hist_channel ? 1 : 0;
                DehazeV1->hist_setting[j].iso[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO[i];
                DehazeV1->hist_setting[j].hist_gratio[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_gratio[i];
                DehazeV1->hist_setting[j].hist_th_off[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_th_off[i];
                DehazeV1->hist_setting[j].hist_k[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_k[i];
                DehazeV1->hist_setting[j].hist_min[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_min[i];
                DehazeV1->hist_setting[j].hist_scale[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_scale[i];
                DehazeV1->hist_setting[j].cfg_gratio[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.cfg_gratio[i];
            }
        }
        int k = DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO_len - 1;
        for(int j = 0; j < 5; j++ ) {
            DehazeV1->hist_setting[j].en = DehazeV2->DehazeTuningPara.hist_setting.en ? 1 : 0;
            for(int i = DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO_len; i < 9; i++) {
                DehazeV1->hist_setting[j].hist_para_en[i] = DehazeV2->DehazeTuningPara.hist_setting.hist_para_en  ? 1 : 0;
                DehazeV1->hist_setting[j].hist_channel[i] = DehazeV2->DehazeTuningPara.hist_setting.hist_channel ? 1 : 0;
                DehazeV1->hist_setting[j].iso[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.ISO[k];
                DehazeV1->hist_setting[j].hist_gratio[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_gratio[k];
                DehazeV1->hist_setting[j].hist_th_off[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_th_off[k];
                DehazeV1->hist_setting[j].hist_k[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_k[k];
                DehazeV1->hist_setting[j].hist_min[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_min[k];
                DehazeV1->hist_setting[j].hist_scale[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.hist_scale[k];
                DehazeV1->hist_setting[j].cfg_gratio[i] = DehazeV2->DehazeTuningPara.hist_setting.HistData.cfg_gratio[k];
            }
        }
    }
 
}
 
void
DehazeTransferSetData(adehaze_sw_V2_t* DehazeV2, adehaze_sw_t *DehazeV1)
{
    //HWversion
    DehazeV2->HWversion = ADEHAZE_ISP20;
 
    //op mode
    if(DehazeV1->mode == RK_AIQ_DEHAZE_MODE_INVALID)
        DehazeV2->AdehazeAtrrV20.mode = DEHAZE_API_BYPASS;
    else if(DehazeV1->mode == RK_AIQ_DEHAZE_MODE_MANUAL)
        DehazeV2->AdehazeAtrrV20.mode = DEHAZE_API_MANUAL;
    else if(DehazeV1->mode == RK_AIQ_DEHAZE_MODE_AUTO)
        DehazeV2->AdehazeAtrrV20.mode = DEHAZE_API_AUTO;
    else if(DehazeV1->mode == RK_AIQ_DEHAZE_MODE_OFF)
        DehazeV2->AdehazeAtrrV20.mode = DEHAZE_API_OFF;
    else if(DehazeV1->mode == RK_AIQ_DEHAZE_MODE_TOOL)
        DehazeV2->AdehazeAtrrV20.mode = DEHAZE_API_TOOL;
    else
        DehazeV2->AdehazeAtrrV20.mode = DEHAZE_API_BYPASS;
 
    //st manual
    memcpy(&DehazeV2->AdehazeAtrrV20.stManual, &DehazeV1->stManual, sizeof(rk_aiq_dehaze_M_attrib_t));
 
    //st enhance
    memcpy(&DehazeV2->AdehazeAtrrV20.stEnhanceManual, &DehazeV1->stEnhance, sizeof(rk_aiq_dehaze_enhance_t));
 
    // st auto
    if(DehazeV1->mode == RK_AIQ_DEHAZE_MODE_AUTO)
        DehazeTransferSetToolData(&DehazeV2->AdehazeAtrrV20.stTool, &DehazeV1->stAuto);
    if(DehazeV1->mode == RK_AIQ_DEHAZE_MODE_TOOL)
        DehazeTransferSetToolData(&DehazeV2->AdehazeAtrrV20.stTool, &DehazeV1->stTool);
}
 
void
DehazeTransferGetData(adehaze_sw_V2_t* DehazeV2, adehaze_sw_t *DehazeV1)
{
    //bypass
    if(DehazeV2->AdehazeAtrrV20.mode == DEHAZE_API_BYPASS)
        DehazeV1->byPass = true;
    else
        DehazeV1->byPass = false;
 
    //op mode
    if(DehazeV2->AdehazeAtrrV20.mode == DEHAZE_API_BYPASS)
        DehazeV1->mode = RK_AIQ_DEHAZE_MODE_INVALID;
    else if(DehazeV2->AdehazeAtrrV20.mode == DEHAZE_API_MANUAL)
        DehazeV1->mode = RK_AIQ_DEHAZE_MODE_MANUAL;
    else if(DehazeV2->AdehazeAtrrV20.mode == DEHAZE_API_AUTO)
        DehazeV1->mode = RK_AIQ_DEHAZE_MODE_AUTO;
    else if(DehazeV2->AdehazeAtrrV20.mode == DEHAZE_API_OFF)
        DehazeV1->mode = RK_AIQ_DEHAZE_MODE_OFF;
    else if(DehazeV2->AdehazeAtrrV20.mode == DEHAZE_API_TOOL)
        DehazeV1->mode = RK_AIQ_DEHAZE_MODE_TOOL;
    else
        DehazeV1->mode = RK_AIQ_DEHAZE_MODE_INVALID;
 
    //st manual
    memcpy(&DehazeV1->stManual, &DehazeV2->AdehazeAtrrV20.stManual, sizeof(rk_aiq_dehaze_M_attrib_t));
 
    //st enhance
    memcpy(&DehazeV1->stEnhance, &DehazeV2->AdehazeAtrrV20.stEnhanceManual, sizeof(rk_aiq_dehaze_enhance_t));
 
    // st auto
    DehazeTransferGetToolData(&DehazeV2->AdehazeAtrrV20.stTool, &DehazeV1->stAuto);
 
    //st tool
    DehazeTransferGetToolData(&DehazeV2->AdehazeAtrrV20.stTool, &DehazeV1->stTool);
}
 
XCamReturn  rk_aiq_user_api_adehaze_setSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx, adehaze_sw_t attr)
{
    adehaze_sw_V2_t dehazeAttr;
    memset(&dehazeAttr, 0, sizeof(adehaze_sw_V2_t));
 
    DehazeTransferSetData(&dehazeAttr, &attr);
 
    XCamReturn ret_dehaze = rk_aiq_user_api2_adehaze_setSwAttrib(sys_ctx, dehazeAttr);
 
    return ret_dehaze;
}
 
XCamReturn  rk_aiq_user_api_adehaze_getSwAttrib(const rk_aiq_sys_ctx_t* sys_ctx, adehaze_sw_t *attr)
{
    adehaze_sw_V2_t dehazeAttr;
    memset(&dehazeAttr, 0, sizeof(adehaze_sw_V2_t));
 
    DehazeTransferGetData(&dehazeAttr, attr);
 
    XCamReturn ret_dehaze = rk_aiq_user_api2_adehaze_getSwAttrib(sys_ctx, &dehazeAttr);
 
    return ret_dehaze;
}
*/
 
RKAIQ_END_DECLARE