4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jeongmo Yang <jm80.yang@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 /*===========================================================================================
26 ========================================================================================== */
27 #include "mm_camcorder_internal.h"
28 #include "mm_camcorder_platform.h"
29 #include "mm_camcorder_configure.h"
31 /*---------------------------------------------------------------------------
32 | GLOBAL VARIABLE DEFINITIONS for internal |
33 ---------------------------------------------------------------------------*/
35 /*---------------------------------------------------------------------------
36 | LOCAL VARIABLE DEFINITIONS for internal |
37 ---------------------------------------------------------------------------*/
38 #define MM_CAMCORDER_ATTR_NONE -1
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.
45 static int __enum_conv_whitebalance[MM_CAMCORDER_WHITE_BALANCE_NUM] ;
47 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_whitebalance =
49 MM_CAMCORDER_WHITE_BALANCE_NUM,
50 __enum_conv_whitebalance,
51 CONFIGURE_CATEGORY_CTRL_EFFECT,
56 static int __enum_conv_colortone[MM_CAMCORDER_COLOR_TONE_NUM];
58 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_colortone =
60 MM_CAMCORDER_COLOR_TONE_NUM,
61 __enum_conv_colortone,
62 CONFIGURE_CATEGORY_CTRL_EFFECT,
67 static int __enum_conv_iso[MM_CAMCORDER_ISO_NUM];
69 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_iso =
73 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
78 static int __enum_conv_prgrm[MM_CAMCORDER_SCENE_MODE_NUM];
80 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_prgrm =
82 MM_CAMCORDER_SCENE_MODE_NUM,
84 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
89 static int __enum_conv_focus_mode[MM_CAMCORDER_FOCUS_MODE_NUM];
91 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_focus_mode =
93 MM_CAMCORDER_FOCUS_MODE_NUM,
94 __enum_conv_focus_mode,
95 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
100 static int __enum_conv_focus_type[MM_CAMCORDER_AUTO_FOCUS_NUM];
102 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_focus_type =
104 MM_CAMCORDER_AUTO_FOCUS_NUM,
105 __enum_conv_focus_type,
106 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
111 static int __enum_conv_ae_type[MM_CAMCORDER_AUTO_EXPOSURE_NUM];
113 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_ae_type =
115 MM_CAMCORDER_AUTO_EXPOSURE_NUM,
117 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
122 static int __enum_conv_strobe_ctrl[MM_CAMCORDER_STROBE_CONTROL_NUM];
124 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_strobe_ctrl =
126 MM_CAMCORDER_STROBE_CONTROL_NUM,
127 __enum_conv_strobe_ctrl,
128 CONFIGURE_CATEGORY_CTRL_STROBE,
133 static int __enum_conv_strobe_mode[MM_CAMCORDER_STROBE_MODE_NUM];
135 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_strobe_mode =
137 MM_CAMCORDER_STROBE_MODE_NUM,
138 __enum_conv_strobe_mode,
139 CONFIGURE_CATEGORY_CTRL_STROBE,
144 static int __enum_conv_wdr_ctrl[MM_CAMCORDER_WDR_NUM];
146 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_wdr_ctrl =
148 MM_CAMCORDER_WDR_NUM,
149 __enum_conv_wdr_ctrl,
150 CONFIGURE_CATEGORY_CTRL_EFFECT,
155 static int __enum_conv_ahs[MM_CAMCORDER_AHS_NUM];
157 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_ahs =
159 MM_CAMCORDER_AHS_NUM,
161 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
166 static int __enum_conv_video_stabilization[MM_CAMCORDER_VIDEO_STABILIZATION_NUM];
168 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_video_stabilization =
170 MM_CAMCORDER_VIDEO_STABILIZATION_NUM,
171 __enum_conv_video_stabilization,
172 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
177 static int __enum_conv_hdr_capture[MM_CAMCORDER_HDR_CAPTURE_NUM];
179 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_hdr_capture =
181 MM_CAMCORDER_HDR_CAPTURE_NUM,
182 __enum_conv_hdr_capture,
183 CONFIGURE_CATEGORY_CTRL_CAPTURE,
187 static int __enum_conv_detect_mode[MM_CAMCORDER_DETECT_MODE_NUM];
189 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_detect_mode =
191 MM_CAMCORDER_DETECT_MODE_NUM,
192 __enum_conv_detect_mode,
193 CONFIGURE_CATEGORY_CTRL_DETECT,
199 * Matching table of caminfo index with category enum of attribute.
200 * If predefined item is changed, this static variables should be changed.
201 * For detail information, refer below documents.
204 static _MMCamcorderInfoConverting g_display_info[] = {
207 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
208 MM_CAM_DISPLAY_DEVICE,
209 MM_CAMCORDER_ATTR_NONE,
211 MM_CAMCONVERT_TYPE_INT_ARRAY,
216 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
218 MM_CAMCORDER_ATTR_NONE,
220 MM_CAMCONVERT_TYPE_INT_ARRAY,
225 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
226 MM_CAM_DISPLAY_SURFACE,
227 MM_CAMCORDER_ATTR_NONE,
229 MM_CAMCONVERT_TYPE_INT_ARRAY,
234 static _MMCamcorderInfoConverting g_caminfo_convert[CAMINFO_CONVERT_NUM] = {
237 CONFIGURE_CATEGORY_CTRL_CAMERA,
238 MM_CAM_CAMERA_DEVICE_NAME,
239 MM_CAMCORDER_ATTR_NONE,
241 MM_CAMCONVERT_TYPE_STRING,
246 CONFIGURE_CATEGORY_CTRL_CAMERA,
248 MM_CAM_CAMERA_HEIGHT,
250 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
255 CONFIGURE_CATEGORY_CTRL_CAMERA,
256 MM_CAM_CAPTURE_WIDTH,
257 MM_CAM_CAPTURE_HEIGHT,
259 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
264 CONFIGURE_CATEGORY_CTRL_CAMERA,
266 MM_CAMCORDER_ATTR_NONE,
268 MM_CAMCONVERT_TYPE_INT_ARRAY,
273 CONFIGURE_CATEGORY_CTRL_CAMERA,
274 MM_CAM_CAMERA_FORMAT,
275 MM_CAMCORDER_ATTR_NONE,
277 MM_CAMCONVERT_TYPE_INT_ARRAY,
282 CONFIGURE_CATEGORY_CTRL_STROBE,
283 MM_CAM_STROBE_CONTROL,
284 MM_CAMCORDER_ATTR_NONE,
286 MM_CAMCONVERT_TYPE_INT_ARRAY,
287 &_mmcamcorder_enum_conv_strobe_ctrl,
291 CONFIGURE_CATEGORY_CTRL_STROBE,
292 MM_CAM_STROBE_CAPABILITIES,
293 MM_CAMCORDER_ATTR_NONE,
294 "StrobeCapabilities",
295 MM_CAMCONVERT_TYPE_INT_ARRAY,
300 CONFIGURE_CATEGORY_CTRL_STROBE,
302 MM_CAMCORDER_ATTR_NONE,
304 MM_CAMCONVERT_TYPE_INT_ARRAY,
305 &_mmcamcorder_enum_conv_strobe_mode,
309 CONFIGURE_CATEGORY_CTRL_EFFECT,
310 MM_CAM_FILTER_BRIGHTNESS,
311 MM_CAMCORDER_ATTR_NONE,
313 MM_CAMCONVERT_TYPE_INT_RANGE,
318 CONFIGURE_CATEGORY_CTRL_EFFECT,
319 MM_CAM_FILTER_CONTRAST,
320 MM_CAMCORDER_ATTR_NONE,
322 MM_CAMCONVERT_TYPE_INT_RANGE,
327 CONFIGURE_CATEGORY_CTRL_EFFECT,
328 MM_CAM_FILTER_SATURATION,
329 MM_CAMCORDER_ATTR_NONE,
331 MM_CAMCONVERT_TYPE_INT_RANGE,
336 CONFIGURE_CATEGORY_CTRL_EFFECT,
338 MM_CAMCORDER_ATTR_NONE,
340 MM_CAMCONVERT_TYPE_INT_RANGE,
345 CONFIGURE_CATEGORY_CTRL_EFFECT,
346 MM_CAM_FILTER_SHARPNESS,
347 MM_CAMCORDER_ATTR_NONE,
349 MM_CAMCONVERT_TYPE_INT_RANGE,
354 CONFIGURE_CATEGORY_CTRL_EFFECT,
356 MM_CAMCORDER_ATTR_NONE,
358 MM_CAMCONVERT_TYPE_INT_ARRAY,
359 &_mmcamcorder_enum_conv_whitebalance,
363 CONFIGURE_CATEGORY_CTRL_EFFECT,
364 MM_CAM_FILTER_COLOR_TONE,
365 MM_CAMCORDER_ATTR_NONE,
367 MM_CAMCONVERT_TYPE_INT_ARRAY,
368 &_mmcamcorder_enum_conv_colortone,
372 CONFIGURE_CATEGORY_CTRL_EFFECT,
374 MM_CAMCORDER_ATTR_NONE,
376 MM_CAMCONVERT_TYPE_INT_ARRAY,
377 &_mmcamcorder_enum_conv_wdr_ctrl,
381 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
382 MM_CAM_CAMERA_DIGITAL_ZOOM,
383 MM_CAMCORDER_ATTR_NONE,
385 MM_CAMCONVERT_TYPE_INT_RANGE,
390 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
391 MM_CAM_CAMERA_OPTICAL_ZOOM,
392 MM_CAMCORDER_ATTR_NONE,
394 MM_CAMCONVERT_TYPE_INT_RANGE,
399 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
400 MM_CAM_CAMERA_FOCUS_MODE,
401 MM_CAMCORDER_ATTR_NONE,
403 MM_CAMCONVERT_TYPE_INT_ARRAY,
404 &_mmcamcorder_enum_conv_focus_mode,
408 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
409 MM_CAM_CAMERA_AF_SCAN_RANGE,
410 MM_CAMCORDER_ATTR_NONE,
412 MM_CAMCONVERT_TYPE_INT_ARRAY,
413 &_mmcamcorder_enum_conv_focus_type,
417 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
418 MM_CAM_CAMERA_EXPOSURE_MODE,
419 MM_CAMCORDER_ATTR_NONE,
421 MM_CAMCONVERT_TYPE_INT_ARRAY,
422 &_mmcamcorder_enum_conv_ae_type,
426 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
427 MM_CAM_CAMERA_EXPOSURE_VALUE,
428 MM_CAMCORDER_ATTR_NONE,
430 MM_CAMCONVERT_TYPE_INT_RANGE,
435 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
436 MM_CAM_CAMERA_F_NUMBER,
437 MM_CAMCORDER_ATTR_NONE,
439 MM_CAMCONVERT_TYPE_INT_ARRAY,
444 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
445 MM_CAM_CAMERA_SHUTTER_SPEED,
446 MM_CAMCORDER_ATTR_NONE,
448 MM_CAMCONVERT_TYPE_INT_ARRAY,
453 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
455 MM_CAMCORDER_ATTR_NONE,
457 MM_CAMCONVERT_TYPE_INT_ARRAY,
458 &_mmcamcorder_enum_conv_iso,
462 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
463 MM_CAM_FILTER_SCENE_MODE,
464 MM_CAMCORDER_ATTR_NONE,
466 MM_CAMCONVERT_TYPE_INT_ARRAY,
467 &_mmcamcorder_enum_conv_prgrm,
471 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
472 MM_CAM_CAMERA_ANTI_HANDSHAKE,
473 MM_CAMCORDER_ATTR_NONE,
475 MM_CAMCONVERT_TYPE_INT_ARRAY,
476 &_mmcamcorder_enum_conv_ahs,
480 CONFIGURE_CATEGORY_CTRL_CAPTURE,
481 MM_CAM_CAPTURE_FORMAT,
482 MM_CAMCORDER_ATTR_NONE,
484 MM_CAMCONVERT_TYPE_INT_ARRAY,
489 CONFIGURE_CATEGORY_CTRL_CAPTURE,
490 MM_CAM_IMAGE_ENCODER_QUALITY,
491 MM_CAMCORDER_ATTR_NONE,
493 MM_CAMCONVERT_TYPE_INT_RANGE,
498 CONFIGURE_CATEGORY_CTRL_CAPTURE,
499 MM_CAM_CAPTURE_COUNT,
500 MM_CAMCORDER_ATTR_NONE,
502 MM_CAMCONVERT_TYPE_INT_RANGE,
507 CONFIGURE_CATEGORY_CTRL_CAPTURE,
508 MM_CAM_CAMERA_HDR_CAPTURE,
509 MM_CAMCORDER_ATTR_NONE,
511 MM_CAMCONVERT_TYPE_INT_ARRAY,
512 &_mmcamcorder_enum_conv_hdr_capture,
516 CONFIGURE_CATEGORY_CTRL_DETECT,
518 MM_CAMCORDER_ATTR_NONE,
520 MM_CAMCONVERT_TYPE_INT_ARRAY,
521 &_mmcamcorder_enum_conv_detect_mode,
525 CONFIGURE_CATEGORY_CTRL_DETECT,
526 MM_CAM_DETECT_NUMBER,
527 MM_CAMCORDER_ATTR_NONE,
529 MM_CAMCONVERT_TYPE_INT_RANGE,
534 CONFIGURE_CATEGORY_CTRL_DETECT,
535 MM_CAM_DETECT_FOCUS_SELECT,
536 MM_CAMCORDER_ATTR_NONE,
538 MM_CAMCONVERT_TYPE_INT_RANGE,
543 CONFIGURE_CATEGORY_CTRL_DETECT,
544 MM_CAM_DETECT_SELECT_NUMBER,
545 MM_CAMCORDER_ATTR_NONE,
546 "DetectSelectNumber",
547 MM_CAMCONVERT_TYPE_INT_RANGE,
552 CONFIGURE_CATEGORY_CTRL_DETECT,
553 MM_CAM_DETECT_STATUS,
554 MM_CAMCORDER_ATTR_NONE,
556 MM_CAMCONVERT_TYPE_INT_ARRAY,
561 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
562 MM_CAM_CAMERA_FACE_ZOOM_MODE,
563 MM_CAMCORDER_ATTR_NONE,
565 MM_CAMCONVERT_TYPE_INT_ARRAY,
570 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
571 MM_CAM_CAMERA_FACE_ZOOM_LEVEL,
572 MM_CAMCORDER_ATTR_NONE,
574 MM_CAMCONVERT_TYPE_INT_RANGE,
579 CONFIGURE_CATEGORY_CTRL_CAMERA,
580 MM_CAM_RECOMMEND_CAMERA_WIDTH,
581 MM_CAM_RECOMMEND_CAMERA_HEIGHT,
582 "RecommendPreviewResolution",
583 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
588 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
589 MM_CAM_CAMERA_VIDEO_STABILIZATION,
590 MM_CAMCORDER_ATTR_NONE,
591 "VideoStabilization",
592 MM_CAMCONVERT_TYPE_INT_ARRAY,
593 &_mmcamcorder_enum_conv_video_stabilization,
597 /*---------------------------------------------------------------------------
598 | LOCAL FUNCTION PROTOTYPES: |
599 ---------------------------------------------------------------------------*/
600 /* STATIC INTERNAL FUNCTION */
601 static int __mmcamcorder_set_info_to_attr( MMHandleType handle, _MMCamcorderInfoConverting *info, int table_size );
602 static int __mmcamcorder_get_valid_array(int * original_array, int original_count, int ** valid_array, int * valid_default );
604 /*===========================================================================================
606 | FUNCTION DEFINITIONS |
608 ========================================================================================== */
609 /*---------------------------------------------------------------------------
610 | GLOBAL FUNCTION DEFINITIONS: |
611 ---------------------------------------------------------------------------*/
612 //convert MSL value to sensor value
613 int _mmcamcorder_convert_msl_to_sensor(MMHandleType handle, int attr_idx, int mslval)
615 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
616 _MMCamcorderInfoConverting *info = NULL;
618 int size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
620 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
622 //_mmcam_dbg_log("attr_idx(%d), mslval(%d)", attr_idx, mslval);
624 info = hcamcorder->caminfo_convert;
626 for (i = 0; i < size; i++)
628 if (info[i].attr_idx == attr_idx)
630 _MMCamcorderEnumConvert * enum_convert = NULL;
631 enum_convert = info[i].enum_convert;
633 if (enum_convert == NULL)
635 //_mmcam_dbg_log("enum_convert is NULL. Just return the original value.");
639 if (enum_convert->enum_arr == NULL)
641 _mmcam_dbg_warn("Unexpected error. Array pointer of enum_convert is NULL. Just return the original value.");
645 if( enum_convert->total_enum_num > mslval && mslval >= 0 )
647 //_mmcam_dbg_log("original value(%d) -> converted value(%d)", mslval, enum_convert->enum_arr[mslval]);
648 return enum_convert->enum_arr[mslval];
652 _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 );
658 _mmcam_dbg_warn("There is no category to match. Just return the original value.");
663 //convert sensor value to MSL value
664 int _mmcamcorder_convert_sensor_to_msl(MMHandleType handle, int attr_idx, int sensval)
666 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
667 _MMCamcorderInfoConverting *info = NULL;
669 int size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
671 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
673 info = hcamcorder->caminfo_convert;
675 for( i = 0 ; i < size ; i++ )
677 if( info[i].attr_idx == attr_idx )
679 _MMCamcorderEnumConvert * enum_convert = NULL;
680 enum_convert = info[i].enum_convert;
682 if( enum_convert == NULL )
684 //_mmcam_dbg_log("enum_convert is NULL. Just return the original value.");
688 if( enum_convert->enum_arr == NULL )
690 _mmcam_dbg_warn("Unexpected error. Array pointer of enum_convert is NULL. Just return the original value.");
694 for( j = 0 ; j < enum_convert->total_enum_num ; j++ )
696 if( sensval == enum_convert->enum_arr[j] )
698 //_mmcam_dbg_log("original value(%d) -> converted value(%d)", sensval, j);
703 _mmcam_dbg_warn("There is no sensor value matched with input param. Just return the original value.");
709 _mmcam_dbg_log("There is no category to match. Just return the original value.");
714 __mmcamcorder_get_valid_array(int * original_array, int original_count, int ** valid_array, int * valid_default )
718 int new_default = _MMCAMCORDER_SENSOR_ENUM_NONE;
720 for (i = 0; i < original_count; i++)
722 if (original_array[i] != _MMCAMCORDER_SENSOR_ENUM_NONE)
728 *valid_array = (int*)malloc(sizeof(int) * valid_count);
731 for (i = 0; i < original_count; i++)
733 if (original_array[i] != _MMCAMCORDER_SENSOR_ENUM_NONE)
735 (*valid_array)[valid_count++] = i;
736 //_mmcam_dbg_log( "valid_array[%d] = %d", valid_count-1, (*valid_array)[valid_count-1] );
738 if( original_array[i] == *valid_default )
741 //_mmcam_dbg_log( "converted MSL default[%d]", new_default );
747 if( new_default != _MMCAMCORDER_SENSOR_ENUM_NONE )
749 *valid_default = new_default;
756 int _mmcamcorder_init_attr_from_configure(MMHandleType handle)
758 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
759 _MMCamcorderInfoConverting *info = NULL;
762 int ret = MM_ERROR_NONE;
764 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
768 /* Initialize attribute related to camera control */
769 info = hcamcorder->caminfo_convert;
770 table_size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
771 ret = __mmcamcorder_set_info_to_attr( handle, info, table_size );
772 if( ret != MM_ERROR_NONE )
774 _mmcam_dbg_err( "ret : %x", ret );
778 /* Initialize attribute related to display */
779 info = g_display_info;
780 table_size = sizeof(g_display_info) / sizeof(_MMCamcorderInfoConverting);
781 ret = __mmcamcorder_set_info_to_attr( handle, info, table_size );
782 _mmcam_dbg_log( "result: %x", ret );
788 __mmcamcorder_set_info_to_attr( MMHandleType handle, _MMCamcorderInfoConverting *info, int table_size )
790 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
791 MMHandleType attrs = 0;
795 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
797 attrs = MMF_CAMCORDER_ATTRS (handle);
798 mmf_return_val_if_fail(attrs, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
800 camera_conf *conf_info = NULL;
802 for (i = 0; i < table_size ; i++ )
804 int ret = MM_ERROR_NONE;
807 _mmcam_dbg_log( "%d,%d,%d,%d,%s,%d",
811 info[i].attr_idx_sub,
816 if( info[i].type == CONFIGURE_TYPE_MAIN )
818 conf_info = hcamcorder->conf_main;
819 _mmcam_dbg_log( "MAIN configure [%s]", info[i].keyword );
823 conf_info = hcamcorder->conf_ctrl;
824 _mmcam_dbg_log( "CTRL configure [%s]", info[i].keyword );
827 switch(info[i].conv_type)
829 case MM_CAMCONVERT_TYPE_INT:
831 int iarray = (int)NULL;
833 if (!_mmcamcorder_conf_get_value_int( conf_info, info[i].category, info[i].keyword, &iarray ))
835 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
839 ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, iarray);
841 //_mmcam_dbg_log("INT . m:%d, s:%d, arr=%d", info[i].main_key, info[i].sub_key1, iarray);
844 case MM_CAMCONVERT_TYPE_INT_ARRAY:
849 type_int_array *tarray = NULL;
851 if (!_mmcamcorder_conf_get_value_int_array( conf_info, info[i].category, info[i].keyword, &tarray ))
853 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
859 idefault = tarray->default_value;
861 if( info[i].enum_convert )
863 iarray_size = __mmcamcorder_get_valid_array(tarray->value, tarray->count, &iarray, &idefault);
867 iarray = tarray->value;
868 iarray_size = tarray->count;
871 if( iarray_size > 0 )
874 _mmcam_dbg_log("INT Array. m:%d, s:%d, arr=%x, size=%d, default=%d",
875 info[i].main_key, info[i].sub_key1, iarray, iarray_size, idefault);
878 mmf_attrs_set_valid_type(attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_ARRAY);
879 mmf_attrs_set_valid_array(attrs, info[i].attr_idx, iarray, iarray_size, idefault);
882 ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, idefault);
885 if (iarray && iarray != tarray->value )
890 case MM_CAMCONVERT_TYPE_INT_RANGE:
892 type_int_range *irange = NULL;
894 if (!_mmcamcorder_conf_get_value_int_range(conf_info, info[i].category, info[i].keyword, &irange))
896 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
902 //_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);
904 mmf_attrs_set_valid_type (attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_RANGE);
905 mmf_attrs_set_valid_range(attrs, info[i].attr_idx, irange->min, irange->max, irange->default_value);
907 ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, irange->default_value);
912 case MM_CAMCONVERT_TYPE_STRING:
914 char* cString = NULL;
915 unsigned int iString_len = 0;
917 if (!_mmcamcorder_conf_get_value_string(conf_info, info[i].category, info[i].keyword, &cString ))
919 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
923 //_mmcam_dbg_log("String. m:%d, s:%d, cString=%s", info[i].main_key, info[i].sub_key1, cString);
924 //strlen makes a crash when null pointer is passed.
926 iString_len = strlen(cString);
930 ret = mm_attrs_set_string(attrs, info[i].attr_idx, cString, iString_len);
933 case MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY:
935 type_int_pair_array *pair_array = NULL;
937 //_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);
939 if (!_mmcamcorder_conf_get_value_int_pair_array(conf_info, info[i].category, info[i].keyword, &pair_array))
941 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
945 if( pair_array && pair_array->count > 0 )
947 mmf_attrs_set_valid_type(attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_ARRAY);
948 mmf_attrs_set_valid_array(attrs, info[i].attr_idx,
949 pair_array->value[0],
951 pair_array->default_value[0]);
952 mmf_attrs_set_valid_type(attrs, info[i].attr_idx_pair, MM_ATTRS_VALID_TYPE_INT_ARRAY);
953 mmf_attrs_set_valid_array(attrs, info[i].attr_idx_pair,
954 pair_array->value[1],
956 pair_array->default_value[1]);
958 mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, pair_array->default_value[0]);
959 mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx_pair, pair_array->default_value[1]);
964 case MM_CAMCONVERT_TYPE_USER:
966 _mmcam_dbg_log("default : s:%d", info[i].attr_idx);
970 if (ret != MM_ERROR_NONE)
972 _mmcam_dbg_warn("Setting error. ( s:%d, ret:%x)", info[i].attr_idx, ret);
976 if (mmf_attrs_commit(attrs) == -1)
977 return MM_ERROR_CAMCORDER_INVALID_ARGUMENT;
979 return MM_ERROR_NONE;
983 int _mmcamcorder_set_converted_value(MMHandleType handle, _MMCamcorderEnumConvert * convert)
985 mmf_camcorder_t* hcamcorder = MMF_CAMCORDER(handle);
986 type_int_array *array = NULL;
988 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
990 _mmcamcorder_conf_get_value_int_array( hcamcorder->conf_ctrl, convert->category, convert->keyword, &array );
994 convert->enum_arr = array->value;
997 return MM_ERROR_NONE;
1001 int _mmcamcorder_init_convert_table(MMHandleType handle)
1003 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
1004 int enum_conv_size = sizeof(_MMCamcorderEnumConvert);
1005 int caminfo_conv_size = sizeof(g_caminfo_convert);
1006 int caminfo_conv_length = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
1009 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
1011 /* copy default conv data into memory of handle */
1012 memcpy(&(hcamcorder->caminfo_convert), &g_caminfo_convert, caminfo_conv_size);
1013 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]), &_mmcamcorder_enum_conv_whitebalance, enum_conv_size);
1014 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]), &_mmcamcorder_enum_conv_colortone, enum_conv_size);
1015 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ISO]), &_mmcamcorder_enum_conv_iso, enum_conv_size);
1016 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]), &_mmcamcorder_enum_conv_prgrm, enum_conv_size);
1017 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]), &_mmcamcorder_enum_conv_focus_mode, enum_conv_size);
1018 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]), &_mmcamcorder_enum_conv_focus_type, enum_conv_size);
1019 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]), &_mmcamcorder_enum_conv_ae_type, enum_conv_size);
1020 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]), &_mmcamcorder_enum_conv_strobe_mode, enum_conv_size);
1021 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_WDR]), &_mmcamcorder_enum_conv_wdr_ctrl, enum_conv_size);
1022 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]), &_mmcamcorder_enum_conv_ahs, enum_conv_size);
1023 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]), &_mmcamcorder_enum_conv_video_stabilization, enum_conv_size);
1025 /* set ini info to conv data */
1026 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]));
1027 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]));
1028 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ISO]));
1029 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]));
1030 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]));
1031 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]));
1032 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]));
1033 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]));
1034 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_WDR]));
1035 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]));
1036 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]));
1038 /* set modified conv data to handle */
1039 for (i = 0 ; i < caminfo_conv_length ; i++) {
1040 if (hcamcorder->caminfo_convert[i].type == CONFIGURE_TYPE_CTRL) {
1041 switch (hcamcorder->caminfo_convert[i].category) {
1042 case CONFIGURE_CATEGORY_CTRL_STROBE:
1043 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "StrobeMode")) {
1044 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]);
1047 case CONFIGURE_CATEGORY_CTRL_EFFECT:
1048 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "WhiteBalance")) {
1049 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]);
1050 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ColorTone")) {
1051 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]);
1052 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "WDR")) {
1053 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_WDR]);
1056 case CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH:
1057 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "FocusMode")) {
1058 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]);
1059 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AFType")) {
1060 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]);
1061 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AEType")) {
1062 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]);
1063 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ISO")) {
1064 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ISO]);
1065 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ProgramMode")) {
1066 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]);
1067 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AntiHandshake")) {
1068 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]);
1069 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "VideoStabilization")) {
1070 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]);
1079 return MM_ERROR_NONE;
1083 double _mmcamcorder_convert_volume(int mslVal)
1095 _mmcam_dbg_warn("out of range");