xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkisp_demo/demo/sample/sample_amerge_module.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  *  Copyright (c) 2019 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 "sample_comm.h"
19 
sample_amerge_usage()20 static void sample_amerge_usage()
21 {
22     printf("Usage : \n");
23     printf("\t 0) AMERGE:         test rk_aiq_user_api2_amerge_v10_SetAttrib stManual Sync.\n");
24     printf("\t 1) AMERGE:         test rk_aiq_user_api2_amerge_v10_SetAttrib stManual Async.\n");
25     printf("\t 2) AMERGE:         test rk_aiq_user_api2_amerge_v10_GetAttrib.\n");
26     printf(
27         "\t 3) AMERGE:         test rk_aiq_user_api2_amerge_v11_SetAttrib stManual BASEFRAME_SHORT "
28         "Sync.\n");
29     printf(
30         "\t 4) AMERGE:         test rk_aiq_user_api2_amerge_v11_SetAttrib stManual BASEFRAME_SHORT "
31         "Async.\n");
32     printf(
33         "\t 5) AMERGE:         test rk_aiq_user_api2_amerge_v11_SetAttrib stManual BASEFRAME_LONG "
34         "Sync.\n");
35     printf(
36         "\t 6) AMERGE:         test rk_aiq_user_api2_amerge_v11_SetAttrib stManual BASEFRAME_LONG "
37         "Async.\n");
38     printf("\t 7) AMERGE:         test rk_aiq_user_api2_amerge_v11_GetAttrib.\n");
39     printf(
40         "\t 8) AMERGE:         test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_SHORT "
41         "Sync.\n");
42     printf(
43         "\t 9) AMERGE:         test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_SHORT "
44         "Async.\n");
45     printf(
46         "\t a) AMERGE:         test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_LONG "
47         "EnableEachChn off Sync.\n");
48     printf(
49         "\t b) AMERGE:         test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_LONG "
50         "EnableEachChn off Async.\n");
51     printf(
52         "\t c) AMERGE:         test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_LONG "
53         "EnableEachChn on Sync.\n");
54     printf(
55         "\t d) AMERGE:         test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_LONG "
56         "EnableEachChn on Async.\n");
57     printf("\t e) AMERGE:         test rk_aiq_user_api2_amerge_v12_GetAttrib.\n");
58     printf(
59         "\t f) AMERGE:         test rk_aiq_user_api2_amerge_SetAttrib stManual BASEFRAME_SHORT "
60         "Sync.\n");
61     printf(
62         "\t g) AMERGE:         test rk_aiq_user_api2_amerge_SetAttrib stManual BASEFRAME_SHORT "
63         "Async.\n");
64     printf(
65         "\t h) AMERGE:         test rk_aiq_user_api2_amerge_SetAttrib stManual BASEFRAME_LONG "
66         "Sync.\n");
67     printf(
68         "\t i) AMERGE:         test rk_aiq_user_api2_amerge_SetAttrib stManual BASEFRAME_LONG "
69         "Async.\n");
70     printf("\t j) AMERGE:         test rk_aiq_user_api2_amerge_GetAttrib.\n");
71     printf("\t q) AMERGE:         return to main sample screen.\n");
72 
73     printf("\n");
74     printf("\t please press the key: ");
75 
76     return;
77 }
78 
sample_print_amerge_info(const void * arg)79 void sample_print_amerge_info(const void *arg)
80 {
81     printf ("enter AMERGE modult test!\n");
82 }
83 
sample_amerge_module(const void * arg)84 XCamReturn sample_amerge_module(const void *arg)
85 {
86     int key = -1;
87     CLEAR();
88 
89     mergeAttrV10_t attr_v10;
90     memset(&attr_v10, 0x0, sizeof(mergeAttrV10_t));
91     mergeAttrV11_t attr_v11;
92     memset(&attr_v11, 0x0, sizeof(mergeAttrV11_t));
93     mergeAttrV12_t attr_v12;
94     memset(&attr_v12, 0x0, sizeof(mergeAttrV12_t));
95     amerge_attrib_t attr_v2;
96     memset(&attr_v2, 0x0, sizeof(amerge_attrib_t));
97     const demo_context_t *demo_ctx = (demo_context_t *)arg;
98     const rk_aiq_sys_ctx_t* ctx ;
99     if (demo_ctx->camGroup) {
100         ctx = (rk_aiq_sys_ctx_t*)(demo_ctx->camgroup_ctx);
101     } else {
102         ctx = (rk_aiq_sys_ctx_t*)(demo_ctx->aiq_ctx);
103     }
104 
105     do {
106         sample_amerge_usage ();
107 
108         key = getchar ();
109         while (key == '\n' || key == '\r')
110             key = getchar();
111         printf ("\n");
112 
113         switch (key) {
114             case '0': {
115                 printf(
116                     "\t AMERGE test rk_aiq_user_api2_amerge_v10_SetAttrib stManual BASEFRAME_SHORT "
117                     "Sync\n\n");
118                 attr_v10.sync.sync_mode             = RK_AIQ_UAPI_MODE_DEFAULT;
119                 attr_v10.sync.done                  = false;
120                 attr_v10.opMode                     = MERGE_OPMODE_MANUAL;
121                 attr_v10.stManual.OECurve.Smooth    = 0.4;
122                 attr_v10.stManual.OECurve.Offset    = 210;
123                 attr_v10.stManual.MDCurve.LM_smooth = 0.4;
124                 attr_v10.stManual.MDCurve.LM_offset = 0.38;
125                 attr_v10.stManual.MDCurve.MS_smooth = 0.4;
126                 attr_v10.stManual.MDCurve.MS_offset = 0.38;
127                 rk_aiq_user_api2_amerge_v10_SetAttrib(ctx, &attr_v10);
128                 break;
129             }
130             case '1': {
131                 printf(
132                     "\t AMERGE test rk_aiq_user_api2_amerge_v10_SetAttrib stManual BASEFRAME_SHORT "
133                     "Async\n\n");
134                 attr_v10.sync.sync_mode             = RK_AIQ_UAPI_MODE_ASYNC;
135                 attr_v10.sync.done                  = false;
136                 attr_v10.opMode                     = MERGE_OPMODE_MANUAL;
137                 attr_v10.stManual.OECurve.Smooth    = 0.4;
138                 attr_v10.stManual.OECurve.Offset    = 210;
139                 attr_v10.stManual.MDCurve.LM_smooth = 0.4;
140                 attr_v10.stManual.MDCurve.LM_offset = 0.38;
141                 attr_v10.stManual.MDCurve.MS_smooth = 0.4;
142                 attr_v10.stManual.MDCurve.MS_offset = 0.38;
143                 rk_aiq_user_api2_amerge_v10_SetAttrib(ctx, &attr_v10);
144                 break;
145             }
146             case '2': {
147                 printf("\t AMERGE test rk_aiq_user_api2_amerge_v10_GetAttrib\n\n");
148                 rk_aiq_user_api2_amerge_v10_GetAttrib(ctx, &attr_v10);
149                 printf("\t sync = %d, done = %d\n", attr_v10.sync.sync_mode, attr_v10.sync.done);
150                 printf("\t attr_v10.mode:%d Envlv:%f MoveCoef:%f\n\n", attr_v10.opMode,
151                        attr_v10.Info.Envlv, attr_v10.Info.MoveCoef);
152                 printf("\t OECurve Smooth:%f Offset:%f\n\n", attr_v10.stManual.OECurve.Smooth,
153                        attr_v10.stManual.OECurve.Offset);
154                 printf(
155                     "\t MDCurve LM_smooth:%f LM_offset:%f MS_smooth%f "
156                     "MS_offset:%f\n\n",
157                     attr_v10.stManual.MDCurve.LM_smooth, attr_v10.stManual.MDCurve.LM_offset,
158                     attr_v10.stManual.MDCurve.MS_smooth, attr_v10.stManual.MDCurve.MS_offset);
159                 break;
160             }
161             case '3': {
162                 printf(
163                     "\t AMERGE test rk_aiq_user_api2_amerge_v11_SetAttrib stManual BASEFRAME_SHORT "
164                     "Sync\n\n");
165                 attr_v11.sync.sync_mode                            = RK_AIQ_UAPI_MODE_DEFAULT;
166                 attr_v11.sync.done                                 = false;
167                 attr_v11.opMode                                    = MERGE_OPMODE_MANUAL;
168                 attr_v11.stManual.BaseFrm                          = BASEFRAME_SHORT;
169                 attr_v11.stManual.ShortFrmModeData.OECurve.Smooth  = 0.4;
170                 attr_v11.stManual.ShortFrmModeData.OECurve.Offset  = 210;
171                 attr_v11.stManual.ShortFrmModeData.MDCurve.Coef    = 0.05;
172                 attr_v11.stManual.ShortFrmModeData.MDCurve.ms_thd0 = 0.00;
173                 attr_v11.stManual.ShortFrmModeData.MDCurve.lm_thd0 = 0.00;
174                 rk_aiq_user_api2_amerge_v11_SetAttrib(ctx, &attr_v11);
175                 break;
176             }
177             case '4': {
178                 printf(
179                     "\t AMERGE test rk_aiq_user_api2_amerge_v11_SetAttrib stManual BASEFRAME_SHORT "
180                     "Async\n\n");
181                 attr_v11.sync.sync_mode                            = RK_AIQ_UAPI_MODE_ASYNC;
182                 attr_v11.sync.done                                 = false;
183                 attr_v11.opMode                                    = MERGE_OPMODE_MANUAL;
184                 attr_v11.stManual.BaseFrm                          = BASEFRAME_SHORT;
185                 attr_v11.stManual.ShortFrmModeData.OECurve.Smooth  = 0.5;
186                 attr_v11.stManual.ShortFrmModeData.OECurve.Offset  = 230;
187                 attr_v11.stManual.ShortFrmModeData.MDCurve.Coef    = 0.07;
188                 attr_v11.stManual.ShortFrmModeData.MDCurve.ms_thd0 = 0.00;
189                 attr_v11.stManual.ShortFrmModeData.MDCurve.lm_thd0 = 0.00;
190                 rk_aiq_user_api2_amerge_v11_SetAttrib(ctx, &attr_v11);
191                 break;
192             }
193             case '5': {
194                 printf(
195                     "\t AMERGE test rk_aiq_user_api2_amerge_v11_SetAttrib stManual BASEFRAME_LONG "
196                     "Sync\n\n");
197                 attr_v11.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
198                 attr_v11.sync.done                                  = false;
199                 attr_v11.opMode                                     = MERGE_OPMODE_MANUAL;
200                 attr_v11.stManual.BaseFrm                           = BASEFRAME_LONG;
201                 attr_v11.stManual.LongFrmModeData.OECurve.Smooth    = 0.6;
202                 attr_v11.stManual.LongFrmModeData.OECurve.Offset    = 240;
203                 attr_v11.stManual.LongFrmModeData.MDCurve.LM_smooth = 0.8;
204                 attr_v11.stManual.LongFrmModeData.MDCurve.LM_offset = 38;
205                 attr_v11.stManual.LongFrmModeData.MDCurve.MS_smooth = 0.8;
206                 attr_v11.stManual.LongFrmModeData.MDCurve.MS_offset = 38;
207                 rk_aiq_user_api2_amerge_v11_SetAttrib(ctx, &attr_v11);
208                 break;
209             }
210             case '6': {
211                 printf(
212                     "\t AMERGE test rk_aiq_user_api2_amerge_v11_SetAttrib stManual BASEFRAME_LONG "
213                     "Async\n\n");
214                 attr_v11.sync.sync_mode                             = RK_AIQ_UAPI_MODE_ASYNC;
215                 attr_v11.sync.done                                  = false;
216                 attr_v11.opMode                                     = MERGE_OPMODE_MANUAL;
217                 attr_v11.stManual.BaseFrm                           = BASEFRAME_LONG;
218                 attr_v11.stManual.LongFrmModeData.OECurve.Smooth    = 0.7;
219                 attr_v11.stManual.LongFrmModeData.OECurve.Offset    = 280;
220                 attr_v11.stManual.LongFrmModeData.MDCurve.LM_smooth = 0.8;
221                 attr_v11.stManual.LongFrmModeData.MDCurve.LM_offset = 38;
222                 attr_v11.stManual.LongFrmModeData.MDCurve.MS_smooth = 0.8;
223                 attr_v11.stManual.LongFrmModeData.MDCurve.MS_offset = 38;
224                 rk_aiq_user_api2_amerge_v11_SetAttrib(ctx, &attr_v11);
225                 break;
226             }
227             case '7': {
228                 printf("\t AMERGE test rk_aiq_user_api2_amerge_v11_GetAttrib\n\n");
229                 rk_aiq_user_api2_amerge_v11_GetAttrib(ctx, &attr_v11);
230                 printf("\t sync = %d, done = %d\n", attr_v11.sync.sync_mode, attr_v11.sync.done);
231                 printf("\t attr_v11.mode:%d Envlv:%f MoveCoef:%f\n\n", attr_v11.opMode,
232                        attr_v11.Info.Envlv, attr_v11.Info.MoveCoef);
233                 printf("\t BaseFrm:%d \n\n", attr_v11.stManual.BaseFrm);
234                 printf("\t LongFrmModeData OECurve Smooth:%f Offset:%f\n\n",
235                        attr_v11.stManual.LongFrmModeData.OECurve.Smooth,
236                        attr_v11.stManual.LongFrmModeData.OECurve.Offset);
237                 printf(
238                     "\t LongFrmModeData MDCurve LM_smooth:%f LM_offset:%f MS_smooth%f "
239                     "MS_offset:%f\n\n",
240                     attr_v11.stManual.LongFrmModeData.MDCurve.LM_smooth,
241                     attr_v11.stManual.LongFrmModeData.MDCurve.LM_offset,
242                     attr_v11.stManual.LongFrmModeData.MDCurve.MS_smooth,
243                     attr_v11.stManual.LongFrmModeData.MDCurve.MS_offset);
244                 printf("\t ShortFrmModeData OECurve Smooth:%f Offset:%f\n\n",
245                        attr_v11.stManual.ShortFrmModeData.OECurve.Smooth,
246                        attr_v11.stManual.ShortFrmModeData.OECurve.Offset);
247                 printf("\t ShortFrmModeData MDCurve Coef:%f ms_thd0:%f lm_thd0%f\n\n",
248                        attr_v11.stManual.ShortFrmModeData.MDCurve.Coef,
249                        attr_v11.stManual.ShortFrmModeData.MDCurve.ms_thd0,
250                        attr_v11.stManual.ShortFrmModeData.MDCurve.lm_thd0);
251                 break;
252             }
253             case '8': {
254                 printf(
255                     "\t AMERGE test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_SHORT "
256                     "Sync\n\n");
257                 attr_v12.sync.sync_mode                            = RK_AIQ_UAPI_MODE_DEFAULT;
258                 attr_v12.sync.done                                 = false;
259                 attr_v12.opMode                                    = MERGE_OPMODE_MANUAL;
260                 attr_v12.stManual.BaseFrm                          = BASEFRAME_SHORT;
261                 attr_v12.stManual.ShortFrmModeData.OECurve.Smooth  = 0.4;
262                 attr_v12.stManual.ShortFrmModeData.OECurve.Offset  = 210;
263                 attr_v12.stManual.ShortFrmModeData.MDCurve.Coef    = 0.05;
264                 attr_v12.stManual.ShortFrmModeData.MDCurve.ms_thd0 = 0.00;
265                 attr_v12.stManual.ShortFrmModeData.MDCurve.lm_thd0 = 0.00;
266                 rk_aiq_user_api2_amerge_v12_SetAttrib(ctx, &attr_v12);
267                 break;
268             }
269             case '9': {
270                 printf(
271                     "\t AMERGE test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_SHORT "
272                     "Async\n\n");
273                 attr_v12.sync.sync_mode                            = RK_AIQ_UAPI_MODE_ASYNC;
274                 attr_v12.sync.done                                 = false;
275                 attr_v12.opMode                                    = MERGE_OPMODE_MANUAL;
276                 attr_v12.stManual.BaseFrm                          = BASEFRAME_SHORT;
277                 attr_v12.stManual.ShortFrmModeData.OECurve.Smooth  = 0.5;
278                 attr_v12.stManual.ShortFrmModeData.OECurve.Offset  = 230;
279                 attr_v12.stManual.ShortFrmModeData.MDCurve.Coef    = 0.07;
280                 attr_v12.stManual.ShortFrmModeData.MDCurve.ms_thd0 = 0.00;
281                 attr_v12.stManual.ShortFrmModeData.MDCurve.lm_thd0 = 0.00;
282                 rk_aiq_user_api2_amerge_v12_SetAttrib(ctx, &attr_v12);
283                 break;
284             }
285             case 'a': {
286                 printf(
287                     "\t AMERGE test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_LONG "
288                     "EnableEachChn off"
289                     "Sync\n\n");
290                 attr_v12.sync.sync_mode                             = RK_AIQ_UAPI_MODE_DEFAULT;
291                 attr_v12.sync.done                                  = false;
292                 attr_v12.opMode                                     = MERGE_OPMODE_MANUAL;
293                 attr_v12.stManual.BaseFrm                           = BASEFRAME_LONG;
294                 attr_v12.stManual.LongFrmModeData.EnableEachChn     = false;
295                 attr_v12.stManual.LongFrmModeData.OECurve.Smooth    = 0.6;
296                 attr_v12.stManual.LongFrmModeData.OECurve.Offset    = 240;
297                 attr_v12.stManual.LongFrmModeData.MDCurve.LM_smooth = 0.8;
298                 attr_v12.stManual.LongFrmModeData.MDCurve.LM_offset = 38;
299                 attr_v12.stManual.LongFrmModeData.MDCurve.MS_smooth = 0.8;
300                 attr_v12.stManual.LongFrmModeData.MDCurve.MS_offset = 38;
301                 rk_aiq_user_api2_amerge_v12_SetAttrib(ctx, &attr_v12);
302                 break;
303             }
304             case 'b': {
305                 printf(
306                     "\t AMERGE test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_LONG "
307                     "EnableEachChn off"
308                     "Async\n\n");
309                 attr_v12.sync.sync_mode                             = RK_AIQ_UAPI_MODE_ASYNC;
310                 attr_v12.sync.done                                  = false;
311                 attr_v12.opMode                                     = MERGE_OPMODE_MANUAL;
312                 attr_v12.stManual.BaseFrm                           = BASEFRAME_LONG;
313                 attr_v12.stManual.LongFrmModeData.EnableEachChn     = false;
314                 attr_v12.stManual.LongFrmModeData.OECurve.Smooth    = 0.7;
315                 attr_v12.stManual.LongFrmModeData.OECurve.Offset    = 280;
316                 attr_v12.stManual.LongFrmModeData.MDCurve.LM_smooth = 0.8;
317                 attr_v12.stManual.LongFrmModeData.MDCurve.LM_offset = 38;
318                 attr_v12.stManual.LongFrmModeData.MDCurve.MS_smooth = 0.8;
319                 attr_v12.stManual.LongFrmModeData.MDCurve.MS_offset = 38;
320                 rk_aiq_user_api2_amerge_v12_SetAttrib(ctx, &attr_v12);
321                 break;
322             }
323             case 'c': {
324                 printf(
325                     "\t AMERGE test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_LONG "
326                     "EnableEachChn on"
327                     "Sync\n\n");
328                 attr_v12.sync.sync_mode                               = RK_AIQ_UAPI_MODE_DEFAULT;
329                 attr_v12.sync.done                                    = false;
330                 attr_v12.opMode                                       = MERGE_OPMODE_MANUAL;
331                 attr_v12.stManual.BaseFrm                             = BASEFRAME_LONG;
332                 attr_v12.stManual.LongFrmModeData.EnableEachChn       = true;
333                 attr_v12.stManual.LongFrmModeData.OECurve.Smooth      = 0.6;
334                 attr_v12.stManual.LongFrmModeData.OECurve.Offset      = 240;
335                 attr_v12.stManual.LongFrmModeData.MDCurve.LM_smooth   = 0.8;
336                 attr_v12.stManual.LongFrmModeData.MDCurve.LM_offset   = 38;
337                 attr_v12.stManual.LongFrmModeData.MDCurve.MS_smooth   = 0.8;
338                 attr_v12.stManual.LongFrmModeData.MDCurve.MS_offset   = 38;
339                 attr_v12.stManual.LongFrmModeData.EachChnCurve.Smooth = 0.5;
340                 attr_v12.stManual.LongFrmModeData.EachChnCurve.Offset = 0.5;
341                 rk_aiq_user_api2_amerge_v12_SetAttrib(ctx, &attr_v12);
342                 break;
343             }
344             case 'd': {
345                 printf(
346                     "\t AMERGE test rk_aiq_user_api2_amerge_v12_SetAttrib stManual BASEFRAME_LONG "
347                     "EnableEachChn on"
348                     "Async\n\n");
349                 attr_v12.sync.sync_mode                               = RK_AIQ_UAPI_MODE_ASYNC;
350                 attr_v12.sync.done                                    = false;
351                 attr_v12.opMode                                       = MERGE_OPMODE_MANUAL;
352                 attr_v12.stManual.BaseFrm                             = BASEFRAME_LONG;
353                 attr_v12.stManual.LongFrmModeData.EnableEachChn       = true;
354                 attr_v12.stManual.LongFrmModeData.OECurve.Smooth      = 0.7;
355                 attr_v12.stManual.LongFrmModeData.OECurve.Offset      = 280;
356                 attr_v12.stManual.LongFrmModeData.MDCurve.LM_smooth   = 0.8;
357                 attr_v12.stManual.LongFrmModeData.MDCurve.LM_offset   = 38;
358                 attr_v12.stManual.LongFrmModeData.MDCurve.MS_smooth   = 0.8;
359                 attr_v12.stManual.LongFrmModeData.MDCurve.MS_offset   = 38;
360                 attr_v12.stManual.LongFrmModeData.EachChnCurve.Smooth = 0.4;
361                 attr_v12.stManual.LongFrmModeData.EachChnCurve.Offset = 0.38;
362                 rk_aiq_user_api2_amerge_v12_SetAttrib(ctx, &attr_v12);
363                 break;
364             }
365             case 'e': {
366                 printf("\t AMERGE test rk_aiq_user_api2_amerge_v12_GetAttrib\n\n");
367                 rk_aiq_user_api2_amerge_v12_GetAttrib(ctx, &attr_v12);
368                 printf("\t sync = %d, done = %d\n", attr_v12.sync.sync_mode, attr_v12.sync.done);
369                 printf("\t attr_v12.mode:%d Envlv:%f MoveCoef:%f\n\n", attr_v12.opMode,
370                        attr_v12.Info.Envlv, attr_v12.Info.MoveCoef);
371                 printf("\t stManual BaseFrm:%d \n\n", attr_v12.stManual.BaseFrm);
372                 printf("\t stManual LongFrmModeData OECurve Smooth:%f Offset:%f\n\n",
373                        attr_v12.stManual.LongFrmModeData.OECurve.Smooth,
374                        attr_v12.stManual.LongFrmModeData.OECurve.Offset);
375                 printf(
376                     "\t stManual LongFrmModeData MDCurve LM_smooth:%f LM_offset:%f MS_smooth%f "
377                     "MS_offset:%f\n\n",
378                     attr_v12.stManual.LongFrmModeData.MDCurve.LM_smooth,
379                     attr_v12.stManual.LongFrmModeData.MDCurve.LM_offset,
380                     attr_v12.stManual.LongFrmModeData.MDCurve.MS_smooth,
381                     attr_v12.stManual.LongFrmModeData.MDCurve.MS_offset);
382                 printf(
383                     "\t stManual LongFrmModeData EnableEachChn:%d EachChnCurve Smooth:%f Offset%f ",
384                     attr_v12.stManual.LongFrmModeData.EnableEachChn,
385                     attr_v12.stManual.LongFrmModeData.EachChnCurve.Smooth,
386                     attr_v12.stManual.LongFrmModeData.EachChnCurve.Offset);
387                 printf("\t stManual ShortFrmModeData OECurve Smooth:%f Offset:%f\n\n",
388                        attr_v12.stManual.ShortFrmModeData.OECurve.Smooth,
389                        attr_v12.stManual.ShortFrmModeData.OECurve.Offset);
390                 printf("\t stManual ShortFrmModeData MDCurve Coef:%f ms_thd0:%f lm_thd0%f\n\n",
391                        attr_v12.stManual.ShortFrmModeData.MDCurve.Coef,
392                        attr_v12.stManual.ShortFrmModeData.MDCurve.ms_thd0,
393                        attr_v12.stManual.ShortFrmModeData.MDCurve.lm_thd0);
394                 break;
395             }
396             case 'f': {
397                 printf(
398                     "\t AMERGE test rk_aiq_user_api2_amerge_SetAttrib stManual BASEFRAME_SHORT "
399                     "Sync\n\n");
400                 attr_v2.sync.sync_mode                                   = RK_AIQ_UAPI_MODE_DEFAULT;
401                 attr_v2.sync.done                                        = false;
402                 attr_v2.attrV30.opMode                                   = MERGE_OPMODE_MANU;
403                 attr_v2.attrV30.stManual.BaseFrm                         = BASEFRAME_SHORT;
404                 attr_v2.attrV30.stManual.ShortFrmModeData.OECurve.Smooth = 0.4;
405                 attr_v2.attrV30.stManual.ShortFrmModeData.OECurve.Offset = 210;
406                 attr_v2.attrV30.stManual.ShortFrmModeData.MDCurve.Coef   = 0.05;
407                 attr_v2.attrV30.stManual.ShortFrmModeData.MDCurve.ms_thd0 = 0.00;
408                 attr_v2.attrV30.stManual.ShortFrmModeData.MDCurve.lm_thd0 = 0.00;
409                 rk_aiq_user_api2_amerge_SetAttrib(ctx, attr_v2);
410                 break;
411             }
412             case 'g': {
413                 printf(
414                     "\t AMERGE test rk_aiq_user_api2_amerge_SetAttrib stManual BASEFRAME_SHORT "
415                     "Async\n\n");
416                 attr_v2.sync.sync_mode                                    = RK_AIQ_UAPI_MODE_ASYNC;
417                 attr_v2.sync.done                                         = false;
418                 attr_v2.attrV30.opMode                                    = MERGE_OPMODE_MANU;
419                 attr_v2.attrV30.stManual.BaseFrm                          = BASEFRAME_SHORT;
420                 attr_v2.attrV30.stManual.ShortFrmModeData.OECurve.Smooth  = 0.5;
421                 attr_v2.attrV30.stManual.ShortFrmModeData.OECurve.Offset  = 230;
422                 attr_v2.attrV30.stManual.ShortFrmModeData.MDCurve.Coef    = 0.07;
423                 attr_v2.attrV30.stManual.ShortFrmModeData.MDCurve.ms_thd0 = 0.00;
424                 attr_v2.attrV30.stManual.ShortFrmModeData.MDCurve.lm_thd0 = 0.00;
425                 rk_aiq_user_api2_amerge_SetAttrib(ctx, attr_v2);
426                 break;
427             }
428             case 'h': {
429                 printf(
430                     "\t AMERGE test rk_aiq_user_api2_amerge_SetAttrib stManual BASEFRAME_LONG "
431                     "Sync\n\n");
432                 attr_v2.sync.sync_mode                                  = RK_AIQ_UAPI_MODE_DEFAULT;
433                 attr_v2.sync.done                                       = false;
434                 attr_v2.attrV30.opMode                                  = MERGE_OPMODE_MANU;
435                 attr_v2.attrV30.stManual.BaseFrm                        = BASEFRAME_LONG;
436                 attr_v2.attrV30.stManual.LongFrmModeData.OECurve.Smooth = 0.6;
437                 attr_v2.attrV30.stManual.LongFrmModeData.OECurve.Offset = 240;
438                 attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.LM_smooth = 0.8;
439                 attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.LM_offset = 38;
440                 attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.MS_smooth = 0.8;
441                 attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.MS_offset = 38;
442                 rk_aiq_user_api2_amerge_SetAttrib(ctx, attr_v2);
443                 break;
444             }
445             case 'i': {
446                 printf(
447                     "\t AMERGE test rk_aiq_user_api2_amerge_SetAttrib stManual BASEFRAME_LONG "
448                     "Async\n\n");
449                 attr_v2.sync.sync_mode                                     = RK_AIQ_UAPI_MODE_ASYNC;
450                 attr_v2.sync.done                                          = false;
451                 attr_v2.attrV30.opMode                                     = MERGE_OPMODE_MANU;
452                 attr_v2.attrV30.stManual.BaseFrm                           = BASEFRAME_LONG;
453                 attr_v2.attrV30.stManual.LongFrmModeData.OECurve.Smooth    = 0.7;
454                 attr_v2.attrV30.stManual.LongFrmModeData.OECurve.Offset    = 280;
455                 attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.LM_smooth = 0.8;
456                 attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.LM_offset = 38;
457                 attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.MS_smooth = 0.8;
458                 attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.MS_offset = 38;
459                 rk_aiq_user_api2_amerge_SetAttrib(ctx, attr_v2);
460                 break;
461             }
462             case 'j': {
463                 printf("\t AMERGE test rk_aiq_user_api2_amerge_GetAttrib\n\n");
464                 rk_aiq_user_api2_amerge_GetAttrib(ctx, &attr_v2);
465                 printf("\t sync = %d, done = %d\n", attr_v2.sync.sync_mode, attr_v2.sync.done);
466                 printf("\t attr_v2.mode:%d Envlv:%f MoveCoef:%f\n\n", attr_v2.attrV30.opMode,
467                        attr_v2.attrV30.CtlInfo.Envlv, attr_v2.attrV30.CtlInfo.MoveCoef);
468                 printf("\t BaseFrm:%d \n\n", attr_v2.attrV30.stManual.BaseFrm);
469                 printf("\t LongFrmModeData OECurve Smooth:%f Offset:%f\n\n",
470                        attr_v2.attrV30.stManual.LongFrmModeData.OECurve.Smooth,
471                        attr_v2.attrV30.stManual.LongFrmModeData.OECurve.Offset);
472                 printf(
473                     "\t LongFrmModeData MDCurve LM_smooth:%f LM_offset:%f MS_smooth%f "
474                     "MS_offset:%f\n\n",
475                     attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.LM_smooth,
476                     attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.LM_offset,
477                     attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.MS_smooth,
478                     attr_v2.attrV30.stManual.LongFrmModeData.MDCurve.MS_offset);
479                 printf("\t ShortFrmModeData OECurve Smooth:%f Offset:%f\n\n",
480                        attr_v2.attrV30.stManual.ShortFrmModeData.OECurve.Smooth,
481                        attr_v2.attrV30.stManual.ShortFrmModeData.OECurve.Offset);
482                 printf("\t ShortFrmModeData MDCurve Coef:%f ms_thd0:%f lm_thd0%f\n\n",
483                        attr_v2.attrV30.stManual.ShortFrmModeData.MDCurve.Coef,
484                        attr_v2.attrV30.stManual.ShortFrmModeData.MDCurve.ms_thd0,
485                        attr_v2.attrV30.stManual.ShortFrmModeData.MDCurve.lm_thd0);
486                 break;
487             }
488             default:
489                 break;
490         }
491     } while (key != 'q' && key != 'Q');
492 
493     return XCAM_RETURN_NO_ERROR;
494 }
495