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 /*=======================================================================================
24 =======================================================================================*/
30 #include "mm_camcorder_internal.h"
31 #include "mm_camcorder_configure.h"
33 /*-----------------------------------------------------------------------
34 | MACRO DEFINITIONS: |
35 -----------------------------------------------------------------------*/
36 #define CONFIGURE_PATH "/usr/etc"
37 #define CONFIGURE_PATH_RETRY "/opt/etc"
39 /*-----------------------------------------------------------------------
40 | GLOBAL VARIABLE DEFINITIONS |
41 -----------------------------------------------------------------------*/
43 /*-----------------------------------------------------------------------
44 | LOCAL VARIABLE DEFINITIONS |
45 -----------------------------------------------------------------------*/
46 static int conf_main_category_size[CONFIGURE_CATEGORY_MAIN_NUM] = { 0, };
47 static int conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_NUM] = { 0, };
49 static conf_info_table* conf_main_info_table[CONFIGURE_CATEGORY_MAIN_NUM] = { NULL, };
50 static conf_info_table* conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_NUM] = { NULL, };
53 * Videosrc element default value
55 static type_element _videosrc_element_default = {
65 * Audiosrc element default value
67 static type_int ___audiosrc_default_channel = { "Channel", 1 };
68 static type_int ___audiosrc_default_bitrate = { "BitRate", 8000 };
69 static type_int ___audiosrc_default_depth = { "Depth", 16 };
70 static type_int ___audiosrc_default_blocksize = { "BlockSize", 1280 };
71 static type_int* __audiosrc_default_int_array[] = {
72 &___audiosrc_default_channel,
73 &___audiosrc_default_bitrate,
74 &___audiosrc_default_depth,
75 &___audiosrc_default_blocksize,
77 static type_string ___audiosrc_default_device = { "Device", "default" };
78 static type_string* __audiosrc_default_string_array[] = {
79 &___audiosrc_default_device,
81 static type_element _audiosrc_element_default = {
84 __audiosrc_default_int_array,
85 sizeof( __audiosrc_default_int_array ) / sizeof( type_int* ),
86 __audiosrc_default_string_array,
87 sizeof( __audiosrc_default_string_array ) / sizeof( type_string* ),
90 static type_element _audiomodemsrc_element_default = {
91 "AudiomodemsrcElement",
93 __audiosrc_default_int_array,
94 sizeof( __audiosrc_default_int_array ) / sizeof( type_int* ),
95 __audiosrc_default_string_array,
96 sizeof( __audiosrc_default_string_array ) / sizeof( type_string* ),
101 * Videosink element default value
103 static type_int ___videosink_default_display_id = { "display-id", 3 };
104 static type_int ___videosink_default_x = { "x", 0 };
105 static type_int ___videosink_default_y = { "y", 0 };
106 static type_int ___videosink_default_width = { "width", 800 };
107 static type_int ___videosink_default_height = { "height", 480 };
108 static type_int ___videosink_default_rotation = { "rotation", 1 };
109 static type_int* __videosink_default_int_array[] = {
110 &___videosink_default_display_id,
111 &___videosink_default_x,
112 &___videosink_default_y,
113 &___videosink_default_width,
114 &___videosink_default_height,
115 &___videosink_default_rotation,
117 static type_string* __videosink_default_string_array[] = { NULL };
118 static type_element _videosink_element_x_default = {
121 __videosink_default_int_array,
122 sizeof( __videosink_default_int_array ) / sizeof( type_int* ),
123 __videosink_default_string_array,
124 sizeof( __videosink_default_string_array ) / sizeof( type_string* ),
126 static type_element _videosink_element_evas_default = {
127 "VideosinkElementEvas",
129 __videosink_default_int_array,
130 sizeof( __videosink_default_int_array ) / sizeof( type_int* ),
131 __videosink_default_string_array,
132 sizeof( __videosink_default_string_array ) / sizeof( type_string* ),
134 static type_element _videosink_element_gl_default = {
135 "VideosinkElementGL",
137 __videosink_default_int_array,
138 sizeof( __videosink_default_int_array ) / sizeof( type_int* ),
139 __videosink_default_string_array,
140 sizeof( __videosink_default_string_array ) / sizeof( type_string* ),
142 static type_element _videosink_element_null_default = {
143 "VideosinkElementNull",
145 __videosink_default_int_array,
146 sizeof( __videosink_default_int_array ) / sizeof( type_int* ),
147 __videosink_default_string_array,
148 sizeof( __videosink_default_string_array ) / sizeof( type_string* ),
152 * Videoscale element default value
154 static type_element _videoscale_element_default = {
164 * Videoconvert element default value
166 static type_element _videoconvert_element_default = {
167 "VideoconvertElement",
176 * Record sink element default value
178 static type_element _recordsink_element_default = {
188 * H263 element default value
190 static type_element _h263_element_default = {
200 * H264 element default value
202 static type_element _h264_element_default = {
212 * H26L element default value
214 static type_element _h26l_element_default = {
224 * MPEG4 element default value
226 static type_element _mpeg4_element_default = {
236 * MPEG1 element default value
238 static type_element _mpeg1_element_default = {
248 * THEORA element default value
250 static type_element _theora_element_default = {
260 * AMR element default value
262 static type_element _amr_element_default = {
272 * G723_1 element default value
274 static type_element _g723_1_element_default = {
284 * MP3 element default value
286 static type_element _mp3_element_default = {
296 * AAC element default value
298 static type_element _aac_element_default = {
308 * MMF element default value
310 static type_element _mmf_element_default = {
320 * ADPCM element default value
322 static type_element _adpcm_element_default = {
324 "ffenc_adpcm_ima_qt",
332 * WAVE element default value
334 static type_element _wave_element_default = {
343 static type_element _vorbis_element_default = {
353 * MIDI element default value
355 static type_element _midi_element_default = {
365 * IMELODY element default value
367 static type_element _imelody_element_default = {
377 * JPEG element default value
379 static type_element _jpeg_element_default = {
389 * PNG element default value
391 static type_element _png_element_default = {
401 * BMP element default value
403 static type_element _bmp_element_default = {
413 * WBMP element default value
415 static type_element _wbmp_element_default = {
425 * TIFF element default value
427 static type_element _tiff_element_default = {
437 * PCX element default value
439 static type_element _pcx_element_default = {
449 * GIF element default value
451 static type_element _gif_element_default = {
461 * ICO element default value
463 static type_element _ico_element_default = {
473 * RAS element default value
475 static type_element _ras_element_default = {
485 * TGA element default value
487 static type_element _tga_element_default = {
497 * XBM element default value
499 static type_element _xbm_element_default = {
509 * XPM element default value
511 static type_element _xpm_element_default = {
521 * 3GP element default value
523 static type_element _3gp_element_default = {
533 * AMR mux element default value
535 static type_element _amrmux_element_default = {
545 * MP4 element default value
547 static type_element _mp4_element_default = {
557 * AAC mux element default value
559 static type_element _aacmux_element_default = {
569 * MP3 mux element default value
571 static type_element _mp3mux_element_default = {
581 * OGG element default value
583 static type_element _ogg_element_default = {
593 * WAV element default value
595 static type_element _wav_element_default = {
605 * AVI element default value
607 static type_element _avi_element_default = {
617 * WMA element default value
619 static type_element _wma_element_default = {
629 * WMV element default value
631 static type_element _wmv_element_default = {
641 * MID element default value
643 static type_element _mid_element_default = {
653 * MMF mux element default value
655 static type_element _mmfmux_element_default = {
665 * MATROSKA element default value
667 static type_element _matroska_element_default = {
677 * [General] matching table
679 static conf_info_table conf_main_general_table[] = {
680 { "SyncStateChange", CONFIGURE_VALUE_INT, {1} },
681 { "GSTInitOption", CONFIGURE_VALUE_STRING_ARRAY, {(int)NULL} },
682 { "ModelName", CONFIGURE_VALUE_STRING, {(int)"Samsung Camera"} },
683 { "DisabledAttributes", CONFIGURE_VALUE_STRING_ARRAY, {(int)NULL} },
687 * [VideoInput] matching table
689 static conf_info_table conf_main_video_input_table[] = {
690 { "UseConfCtrl", CONFIGURE_VALUE_INT, {1} },
691 { "ConfCtrlFile0", CONFIGURE_VALUE_STRING, {(int)"mmfw_camcorder_dev_video_pri.ini"} },
692 { "ConfCtrlFile1", CONFIGURE_VALUE_STRING, {(int)"mmfw_camcorder_dev_video_sec.ini"} },
693 { "VideosrcElement", CONFIGURE_VALUE_ELEMENT, {(int)&_videosrc_element_default} },
694 { "UseVideoscale", CONFIGURE_VALUE_INT, {0} },
695 { "VideoscaleElement", CONFIGURE_VALUE_ELEMENT, {(int)&_videoscale_element_default} },
696 { "UseZeroCopyFormat", CONFIGURE_VALUE_INT, {0} },
697 { "DeviceCount", CONFIGURE_VALUE_INT, {MM_VIDEO_DEVICE_NUM} },
698 { "SupportMediaPacketPreviewCb", CONFIGURE_VALUE_INT, {0} },
702 * [AudioInput] matching table
704 static conf_info_table conf_main_audio_input_table[] = {
705 { "AudiosrcElement", CONFIGURE_VALUE_ELEMENT, {(int)&_audiosrc_element_default} },
706 { "AudiomodemsrcElement", CONFIGURE_VALUE_ELEMENT, {(int)&_audiomodemsrc_element_default} },
710 * [VideoOutput] matching table
712 static conf_info_table conf_main_video_output_table[] = {
713 { "DisplayDevice", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
714 { "DisplayMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
715 { "Videosink", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
716 { "VideosinkElementX", CONFIGURE_VALUE_ELEMENT, {(int)&_videosink_element_x_default} },
717 { "VideosinkElementEvas", CONFIGURE_VALUE_ELEMENT, {(int)&_videosink_element_evas_default} },
718 { "VideosinkElementGL", CONFIGURE_VALUE_ELEMENT, {(int)&_videosink_element_gl_default} },
719 { "VideosinkElementNull", CONFIGURE_VALUE_ELEMENT, {(int)&_videosink_element_null_default} },
720 { "UseVideoscale", CONFIGURE_VALUE_INT, {0} },
721 { "VideoscaleElement", CONFIGURE_VALUE_ELEMENT, {(int)&_videoscale_element_default} },
722 { "VideoconvertElement", CONFIGURE_VALUE_ELEMENT, {(int)&_videoconvert_element_default} },
726 * [Capture] matching table
728 static conf_info_table conf_main_capture_table[] = {
729 { "UseEncodebin", CONFIGURE_VALUE_INT, {0} },
730 { "UseCaptureMode", CONFIGURE_VALUE_INT, {0} },
731 { "VideoscaleElement", CONFIGURE_VALUE_ELEMENT, {(int)&_videoscale_element_default} },
732 { "PlayCaptureSound", CONFIGURE_VALUE_INT, {1} },
736 * [Record] matching table
738 static conf_info_table conf_main_record_table[] = {
739 { "UseAudioEncoderQueue", CONFIGURE_VALUE_INT, {1} },
740 { "UseVideoEncoderQueue", CONFIGURE_VALUE_INT, {1} },
741 { "VideoProfile", CONFIGURE_VALUE_INT, {0} },
742 { "VideoAutoAudioConvert", CONFIGURE_VALUE_INT, {0} },
743 { "VideoAutoAudioResample", CONFIGURE_VALUE_INT, {0} },
744 { "VideoAutoColorSpace", CONFIGURE_VALUE_INT, {0} },
745 { "AudioProfile", CONFIGURE_VALUE_INT, {0} },
746 { "AudioAutoAudioConvert", CONFIGURE_VALUE_INT, {0} },
747 { "AudioAutoAudioResample", CONFIGURE_VALUE_INT, {0} },
748 { "AudioAutoColorSpace", CONFIGURE_VALUE_INT, {0} },
749 { "ImageProfile", CONFIGURE_VALUE_INT, {0} },
750 { "ImageAutoAudioConvert", CONFIGURE_VALUE_INT, {0} },
751 { "ImageAutoAudioResample", CONFIGURE_VALUE_INT, {0} },
752 { "ImageAutoColorSpace", CONFIGURE_VALUE_INT, {0} },
753 { "RecordsinkElement", CONFIGURE_VALUE_ELEMENT, {(int)&_recordsink_element_default} },
754 { "UseNoiseSuppressor", CONFIGURE_VALUE_INT, {0} },
755 { "DropVideoFrame", CONFIGURE_VALUE_INT, {0} },
756 { "PassFirstVideoFrame", CONFIGURE_VALUE_INT, {0} },
757 { "SupportDualStream", CONFIGURE_VALUE_INT, {FALSE} },
761 * [VideoEncoder] matching table
763 static conf_info_table conf_main_video_encoder_table[] = {
764 { "H263", CONFIGURE_VALUE_ELEMENT, {(int)&_h263_element_default} },
765 { "H264", CONFIGURE_VALUE_ELEMENT, {(int)&_h264_element_default} },
766 { "H26L", CONFIGURE_VALUE_ELEMENT, {(int)&_h26l_element_default} },
767 { "MPEG4", CONFIGURE_VALUE_ELEMENT, {(int)&_mpeg4_element_default} },
768 { "MPEG1", CONFIGURE_VALUE_ELEMENT, {(int)&_mpeg1_element_default} },
769 { "THEORA", CONFIGURE_VALUE_ELEMENT, {(int)&_theora_element_default} },
773 * [AudioEncoder] matching table
775 static conf_info_table conf_main_audio_encoder_table[] = {
776 { "AMR", CONFIGURE_VALUE_ELEMENT, {(int)&_amr_element_default} },
777 { "G723_1", CONFIGURE_VALUE_ELEMENT, {(int)&_g723_1_element_default} },
778 { "MP3", CONFIGURE_VALUE_ELEMENT, {(int)&_mp3_element_default} },
779 { "AAC", CONFIGURE_VALUE_ELEMENT, {(int)&_aac_element_default} },
780 { "MMF", CONFIGURE_VALUE_ELEMENT, {(int)&_mmf_element_default} },
781 { "ADPCM", CONFIGURE_VALUE_ELEMENT, {(int)&_adpcm_element_default} },
782 { "WAVE", CONFIGURE_VALUE_ELEMENT, {(int)&_wave_element_default} },
783 { "MIDI", CONFIGURE_VALUE_ELEMENT, {(int)&_midi_element_default} },
784 { "IMELODY", CONFIGURE_VALUE_ELEMENT, {(int)&_imelody_element_default} },
785 { "VORBIS", CONFIGURE_VALUE_ELEMENT, {(int)&_vorbis_element_default} },
789 * [ImageEncoder] matching table
791 static conf_info_table conf_main_image_encoder_table[] = {
792 { "JPEG", CONFIGURE_VALUE_ELEMENT, {(int)&_jpeg_element_default} },
793 { "PNG", CONFIGURE_VALUE_ELEMENT, {(int)&_png_element_default} },
794 { "BMP", CONFIGURE_VALUE_ELEMENT, {(int)&_bmp_element_default} },
795 { "WBMP", CONFIGURE_VALUE_ELEMENT, {(int)&_wbmp_element_default} },
796 { "TIFF", CONFIGURE_VALUE_ELEMENT, {(int)&_tiff_element_default} },
797 { "PCX", CONFIGURE_VALUE_ELEMENT, {(int)&_pcx_element_default} },
798 { "GIF", CONFIGURE_VALUE_ELEMENT, {(int)&_gif_element_default} },
799 { "ICO", CONFIGURE_VALUE_ELEMENT, {(int)&_ico_element_default} },
800 { "RAS", CONFIGURE_VALUE_ELEMENT, {(int)&_ras_element_default} },
801 { "TGA", CONFIGURE_VALUE_ELEMENT, {(int)&_tga_element_default} },
802 { "XBM", CONFIGURE_VALUE_ELEMENT, {(int)&_xbm_element_default} },
803 { "XPM", CONFIGURE_VALUE_ELEMENT, {(int)&_xpm_element_default} },
807 * [Mux] matching table
809 static conf_info_table conf_main_mux_table[] = {
810 { "3GP", CONFIGURE_VALUE_ELEMENT, {(int)&_3gp_element_default} },
811 { "AMR", CONFIGURE_VALUE_ELEMENT, {(int)&_amrmux_element_default} },
812 { "MP4", CONFIGURE_VALUE_ELEMENT, {(int)&_mp4_element_default} },
813 { "AAC", CONFIGURE_VALUE_ELEMENT, {(int)&_aacmux_element_default} },
814 { "MP3", CONFIGURE_VALUE_ELEMENT, {(int)&_mp3mux_element_default} },
815 { "OGG", CONFIGURE_VALUE_ELEMENT, {(int)&_ogg_element_default} },
816 { "WAV", CONFIGURE_VALUE_ELEMENT, {(int)&_wav_element_default} },
817 { "AVI", CONFIGURE_VALUE_ELEMENT, {(int)&_avi_element_default} },
818 { "WMA", CONFIGURE_VALUE_ELEMENT, {(int)&_wma_element_default} },
819 { "WMV", CONFIGURE_VALUE_ELEMENT, {(int)&_wmv_element_default} },
820 { "MID", CONFIGURE_VALUE_ELEMENT, {(int)&_mid_element_default} },
821 { "MMF", CONFIGURE_VALUE_ELEMENT, {(int)&_mmfmux_element_default} },
822 { "MATROSKA", CONFIGURE_VALUE_ELEMENT, {(int)&_matroska_element_default} },
831 * [Camera] matching table
833 static conf_info_table conf_ctrl_camera_table[] = {
834 { "InputIndex", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
835 { "DeviceName", CONFIGURE_VALUE_STRING, {(int)NULL} },
836 { "PreviewResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {(int)NULL} },
837 { "CaptureResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {(int)NULL} },
838 { "VideoResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {(int)NULL} },
839 { "FPS", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
840 { "PictureFormat", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
841 { "Overlay", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
842 { "RecommendDisplayRotation", CONFIGURE_VALUE_INT, {3} },
843 { "RecommendPreviewFormatCapture", CONFIGURE_VALUE_INT, {MM_PIXEL_FORMAT_YUYV} },
844 { "RecommendPreviewFormatRecord", CONFIGURE_VALUE_INT, {MM_PIXEL_FORMAT_NV12} },
845 { "RecommendPreviewResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {(int)NULL} },
846 { "FacingDirection", CONFIGURE_VALUE_INT, {MM_CAMCORDER_CAMERA_FACING_DIRECTION_REAR} },
850 * [Strobe] matching table
852 static conf_info_table conf_ctrl_strobe_table[] = {
853 { "StrobeControl", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
854 { "StrobeMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
855 { "StrobeEV", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
859 * [Effect] matching table
861 static conf_info_table conf_ctrl_effect_table[] = {
862 { "Brightness", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
863 { "BrightnessStepDenominator", CONFIGURE_VALUE_INT, {(int)2} },
864 { "Contrast", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
865 { "Saturation", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
866 { "Sharpness", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
867 { "WhiteBalance", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
868 { "ColorTone", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
869 { "Flip", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
870 { "Rotation", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
871 { "WDR", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
872 { "PartColorMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
873 { "PartColor", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
877 * [Photograph] matching table
879 static conf_info_table conf_ctrl_photograph_table[] = {
880 { "LensInit", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
881 { "DigitalZoom", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
882 { "OpticalZoom", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
883 { "FocusMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
884 { "AFType", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
885 { "AEType", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
886 { "ExposureValue", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
887 { "FNumber", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
888 { "ShutterSpeed", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
889 { "ISO", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
890 { "ProgramMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
891 { "AntiHandshake", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
892 { "VideoStabilization", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
893 { "FaceZoomMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
894 { "FaceZoomLevel", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
898 * [Capture] matching table
900 static conf_info_table conf_ctrl_capture_table[] = {
901 { "OutputMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
902 { "JpegQuality", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
903 { "MultishotNumber", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
904 { "SensorEncodedCapture", CONFIGURE_VALUE_INT, {1} },
905 { "SupportHDR", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
906 { "SupportZSL", CONFIGURE_VALUE_INT, {FALSE} },
910 * [Detect] matching table
912 static conf_info_table conf_ctrl_detect_table[] = {
913 { "DetectMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
914 { "DetectNumber", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
915 { "DetectSelect", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
916 { "DetectSelectNumber", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
922 get_new_string( char* src_string )
924 return strdup(src_string);
927 void _mmcamcorder_conf_init(int type, camera_conf** configure_info)
930 int info_table_size = sizeof(conf_info_table);
932 /*_mmcam_dbg_log("Entered...");*/
934 if (type == CONFIGURE_TYPE_MAIN) {
935 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_GENERAL] = conf_main_general_table;
936 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_VIDEO_INPUT] = conf_main_video_input_table;
937 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT] = conf_main_audio_input_table;
938 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT] = conf_main_video_output_table;
939 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_CAPTURE] = conf_main_capture_table;
940 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_RECORD] = conf_main_record_table;
941 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER] = conf_main_video_encoder_table;
942 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER] = conf_main_audio_encoder_table;
943 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER] = conf_main_image_encoder_table;
944 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_MUX] = conf_main_mux_table;
946 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_GENERAL] = sizeof( conf_main_general_table ) / info_table_size;
947 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_VIDEO_INPUT] = sizeof( conf_main_video_input_table ) / info_table_size;
948 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT] = sizeof( conf_main_audio_input_table ) / info_table_size;
949 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT] = sizeof( conf_main_video_output_table ) / info_table_size;
950 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_CAPTURE] = sizeof( conf_main_capture_table ) / info_table_size;
951 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_RECORD] = sizeof( conf_main_record_table ) / info_table_size;
952 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER] = sizeof( conf_main_video_encoder_table ) / info_table_size;
953 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER] = sizeof( conf_main_audio_encoder_table ) / info_table_size;
954 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER] = sizeof( conf_main_image_encoder_table ) / info_table_size;
955 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_MUX] = sizeof( conf_main_mux_table ) / info_table_size;
957 (*configure_info)->info = (conf_detail**)g_malloc0( sizeof( conf_detail* ) * CONFIGURE_CATEGORY_MAIN_NUM );
959 for (i = 0 ; i < CONFIGURE_CATEGORY_MAIN_NUM ; i++) {
960 (*configure_info)->info[i] = NULL;
963 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_CAMERA] = conf_ctrl_camera_table;
964 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_STROBE] = conf_ctrl_strobe_table;
965 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_EFFECT] = conf_ctrl_effect_table;
966 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH] = conf_ctrl_photograph_table;
967 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_CAPTURE] = conf_ctrl_capture_table;
968 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_DETECT] = conf_ctrl_detect_table;
970 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_CAMERA] = sizeof( conf_ctrl_camera_table ) / info_table_size;
971 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_STROBE] = sizeof( conf_ctrl_strobe_table ) / info_table_size;
972 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_EFFECT] = sizeof( conf_ctrl_effect_table ) / info_table_size;
973 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH] = sizeof( conf_ctrl_photograph_table ) / info_table_size;
974 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_CAPTURE] = sizeof( conf_ctrl_capture_table ) / info_table_size;
975 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_DETECT] = sizeof( conf_ctrl_detect_table ) / info_table_size;
977 (*configure_info)->info = (conf_detail**)g_malloc0( sizeof( conf_detail* ) * CONFIGURE_CATEGORY_CTRL_NUM );
979 for (i = 0 ; i < CONFIGURE_CATEGORY_CTRL_NUM ; i++) {
980 (*configure_info)->info[i] = NULL;
984 _mmcam_dbg_log("Done.");
991 _mmcamcorder_conf_get_info( int type, const char* ConfFile, camera_conf** configure_info )
993 int ret = MM_ERROR_NONE;
995 char* conf_path = NULL;
997 _mmcam_dbg_log( "Opening...[%s]", ConfFile );
999 mmf_return_val_if_fail( ConfFile, FALSE );
1001 conf_path = (char*)malloc( strlen(ConfFile)+strlen(CONFIGURE_PATH)+3 );
1003 if( conf_path == NULL )
1005 _mmcam_dbg_err( "malloc failed." );
1006 return MM_ERROR_CAMCORDER_LOW_MEMORY;
1009 snprintf( conf_path, strlen(ConfFile)+strlen(CONFIGURE_PATH)+2, "%s/%s", CONFIGURE_PATH, ConfFile );
1010 /*_mmcam_dbg_log( "Try open Configure File[%s]", conf_path );*/
1012 fd = fopen( conf_path, "r" );
1015 _mmcam_dbg_warn( "File open failed.[%s] retry...", conf_path );
1016 snprintf( conf_path, strlen(ConfFile)+strlen(CONFIGURE_PATH_RETRY)+2, "%s/%s", CONFIGURE_PATH_RETRY, ConfFile );
1017 /*_mmcam_dbg_log( "Try open Configure File[%s]", conf_path );*/
1018 fd = fopen( conf_path, "r" );
1021 _mmcam_dbg_warn( "File open failed.[%s] But keep going... All value will be returned as default.Type[%d]",
1028 ret = _mmcamcorder_conf_parse_info( type, fd, configure_info );
1033 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
1036 if( conf_path != NULL )
1042 /*_mmcam_dbg_log( "Leave..." );*/
1048 _mmcamcorder_conf_parse_info( int type, FILE* fd, camera_conf** configure_info )
1050 const unsigned int BUFFER_NUM_DETAILS = 256;
1051 const unsigned int BUFFER_NUM_TOKEN = 20;
1052 size_t BUFFER_LENGTH_STRING = 256;
1053 const char* delimiters = " |=,\t\n";
1056 int count_main_category = 0;
1057 int count_details = 0;
1058 int length_read = 0;
1059 int count_token = 0;
1062 char *buffer_string = NULL;
1063 char *buffer_details[BUFFER_NUM_DETAILS];
1064 char *buffer_token[BUFFER_NUM_TOKEN];
1066 char *category_name = NULL;
1067 char *detail_string = NULL;
1068 char *user_ptr = NULL;
1070 _mmcam_dbg_log( "" );
1072 camera_conf* new_conf = (camera_conf *)g_malloc0(sizeof(camera_conf));
1073 if (new_conf == NULL) {
1074 _mmcam_dbg_err("new_conf alloc failed : %d", sizeof(camera_conf));
1075 return MM_ERROR_CAMCORDER_LOW_MEMORY;
1078 buffer_string = (char *)g_malloc0(sizeof(char) * BUFFER_LENGTH_STRING);
1079 if (buffer_string == NULL) {
1080 _mmcam_dbg_err("buffer_string alloc failed : %d", sizeof(char)*BUFFER_LENGTH_STRING);
1081 *configure_info = NULL;
1083 return MM_ERROR_CAMCORDER_LOW_MEMORY;
1086 new_conf->type = type;
1087 *configure_info = new_conf;
1089 _mmcamcorder_conf_init( type, &new_conf );
1092 _mmcam_dbg_err("failed file descriptor fail");
1093 *configure_info = NULL;
1094 g_free(buffer_string);
1096 return MM_ERROR_CAMCORDER_INVALID_ARGUMENT;
1100 count_main_category = 0;
1102 while( !feof( fd ) )
1104 if( read_main == 0 )
1106 length_read = getline( &buffer_string, &BUFFER_LENGTH_STRING, fd );
1107 /*_mmcam_dbg_log( "Read Line : [%s]", buffer_string );*/
1110 token = strtok_r( buffer_string, delimiters, &user_ptr );
1112 if ((token) && (token[0] == ';') && (length_read > -1))
1114 /*_mmcam_dbg_log( "Comment - Nothing to do" );*/
1120 /*_mmcam_dbg_log( "token : [%s]", token );*/
1121 buffer_token[count_token] = token;
1123 token = strtok_r( NULL, delimiters, &user_ptr );
1126 if( count_token == 0 )
1135 if( *buffer_token[0] == ';' )
1137 /*_mmcam_dbg_log( "Comment - Nothing to do" );*/
1140 else if( *buffer_token[0] == '[' )
1142 category_name = get_new_string( buffer_token[0] );
1144 count_main_category++;
1147 while( !feof( fd ) )
1149 length_read = getline( &buffer_string, &BUFFER_LENGTH_STRING, fd );
1150 /*_mmcam_dbg_log( "Read Detail Line : [%s], read length : [%d]", buffer_string, length_read );*/
1152 detail_string = get_new_string( buffer_string );
1154 token = strtok_r( buffer_string, delimiters, &user_ptr );
1156 if( token && token[0] != ';' && length_read > -1 )
1158 /*_mmcam_dbg_log( "token : [%s]", token );*/
1159 if( token[0] == '[' )
1162 buffer_token[0] = token;
1163 SAFE_FREE( detail_string );
1167 buffer_details[count_details++] = detail_string;
1171 SAFE_FREE( detail_string );
1175 /*_mmcam_dbg_log( "type : %d, category_name : %s, count : [%d]", type, category_name, count_details );*/
1177 if( count_details == 0 )
1179 _mmcam_dbg_warn( "category %s has no detail value... skip this category...", category_name );
1180 SAFE_FREE(category_name);
1187 if( type == CONFIGURE_TYPE_MAIN )
1189 if( !strcmp( "[General]", category_name ) )
1191 category = CONFIGURE_CATEGORY_MAIN_GENERAL;
1193 else if( !strcmp( "[VideoInput]", category_name ) )
1195 category = CONFIGURE_CATEGORY_MAIN_VIDEO_INPUT;
1197 else if( !strcmp( "[AudioInput]", category_name ) )
1199 category = CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT;
1201 else if( !strcmp( "[VideoOutput]", category_name ) )
1203 category = CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT;
1205 else if( !strcmp( "[Capture]", category_name ) )
1207 category = CONFIGURE_CATEGORY_MAIN_CAPTURE;
1209 else if( !strcmp( "[Record]", category_name ) )
1211 category = CONFIGURE_CATEGORY_MAIN_RECORD;
1213 else if( !strcmp( "[VideoEncoder]", category_name ) )
1215 category = CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER;
1217 else if( !strcmp( "[AudioEncoder]", category_name ) )
1219 category = CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER;
1221 else if( !strcmp( "[ImageEncoder]", category_name ) )
1223 category = CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER;
1225 else if( !strcmp( "[Mux]", category_name ) )
1227 category = CONFIGURE_CATEGORY_MAIN_MUX;
1232 if( !strcmp( "[Camera]", category_name ) )
1234 category = CONFIGURE_CATEGORY_CTRL_CAMERA;
1236 else if( !strcmp( "[Strobe]", category_name ) )
1238 category = CONFIGURE_CATEGORY_CTRL_STROBE;
1240 else if( !strcmp( "[Effect]", category_name ) )
1242 category = CONFIGURE_CATEGORY_CTRL_EFFECT;
1244 else if( !strcmp( "[Photograph]", category_name ) )
1246 category = CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH;
1248 else if( !strcmp( "[Capture]", category_name ) )
1250 category = CONFIGURE_CATEGORY_CTRL_CAPTURE;
1252 else if( !strcmp( "[Detect]", category_name ) )
1254 category = CONFIGURE_CATEGORY_CTRL_DETECT;
1258 if( category != -1 )
1260 _mmcamcorder_conf_add_info( type, &(new_conf->info[category]),
1261 buffer_details, category, count_details );
1265 _mmcam_dbg_warn( "No matched category[%s],type[%d]... check it.", category_name, type );
1272 for( i = 0 ; i < count_details ; i++ )
1274 SAFE_FREE( buffer_details[i] );
1279 SAFE_FREE(category_name);
1282 //(*configure_info) = new_conf;
1284 SAFE_FREE( buffer_string );
1286 /*_mmcam_dbg_log( "Done." );*/
1288 return MM_ERROR_NONE;
1293 _mmcamcorder_conf_release_info( camera_conf** configure_info )
1298 int type = CONFIGURE_VALUE_INT;
1300 int category_num = CONFIGURE_CATEGORY_MAIN_NUM;
1301 camera_conf *temp_conf = (*configure_info);
1303 type_int2 *temp_int = NULL;
1304 type_int_range *temp_int_range = NULL;
1305 type_int_array *temp_int_array = NULL;
1306 type_int_pair_array *temp_int_pair_array = NULL;
1307 type_string2 *temp_string = NULL;
1308 type_string_array *temp_string_array = NULL;
1309 type_element2 *temp_element = NULL;
1311 _mmcam_dbg_log("Entered...");
1313 mmf_return_if_fail(temp_conf);
1315 if ((*configure_info)->type == CONFIGURE_TYPE_MAIN) {
1316 category_num = CONFIGURE_CATEGORY_MAIN_NUM;
1318 category_num = CONFIGURE_CATEGORY_CTRL_NUM;
1321 for (i = 0 ; i < category_num ; i++) {
1322 if (temp_conf->info[i]) {
1323 for (j = 0 ; j < temp_conf->info[i]->count ; j++) {
1324 if (temp_conf->info[i]->detail_info[j] == NULL) {
1328 if (_mmcamcorder_conf_get_value_type(temp_conf->type, i, ((type_element*)(temp_conf->info[i]->detail_info[j]))->name, &type)) {
1330 case CONFIGURE_VALUE_INT:
1331 temp_int = (type_int2*)(temp_conf->info[i]->detail_info[j]);
1332 SAFE_FREE(temp_int->name);
1334 case CONFIGURE_VALUE_INT_RANGE:
1335 temp_int_range = (type_int_range*)(temp_conf->info[i]->detail_info[j]);
1336 SAFE_FREE(temp_int_range->name);
1338 case CONFIGURE_VALUE_INT_ARRAY:
1339 temp_int_array = (type_int_array*)(temp_conf->info[i]->detail_info[j]);
1340 SAFE_FREE(temp_int_array->name);
1341 SAFE_FREE(temp_int_array->value);
1343 case CONFIGURE_VALUE_INT_PAIR_ARRAY:
1344 temp_int_pair_array = (type_int_pair_array*)(temp_conf->info[i]->detail_info[j]);
1345 SAFE_FREE(temp_int_pair_array->name);
1346 SAFE_FREE(temp_int_pair_array->value[0]);
1347 SAFE_FREE(temp_int_pair_array->value[1]);
1349 case CONFIGURE_VALUE_STRING:
1350 temp_string = (type_string2*)(temp_conf->info[i]->detail_info[j]);
1351 SAFE_FREE(temp_string->name);
1352 SAFE_FREE(temp_string->value);
1354 case CONFIGURE_VALUE_STRING_ARRAY:
1355 temp_string_array = (type_string_array*)(temp_conf->info[i]->detail_info[j]);
1356 SAFE_FREE(temp_string_array->name);
1357 if (temp_string_array->value) {
1358 count = temp_string_array->count;
1359 for (k = 0 ; k < count ; k++) {
1360 SAFE_FREE(temp_string_array->value[k]);
1362 g_free(temp_string_array->value);
1363 temp_string_array->value = NULL;
1365 SAFE_FREE(temp_string_array->default_value);
1367 case CONFIGURE_VALUE_ELEMENT:
1368 temp_element = (type_element2*)(temp_conf->info[i]->detail_info[j]);
1369 SAFE_FREE(temp_element->name);
1370 SAFE_FREE(temp_element->element_name);
1372 if (temp_element->value_int) {
1373 count = temp_element->count_int;
1374 for (k = 0 ; k < count ; k++) {
1375 SAFE_FREE(temp_element->value_int[k]->name);
1376 SAFE_FREE(temp_element->value_int[k]);
1378 g_free(temp_element->value_int);
1381 if (temp_element->value_string) {
1382 count = temp_element->count_string;
1383 for (k = 0 ; k < count ; k++) {
1384 SAFE_FREE(temp_element->value_string[k]->name);
1385 SAFE_FREE(temp_element->value_string[k]->value);
1386 SAFE_FREE(temp_element->value_string[k]);
1388 g_free(temp_element->value_string);
1392 _mmcam_dbg_warn("unknown type %d", type);
1397 SAFE_FREE(temp_conf->info[i]->detail_info[j]);
1398 temp_conf->info[i]->detail_info[j] = NULL;
1401 SAFE_FREE(temp_conf->info[i]->detail_info);
1402 temp_conf->info[i]->detail_info = NULL;
1404 SAFE_FREE(temp_conf->info[i]);
1405 temp_conf->info[i] = NULL;
1409 SAFE_FREE((*configure_info)->info);
1410 SAFE_FREE((*configure_info));
1412 _mmcam_dbg_log("Done.");
1416 _mmcamcorder_conf_get_value_type( int type, int category, const char* name, int* value_type )
1419 int count_value = 0;
1421 /*_mmcam_dbg_log( "Entered..." );*/
1423 mmf_return_val_if_fail( name, FALSE );
1425 if( !_mmcamcorder_conf_get_category_size( type, category, &count_value ) )
1427 _mmcam_dbg_warn( "No matched category... check it... categoty[%d]", category );
1431 /*_mmcam_dbg_log( "Number of value : [%d]", count_value );*/
1433 if( type == CONFIGURE_TYPE_MAIN )
1435 for( i = 0 ; i < count_value ; i++ )
1437 if( !strcmp( conf_main_info_table[category][i].name, name ) )
1439 *value_type = conf_main_info_table[category][i].value_type;
1440 /*_mmcam_dbg_log( "Category[%d],Name[%s],Type[%d]", category, name, *value_type );*/
1447 for( i = 0 ; i < count_value ; i++ )
1449 if( !strcmp( conf_ctrl_info_table[category][i].name, name ) )
1451 *value_type = conf_ctrl_info_table[category][i].value_type;
1452 /*_mmcam_dbg_log( "Category[%d],Name[%s],Type[%d]", category, name, *value_type );*/
1463 _mmcamcorder_conf_add_info( int type, conf_detail** info, char** buffer_details, int category, int count_details )
1465 const int BUFFER_NUM_TOKEN = 256;
1472 char *buffer_token[BUFFER_NUM_TOKEN];
1473 char *user_ptr = NULL;
1475 const char *delimiters = " |=,\t\n";
1476 const char *delimiters_sub = " |\t\n";
1477 const char *delimiters_3rd = "|\n";
1479 mmf_return_val_if_fail( buffer_details, FALSE );
1481 (*info) = (conf_detail*)g_malloc0( sizeof(conf_detail) );
1482 if (*info == NULL) {
1483 _mmcam_dbg_err("allocation failed");
1486 (*info)->detail_info = (void**)g_malloc0(sizeof(void*) * count_details);
1487 (*info)->count = count_details;
1489 for ( i = 0 ; i < count_details ; i++ ) {
1490 /*_mmcam_dbg_log("Read line\"%s\"", buffer_details[i]);*/
1492 token = strtok_r( buffer_details[i], delimiters, &user_ptr );
1495 buffer_token[count_token] = token;
1498 (*info)->detail_info[i] = NULL;
1499 _mmcam_dbg_warn( "No token... check it.[%s]", buffer_details[i] );
1503 if (!_mmcamcorder_conf_get_value_type(type, category, buffer_token[0], &value_type)) {
1504 (*info)->detail_info[i] = NULL;
1505 _mmcam_dbg_warn( "Failed to get value type... check it. Category[%d],Name[%s]", category, buffer_token[0] );
1509 if (value_type != CONFIGURE_VALUE_STRING && value_type != CONFIGURE_VALUE_STRING_ARRAY) {
1510 token = strtok_r( NULL, delimiters, &user_ptr );
1512 buffer_token[count_token] = token;
1513 /*_mmcam_dbg_log("token : [%s]", buffer_token[count_token]);*/
1515 token = strtok_r( NULL, delimiters, &user_ptr );
1518 if (count_token < 2) {
1519 (*info)->detail_info[i] = NULL;
1520 _mmcam_dbg_warn( "Number of token is too small... check it.[%s]", buffer_details[i] );
1523 } else { /* CONFIGURE_VALUE_STRING or CONFIGURE_VALUE_STRING_ARRAY */
1525 strtok_r( NULL, delimiters_sub, &user_ptr );
1527 if (value_type == CONFIGURE_VALUE_STRING_ARRAY) {
1528 token = strtok_r( NULL, delimiters_sub, &user_ptr );
1530 buffer_token[count_token] = token;
1531 /*_mmcam_dbg_log("token : [%s]", buffer_token[count_token]);*/
1533 token = strtok_r( NULL, delimiters_sub, &user_ptr );
1535 } else { /* CONFIGURE_VALUE_STRING */
1536 token = strtok_r( NULL, delimiters_3rd, &user_ptr );
1539 buffer_token[count_token] = token;
1540 /*_mmcam_dbg_log("token : [%s]", buffer_token[count_token]);*/
1545 if (count_token < 2) {
1546 (*info)->detail_info[i] = NULL;
1547 _mmcam_dbg_warn( "No string value... check it.[%s]", buffer_details[i] );
1554 case CONFIGURE_VALUE_INT:
1558 new_int = (type_int2*)g_malloc0( sizeof(type_int2) );
1559 if ( new_int == NULL ) {
1560 _mmcam_dbg_err("allocation failed");
1563 new_int->name = get_new_string( buffer_token[0] );
1564 new_int->value = atoi( buffer_token[1] );
1565 (*info)->detail_info[i] = (void*)new_int;
1566 /*_mmcam_dbg_log("INT - name[%s],value[%d]", new_int->name, new_int->value);*/
1569 case CONFIGURE_VALUE_INT_RANGE:
1571 type_int_range* new_int_range;
1573 new_int_range = (type_int_range*)g_malloc0( sizeof(type_int_range) );
1574 if ( new_int_range == NULL ) {
1575 _mmcam_dbg_err("allocation failed");
1578 new_int_range->name = get_new_string( buffer_token[0] );
1579 new_int_range->min = atoi( buffer_token[1] );
1580 new_int_range->max = atoi( buffer_token[2] );
1581 new_int_range->default_value = atoi( buffer_token[3] );
1582 (*info)->detail_info[i] = (void*)new_int_range;
1584 _mmcam_dbg_log("INT RANGE - name[%s],min[%d],max[%d],default[%d]",
1585 new_int_range->name,
1588 new_int_range->default_value);
1592 case CONFIGURE_VALUE_INT_ARRAY:
1594 int count_value = count_token - 2;
1595 type_int_array* new_int_array;
1597 new_int_array = (type_int_array*)g_malloc0( sizeof(type_int_array) );
1598 if (new_int_array == NULL) {
1599 _mmcam_dbg_err("allocation failed");
1602 new_int_array->name = get_new_string( buffer_token[0] );
1603 new_int_array->value = (int*)g_malloc0( sizeof(int)*count_value );
1604 if (new_int_array->value == NULL) {
1605 if (new_int_array->name) {
1606 free(new_int_array->name);
1607 new_int_array->name = NULL;
1609 free(new_int_array);
1610 new_int_array = NULL;
1611 _mmcam_dbg_err("allocation failed");
1614 new_int_array->count = count_value;
1616 /*_mmcam_dbg_log("INT ARRAY - name[%s]", new_int_array->name);*/
1617 for ( j = 0 ; j < count_value ; j++ ) {
1618 new_int_array->value[j] = atoi( buffer_token[j+1] );
1619 /*_mmcam_dbg_log(" index[%d] - value[%d]", j, new_int_array->value[j]);*/
1622 new_int_array->default_value = atoi( buffer_token[count_token-1] );
1623 /*_mmcam_dbg_log(" default value[%d]", new_int_array->default_value);*/
1625 (*info)->detail_info[i] = (void*)new_int_array;
1628 case CONFIGURE_VALUE_INT_PAIR_ARRAY:
1630 int count_value = ( count_token - 3 ) >> 1;
1631 type_int_pair_array* new_int_pair_array;
1633 new_int_pair_array = (type_int_pair_array*)g_malloc0( sizeof(type_int_pair_array) );
1634 if ( new_int_pair_array == NULL ) {
1635 _mmcam_dbg_err("allocation failed");
1638 new_int_pair_array->name = get_new_string( buffer_token[0] );
1639 new_int_pair_array->value[0] = (int*)g_malloc( sizeof(int)*(count_value) );
1640 if ( new_int_pair_array->value[0] == NULL ) {
1641 if (new_int_pair_array->name) {
1642 free( new_int_pair_array->name );
1643 new_int_pair_array->name = NULL;
1645 free( new_int_pair_array );
1646 new_int_pair_array = NULL;
1647 _mmcam_dbg_err("allocation failed");
1650 new_int_pair_array->value[1] = (int*)g_malloc( sizeof(int)*(count_value) );
1651 if ( new_int_pair_array->value[1] == NULL ) {
1652 free( new_int_pair_array->value[0] );
1653 new_int_pair_array->value[0] = NULL;
1654 if (new_int_pair_array->name) {
1655 free( new_int_pair_array->name );
1656 new_int_pair_array->name = NULL;
1658 free( new_int_pair_array );
1659 new_int_pair_array = NULL;
1660 _mmcam_dbg_err("allocation failed");
1663 new_int_pair_array->count = count_value;
1665 /*_mmcam_dbg_log("INT PAIR ARRAY - name[%s],count[%d]", new_int_pair_array->name, count_value);*/
1666 for ( j = 0 ; j < count_value ; j++ ) {
1667 new_int_pair_array->value[0][j] = atoi( buffer_token[(j<<1)+1] );
1668 new_int_pair_array->value[1][j] = atoi( buffer_token[(j<<1)+2] );
1670 _mmcam_dbg_log(" index[%d] - value[%d,%d]", j,
1671 new_int_pair_array->value[0][j],
1672 new_int_pair_array->value[1][j]);
1676 new_int_pair_array->default_value[0] = atoi( buffer_token[count_token-2] );
1677 new_int_pair_array->default_value[1] = atoi( buffer_token[count_token-1] );
1679 _mmcam_dbg_log(" default value[%d,%d]",
1680 new_int_pair_array->default_value[0],
1681 new_int_pair_array->default_value[1]);
1683 (*info)->detail_info[i] = (void*)new_int_pair_array;
1686 case CONFIGURE_VALUE_STRING:
1688 type_string2* new_string;
1690 new_string = (type_string2*)g_malloc0( sizeof(type_string2) );
1691 if (new_string == NULL) {
1692 _mmcam_dbg_err("allocation failed");
1695 new_string->name = get_new_string( buffer_token[0] );
1696 new_string->value = get_new_string( buffer_token[1] );
1697 (*info)->detail_info[i] = (void*)new_string;
1699 /*_mmcam_dbg_log("STRING - name[%s],value[%s]", new_string->name, new_string->value);*/
1702 case CONFIGURE_VALUE_STRING_ARRAY:
1704 int count_value = count_token - 2;
1705 type_string_array* new_string_array;
1707 new_string_array = (type_string_array*)g_malloc0( sizeof(type_string_array) );
1708 if ( new_string_array == NULL ) {
1711 new_string_array->name = get_new_string( buffer_token[0] );
1712 new_string_array->count = count_value;
1713 new_string_array->value = (char**)g_malloc0( sizeof(char*)*count_value );
1714 if ( new_string_array->value == NULL ) {
1715 if (new_string_array->name) {
1716 free(new_string_array->name);
1717 new_string_array->name = NULL;
1719 free(new_string_array);
1720 new_string_array = NULL;
1721 _mmcam_dbg_err("allocation failed");
1724 /*_mmcam_dbg_log("STRING ARRAY - name[%s]", new_string_array->name);*/
1725 for ( j = 0 ; j < count_value ; j++ ) {
1726 new_string_array->value[j] = get_new_string( buffer_token[j+1] );
1727 /*_mmcam_dbg_log(" index[%d] - value[%s]", j, new_string_array->value[j]);*/
1730 new_string_array->default_value = get_new_string( buffer_token[count_token-1] );
1731 /*_mmcam_dbg_log(" default value[%s]", new_string_array->default_value);*/
1732 (*info)->detail_info[i] = (void*)new_string_array;
1735 case CONFIGURE_VALUE_ELEMENT:
1737 type_element2* new_element;
1739 new_element = (type_element2*)g_malloc0( sizeof(type_element2) );
1740 if ( new_element == NULL ) {
1741 _mmcam_dbg_err("allocation failed");
1744 new_element->name = get_new_string( buffer_token[0] );
1745 new_element->element_name = get_new_string( buffer_token[1] );
1746 new_element->count_int = atoi( buffer_token[2] );
1747 new_element->value_int = NULL;
1748 new_element->count_string = atoi( buffer_token[3] );
1749 new_element->value_string = NULL;
1751 _mmcam_dbg_log("Element - name[%s],element_name[%s],count_int[%d],count_string[%d]",
1752 new_element->name, new_element->element_name, new_element->count_int, new_element->count_string);
1755 /* add int values */
1756 if ( new_element->count_int > 0 ) {
1757 new_element->value_int = (type_int2**)g_malloc0( sizeof(type_int2*)*(new_element->count_int) );
1758 if ( new_element->value_int) {
1759 for ( j = 0 ; j < new_element->count_int ; j++ ) {
1760 new_element->value_int[j] = (type_int2*)g_malloc( sizeof(type_int2) );
1761 if ( new_element->value_int[j] ) {
1762 new_element->value_int[j]->name = get_new_string( buffer_token[4+(j<<1)] );
1763 new_element->value_int[j]->value = atoi( buffer_token[5+(j<<1)] );
1765 _mmcam_dbg_err("allocation failed");
1768 _mmcam_dbg_log(" Element INT[%d] - name[%s],value[%d]",
1769 j, new_element->value_int[j]->name, new_element->value_int[j]->value);
1773 _mmcam_dbg_err("allocation failed");
1778 new_element->value_int = NULL;
1781 /* add string values */
1782 if ( new_element->count_string > 0 ) {
1783 new_element->value_string = (type_string2**)g_malloc0( sizeof(type_string2*)*(new_element->count_string) );
1784 if (new_element->value_string) {
1785 for ( ; j < new_element->count_string + new_element->count_int ; j++ ) {
1786 new_element->value_string[j-new_element->count_int] = (type_string2*)g_malloc0( sizeof(type_string2) );
1787 if(new_element->value_string[j-new_element->count_int]) {
1788 new_element->value_string[j-new_element->count_int]->name = get_new_string( buffer_token[4+(j<<1)] );
1789 new_element->value_string[j-new_element->count_int]->value = get_new_string( buffer_token[5+(j<<1)] );
1791 _mmcam_dbg_log(" Element STRING[%d] - name[%s],value[%s]",
1792 j-new_element->count_int, new_element->value_string[j-new_element->count_int]->name, new_element->value_string[j-new_element->count_int]->value);
1795 _mmcam_dbg_err("allocation failed");
1799 _mmcam_dbg_err("malloc failed : %d", sizeof(type_string2*)*(new_element->count_string));
1802 new_element->value_string = NULL;
1805 (*info)->detail_info[i] = (void*)new_element;
1818 _mmcamcorder_conf_get_value_int( camera_conf* configure_info, int category, const char* name, int* value )
1823 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
1825 mmf_return_val_if_fail( configure_info, FALSE );
1826 mmf_return_val_if_fail( name, FALSE );
1828 if( configure_info->info[category] )
1830 count = configure_info->info[category]->count;
1831 info = configure_info->info[category];
1833 for( i = 0 ; i < count ; i++ )
1835 if( info->detail_info[i] == NULL )
1840 if( !strcmp( ((type_int*)(info->detail_info[i]))->name , name ) )
1842 *value = ((type_int*)(info->detail_info[i]))->value;
1843 //_mmcam_dbg_log( "Get[%s] int[%d]", name, *value );
1849 if( _mmcamcorder_conf_get_default_value_int( configure_info->type, category, name, value ) )
1851 //_mmcam_dbg_log( "Get[%s] int[%d]", name, *value );
1855 _mmcam_dbg_warn( "Faild to get int... check it...Category[%d],Name[%s]", category, name );
1861 _mmcamcorder_conf_get_value_int_range( camera_conf* configure_info, int category, const char* name, type_int_range** value )
1866 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
1868 mmf_return_val_if_fail( configure_info, FALSE );
1869 mmf_return_val_if_fail( name, FALSE );
1871 if( configure_info->info[category] )
1873 count = configure_info->info[category]->count;
1874 info = configure_info->info[category];
1876 for( i = 0 ; i < count ; i++ )
1878 if( info->detail_info[i] == NULL )
1883 if( !strcmp( ((type_int_range*)(info->detail_info[i]))->name , name ) )
1885 *value = (type_int_range*)(info->detail_info[i]);
1887 _mmcam_dbg_log( "Get[%s] int range - min[%d],max[%d],default[%d]",
1888 name, (*value)->min, (*value)->max, (*value)->default_value );
1897 /*_mmcam_dbg_warn( "Faild to get int range... check it...Category[%d],Name[%s]", category, name );*/
1903 _mmcamcorder_conf_get_value_int_array( camera_conf* configure_info, int category, const char* name, type_int_array** value )
1908 /*_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );*/
1910 mmf_return_val_if_fail( configure_info, FALSE );
1911 mmf_return_val_if_fail( name, FALSE );
1913 if( configure_info->info[category] )
1915 count = configure_info->info[category]->count;
1916 info = configure_info->info[category];
1918 for( i = 0 ; i < count ; i++ )
1920 if( info->detail_info[i] == NULL )
1925 if( !strcmp( ((type_int_array*)(info->detail_info[i]))->name , name ) )
1927 *value = (type_int_array*)(info->detail_info[i]);
1929 _mmcam_dbg_log( "Get[%s] int array - [%x],count[%d],default[%d]",
1930 name, (*value)->value, (*value)->count, (*value)->default_value );
1939 /*_mmcam_dbg_warn( "Faild to get int array... check it...Category[%d],Name[%s]", category, name );*/
1945 _mmcamcorder_conf_get_value_int_pair_array( camera_conf* configure_info, int category, const char* name, type_int_pair_array** value )
1950 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
1952 mmf_return_val_if_fail( configure_info, FALSE );
1953 mmf_return_val_if_fail( name, FALSE );
1955 if( configure_info->info[category] )
1957 count = configure_info->info[category]->count;
1958 info = configure_info->info[category];
1960 for( i = 0 ; i < count ; i++ )
1962 if( info->detail_info[i] == NULL )
1967 if( !strcmp( ((type_int_pair_array*)(info->detail_info[i]))->name , name ) )
1969 *value = (type_int_pair_array*)(info->detail_info[i]);
1971 _mmcam_dbg_log( "Get[%s] int pair array - [%x][%x],count[%d],default[%d][%d]",
1972 name, (*value)->value[0], (*value)->value[1], (*value)->count,
1973 (*value)->default_value[0], (*value)->default_value[1] );
1982 _mmcam_dbg_warn( "Faild to get int pair array... check it...Category[%d],Name[%s]", category, name );
1988 _mmcamcorder_conf_get_value_string( camera_conf* configure_info, int category, const char* name, const char** value )
1993 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
1995 mmf_return_val_if_fail( configure_info, FALSE );
1996 mmf_return_val_if_fail( name, FALSE );
1998 if( configure_info->info[category] )
2000 count = configure_info->info[category]->count;
2001 info = configure_info->info[category];
2003 for( i = 0 ; i < count ; i++ )
2005 if( info->detail_info[i] == NULL )
2010 if( !strcmp( ((type_string*)(info->detail_info[i]))->name , name ) )
2012 *value = ((type_string*)(info->detail_info[i]))->value;
2013 //_mmcam_dbg_log( "Get[%s] string[%s]", name, *value );
2019 if( _mmcamcorder_conf_get_default_value_string( configure_info->type, category, name, value ) )
2021 //_mmcam_dbg_log( "Get[%s]string[%s]", name, *value );
2025 _mmcam_dbg_warn( "Faild to get string... check it...Category[%d],Name[%s]", category, name );
2031 _mmcamcorder_conf_get_value_string_array( camera_conf* configure_info, int category, const char* name, type_string_array** value )
2036 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
2038 mmf_return_val_if_fail( configure_info, FALSE );
2039 mmf_return_val_if_fail( name, FALSE );
2041 if( configure_info->info[category] )
2043 count = configure_info->info[category]->count;
2044 info = configure_info->info[category];
2046 for( i = 0 ; i < count ; i++ )
2048 if( info->detail_info[i] == NULL )
2053 if( !strcmp( ((type_string_array*)(info->detail_info[i]))->name , name ) )
2055 *value = (type_string_array*)(info->detail_info[i]);
2057 _mmcam_dbg_log( "Get[%s] string array - [%x],count[%d],default[%s]",
2058 name, (*value)->value, (*value)->count, (*value)->default_value );
2067 /*_mmcam_dbg_warn( "Faild to get string array... check it...Category[%d],Name[%s]", category, name );*/
2073 _mmcamcorder_conf_get_element( camera_conf* configure_info, int category, const char* name, type_element** element )
2078 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
2080 mmf_return_val_if_fail( configure_info, FALSE );
2081 mmf_return_val_if_fail( name, FALSE );
2083 if( configure_info->info[category] )
2085 count = configure_info->info[category]->count;
2086 info = configure_info->info[category];
2088 for( i = 0 ; i < count ; i++ )
2090 if( info->detail_info[i] == NULL )
2095 if( !strcmp( ((type_element*)(info->detail_info[i]))->name , name ) )
2097 *element = (type_element*)(info->detail_info[i]);
2098 //_mmcam_dbg_log( "Get[%s] element[%x]", name, *element );
2104 if( _mmcamcorder_conf_get_default_element( configure_info->type, category, name, element ) )
2106 //_mmcam_dbg_log( "Get[%s] element[%x]", name, *element );
2110 _mmcam_dbg_warn( "Faild to get element name... check it...Category[%d],Name[%s]", category, name );
2116 _mmcamcorder_conf_get_value_element_name( type_element* element, const char** value )
2118 //_mmcam_dbg_log( "Entered..." );
2120 mmf_return_val_if_fail( element, FALSE );
2122 *value = element->element_name;
2124 //_mmcam_dbg_log( "Get element name : [%s]", *value );
2130 _mmcamcorder_conf_get_value_element_int( type_element* element, const char* name, int* value )
2134 //_mmcam_dbg_log( "Entered..." );
2136 mmf_return_val_if_fail( element, FALSE );
2137 mmf_return_val_if_fail( name, FALSE );
2139 for( i = 0 ; i < element->count_int ; i++ )
2141 if( !strcmp( element->value_int[i]->name , name ) )
2143 *value = element->value_int[i]->value;
2144 //_mmcam_dbg_log( "Get[%s] element int[%d]", name, *value );
2149 _mmcam_dbg_warn( "Faild to get int in element... ElementName[%p],Name[%s],Count[%d]",
2150 element->name, name, element->count_int );
2156 _mmcamcorder_conf_get_value_element_string( type_element* element, const char* name, const char** value )
2160 //_mmcam_dbg_log( "Entered..." );
2162 mmf_return_val_if_fail( element, FALSE );
2163 mmf_return_val_if_fail( name, FALSE );
2165 for( i = 0 ; i < element->count_string ; i++ )
2167 if( !strcmp( element->value_string[i]->name , name ) )
2169 *value = element->value_string[i]->value;
2170 //_mmcam_dbg_log( "Get[%s] element string[%s]", name, *value );
2175 _mmcam_dbg_warn( "Faild to get int in element... ElementName[%p],Name[%s],Count[%d]",
2176 element->name, name, element->count_string );
2182 _mmcamcorder_conf_set_value_element_property( GstElement* gst, type_element* element )
2186 //_mmcam_dbg_log( "Entered..." );
2188 mmf_return_val_if_fail( gst, FALSE );
2189 mmf_return_val_if_fail( element, FALSE );
2191 if( element->count_int == 0 )
2193 /*_mmcam_dbg_log( "There is no integer property to set in INI file[%s].", element->name );*/
2197 if( element->value_int == NULL )
2199 _mmcam_dbg_warn( "count_int[%d] is NOT zero, but value_int is NULL", element->count_int );
2203 for( i = 0 ; i < element->count_int ; i++ )
2205 MMCAMCORDER_G_OBJECT_SET( gst, element->value_int[i]->name, element->value_int[i]->value );
2208 _mmcam_dbg_log( "Element[%s] Set[%s] -> integer[%d]",
2209 element->element_name,
2210 element->value_int[i]->name,
2211 element->value_int[i]->value );
2216 if( element->count_string == 0 )
2218 _mmcam_dbg_log( "There is no string property to set in INI file[%s].", element->name );
2222 if( element->value_string == NULL )
2224 _mmcam_dbg_warn( "count_string[%d] is NOT zero, but value_string is NULL", element->count_string );
2228 for( i = 0 ; i < element->count_string ; i++ )
2230 MMCAMCORDER_G_OBJECT_SET( gst, element->value_string[i]->name, element->value_string[i]->value );
2232 _mmcam_dbg_log( "Element[%s] Set[%s] -> string[%s]",
2233 element->element_name,
2234 element->value_string[i]->name,
2235 element->value_string[i]->value );
2239 //_mmcam_dbg_log( "Done." );
2245 _mmcamcorder_conf_get_default_value_int( int type, int category, const char* name, int* value )
2248 int count_value = 0;
2250 //_mmcam_dbg_log( "Entered..." );
2252 mmf_return_val_if_fail( name, FALSE );
2254 if( !_mmcamcorder_conf_get_category_size( type, category, &count_value ) )
2256 _mmcam_dbg_warn( "No matched category... check it... categoty[%d]", category );
2260 if( type == CONFIGURE_TYPE_MAIN )
2262 for( i = 0 ; i < count_value ; i++ )
2264 if( !strcmp( conf_main_info_table[category][i].name, name ) )
2266 *value = conf_main_info_table[category][i].value_int;
2273 for( i = 0 ; i < count_value ; i++ )
2275 if( !strcmp( conf_ctrl_info_table[category][i].name, name ) )
2277 *value = conf_ctrl_info_table[category][i].value_int;
2283 _mmcam_dbg_warn( "Failed to get default int... check it... Type[%d],Category[%d],Name[%s]", type, category, name );
2289 _mmcamcorder_conf_get_default_value_string( int type, int category, const char* name, const char** value )
2292 int count_value = 0;
2294 //_mmcam_dbg_log( "Entered..." );
2296 mmf_return_val_if_fail( name, FALSE );
2298 if( !_mmcamcorder_conf_get_category_size( type, category, &count_value ) )
2300 _mmcam_dbg_warn( "No matched category... check it... categoty[%d]", category );
2304 if( type == CONFIGURE_TYPE_MAIN )
2306 for( i = 0 ; i < count_value ; i++ )
2308 if( !strcmp( conf_main_info_table[category][i].name, name ) )
2310 *value = conf_main_info_table[category][i].value_string;
2311 _mmcam_dbg_log( "Get[%s] default string[%s]", name, *value );
2318 for( i = 0 ; i < count_value ; i++ )
2320 if( !strcmp( conf_ctrl_info_table[category][i].name, name ) )
2322 *value = conf_ctrl_info_table[category][i].value_string;
2323 _mmcam_dbg_log( "Get[%s] default string[%s]", name, *value );
2329 _mmcam_dbg_warn( "Failed to get default string... check it... Type[%d],Category[%d],Name[%s]", type, category, name );
2335 _mmcamcorder_conf_get_default_element( int type, int category, const char* name, type_element** element )
2338 int count_value = 0;
2340 //_mmcam_dbg_log( "Entered..." );
2342 mmf_return_val_if_fail( name, FALSE );
2344 if( !_mmcamcorder_conf_get_category_size( type, category, &count_value ) )
2346 _mmcam_dbg_warn( "No matched category... check it... categoty[%d]", category );
2350 if( type == CONFIGURE_TYPE_MAIN )
2352 for( i = 0 ; i < count_value ; i++ )
2354 if( !strcmp( conf_main_info_table[category][i].name, name ) )
2356 *element = conf_main_info_table[category][i].value_element;
2357 _mmcam_dbg_log( "Get[%s] element[%p]", name, *element );
2364 for( i = 0 ; i < count_value ; i++ )
2366 if( !strcmp( conf_ctrl_info_table[category][i].name, name ) )
2368 *element = conf_ctrl_info_table[category][i].value_element;
2369 _mmcam_dbg_log( "Get[%s] element[%p]", name, *element );
2375 _mmcam_dbg_warn( "Failed to get default element... check it... Type[%d],Category[%d],Name[%s]", type, category, name );
2381 _mmcamcorder_conf_get_category_size( int type, int category, int* size )
2383 // mmf_return_val_if_fail( conf_main_category_size, FALSE );
2384 // mmf_return_val_if_fail( conf_ctrl_category_size, FALSE );
2386 if( type == CONFIGURE_TYPE_MAIN )
2388 mmf_return_val_if_fail( category < CONFIGURE_CATEGORY_MAIN_NUM, FALSE );
2390 *size = (int)conf_main_category_size[category];
2394 mmf_return_val_if_fail( category < CONFIGURE_CATEGORY_CTRL_NUM, FALSE );
2396 *size = (int)conf_ctrl_category_size[category];
2403 _mmcamcorder_conf_print_info( camera_conf** configure_info )
2405 int i, j, k, type, category_type;
2408 type_int_range *temp_int_range;
2409 type_int_array *temp_int_array;
2410 type_int_pair_array *temp_int_pair_array;
2411 type_string *temp_string;
2412 type_element *temp_element;
2414 g_print( "[ConfigureInfoPrint] : Entered.\n" );
2416 mmf_return_if_fail( *configure_info );
2418 if( (*configure_info)->type == CONFIGURE_TYPE_MAIN )
2420 category_type = CONFIGURE_CATEGORY_MAIN_NUM;
2424 category_type = CONFIGURE_CATEGORY_CTRL_NUM;
2427 for( i = 0 ; i < category_type ; i++ )
2429 if( (*configure_info)->info[i] )
2431 g_print( "[ConfigureInfo] : Category [%d]\n", i );
2432 for( j = 0 ; j < (*configure_info)->info[i]->count ; j++ )
2434 if( _mmcamcorder_conf_get_value_type( (*configure_info)->type, i, ((type_int*)((*configure_info)->info[i]->detail_info[j]))->name, &type ) )
2438 case CONFIGURE_VALUE_INT:
2439 temp_int = (type_int*)((*configure_info)->info[i]->detail_info[j]);
2440 g_print( "[ConfigureInfo] : INT - Name[%s],Value [%d]\n", temp_int->name, temp_int->value );
2442 case CONFIGURE_VALUE_INT_RANGE:
2443 temp_int_range = (type_int_range*)((*configure_info)->info[i]->detail_info[j]);
2444 g_print( "[ConfigureInfo] : INT_RANGE - Name[%s],Value [%d]~[%d], default [%d]\n",
2445 temp_int_range->name, temp_int_range->min, temp_int_range->max, temp_int_range->default_value );
2447 case CONFIGURE_VALUE_INT_ARRAY:
2448 temp_int_array = (type_int_array*)((*configure_info)->info[i]->detail_info[j]);
2449 g_print( "[ConfigureInfo] : INT_ARRAY - Name[%s], default [%d]\n - ",
2450 temp_int_array->name, temp_int_array->default_value );
2451 for( k = 0 ; k < temp_int_array->count ; k++ )
2453 g_print( "[%d] ", temp_int_array->value[k] );
2457 case CONFIGURE_VALUE_INT_PAIR_ARRAY:
2458 temp_int_pair_array = (type_int_pair_array*)((*configure_info)->info[i]->detail_info[j]);
2459 g_print( "[ConfigureInfo] : INT_PAIR_ARRAY - Name[%s], default [%d][%d]\n - ",
2460 temp_int_pair_array->name, temp_int_pair_array->default_value[0], temp_int_pair_array->default_value[0] );
2461 for( k = 0 ; k < temp_int_pair_array->count ; k++ )
2463 g_print( "[%d,%d] ", temp_int_pair_array->value[0][k], temp_int_pair_array->value[1][k] );
2467 case CONFIGURE_VALUE_STRING:
2468 temp_string = (type_string*)((*configure_info)->info[i]->detail_info[j]);
2469 g_print( "[ConfigureInfo] : STRING - Name[%s],Value[%s]\n", temp_string->name, temp_string->value );
2471 case CONFIGURE_VALUE_ELEMENT:
2472 temp_element = (type_element*)((*configure_info)->info[i]->detail_info[j]);
2473 g_print( "[ConfigureInfo] : Element - Name[%s],Element_Name[%s]\n", temp_element->name, temp_element->element_name );
2474 for( k = 0 ; k < temp_element->count_int ; k++ )
2476 g_print( " - INT[%d] Name[%s],Value[%d]\n", k, temp_element->value_int[k]->name, temp_element->value_int[k]->value );
2478 for( k = 0 ; k < temp_element->count_string ; k++ )
2480 g_print( " - STRING[%d] Name[%s],Value[%s]\n", k, temp_element->value_string[k]->name, temp_element->value_string[k]->value );
2484 g_print( "[ConfigureInfo] : Not matched value type... So can not print data... check it... Name[%s],type[%d]\n", ((type_int*)((*configure_info)->info[i]->detail_info[j]))->name, type );
2490 g_print( "[ConfigureInfo] : Failed to get value type." );
2496 g_print( "[ConfigureInfoPrint] : Done.\n" );
2500 static type_element *
2501 __mmcamcorder_get_audio_codec_element(MMHandleType handle)
2503 type_element *telement = NULL;
2504 const char *codec_type_str = NULL;
2505 int codec_type = MM_AUDIO_CODEC_INVALID;
2506 mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
2507 _MMCamcorderSubContext *sc = NULL;
2509 mmf_return_val_if_fail(hcamcorder, NULL);
2510 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2512 mmf_return_val_if_fail(sc, NULL);
2516 /* Check element availability */
2517 mm_camcorder_get_attributes(handle, NULL, MMCAM_AUDIO_ENCODER, &codec_type, NULL);
2519 switch( codec_type )
2521 case MM_AUDIO_CODEC_AMR:
2522 codec_type_str = "AMR";
2524 case MM_AUDIO_CODEC_G723_1:
2525 codec_type_str = "G723_1";
2527 case MM_AUDIO_CODEC_MP3:
2528 codec_type_str = "MP3";
2530 case MM_AUDIO_CODEC_AAC:
2531 codec_type_str = "AAC";
2533 case MM_AUDIO_CODEC_MMF:
2534 codec_type_str = "MMF";
2536 case MM_AUDIO_CODEC_ADPCM:
2537 codec_type_str = "ADPCM";
2539 case MM_AUDIO_CODEC_WAVE:
2540 codec_type_str = "WAVE";
2542 case MM_AUDIO_CODEC_MIDI:
2543 codec_type_str = "MIDI";
2545 case MM_AUDIO_CODEC_IMELODY:
2546 codec_type_str = "IMELODY";
2548 case MM_AUDIO_CODEC_VORBIS:
2549 codec_type_str = "VORBIS";
2552 _mmcam_dbg_err( "Not supported audio codec[%d]", codec_type );
2556 _mmcamcorder_conf_get_element( hcamcorder->conf_main,
2557 CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER,
2565 static type_element *
2566 __mmcamcorder_get_video_codec_element(MMHandleType handle)
2568 type_element *telement = NULL;
2569 const char *codec_type_str = NULL;
2570 int codec_type = MM_VIDEO_CODEC_INVALID;
2571 mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
2572 _MMCamcorderSubContext *sc = NULL;
2574 mmf_return_val_if_fail(hcamcorder, NULL);
2575 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2577 mmf_return_val_if_fail(sc, NULL);
2581 /* Check element availability */
2582 mm_camcorder_get_attributes(handle, NULL, MMCAM_VIDEO_ENCODER, &codec_type, NULL);
2584 switch( codec_type )
2586 case MM_VIDEO_CODEC_H263:
2587 codec_type_str = "H263";
2589 case MM_VIDEO_CODEC_H264:
2590 codec_type_str = "H264";
2592 case MM_VIDEO_CODEC_H26L:
2593 codec_type_str = "H26L";
2595 case MM_VIDEO_CODEC_MPEG4:
2596 codec_type_str = "MPEG4";
2598 case MM_VIDEO_CODEC_MPEG1:
2599 codec_type_str = "MPEG1";
2601 case MM_VIDEO_CODEC_THEORA: // OGG
2602 codec_type_str = "THEORA";
2605 _mmcam_dbg_err( "Not supported video codec[%d]", codec_type );
2609 _mmcamcorder_conf_get_element( hcamcorder->conf_main,
2610 CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER,
2618 static type_element *
2619 __mmcamcorder_get_image_codec_element(MMHandleType handle)
2621 type_element *telement = NULL;
2622 const char *codec_type_str = NULL;
2623 int codec_type = MM_IMAGE_CODEC_INVALID;
2624 mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
2625 _MMCamcorderSubContext *sc = NULL;
2627 mmf_return_val_if_fail(hcamcorder, NULL);
2628 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2630 mmf_return_val_if_fail(sc, NULL);
2634 /* Check element availability */
2635 mm_camcorder_get_attributes(handle, NULL, MMCAM_IMAGE_ENCODER, &codec_type, NULL);
2637 switch( codec_type )
2639 case MM_IMAGE_CODEC_JPEG:
2640 codec_type_str = "JPEG";
2642 case MM_IMAGE_CODEC_SRW:
2643 codec_type_str = "SRW";
2645 case MM_IMAGE_CODEC_JPEG_SRW:
2646 codec_type_str = "JPEG_SRW";
2648 case MM_IMAGE_CODEC_PNG:
2649 codec_type_str = "PNG";
2651 case MM_IMAGE_CODEC_BMP:
2652 codec_type_str = "BMP";
2654 case MM_IMAGE_CODEC_WBMP:
2655 codec_type_str = "WBMP";
2657 case MM_IMAGE_CODEC_TIFF:
2658 codec_type_str = "TIFF";
2660 case MM_IMAGE_CODEC_PCX:
2661 codec_type_str = "PCX";
2663 case MM_IMAGE_CODEC_GIF:
2664 codec_type_str = "GIF";
2666 case MM_IMAGE_CODEC_ICO:
2667 codec_type_str = "ICO";
2669 case MM_IMAGE_CODEC_RAS:
2670 codec_type_str = "RAS";
2672 case MM_IMAGE_CODEC_TGA:
2673 codec_type_str = "TGA";
2675 case MM_IMAGE_CODEC_XBM:
2676 codec_type_str = "XBM";
2678 case MM_IMAGE_CODEC_XPM:
2679 codec_type_str = "XPM";
2682 _mmcam_dbg_err( "Not supported image codec[%d]", codec_type );
2686 _mmcamcorder_conf_get_element( hcamcorder->conf_main,
2687 CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER,
2695 static type_element *
2696 __mmcamcorder_get_file_format_element(MMHandleType handle)
2698 type_element *telement = NULL;
2699 const char *mux_type_str = NULL;
2700 int file_type = MM_FILE_FORMAT_INVALID;
2701 mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
2702 _MMCamcorderSubContext *sc = NULL;
2704 mmf_return_val_if_fail(hcamcorder, NULL);
2705 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2707 mmf_return_val_if_fail(sc, NULL);
2711 /* Check element availability */
2712 mm_camcorder_get_attributes(handle, NULL, MMCAM_FILE_FORMAT, &file_type, NULL);
2716 case MM_FILE_FORMAT_3GP:
2717 mux_type_str = "3GP";
2719 case MM_FILE_FORMAT_AMR:
2720 mux_type_str = "AMR";
2722 case MM_FILE_FORMAT_MP4:
2723 mux_type_str = "MP4";
2725 case MM_FILE_FORMAT_AAC:
2726 mux_type_str = "AAC";
2728 case MM_FILE_FORMAT_MP3:
2729 mux_type_str = "MP3";
2731 case MM_FILE_FORMAT_OGG:
2732 mux_type_str = "OGG";
2734 case MM_FILE_FORMAT_WAV:
2735 mux_type_str = "WAV";
2737 case MM_FILE_FORMAT_AVI:
2738 mux_type_str = "AVI";
2740 case MM_FILE_FORMAT_WMA:
2741 mux_type_str = "WMA";
2743 case MM_FILE_FORMAT_WMV:
2744 mux_type_str = "WMV";
2746 case MM_FILE_FORMAT_MID:
2747 mux_type_str = "MID";
2749 case MM_FILE_FORMAT_MMF:
2750 mux_type_str = "MMF";
2752 case MM_FILE_FORMAT_MATROSKA:
2753 mux_type_str = "MATROSKA";
2756 _mmcam_dbg_err( "Not supported file format[%d]", file_type );
2760 _mmcamcorder_conf_get_element( hcamcorder->conf_main,
2761 CONFIGURE_CATEGORY_MAIN_MUX,
2770 _mmcamcorder_get_type_element(MMHandleType handle, int type)
2772 type_element *telement = NULL;
2774 _mmcam_dbg_log("type:%d", type);
2778 case MM_CAM_AUDIO_ENCODER:
2779 telement = __mmcamcorder_get_audio_codec_element(handle);
2781 case MM_CAM_VIDEO_ENCODER:
2782 telement = __mmcamcorder_get_video_codec_element(handle);
2784 case MM_CAM_IMAGE_ENCODER:
2785 telement = __mmcamcorder_get_image_codec_element(handle);
2787 case MM_CAM_FILE_FORMAT:
2788 telement = __mmcamcorder_get_file_format_element(handle);
2791 _mmcam_dbg_log("Can't get element type form this profile.(%d)", type);
2798 int _mmcamcorder_get_audio_codec_format(MMHandleType handle, const char *name)
2800 int codec_index = MM_AUDIO_CODEC_INVALID;
2803 _mmcam_dbg_err("name is NULL");
2804 return MM_AUDIO_CODEC_INVALID;
2807 if (!strcmp(name, "AMR")) {
2808 codec_index = MM_AUDIO_CODEC_AMR;
2809 } else if (!strcmp(name, "G723_1")) {
2810 codec_index = MM_AUDIO_CODEC_G723_1;
2811 } else if (!strcmp(name, "MP3")) {
2812 codec_index = MM_AUDIO_CODEC_MP3;
2813 } else if (!strcmp(name, "AAC")) {
2814 codec_index = MM_AUDIO_CODEC_AAC;
2815 } else if (!strcmp(name, "MMF")) {
2816 codec_index = MM_AUDIO_CODEC_MMF;
2817 } else if (!strcmp(name, "ADPCM")) {
2818 codec_index = MM_AUDIO_CODEC_ADPCM;
2819 } else if (!strcmp(name, "WAVE")) {
2820 codec_index = MM_AUDIO_CODEC_WAVE;
2821 } else if (!strcmp(name, "MIDI")) {
2822 codec_index = MM_AUDIO_CODEC_MIDI;
2823 } else if (!strcmp(name, "IMELODY")) {
2824 codec_index = MM_AUDIO_CODEC_IMELODY;
2825 } else if (!strcmp(name, "VORBIS")) {
2826 codec_index = MM_AUDIO_CODEC_VORBIS;
2829 /*_mmcam_dbg_log("audio codec index %d", codec_index);*/
2836 int _mmcamcorder_get_video_codec_format(MMHandleType handle, const char *name)
2838 int codec_index = MM_VIDEO_CODEC_INVALID;
2841 _mmcam_dbg_err("name is NULL");
2842 return MM_VIDEO_CODEC_INVALID;
2845 if (!strcmp(name, "H263")) {
2846 codec_index = MM_VIDEO_CODEC_H263;
2847 } else if (!strcmp(name, "H264")) {
2848 codec_index = MM_VIDEO_CODEC_H264;
2849 } else if (!strcmp(name, "H26L")) {
2850 codec_index = MM_VIDEO_CODEC_H26L;
2851 } else if (!strcmp(name, "MPEG4")) {
2852 codec_index = MM_VIDEO_CODEC_MPEG4;
2853 } else if (!strcmp(name, "MPEG1")) {
2854 codec_index = MM_VIDEO_CODEC_MPEG1;
2855 } else if (!strcmp(name, "THEORA")) {
2856 codec_index = MM_VIDEO_CODEC_THEORA;
2859 /*_mmcam_dbg_log("video codec index %d", codec_index);*/
2866 int _mmcamcorder_get_image_codec_format(MMHandleType handle, const char *name)
2868 int codec_index = MM_IMAGE_CODEC_INVALID;
2871 _mmcam_dbg_err("name is NULL");
2872 return MM_IMAGE_CODEC_INVALID;
2875 if (!strcmp(name, "JPEG")) {
2876 codec_index = MM_IMAGE_CODEC_JPEG;
2877 } else if (!strcmp(name, "PNG")) {
2878 codec_index = MM_IMAGE_CODEC_PNG;
2879 } else if (!strcmp(name, "BMP")) {
2880 codec_index = MM_IMAGE_CODEC_BMP;
2881 } else if (!strcmp(name, "WBMP")) {
2882 codec_index = MM_IMAGE_CODEC_WBMP;
2883 } else if (!strcmp(name, "TIFF")) {
2884 codec_index = MM_IMAGE_CODEC_TIFF;
2885 } else if (!strcmp(name, "PCX")) {
2886 codec_index = MM_IMAGE_CODEC_PCX;
2887 } else if (!strcmp(name, "GIF")) {
2888 codec_index = MM_IMAGE_CODEC_GIF;
2889 } else if (!strcmp(name, "ICO")) {
2890 codec_index = MM_IMAGE_CODEC_ICO;
2891 } else if (!strcmp(name, "RAS")) {
2892 codec_index = MM_IMAGE_CODEC_RAS;
2893 } else if (!strcmp(name, "TGA")) {
2894 codec_index = MM_IMAGE_CODEC_TGA;
2895 } else if (!strcmp(name, "XBM")) {
2896 codec_index = MM_IMAGE_CODEC_XBM;
2897 } else if (!strcmp(name, "XPM")) {
2898 codec_index = MM_IMAGE_CODEC_XPM;
2901 _mmcam_dbg_log("image codec index %d", codec_index);
2907 int _mmcamcorder_get_mux_format(MMHandleType handle, const char *name)
2909 int mux_index = MM_FILE_FORMAT_INVALID;
2912 _mmcam_dbg_err("name is NULL");
2913 return MM_FILE_FORMAT_INVALID;
2916 if (!strcmp(name, "3GP")) {
2917 mux_index = MM_FILE_FORMAT_3GP;
2918 } else if (!strcmp(name, "AMR")) {
2919 mux_index = MM_FILE_FORMAT_AMR;
2920 } else if (!strcmp(name, "MP4")) {
2921 mux_index = MM_FILE_FORMAT_MP4;
2922 } else if (!strcmp(name, "AAC")) {
2923 mux_index = MM_FILE_FORMAT_AAC;
2924 } else if (!strcmp(name, "MP3")) {
2925 mux_index = MM_FILE_FORMAT_MP3;
2926 } else if (!strcmp(name, "OGG")) {
2927 mux_index = MM_FILE_FORMAT_OGG;
2928 } else if (!strcmp(name, "WAV")) {
2929 mux_index = MM_FILE_FORMAT_WAV;
2930 } else if (!strcmp(name, "AVI")) {
2931 mux_index = MM_FILE_FORMAT_AVI;
2932 } else if (!strcmp(name, "WMA")) {
2933 mux_index = MM_FILE_FORMAT_WMA;
2934 } else if (!strcmp(name, "WMV")) {
2935 mux_index = MM_FILE_FORMAT_WMV;
2936 } else if (!strcmp(name, "MID")) {
2937 mux_index = MM_FILE_FORMAT_MID;
2938 } else if (!strcmp(name, "MMF")) {
2939 mux_index = MM_FILE_FORMAT_MMF;
2940 } else if (!strcmp(name, "MATROSKA")) {
2941 mux_index = MM_FILE_FORMAT_MATROSKA;
2944 /*_mmcam_dbg_log("mux index %d", mux_index);*/
2951 _mmcamcorder_get_format(MMHandleType handle, int conf_category, const char *name)
2955 mmf_return_val_if_fail(name, -1);
2957 switch(conf_category)
2959 case CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER:
2960 fmt = _mmcamcorder_get_audio_codec_format(handle, name);
2962 case CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER:
2963 fmt = _mmcamcorder_get_video_codec_format(handle, name);
2965 case CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER:
2966 fmt = _mmcamcorder_get_image_codec_format(handle, name);
2968 case CONFIGURE_CATEGORY_MAIN_MUX:
2969 fmt = _mmcamcorder_get_mux_format(handle, name);
2972 _mmcam_dbg_log("Can't get format from this category.(%d)", conf_category);
2979 _mmcamcorder_get_available_format(MMHandleType handle, int conf_category, int ** format)
2981 mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
2982 camera_conf* configure_info = NULL;
2984 int total_count = 0;
2986 mmf_return_val_if_fail(hcamcorder, 0);
2988 /*_mmcam_dbg_log("conf_category:%d", conf_category);*/
2990 configure_info = hcamcorder->conf_main;
2992 if (configure_info->info[conf_category]) {
2995 const char *name = NULL;
2996 int count = configure_info->info[conf_category]->count;
2997 conf_detail *info = configure_info->info[conf_category];
2999 /*_mmcam_dbg_log("count[%d], info[%p]", count, info);*/
3001 if (count <= 0 || !info) {
3005 arr = (int*) g_malloc0(count * sizeof(int));
3007 _mmcam_dbg_err("malloc failed : %d", count * sizeof(int));
3011 for (i = 0 ; i < count ; i++) {
3012 if (info->detail_info[i] == NULL) {
3016 name = ((type_element*)(info->detail_info[i]))->name;
3017 fmt = _mmcamcorder_get_format(handle, conf_category, name);
3019 arr[total_count++] = fmt;
3022 /*_mmcam_dbg_log("name:%s, fmt:%d", name, fmt);*/