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