992da8864f48f91907de9c57c5387e0afacfbdbd
[platform/core/multimedia/libmm-camcorder.git] / src / mm_camcorder_platform.c
1 /*
2  * libmm-camcorder
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Jeongmo Yang <jm80.yang@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 /*===========================================================================================
23 |                                                                                                                                                                                       |
24 |  INCLUDE FILES                                                                                                                                                        |
25 |                                                                                                                                                                                       |
26 ========================================================================================== */
27 #include "mm_camcorder_internal.h"
28 #include "mm_camcorder_platform.h"
29 #include "mm_camcorder_configure.h"
30
31 /*---------------------------------------------------------------------------
32 |    GLOBAL VARIABLE DEFINITIONS for internal                                                           |
33 ---------------------------------------------------------------------------*/
34
35 /*---------------------------------------------------------------------------
36 |    LOCAL VARIABLE DEFINITIONS for internal                                                            |
37 ---------------------------------------------------------------------------*/
38
39
40 // Rule 1. 1:1 match except NONE.
41 // Rule 2. MSL should be Superset.
42 // Rule 3. sensor value should not be same as _MMCAMCORDER_SENSOR_ENUM_NONE.
43
44 static int __enum_conv_whitebalance[MM_CAMCORDER_WHITE_BALANCE_NUM] ;
45
46 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_whitebalance =
47 {
48         MM_CAMCORDER_WHITE_BALANCE_NUM,
49         __enum_conv_whitebalance,
50         CONFIGURE_CATEGORY_CTRL_EFFECT,
51         "WhiteBalance"
52 };
53
54
55 static int __enum_conv_colortone[MM_CAMCORDER_COLOR_TONE_NUM];
56
57 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_colortone =
58 {
59         MM_CAMCORDER_COLOR_TONE_NUM,
60         __enum_conv_colortone,
61         CONFIGURE_CATEGORY_CTRL_EFFECT,
62         "ColorTone"
63 };
64
65
66 static int __enum_conv_iso[MM_CAMCORDER_ISO_NUM];
67
68 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_iso =
69 {
70         MM_CAMCORDER_ISO_NUM,
71         __enum_conv_iso,
72         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
73         "ISO"
74 };
75
76
77 static int __enum_conv_prgrm[MM_CAMCORDER_SCENE_MODE_NUM];
78
79 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_prgrm =
80 {
81         MM_CAMCORDER_SCENE_MODE_NUM,
82         __enum_conv_prgrm,
83         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
84         "ProgramMode"
85 };
86
87
88 static int __enum_conv_focus_mode[MM_CAMCORDER_FOCUS_MODE_NUM];
89
90 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_focus_mode =
91 {
92         MM_CAMCORDER_FOCUS_MODE_NUM,
93         __enum_conv_focus_mode,
94         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
95         "FocusMode"
96 };
97
98
99 static int __enum_conv_focus_type[MM_CAMCORDER_AUTO_FOCUS_NUM];
100
101 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_focus_type =
102 {
103         MM_CAMCORDER_AUTO_FOCUS_NUM,
104         __enum_conv_focus_type,
105         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
106         "AFType"
107 };
108
109
110 static int __enum_conv_ae_type[MM_CAMCORDER_AUTO_EXPOSURE_NUM];
111
112 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_ae_type =
113 {
114         MM_CAMCORDER_AUTO_EXPOSURE_NUM,
115         __enum_conv_ae_type,
116         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
117         "AEType"
118 };
119
120
121 static int __enum_conv_strobe_ctrl[MM_CAMCORDER_STROBE_CONTROL_NUM];
122
123 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_strobe_ctrl =
124 {
125         MM_CAMCORDER_STROBE_CONTROL_NUM,
126         __enum_conv_strobe_ctrl,
127         CONFIGURE_CATEGORY_CTRL_STROBE,
128         "StrobeControl"
129 };
130
131
132 static int __enum_conv_strobe_mode[MM_CAMCORDER_STROBE_MODE_NUM];
133
134 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_strobe_mode =
135 {
136         MM_CAMCORDER_STROBE_MODE_NUM,
137         __enum_conv_strobe_mode,
138         CONFIGURE_CATEGORY_CTRL_STROBE,
139         "StrobeMode"
140 };
141
142
143 static int __enum_conv_wdr_ctrl[MM_CAMCORDER_WDR_NUM];
144
145 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_wdr_ctrl =
146 {
147         MM_CAMCORDER_WDR_NUM,
148         __enum_conv_wdr_ctrl,
149         CONFIGURE_CATEGORY_CTRL_EFFECT,
150         "WDR"
151 };
152
153 static int __enum_conv_flip_ctrl[MM_CAMCORDER_FLIP_NUM];
154
155 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_flip_ctrl =
156 {
157         MM_CAMCORDER_FLIP_NUM,
158         __enum_conv_flip_ctrl,
159         CONFIGURE_CATEGORY_CTRL_EFFECT,
160         "Flip"
161 };
162
163 static int __enum_conv_rotation_ctrl[MM_CAMCORDER_ROTATION_NUM];
164
165 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_rotation_ctrl =
166 {
167         MM_CAMCORDER_ROTATION_NUM,
168         __enum_conv_rotation_ctrl,
169         CONFIGURE_CATEGORY_CTRL_EFFECT,
170         "Rotation"
171 };
172
173
174 static int __enum_conv_ahs[MM_CAMCORDER_AHS_NUM];
175
176 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_ahs =
177 {
178         MM_CAMCORDER_AHS_NUM,
179         __enum_conv_ahs,
180         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
181         "AntiHandshake"
182 };
183
184
185 static int __enum_conv_video_stabilization[MM_CAMCORDER_VIDEO_STABILIZATION_NUM];
186
187 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_video_stabilization =
188 {
189         MM_CAMCORDER_VIDEO_STABILIZATION_NUM,
190         __enum_conv_video_stabilization,
191         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
192         "VideoStabilization"
193 };
194
195
196 static int __enum_conv_hdr_capture[MM_CAMCORDER_HDR_CAPTURE_NUM];
197
198 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_hdr_capture =
199 {
200         MM_CAMCORDER_HDR_CAPTURE_NUM,
201         __enum_conv_hdr_capture,
202         CONFIGURE_CATEGORY_CTRL_CAPTURE,
203         "SupportHDR"
204 };
205
206 static int __enum_conv_detect_mode[MM_CAMCORDER_DETECT_MODE_NUM];
207
208 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_detect_mode =
209 {
210         MM_CAMCORDER_DETECT_MODE_NUM,
211         __enum_conv_detect_mode,
212         CONFIGURE_CATEGORY_CTRL_DETECT,
213         "DetectMode"
214 };
215
216
217 /**
218  * Matching table of caminfo index with category enum of attribute.
219  * If predefined item is changed, this static variables should be changed.
220  * For detail information, refer below documents.
221  *
222  */
223 static _MMCamcorderInfoConverting       g_audio_info[] = {
224         {
225                 CONFIGURE_TYPE_MAIN,
226                 CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT,
227                 MM_CAM_AUDIO_DEVICE,
228                 MM_CAMCORDER_ATTR_NONE,
229                 "AudioDevice",
230                 MM_CAMCONVERT_TYPE_INT_ARRAY,
231                 NULL,
232         }
233 };
234
235 static _MMCamcorderInfoConverting       g_display_info[] = {
236         {
237                 CONFIGURE_TYPE_MAIN,
238                 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
239                 MM_CAM_DISPLAY_DEVICE,
240                 MM_CAMCORDER_ATTR_NONE,
241                 "DisplayDevice",
242                 MM_CAMCONVERT_TYPE_INT_ARRAY,
243                 NULL,
244         },
245         {
246                 CONFIGURE_TYPE_MAIN,
247                 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
248                 MM_CAM_DISPLAY_MODE,
249                 MM_CAMCORDER_ATTR_NONE,
250                 "DisplayMode",
251                 MM_CAMCONVERT_TYPE_INT_ARRAY,
252                 NULL,
253         },
254         {
255                 CONFIGURE_TYPE_MAIN,
256                 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
257                 MM_CAM_DISPLAY_SURFACE,
258                 MM_CAMCORDER_ATTR_NONE,
259                 "Videosink",
260                 MM_CAMCONVERT_TYPE_INT_ARRAY,
261                 NULL,
262         },
263 };
264
265 static _MMCamcorderInfoConverting       g_caminfo_convert[CAMINFO_CONVERT_NUM] = {
266         {
267                 CONFIGURE_TYPE_CTRL,
268                 CONFIGURE_CATEGORY_CTRL_CAMERA,
269                 MM_CAM_CAMERA_DEVICE_NAME,
270                 MM_CAMCORDER_ATTR_NONE,
271                 "DeviceName",
272                 MM_CAMCONVERT_TYPE_STRING,
273                 NULL,
274         },
275         {
276                 CONFIGURE_TYPE_CTRL,
277                 CONFIGURE_CATEGORY_CTRL_CAMERA,
278                 MM_CAM_CAMERA_WIDTH,
279                 MM_CAM_CAMERA_HEIGHT,
280                 "PreviewResolution",
281                 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
282                 NULL,
283         },
284         {
285                 CONFIGURE_TYPE_CTRL,
286                 CONFIGURE_CATEGORY_CTRL_CAMERA,
287                 MM_CAM_CAPTURE_WIDTH,
288                 MM_CAM_CAPTURE_HEIGHT,
289                 "CaptureResolution",
290                 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
291                 NULL,
292         },
293         {
294                 CONFIGURE_TYPE_CTRL,
295                 CONFIGURE_CATEGORY_CTRL_CAMERA,
296                 MM_CAM_CAMERA_FORMAT,
297                 MM_CAMCORDER_ATTR_NONE,
298                 "PictureFormat",
299                 MM_CAMCONVERT_TYPE_INT_ARRAY,
300                 NULL,
301         },
302         {
303                 CONFIGURE_TYPE_CTRL,
304                 CONFIGURE_CATEGORY_CTRL_STROBE,
305                 MM_CAM_STROBE_CONTROL,
306                 MM_CAMCORDER_ATTR_NONE,
307                 "StrobeControl",
308                 MM_CAMCONVERT_TYPE_INT_ARRAY,
309                 &_mmcamcorder_enum_conv_strobe_ctrl,
310         },
311         {
312                 CONFIGURE_TYPE_CTRL,
313                 CONFIGURE_CATEGORY_CTRL_STROBE,
314                 MM_CAM_STROBE_CAPABILITIES,
315                 MM_CAMCORDER_ATTR_NONE,
316                 "StrobeCapabilities",
317                 MM_CAMCONVERT_TYPE_INT_ARRAY,
318                 NULL,
319         },
320         {
321                 CONFIGURE_TYPE_CTRL,
322                 CONFIGURE_CATEGORY_CTRL_STROBE,
323                 MM_CAM_STROBE_MODE,
324                 MM_CAMCORDER_ATTR_NONE,
325                 "StrobeMode",
326                 MM_CAMCONVERT_TYPE_INT_ARRAY,
327                 &_mmcamcorder_enum_conv_strobe_mode,
328         },
329         {
330                 CONFIGURE_TYPE_CTRL,
331                 CONFIGURE_CATEGORY_CTRL_EFFECT,
332                 MM_CAM_FILTER_BRIGHTNESS,
333                 MM_CAMCORDER_ATTR_NONE,
334                 "Brightness",
335                 MM_CAMCONVERT_TYPE_INT_RANGE,
336                 NULL,
337         },
338         {
339                 CONFIGURE_TYPE_CTRL,
340                 CONFIGURE_CATEGORY_CTRL_EFFECT,
341                 MM_CAM_FILTER_CONTRAST,
342                 MM_CAMCORDER_ATTR_NONE,
343                 "Contrast",
344                 MM_CAMCONVERT_TYPE_INT_RANGE,
345                 NULL,
346         },
347         {/* 10 */
348                 CONFIGURE_TYPE_CTRL,
349                 CONFIGURE_CATEGORY_CTRL_EFFECT,
350                 MM_CAM_FILTER_SATURATION,
351                 MM_CAMCORDER_ATTR_NONE,
352                 "Saturation",
353                 MM_CAMCONVERT_TYPE_INT_RANGE,
354                 NULL,
355         },
356         {
357                 CONFIGURE_TYPE_CTRL,
358                 CONFIGURE_CATEGORY_CTRL_EFFECT,
359                 MM_CAM_FILTER_HUE,
360                 MM_CAMCORDER_ATTR_NONE,
361                 "Hue",
362                 MM_CAMCONVERT_TYPE_INT_RANGE,
363                 NULL,
364         },
365         {
366                 CONFIGURE_TYPE_CTRL,
367                 CONFIGURE_CATEGORY_CTRL_EFFECT,
368                 MM_CAM_FILTER_SHARPNESS,
369                 MM_CAMCORDER_ATTR_NONE,
370                 "Sharpness",
371                 MM_CAMCONVERT_TYPE_INT_RANGE,
372                 NULL,
373         },
374         {
375                 CONFIGURE_TYPE_CTRL,
376                 CONFIGURE_CATEGORY_CTRL_EFFECT,
377                 MM_CAM_FILTER_WB,
378                 MM_CAMCORDER_ATTR_NONE,
379                 "WhiteBalance",
380                 MM_CAMCONVERT_TYPE_INT_ARRAY,
381                 &_mmcamcorder_enum_conv_whitebalance,
382         },
383         {
384                 CONFIGURE_TYPE_CTRL,
385                 CONFIGURE_CATEGORY_CTRL_EFFECT,
386                 MM_CAM_FILTER_COLOR_TONE,
387                 MM_CAMCORDER_ATTR_NONE,
388                 "ColorTone",
389                 MM_CAMCONVERT_TYPE_INT_ARRAY,
390                 &_mmcamcorder_enum_conv_colortone,
391         },
392         {
393                 CONFIGURE_TYPE_CTRL,
394                 CONFIGURE_CATEGORY_CTRL_EFFECT,
395                 MM_CAM_CAMERA_WDR,
396                 MM_CAMCORDER_ATTR_NONE,
397                 "WDR",
398                 MM_CAMCONVERT_TYPE_INT_ARRAY,
399                 &_mmcamcorder_enum_conv_wdr_ctrl,
400         },
401         {
402                 CONFIGURE_TYPE_CTRL,
403                 CONFIGURE_CATEGORY_CTRL_EFFECT,
404                 MM_CAM_CAMERA_FLIP,
405                 MM_CAMCORDER_ATTR_NONE,
406                 "Flip",
407                 MM_CAMCONVERT_TYPE_INT_ARRAY,
408                 &_mmcamcorder_enum_conv_flip_ctrl,
409         },
410         {
411                 CONFIGURE_TYPE_CTRL,
412                 CONFIGURE_CATEGORY_CTRL_EFFECT,
413                 MM_CAM_CAMERA_ROTATION,
414                 MM_CAMCORDER_ATTR_NONE,
415                 "Rotation",
416                 MM_CAMCONVERT_TYPE_INT_ARRAY,
417                 &_mmcamcorder_enum_conv_rotation_ctrl,
418         },
419         {
420                 CONFIGURE_TYPE_CTRL,
421                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
422                 MM_CAM_CAMERA_DIGITAL_ZOOM,
423                 MM_CAMCORDER_ATTR_NONE,
424                 "DigitalZoom",
425                 MM_CAMCONVERT_TYPE_INT_RANGE,
426                 NULL,
427         },
428         {
429                 CONFIGURE_TYPE_CTRL,
430                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
431                 MM_CAM_CAMERA_OPTICAL_ZOOM,
432                 MM_CAMCORDER_ATTR_NONE,
433                 "OpticalZoom",
434                 MM_CAMCONVERT_TYPE_INT_RANGE,
435                 NULL,
436         },
437         {/* 20 */
438                 CONFIGURE_TYPE_CTRL,
439                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
440                 MM_CAM_CAMERA_FOCUS_MODE,
441                 MM_CAMCORDER_ATTR_NONE,
442                 "FocusMode",
443                 MM_CAMCONVERT_TYPE_INT_ARRAY,
444                 &_mmcamcorder_enum_conv_focus_mode,
445         },
446         {
447                 CONFIGURE_TYPE_CTRL,
448                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
449                 MM_CAM_CAMERA_AF_SCAN_RANGE,
450                 MM_CAMCORDER_ATTR_NONE,
451                 "AFType",
452                 MM_CAMCONVERT_TYPE_INT_ARRAY,
453                 &_mmcamcorder_enum_conv_focus_type,
454         },
455         {
456                 CONFIGURE_TYPE_CTRL,
457                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
458                 MM_CAM_CAMERA_EXPOSURE_MODE,
459                 MM_CAMCORDER_ATTR_NONE,
460                 "AEType",
461                 MM_CAMCONVERT_TYPE_INT_ARRAY,
462                 &_mmcamcorder_enum_conv_ae_type,
463         },
464         {
465                 CONFIGURE_TYPE_CTRL,
466                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
467                 MM_CAM_CAMERA_EXPOSURE_VALUE,
468                 MM_CAMCORDER_ATTR_NONE,
469                 "ExposureValue",
470                 MM_CAMCONVERT_TYPE_INT_RANGE,
471                 NULL,
472         },
473         {
474                 CONFIGURE_TYPE_CTRL,
475                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
476                 MM_CAM_CAMERA_F_NUMBER,
477                 MM_CAMCORDER_ATTR_NONE,
478                 "FNumber",
479                 MM_CAMCONVERT_TYPE_INT_ARRAY,
480                 NULL,
481         },
482         {
483                 CONFIGURE_TYPE_CTRL,
484                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
485                 MM_CAM_CAMERA_SHUTTER_SPEED,
486                 MM_CAMCORDER_ATTR_NONE,
487                 "ShutterSpeed",
488                 MM_CAMCONVERT_TYPE_INT_ARRAY,
489                 NULL,
490         },
491         {
492                 CONFIGURE_TYPE_CTRL,
493                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
494                 MM_CAM_CAMERA_ISO,
495                 MM_CAMCORDER_ATTR_NONE,
496                 "ISO",
497                 MM_CAMCONVERT_TYPE_INT_ARRAY,
498                 &_mmcamcorder_enum_conv_iso,
499         },
500         {
501                 CONFIGURE_TYPE_CTRL,
502                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
503                 MM_CAM_FILTER_SCENE_MODE,
504                 MM_CAMCORDER_ATTR_NONE,
505                 "ProgramMode",
506                 MM_CAMCONVERT_TYPE_INT_ARRAY,
507                 &_mmcamcorder_enum_conv_prgrm,
508         },
509         {
510                 CONFIGURE_TYPE_CTRL,
511                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
512                 MM_CAM_CAMERA_ANTI_HANDSHAKE,
513                 MM_CAMCORDER_ATTR_NONE,
514                 "AntiHandshake",
515                 MM_CAMCONVERT_TYPE_INT_ARRAY,
516                 &_mmcamcorder_enum_conv_ahs,
517         },
518         {
519                 CONFIGURE_TYPE_CTRL,
520                 CONFIGURE_CATEGORY_CTRL_CAPTURE,
521                 MM_CAM_CAPTURE_FORMAT,
522                 MM_CAMCORDER_ATTR_NONE,
523                 "OutputMode",
524                 MM_CAMCONVERT_TYPE_INT_ARRAY,
525                 NULL,
526         },
527         {/* 30 */
528                 CONFIGURE_TYPE_CTRL,
529                 CONFIGURE_CATEGORY_CTRL_CAPTURE,
530                 MM_CAM_IMAGE_ENCODER_QUALITY,
531                 MM_CAMCORDER_ATTR_NONE,
532                 "JpegQuality",
533                 MM_CAMCONVERT_TYPE_INT_RANGE,
534                 NULL,
535         },
536         {
537                 CONFIGURE_TYPE_CTRL,
538                 CONFIGURE_CATEGORY_CTRL_CAPTURE,
539                 MM_CAM_CAPTURE_COUNT,
540                 MM_CAMCORDER_ATTR_NONE,
541                 "MultishotNumber",
542                 MM_CAMCONVERT_TYPE_INT_RANGE,
543                 NULL,
544         },
545         {
546                 CONFIGURE_TYPE_CTRL,
547                 CONFIGURE_CATEGORY_CTRL_CAPTURE,
548                 MM_CAM_CAMERA_HDR_CAPTURE,
549                 MM_CAMCORDER_ATTR_NONE,
550                 "SupportHDR",
551                 MM_CAMCONVERT_TYPE_INT_ARRAY,
552                 &_mmcamcorder_enum_conv_hdr_capture,
553         },
554         {
555                 CONFIGURE_TYPE_CTRL,
556                 CONFIGURE_CATEGORY_CTRL_DETECT,
557                 MM_CAM_DETECT_MODE,
558                 MM_CAMCORDER_ATTR_NONE,
559                 "DetectMode",
560                 MM_CAMCONVERT_TYPE_INT_ARRAY,
561                 &_mmcamcorder_enum_conv_detect_mode,
562         },
563         {
564                 CONFIGURE_TYPE_CTRL,
565                 CONFIGURE_CATEGORY_CTRL_DETECT,
566                 MM_CAM_DETECT_NUMBER,
567                 MM_CAMCORDER_ATTR_NONE,
568                 "DetectNumber",
569                 MM_CAMCONVERT_TYPE_INT_RANGE,
570                 NULL,
571         },
572         {
573                 CONFIGURE_TYPE_CTRL,
574                 CONFIGURE_CATEGORY_CTRL_DETECT,
575                 MM_CAM_DETECT_FOCUS_SELECT,
576                 MM_CAMCORDER_ATTR_NONE,
577                 "DetectFocusSelect",
578                 MM_CAMCONVERT_TYPE_INT_RANGE,
579                 NULL,
580         },
581         {
582                 CONFIGURE_TYPE_CTRL,
583                 CONFIGURE_CATEGORY_CTRL_DETECT,
584                 MM_CAM_DETECT_SELECT_NUMBER,
585                 MM_CAMCORDER_ATTR_NONE,
586                 "DetectSelectNumber",
587                 MM_CAMCONVERT_TYPE_INT_RANGE,
588                 NULL,
589         },
590         {
591                 CONFIGURE_TYPE_CTRL,
592                 CONFIGURE_CATEGORY_CTRL_DETECT,
593                 MM_CAM_DETECT_STATUS,
594                 MM_CAMCORDER_ATTR_NONE,
595                 "DetectStatus",
596                 MM_CAMCONVERT_TYPE_INT_ARRAY,
597                 NULL,
598         },
599         {
600                 CONFIGURE_TYPE_CTRL,
601                 CONFIGURE_CATEGORY_CTRL_CAMERA,
602                 MM_CAM_RECOMMEND_CAMERA_WIDTH,
603                 MM_CAM_RECOMMEND_CAMERA_HEIGHT,
604                 "RecommendPreviewResolution",
605                 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
606                 NULL,
607         },
608         {
609                 CONFIGURE_TYPE_CTRL,
610                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
611                 MM_CAM_CAMERA_VIDEO_STABILIZATION,
612                 MM_CAMCORDER_ATTR_NONE,
613                 "VideoStabilization",
614                 MM_CAMCONVERT_TYPE_INT_ARRAY,
615                 &_mmcamcorder_enum_conv_video_stabilization,
616         },
617         {/* 40 */
618                 CONFIGURE_TYPE_CTRL,
619                 CONFIGURE_CATEGORY_CTRL_CAMERA,
620                 MM_CAM_VIDEO_WIDTH,
621                 MM_CAM_VIDEO_HEIGHT,
622                 "VideoResolution",
623                 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
624                 NULL,
625         }
626 };
627
628 /*---------------------------------------------------------------------------
629 |    LOCAL FUNCTION PROTOTYPES:                                                                                         |
630 ---------------------------------------------------------------------------*/
631 /* STATIC INTERNAL FUNCTION */
632 static int  __mmcamcorder_get_valid_array(int * original_array, int original_count, int ** valid_array, int * valid_default );
633
634 /*===========================================================================================
635 |                                                                                                                                                                                       |
636 |  FUNCTION DEFINITIONS                                                                                                                                         |
637 |                                                                                                                                                                                       |
638 ========================================================================================== */
639 /*---------------------------------------------------------------------------
640 |    GLOBAL FUNCTION DEFINITIONS:                                                                                       |
641 ---------------------------------------------------------------------------*/
642 //convert MSL value to sensor value
643 int _mmcamcorder_convert_msl_to_sensor(MMHandleType handle, int attr_idx, int mslval)
644 {
645         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
646         _MMCamcorderInfoConverting *info = NULL;
647         int i =0;
648         int size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
649
650         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
651
652         //_mmcam_dbg_log("attr_idx(%d), mslval(%d)", attr_idx, mslval);
653
654         info = hcamcorder->caminfo_convert;
655
656         for (i = 0; i < size; i++)
657         {
658                 if (info[i].attr_idx == attr_idx)
659                 {
660                         _MMCamcorderEnumConvert * enum_convert = NULL;
661                         enum_convert = info[i].enum_convert;
662
663                         if (enum_convert == NULL)
664                         {
665                                 //_mmcam_dbg_log("enum_convert is NULL. Just return the original value.");
666                                 return mslval;
667                         }
668
669                         if (enum_convert->enum_arr == NULL)
670                         {
671                                 _mmcam_dbg_warn("Unexpected error. Array pointer of enum_convert is NULL. Just return the original value.");
672                                 return mslval;
673                         }
674
675                         if( enum_convert->total_enum_num > mslval && mslval >= 0 )
676                         {
677                                 //_mmcam_dbg_log("original value(%d) -> converted value(%d)", mslval, enum_convert->enum_arr[mslval]);
678                                 return enum_convert->enum_arr[mslval];
679                         }
680                         else
681                         {
682                                 _mmcam_dbg_warn( "Input mslval[%d] is invalid(out of array[idx:%d,size:%d]), so can not convert. Just return the original value.", mslval, attr_idx, enum_convert->total_enum_num );
683                                 return mslval;
684                         }
685                 }
686         }
687
688         _mmcam_dbg_warn("There is no category to match. Just return the original value.");
689
690         return mslval;
691 }
692
693 int _mmcamcorder_get_fps_array_by_resolution(MMHandleType handle, int width, int height,  MMCamAttrsInfo* fps_info)
694 {
695         MMCamAttrsInfo *infoW = NULL;
696         MMCamAttrsInfo *infoH = NULL;
697         int i = 0;
698         char nameFps[5] = {0,};
699         bool valid_check = false;
700
701         type_int_array *fps_array;
702
703         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
704
705         //_mmcam_dbg_log("prev resolution w:%d, h:%d", width, height);
706
707         infoW = (MMCamAttrsInfo*)calloc(1, sizeof(MMCamAttrsInfo));
708         infoH = (MMCamAttrsInfo*)calloc(1, sizeof(MMCamAttrsInfo));
709
710         mm_camcorder_get_attribute_info(handle, MMCAM_CAMERA_WIDTH, infoW);
711         mm_camcorder_get_attribute_info(handle, MMCAM_CAMERA_HEIGHT, infoH);
712
713         for(i=0; i < infoW->int_array.count; i++) {
714                 //_mmcam_dbg_log("width :%d, height : %d\n", infoW->int_array.array[i], infoH->int_array.array[i]);
715                 if(infoW->int_array.array[i] == width && infoH->int_array.array[i] == height) {
716                         valid_check = true;
717                         sprintf(nameFps, "FPS%d", i);
718                         _mmcam_dbg_log("nameFps : %s!!!", nameFps);
719                         break;
720                 }
721         }
722
723         if(infoW)
724                 free(infoW);
725         if(infoH)
726                 free(infoH);
727
728         if(!valid_check) {
729                 _mmcam_dbg_err("FAILED : Can't find the valid resolution from attribute.");
730                 return MM_ERROR_CAMCORDER_NOT_SUPPORTED;
731         }
732
733         if (!_mmcamcorder_conf_get_value_int_array(hcamcorder->conf_ctrl, CONFIGURE_CATEGORY_CTRL_CAMERA, nameFps, &fps_array)) {
734                 _mmcam_dbg_err("FAILED : Can't find the valid FPS array.");
735                 return MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
736         }
737
738         fps_info->int_array.count = fps_array->count;
739         fps_info->int_array.array = fps_array->value;
740         fps_info->int_array.def = fps_array->default_value;
741
742         return MM_ERROR_NONE;
743 }
744
745 //convert sensor value to MSL value
746 int _mmcamcorder_convert_sensor_to_msl(MMHandleType handle, int attr_idx, int sensval)
747 {
748         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
749         _MMCamcorderInfoConverting *info = NULL;
750         int i = 0, j = 0;
751         int size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
752
753         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
754
755         info = hcamcorder->caminfo_convert;
756
757         for( i = 0 ; i < size ; i++ )
758         {
759                 if( info[i].attr_idx == attr_idx )
760                 {
761                         _MMCamcorderEnumConvert * enum_convert = NULL;
762                         enum_convert = info[i].enum_convert;
763
764                         if( enum_convert == NULL )
765                         {
766                                 //_mmcam_dbg_log("enum_convert is NULL. Just return the original value.");
767                                 return sensval;
768                         }
769
770                         if( enum_convert->enum_arr == NULL )
771                         {
772                                 _mmcam_dbg_warn("Unexpected error. Array pointer of enum_convert is NULL. Just return the original value.");
773                                 return sensval;
774                         }
775
776                         for( j = 0 ; j < enum_convert->total_enum_num ; j++ )
777                         {
778                                 if( sensval == enum_convert->enum_arr[j] )
779                                 {
780                                         //_mmcam_dbg_log("original value(%d) -> converted value(%d)", sensval, j);
781                                         return j;
782                                 }
783                         }
784
785                         _mmcam_dbg_warn("There is no sensor value matched with input param. Just return the original value.");
786                         return sensval;
787
788                 }
789         }
790
791         _mmcam_dbg_log("There is no category to match. Just return the original value.");
792         return sensval;
793 }
794
795 static int
796 __mmcamcorder_get_valid_array(int * original_array, int original_count, int ** valid_array, int * valid_default )
797 {
798         int i = 0;
799         int valid_count = 0;
800         int new_default = _MMCAMCORDER_SENSOR_ENUM_NONE;
801
802         for (i = 0; i < original_count; i++) {
803                 if (original_array[i] != _MMCAMCORDER_SENSOR_ENUM_NONE) {
804                         valid_count++;
805                 }
806         }
807
808         if (valid_count > 0) {
809                 *valid_array = (int*)malloc(sizeof(int) * valid_count);
810
811                 if (*valid_array) {
812                         valid_count = 0;
813                         for (i = 0; i < original_count; i++) {
814                                 if (original_array[i] != _MMCAMCORDER_SENSOR_ENUM_NONE) {
815                                         (*valid_array)[valid_count++] = i;
816                                         /*_mmcam_dbg_log( "valid_array[%d] = %d", valid_count-1, (*valid_array)[valid_count-1] );*/
817
818                                         if (original_array[i] == *valid_default &&
819                                             new_default == _MMCAMCORDER_SENSOR_ENUM_NONE) {
820                                                 new_default = i;
821                                                 /*_mmcam_dbg_log( "converted MSL default[%d]", new_default );*/
822                                         }
823                                 }
824                         }
825                 }
826                 else {
827                         valid_count = 0;
828                 }
829         }
830
831         if (new_default != _MMCAMCORDER_SENSOR_ENUM_NONE) {
832                 *valid_default = new_default;
833         }
834
835         return valid_count;
836 }
837
838
839 int _mmcamcorder_init_attr_from_configure(MMHandleType handle, MMCamConvertingCategory category)
840 {
841         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
842         _MMCamcorderInfoConverting *info = NULL;
843
844         int table_size = 0;
845         int ret = MM_ERROR_NONE;
846
847         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
848
849         _mmcam_dbg_log("category : %d", category);
850
851         if (category & MM_CAMCONVERT_CATEGORY_CAMERA) {
852                 /* Initialize attribute related to camera control */
853                 info = hcamcorder->caminfo_convert;
854                 table_size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
855                 ret = __mmcamcorder_set_info_to_attr(handle, info, table_size);
856                 if (ret != MM_ERROR_NONE) {
857                         _mmcam_dbg_err("camera info set error : 0x%x", ret);
858                         return ret;
859                 }
860         }
861
862         if (category & MM_CAMCONVERT_CATEGORY_DISPLAY) {
863                 /* Initialize attribute related to display */
864                 info = g_display_info;
865                 table_size = sizeof(g_display_info) / sizeof(_MMCamcorderInfoConverting);
866                 ret = __mmcamcorder_set_info_to_attr(handle, info, table_size);
867                 if (ret != MM_ERROR_NONE) {
868                         _mmcam_dbg_err("display info set error : 0x%x", ret);
869                         return ret;
870                 }
871         }
872
873         if (category & MM_CAMCONVERT_CATEGORY_AUDIO) {
874                 /* Initialize attribute related to audio */
875                 info = g_audio_info;
876                 table_size = sizeof(g_audio_info) / sizeof(_MMCamcorderInfoConverting);
877                 ret = __mmcamcorder_set_info_to_attr(handle, info, table_size);
878                 if (ret != MM_ERROR_NONE) {
879                         _mmcam_dbg_err("audio info set error : 0x%x", ret);
880                         return ret;
881                 }
882         }
883
884         _mmcam_dbg_log("done");
885
886         return ret;
887 }
888
889
890 int __mmcamcorder_set_info_to_attr(MMHandleType handle, _MMCamcorderInfoConverting *info, int table_size)
891 {
892         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
893         MMHandleType     attrs      = 0;
894
895         int i = 0;
896         int ret = MM_ERROR_NONE;
897
898         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
899
900         attrs = MMF_CAMCORDER_ATTRS (handle);
901         mmf_return_val_if_fail(attrs, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
902
903         camera_conf *conf_info = NULL;
904
905         for (i = 0; i < table_size ; i++ )
906         {
907                 /*
908                 _mmcam_dbg_log( "%d,%d,%d,%d,%s,%d",
909                                 info[i].type,
910                                 info[i].category,
911                                 info[i].attr_idx,
912                                 info[i].attr_idx_pair,
913                                 info[i].keyword,
914                                 info[i].conv_type );
915                 */
916
917                 if( info[i].type == CONFIGURE_TYPE_MAIN )
918                 {
919                         conf_info = hcamcorder->conf_main;
920                         /*_mmcam_dbg_log( "MAIN configure [%s]", info[i].keyword );*/
921                 }
922                 else
923                 {
924                         conf_info = hcamcorder->conf_ctrl;
925                         /*_mmcam_dbg_log( "CTRL configure [%s]", info[i].keyword );*/
926                 }
927
928                 switch(info[i].conv_type)
929                 {
930                         case MM_CAMCONVERT_TYPE_INT:
931                         {
932                                 int ivalue = 0;
933
934                                 if (!_mmcamcorder_conf_get_value_int(handle, conf_info, info[i].category, info[i].keyword, &ivalue))
935                                 {
936                                         ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
937                                         break;          //skip to set
938                                 }
939
940                                 ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, ivalue);
941                                 break;
942                         }
943                         case MM_CAMCONVERT_TYPE_INT_ARRAY:
944                         {
945                                 int *iarray = NULL;
946                                 int iarray_size = 0;
947                                 int idefault = 0;
948                                 type_int_array *tarray = NULL;
949
950                                 if (!_mmcamcorder_conf_get_value_int_array( conf_info, info[i].category, info[i].keyword, &tarray ))
951                                 {
952                                         ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
953                                         break;          //skip to set
954                                 }
955
956                                 if( tarray )
957                                 {
958                                         idefault = tarray->default_value;
959
960                                         if( info[i].enum_convert )
961                                         {
962                                                 iarray_size = __mmcamcorder_get_valid_array(tarray->value, tarray->count, &iarray, &idefault);
963                                         }
964                                         else
965                                         {
966                                                 iarray = tarray->value;
967                                                 iarray_size = tarray->count;
968                                         }
969
970                                         if( iarray_size > 0 )
971                                         {
972                                                 /*
973                                                 _mmcam_dbg_log("INT Array. attr idx=%d array=%p, size=%d, default=%d",
974                                                                info[i].attr_idx, iarray, iarray_size, idefault);
975                                                 */
976
977                                                 /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
978                                                 //mmf_attrs_set_valid_type(attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_ARRAY);
979                                                 mmf_attrs_set_valid_array(attrs, info[i].attr_idx, iarray, iarray_size, idefault);
980
981                                                 ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, idefault);
982                                         }
983                                 }
984
985                                 if (iarray && iarray != tarray->value )
986                                         free(iarray);
987
988                                 break;
989                         }
990                         case MM_CAMCONVERT_TYPE_INT_RANGE:
991                         {
992                                 type_int_range *irange = NULL;
993
994                                 if (!_mmcamcorder_conf_get_value_int_range(conf_info, info[i].category, info[i].keyword, &irange))
995                                 {
996                                         ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
997                                         break;          //skip to set
998                                 }
999
1000                                 if( irange )
1001                                 {
1002                                         //_mmcam_dbg_log("INT Range. m:%d, s:%d, min=%d, max=%d", info[i].main_key, info[i].sub_key1, irange->min, irange->max);
1003                                         /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
1004                                         //mmf_attrs_set_valid_type (attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_RANGE);
1005                                         mmf_attrs_set_valid_range(attrs, info[i].attr_idx, irange->min, irange->max, irange->default_value);
1006
1007                                         ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, irange->default_value);
1008                                 }
1009
1010                                 break;
1011                         }
1012                         case MM_CAMCONVERT_TYPE_STRING:
1013                         {
1014                                 const char *cString = NULL;
1015                                 unsigned int iString_len = 0;
1016
1017                                 if (!_mmcamcorder_conf_get_value_string(handle, conf_info, info[i].category, info[i].keyword, &cString ))
1018                                 {
1019                                         ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
1020                                         break;          //skip to set
1021                                 }
1022
1023                                 //_mmcam_dbg_log("String. m:%d, s:%d, cString=%s", info[i].main_key, info[i].sub_key1, cString);
1024                                 //strlen makes a crash when null pointer is passed.
1025                                 if (cString)
1026                                         iString_len = strlen(cString);
1027                                 else
1028                                         iString_len = 0;
1029
1030                                 ret = mm_attrs_set_string(attrs, info[i].attr_idx, cString, iString_len);
1031                                 break;
1032                         }
1033                         case MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY:
1034                         {
1035                                 type_int_pair_array *pair_array = NULL;
1036
1037                                 /*_mmcam_dbg_log("INT PAIR Array. type:%d, attr_idx:%d, attr_idx_pair:%d", info[i].type, info[i].attr_idx, info[i].attr_idx_pair);*/
1038
1039                                 if (!_mmcamcorder_conf_get_value_int_pair_array(conf_info, info[i].category, info[i].keyword, &pair_array))
1040                                 {
1041                                         ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
1042                                         break;          //skip to set
1043                                 }
1044
1045                                 if( pair_array && pair_array->count > 0 )
1046                                 {
1047                                         /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
1048                                         //mmf_attrs_set_valid_type(attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_ARRAY);
1049                                         mmf_attrs_set_valid_array(attrs, info[i].attr_idx,
1050                                                                   pair_array->value[0],
1051                                                                   pair_array->count,
1052                                                                   pair_array->default_value[0]);
1053                                         /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
1054                                         //mmf_attrs_set_valid_type(attrs, info[i].attr_idx_pair, MM_ATTRS_VALID_TYPE_INT_ARRAY);
1055                                         mmf_attrs_set_valid_array(attrs, info[i].attr_idx_pair,
1056                                                                   pair_array->value[1],
1057                                                                   pair_array->count,
1058                                                                   pair_array->default_value[1]);
1059
1060                                         mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, pair_array->default_value[0]);
1061                                         mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx_pair, pair_array->default_value[1]);
1062                                 }
1063                                 break;
1064                         }
1065
1066                         case MM_CAMCONVERT_TYPE_USER:
1067                         default:
1068                                 _mmcam_dbg_log("default : s:%d", info[i].attr_idx);
1069                                 break;
1070                 }
1071         }
1072
1073         if (ret != MM_ERROR_NONE || mmf_attrs_commit(attrs) == -1)
1074                 return MM_ERROR_CAMCORDER_INVALID_ARGUMENT;
1075         else
1076                 return MM_ERROR_NONE;
1077 }
1078
1079
1080 int _mmcamcorder_set_converted_value(MMHandleType handle, _MMCamcorderEnumConvert * convert)
1081 {
1082         mmf_camcorder_t* hcamcorder = MMF_CAMCORDER(handle);
1083         type_int_array *array = NULL;
1084
1085         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
1086
1087         _mmcamcorder_conf_get_value_int_array( hcamcorder->conf_ctrl, convert->category, convert->keyword, &array );
1088
1089         if( array )
1090         {
1091                 convert->enum_arr = array->value;
1092         }
1093
1094         return MM_ERROR_NONE;
1095 }
1096
1097
1098 int _mmcamcorder_init_convert_table(MMHandleType handle)
1099 {
1100         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
1101         int enum_conv_size = sizeof(_MMCamcorderEnumConvert);
1102         int caminfo_conv_size = sizeof(g_caminfo_convert);
1103         int caminfo_conv_length = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
1104         int i = 0;
1105
1106         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
1107
1108         /* copy default conv data into memory of handle */
1109         memcpy(&(hcamcorder->caminfo_convert), &g_caminfo_convert, caminfo_conv_size);
1110         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]), &_mmcamcorder_enum_conv_whitebalance, enum_conv_size);
1111         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]), &_mmcamcorder_enum_conv_colortone, enum_conv_size);
1112         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ISO]), &_mmcamcorder_enum_conv_iso, enum_conv_size);
1113         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]), &_mmcamcorder_enum_conv_prgrm, enum_conv_size);
1114         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]), &_mmcamcorder_enum_conv_focus_mode, enum_conv_size);
1115         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]), &_mmcamcorder_enum_conv_focus_type, enum_conv_size);
1116         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]), &_mmcamcorder_enum_conv_ae_type, enum_conv_size);
1117         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]), &_mmcamcorder_enum_conv_strobe_mode, enum_conv_size);
1118         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_WDR]), &_mmcamcorder_enum_conv_wdr_ctrl, enum_conv_size);
1119         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_FLIP]), &_mmcamcorder_enum_conv_flip_ctrl, enum_conv_size);
1120         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ROTATION]), &_mmcamcorder_enum_conv_rotation_ctrl, enum_conv_size);
1121         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]), &_mmcamcorder_enum_conv_ahs, enum_conv_size);
1122         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]), &_mmcamcorder_enum_conv_video_stabilization, enum_conv_size);
1123
1124         /* set ini info to conv data */
1125         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]));
1126         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]));
1127         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ISO]));
1128         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]));
1129         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]));
1130         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]));
1131         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]));
1132         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]));
1133         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_WDR]));
1134         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_FLIP]));
1135         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ROTATION]));
1136         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]));
1137         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]));
1138
1139         /* set modified conv data to handle */
1140         for (i = 0 ; i < caminfo_conv_length ; i++) {
1141                 if (hcamcorder->caminfo_convert[i].type == CONFIGURE_TYPE_CTRL) {
1142                         switch (hcamcorder->caminfo_convert[i].category) {
1143                         case CONFIGURE_CATEGORY_CTRL_STROBE:
1144                                 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "StrobeMode")) {
1145                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]);
1146                                 }
1147                                 break;
1148                         case CONFIGURE_CATEGORY_CTRL_EFFECT:
1149                                 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "WhiteBalance")) {
1150                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]);
1151                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ColorTone")) {
1152                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]);
1153                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "WDR")) {
1154                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_WDR]);
1155                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "Flip")) {
1156                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_FLIP]);
1157                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "Rotation")) {
1158                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ROTATION]);
1159                                 }
1160                                 break;
1161                         case CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH:
1162                                 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "FocusMode")) {
1163                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]);
1164                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AFType")) {
1165                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]);
1166                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AEType")) {
1167                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]);
1168                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ISO")) {
1169                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ISO]);
1170                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ProgramMode")) {
1171                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]);
1172                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AntiHandshake")) {
1173                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]);
1174                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "VideoStabilization")) {
1175                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]);
1176                                 }
1177                                 break;
1178                         default:
1179                                 break;
1180                         }
1181                 }
1182         }
1183
1184         return MM_ERROR_NONE;
1185 }
1186
1187
1188 double _mmcamcorder_convert_volume(int mslVal)
1189 {
1190         double newVal = -1;
1191         switch (mslVal)
1192         {
1193                 case 0:
1194                         newVal = 0;
1195                         break;
1196                 case 1:
1197                         newVal = 1;
1198                         break;
1199                 default:
1200                         _mmcam_dbg_warn("out of range");
1201                         break;
1202         }
1203
1204         return newVal;
1205 }
1206
1207
1208