Add new attribute for focus level
[platform/core/multimedia/libmm-camcorder.git] / src / include / mm_camcorder.h
1 /*
2  * libmm-camcorder
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Jeongmo Yang <jm80.yang@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 /**
23         @addtogroup CAMCORDER
24         @{
25
26         @par
27         This part describes the APIs with respect to Multimedia Camcorder.
28         Camcorder is for recording audio and video from audio and video input devices, capturing
29         still image from video input device, and audio recording from audio input
30         device.
31
32         @par
33         Camcorder can be reached by calling functions as shown in the following
34         figure, "The State of Camcorder".
35
36         @par
37         @image html     camcorder_state.png     "The State of Camcorder"        width=12cm
38         @image latex    camcorder_state.png     "The State of Camcorder"        width=12cm
39
40         @par
41         Between each states there is intermediate state, and in this state,
42         any function call which change the camcorder state will be failed.
43
44         @par
45         Recording state and paused state exists when the mode of camcorder is
46         video-capture or audio-capture mode. In case of image-capture mode, CAPTURING state will
47         exist.
48
49         @par
50 <div>
51 <table>
52         <tr>
53                 <td>FUNCTION</td>
54                 <td>PRE-STATE</td>
55                 <td>POST-STATE</td>
56                 <td>SYNC TYPE</td>
57         </tr>
58         <tr>
59                 <td>mm_camcorder_create()</td>
60                 <td>NONE</td>
61                 <td>NULL</td>
62                 <td>SYNC</td>
63         </tr>
64         <tr>
65                 <td>mm_camcorder_destroy()</td>
66                 <td>NULL</td>
67                 <td>NONE</td>
68                 <td>SYNC</td>
69         </tr>
70         <tr>
71                 <td>mm_camcorder_realize()</td>
72                 <td>NULL</td>
73                 <td>READY</td>
74                 <td>SYNC</td>
75         </tr>
76         <tr>
77                 <td>mm_camcorder_unrealize()</td>
78                 <td>READY</td>
79                 <td>NULL</td>
80                 <td>SYNC</td>
81         </tr>
82         <tr>
83                 <td>mm_camcorder_start()</td>
84                 <td>READY</td>
85                 <td>PREPARED</td>
86                 <td>SYNC</td>
87         </tr>
88         <tr>
89                 <td>mm_camcorder_stop()</td>
90                 <td>PREPARED</td>
91                 <td>READY</td>
92                 <td>SYNC</td>
93         </tr>
94         <tr>
95                 <td>mm_camcorder_capture_start()</td>
96                 <td>PREPARED</td>
97                 <td>CAPTURING</td>
98                 <td>SYNC</td>
99         </tr>
100         <tr>
101                 <td>mm_camcorder_capture_stop()</td>
102                 <td>CAPTURING</td>
103                 <td>PREPARED</td>
104                 <td>SYNC</td>
105         </tr>
106         <tr>
107                 <td>mm_camcorder_record()</td>
108                 <td>PREPARED/PAUSED</td>
109                 <td>RECORDING</td>
110                 <td>SYNC</td>
111         </tr>
112         <tr>
113                 <td>mm_camcorder_pause()</td>
114                 <td>RECORDING</td>
115                 <td>PAUSED</td>
116                 <td>SYNC</td>
117         </tr>
118         <tr>
119                 <td>mm_camcorder_commit()</td>
120                 <td>RECORDING/PAUSED</td>
121                 <td>PREPARED</td>
122                 <td>SYNC</td>
123         </tr>
124         <tr>
125                 <td>mm_camcorder_cancel()</td>
126                 <td>RECORDING/PAUSED</td>
127                 <td>PREPARED</td>
128                 <td>SYNC</td>
129         </tr>
130         <tr>
131                 <td>mm_camcorder_set_message_callback()</td>
132                 <td>N/A</td>
133                 <td>N/A</td>
134                 <td>SYNC</td>
135         </tr>
136         <tr>
137                 <td>mm_camcorder_set_video_stream_callback()</td>
138                 <td>N/A</td>
139                 <td>N/A</td>
140                 <td>SYNC</td>
141         </tr>
142         <tr>
143                 <td>mm_camcorder_set_video_capture_callback()</td>
144                 <td>N/A</td>
145                 <td>N/A</td>
146                 <td>SYNC</td>
147         </tr>
148         <tr>
149                 <td>mm_camcorder_get_state()</td>
150                 <td>N/A</td>
151                 <td>N/A</td>
152                 <td>SYNC</td>
153         </tr>
154         <tr>
155                 <td>mm_camcorder_get_attributes()</td>
156                 <td>N/A</td>
157                 <td>N/A</td>
158                 <td>SYNC</td>
159         </tr>
160         <tr>
161                 <td>mm_camcorder_set_attributes()</td>
162                 <td>N/A</td>
163                 <td>N/A</td>
164                 <td>SYNC</td>
165         </tr>
166         <tr>
167                 <td>mm_camcorder_get_attribute_info()</td>
168                 <td>N/A</td>
169                 <td>N/A</td>
170                 <td>SYNC</td>
171         </tr>
172         <tr>
173                 <td>mm_camcorder_init_focusing()</td>
174                 <td>N/A</td>
175                 <td>N/A</td>
176                 <td>SYNC</td>
177         </tr>
178         <tr>
179                 <td>mm_camcorder_start_focusing()</td>
180                 <td>N/A</td>
181                 <td>N/A</td>
182                 <td>SYNC</td>
183         </tr>
184         <tr>
185                 <td>mm_camcorder_stop_focusing()</td>
186                 <td>N/A</td>
187                 <td>N/A</td>
188                 <td>SYNC</td>
189         </tr>
190 </table>
191 </div>
192
193         @par
194         * Attribute @n
195         Attribute system is an interface to operate camcorder. Depending on each attribute, camcorder behaves differently.
196         Attribute system provides get/set functions. Setting proper attributes, a user can control camcorder as he want. (mm_camcorder_set_attributes())
197         Also, a user can comprehend current status of the camcorder, calling getter function(mm_camcorder_get_attributes()).
198         Beware, arguments of mm_camcorder_set_attributes() and mm_camcorder_get_attributes() should be finished with 'NULL'.
199         This is a rule for the variable argument.
200         @par
201         Besides its value, each Attribute also has 'type' and 'validity type'. 'type' describes variable type that the attribute can get.
202         If you input a value that has wrong type, camcorder will not work properly or be crashed. 'validity' describes array or
203         range of values that are able to set to the attribute. 'validity type' defines type of the 'validity'.
204         @par
205         A user can retrieve these values using mm_camcorder_get_attribute_info().
206         Following tables have 'Attribute name', 'Attribute macro', 'Type', and 'Validity type'. You can refer '#MMCamAttrsType' and '#MMCamAttrsValidType'
207         for discerning 'Type' and 'Validity type'.
208
209
210         @par
211         Following are the attributes which should be set before initialization (#mm_camcorder_realize):
212
213         @par
214 <div>
215 <table>
216         <tr>
217                 <td><center><b>Attribute</b></center></td>
218                 <td><center><b>Description</b></center></td>
219         </tr>
220         <tr>
221                 <td>#MMCAM_MODE</td>
222                 <td>Mode of camcorder ( still/video/audio )</td>
223         </tr>
224         <tr>
225                 <td>#MMCAM_AUDIO_DEVICE</td>
226                 <td>Audio device ID for capturing audio stream</td>
227         </tr>
228         <tr>
229                 <td>#MMCAM_CAMERA_DEVICE_COUNT</td>
230                 <td>Video device count</td>
231         </tr>
232         <tr>
233                 <td>#MMCAM_AUDIO_ENCODER</td>
234                 <td>Audio codec for encoding audio stream</td>
235         </tr>
236         <tr>
237                 <td>#MMCAM_VIDEO_ENCODER</td>
238                 <td>Video codec for encoding video stream</td>
239         </tr>
240         <tr>
241                 <td>#MMCAM_IMAGE_ENCODER</td>
242                 <td>Image codec for capturing still-image</td>
243         </tr>
244         <tr>
245                 <td>#MMCAM_FILE_FORMAT</td>
246                 <td>File format for recording media stream</td>
247         </tr>
248         <tr>
249                 <td>#MMCAM_AUDIO_SAMPLERATE</td>
250                 <td>Sampling rate of audio stream ( This is an integer field )</td>
251         </tr>
252         <tr>
253                 <td>#MMCAM_AUDIO_FORMAT</td>
254                 <td>Audio format of each sample</td>
255         </tr>
256         <tr>
257                 <td>#MMCAM_AUDIO_CHANNEL</td>
258                 <td>Channels of each sample ( This is an integer field )</td>
259         </tr>
260         <tr>
261                 <td>#MMCAM_AUDIO_INPUT_ROUTE(deprecated)</td>
262                 <td>Set audio input route</td>
263         </tr>
264         <tr>
265                 <td>#MMCAM_CAMERA_FORMAT</td>
266                 <td>Format of video stream. This is an integer field</td>
267         </tr>
268         <tr>
269                 <td>#MMCAM_CAMERA_FPS</td>
270                 <td>Frames per second ( This is an integer field )</td>
271         </tr>
272         <tr>
273                 <td>#MMCAM_CAMERA_WIDTH</td>
274                 <td>Width of input video stream</td>
275         </tr>
276         <tr>
277                 <td>#MMCAM_CAMERA_HEIGHT</td>
278                 <td>Height of input video stream</td>
279         </tr>
280         <tr>
281                 <td>#MMCAM_CAMERA_FPS_AUTO</td>
282                 <td>FPS Auto. When you set true to this attribute, FPS will vary depending on the amount of the light.</td>
283         </tr>
284         <tr>
285                 <td>#MMCAM_DISPLAY_HANDLE</td>
286                 <td>Pointer of display buffer or ID of xwindow</td>
287         </tr>
288         <tr>
289                 <td>#MMCAM_DISPLAY_DEVICE</td>
290                 <td>Device of display</td>
291         </tr>
292         <tr>
293                 <td>#MMCAM_DISPLAY_SURFACE</td>
294                 <td>Surface of display</td>
295         </tr>
296         <tr>
297                 <td>#MMCAM_DISPLAY_SOURCE_X</td>
298                 <td>X position of source rectangle. When you want to crop the source, you can set the area with this value.</td>
299         </tr>
300         <tr>
301                 <td>#MMCAM_DISPLAY_SOURCE_Y</td>
302                 <td>Y position of source rectangle. When you want to crop the source, you can set the area with this value.</td>
303         </tr>
304         <tr>
305                 <td>#MMCAM_DISPLAY_SOURCE_WIDTH</td>
306                 <td>Width of source rectangle. When you want to crop the source, you can set the area with this value.</td>
307         </tr>
308         <tr>
309                 <td>#MMCAM_DISPLAY_SOURCE_HEIGHT</td>
310                 <td>Height of source rectangle. When you want to crop the source, you can set the area with this value.</td>
311         </tr>
312         <tr>
313                 <td>#MMCAM_DISPLAY_ROTATION</td>
314                 <td>Rotation of display</td>
315         </tr>
316         <tr>
317                 <td>#MMCAM_DISPLAY_VISIBLE</td>
318                 <td>Visible of display</td>
319         </tr>
320         <tr>
321                 <td>#MMCAM_DISPLAY_SCALE</td>
322                 <td>A scale of displayed image</td>
323         </tr>
324         <tr>
325                 <td>#MMCAM_DISPLAY_GEOMETRY_METHOD</td>
326                 <td>A method that describes a form of geometry for display</td>
327         </tr>
328 </table>
329 </div>
330
331         @par
332         Following are the attributes which should be set before recording (mm_camcorder_record()):
333
334         @par
335 <div>
336 <table>
337         <tr>
338                 <td><center><b>Attribute</b></center></td>
339                 <td><center><b>Description</b></center></td>
340         </tr>
341         <tr>
342                 <td>#MMCAM_AUDIO_ENCODER_BITRATE</td>
343                 <td>Bitrate of Audio Encoder</td>
344         </tr>
345         <tr>
346                 <td>#MMCAM_VIDEO_ENCODER_BITRATE</td>
347                 <td>Bitrate of Video Encoder</td>
348         </tr>
349         <tr>
350                 <td>#MMCAM_TARGET_FILENAME</td>
351                 <td>Target filename. Only used in Audio/Video recording. This is not used for capturing.</td>
352         </tr>
353         <tr>
354                 <td>#MMCAM_TARGET_MAX_SIZE</td>
355                 <td>Maximum size of recording file(Kbyte). If the size of file reaches this value.</td>
356         </tr>
357         <tr>
358                 <td>#MMCAM_TARGET_TIME_LIMIT</td>
359                 <td>Time limit of recording file. If the elapsed time of recording reaches this value.</td>
360         </tr>
361 </table>
362 </div>
363
364         @par
365         Following are the attributes which should be set before capturing (mm_camcorder_capture_start()):
366
367         @par
368 <div>
369 <table>
370         <tr>
371                 <td><center><b>Attribute</b></center></td>
372                 <td><center><b>Description</b></center></td>
373         </tr>
374         <tr>
375                 <td>#MMCAM_IMAGE_ENCODER_QUALITY</td>
376                 <td>Encoding quality of Image codec</td>
377         </tr>
378         <tr>
379                 <td>#MMCAM_CAPTURE_FORMAT</td>
380                 <td>Pixel format that you want to capture</td>
381         </tr>
382         <tr>
383                 <td>#MMCAM_CAPTURE_WIDTH</td>
384                 <td>Width of the image that you want to capture</td>
385         </tr>
386         <tr>
387                 <td>#MMCAM_CAPTURE_HEIGHT</td>
388                 <td>Height of the image that you want to capture</td>
389         </tr>
390         <tr>
391                 <td>#MMCAM_CAPTURE_COUNT</td>
392                 <td>Total count of capturing</td>
393         </tr>
394         <tr>
395                 <td>#MMCAM_CAPTURE_INTERVAL</td>
396                 <td>Interval between each capturing on Multishot ( MMCAM_CAPTURE_COUNT > 1 )</td>
397         </tr>
398 </table>
399 </div>
400
401         @par
402         Following are the attributes which can be set anytime:
403
404         @par
405 <div>
406 <table>
407         <tr>
408                 <td><center><b>Attribute</b></center></td>
409                 <td><center><b>Description</b></center></td>
410         </tr>
411         <tr>
412                 <td>#MMCAM_AUDIO_VOLUME</td>
413                 <td>Input volume of audio source ( double value )</td>
414         </tr>
415         <tr>
416                 <td>#MMCAM_CAMERA_DIGITAL_ZOOM</td>
417                 <td>Digital zoom level</td>
418         </tr>
419         <tr>
420                 <td>#MMCAM_CAMERA_OPTICAL_ZOOM</td>
421                 <td>Optical zoom level</td>
422         </tr>
423         <tr>
424                 <td>#MMCAM_CAMERA_FOCUS_MODE</td>
425                 <td>Focus mode</td>
426         </tr>
427         <tr>
428                 <td>#MMCAM_CAMERA_AF_SCAN_RANGE</td>
429                 <td>AF Scan range</td>
430         </tr>
431         <tr>
432                 <td>#MMCAM_CAMERA_AF_TOUCH_X</td>
433                 <td>X coordinate of touching position</td>
434         </tr>
435         <tr>
436                 <td>#MMCAM_CAMERA_AF_TOUCH_Y</td>
437                 <td>Y coordinate of touching position</td>
438         </tr>
439         <tr>
440                 <td>#MMCAM_CAMERA_AF_TOUCH_WIDTH</td>
441                 <td>Width of touching area</td>
442         </tr>
443         <tr>
444                 <td>#MMCAM_CAMERA_AF_TOUCH_HEIGHT</td>
445                 <td>Height of touching area</td>
446         </tr>
447         <tr>
448                 <td>#MMCAM_CAMERA_EXPOSURE_MODE</td>
449                 <td>Exposure mode</td>
450         </tr>
451         <tr>
452                 <td>#MMCAM_CAMERA_EXPOSURE_VALUE</td>
453                 <td>Exposure value</td>
454         </tr>
455         <tr>
456                 <td>#MMCAM_CAMERA_F_NUMBER</td>
457                 <td>f number of camera</td>
458         </tr>
459         <tr>
460                 <td>#MMCAM_CAMERA_SHUTTER_SPEED</td>
461                 <td>Shutter speed</td>
462         </tr>
463         <tr>
464                 <td>#MMCAM_CAMERA_ISO</td>
465                 <td>ISO of capturing image</td>
466         </tr>
467         <tr>
468                 <td>#MMCAM_CAMERA_WDR</td>
469                 <td>Wide dynamic range</td>
470         </tr>
471         <tr>
472                 <td>#MMCAM_CAMERA_ANTI_HANDSHAKE</td>
473                 <td>Anti Handshake</td>
474         </tr>
475         <tr>
476                 <td>#MMCAM_CAMERA_FOCAL_LENGTH</td>
477                 <td>Focal length of camera lens</td>
478         </tr>
479         <tr>
480                 <td>#MMCAM_FILTER_BRIGHTNESS</td>
481                 <td>Brightness level</td>
482         </tr>
483         <tr>
484                 <td>#MMCAM_FILTER_CONTRAST</td>
485                 <td>Contrast level</td>
486         </tr>
487         <tr>
488                 <td>#MMCAM_FILTER_WB</td>
489                 <td>White balance</td>
490         </tr>
491         <tr>
492                 <td>#MMCAM_FILTER_COLOR_TONE</td>
493                 <td>Color tone (Color effect)</td>
494         </tr>
495         <tr>
496                 <td>#MMCAM_FILTER_SCENE_MODE</td>
497                 <td>Scene mode (Program mode)</td>
498         </tr>
499         <tr>
500                 <td>#MMCAM_FILTER_SATURATION</td>
501                 <td>Saturation level</td>
502         </tr>
503         <tr>
504                 <td>#MMCAM_FILTER_HUE</td>
505                 <td>Hue level</td>
506         </tr>
507         <tr>
508                 <td>#MMCAM_FILTER_SHARPNESS</td>
509                 <td>Sharpness level</td>
510         </tr>
511         <tr>
512                 <td>#MMCAM_CAPTURE_BREAK_CONTINUOUS_SHOT</td>
513                 <td>Set this as true when you want to stop multishot immediately</td>
514         </tr>
515         <tr>
516                 <td>#MMCAM_DISPLAY_RECT_X</td>
517                 <td>X position of display rectangle (This is only available when MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI)</td>
518         </tr>
519         <tr>
520                 <td>#MMCAM_DISPLAY_RECT_Y</td>
521                 <td>Y position of display rectangle (This is only available when MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI)</td>
522         </tr>
523         <tr>
524                 <td>#MMCAM_DISPLAY_RECT_WIDTH</td>
525                 <td>Width of display rectangle (This is only available when MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI)</td>
526         </tr>
527         <tr>
528                 <td>#MMCAM_DISPLAY_RECT_HEIGHT</td>
529                 <td>Height of display rectangle (This is only available when MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI)</td>
530         </tr>
531         <tr>
532                 <td>#MMCAM_TAG_ENABLE</td>
533                 <td>Enable to write tags (If this value is FALSE, none of tag information will be written to captured file)</td>
534         </tr>
535         <tr>
536                 <td>#MMCAM_TAG_IMAGE_DESCRIPTION</td>
537                 <td>Image description</td>
538         </tr>
539         <tr>
540                 <td>#MMCAM_TAG_ORIENTATION</td>
541                 <td>Orientation of captured image</td>
542         </tr>
543         <tr>
544                 <td>#MMCAM_TAG_VIDEO_ORIENTATION</td>
545                 <td>Orientation of encoded video</td>
546         </tr>
547         <tr>
548                 <td>#MMCAM_TAG_SOFTWARE</td>
549                 <td>software name and version</td>
550         </tr>
551         <tr>
552                 <td>#MMCAM_TAG_LATITUDE</td>
553                 <td>Latitude of captured position (GPS information)</td>
554         </tr>
555         <tr>
556                 <td>#MMCAM_TAG_LONGITUDE</td>
557                 <td>Longitude of captured position (GPS information)</td>
558         </tr>
559         <tr>
560                 <td>#MMCAM_TAG_ALTITUDE</td>
561                 <td>Altitude of captured position (GPS information)</td>
562         </tr>
563         <tr>
564                 <td>#MMCAM_STROBE_CONTROL</td>
565                 <td>Strobe control</td>
566         </tr>
567         <tr>
568                 <td>#MMCAM_STROBE_MODE</td>
569                 <td>Operation Mode of strobe</td>
570         </tr>
571         <tr>
572                 <td>#MMCAM_DETECT_MODE</td>
573                 <td>Detection mode</td>
574         </tr>
575         <tr>
576                 <td>#MMCAM_DETECT_NUMBER</td>
577                 <td>Total number of detected object</td>
578         </tr>
579         <tr>
580                 <td>#MMCAM_DETECT_FOCUS_SELECT</td>
581                 <td>Select one of detected objects</td>
582         </tr>
583 </table>
584 </div>
585  */
586
587
588
589 #ifndef __MM_CAMCORDER_H__
590 #define __MM_CAMCORDER_H__
591
592
593 /*=======================================================================================
594 | INCLUDE FILES                                                                         |
595 ========================================================================================*/
596 #include <glib.h>
597
598 #include <mm_types.h>
599 #include <mm_error.h>
600 #include <mm_message.h>
601
602 #ifdef __cplusplus
603 extern "C" {
604 #endif
605
606 /*=======================================================================================
607 | GLOBAL DEFINITIONS AND DECLARATIONS FOR CAMCORDER                                     |
608 ========================================================================================*/
609
610 /*=======================================================================================
611 | MACRO DEFINITIONS                                                                     |
612 ========================================================================================*/
613 /**
614  * Get numerator. Definition for fraction setting, such as MMCAM_CAMERA_SHUTTER_SPEED and MMCAM_CAMERA_EXPOSURE_VALUE.
615  */
616 #define MM_CAMCORDER_GET_NUMERATOR(x)                                   ((int)(((int)(x) >> 16) & 0xFFFF))
617 /**
618  * Get denominator. Definition for fraction setting, such as MMCAM_CAMERA_SHUTTER_SPEED and MMCAM_CAMERA_EXPOSURE_VALUE.
619  */
620 #define MM_CAMCORDER_GET_DENOMINATOR(x)                                 ((int)(((int)(x)) & 0xFFFF))
621 /**
622  * Set fraction value. Definition for fraction setting, such as MMCAM_CAMERA_SHUTTER_SPEED and MMCAM_CAMERA_EXPOSURE_VALUE.
623  */
624 #define MM_CAMCORDER_SET_FRACTION(numerator, denominator)       ((int)((((int)(numerator)) << 16) | (int)(denominator)))
625
626 /* Attributes Macros */
627 /**
628  * Mode of camcorder (still/video/audio).
629  * @see         MMCamcorderModeType
630  */
631 #define MMCAM_MODE                              "mode"
632
633 /**
634  * Audio device ID for capturing audio stream.
635  * @see         MMAudioDeviceType (in mm_types.h)
636  */
637 #define MMCAM_AUDIO_DEVICE                      "audio-device"
638
639 /**
640  * Video device count.
641  */
642 #define MMCAM_CAMERA_DEVICE_COUNT               "camera-device-count"
643
644 /**
645  * Facing direction of camera device.
646  * @see         MMCamcorderCameraFacingDirection
647  */
648 #define MMCAM_CAMERA_FACING_DIRECTION           "camera-facing-direction"
649
650 /**
651  * Audio codec for encoding audio stream.
652  * @see         MMAudioCodecType  (in mm_types.h)
653  */
654 #define MMCAM_AUDIO_ENCODER                     "audio-encoder"
655
656 /**
657  * Video codec for encoding video stream.
658  * @see         MMVideoCodecType (in mm_types.h)
659  */
660 #define MMCAM_VIDEO_ENCODER                     "video-encoder"
661
662 /**
663  * Image codec for capturing still-image.
664  * @see         MMImageCodecType (in mm_types.h)
665  */
666 #define MMCAM_IMAGE_ENCODER                     "image-encoder"
667
668 /**
669  * File format for recording media stream.
670  * @see         MMFileFormatType (in mm_types.h)
671  */
672 #define MMCAM_FILE_FORMAT                       "file-format"
673
674 /**
675  * Sampling rate of audio stream. This is an integer field.
676  */
677 #define MMCAM_AUDIO_SAMPLERATE                  "audio-samplerate"
678
679 /**
680  * Audio format of each sample.
681  * @see         MMCamcorderAudioFormat
682  */
683 #define MMCAM_AUDIO_FORMAT                      "audio-format"
684
685 /**
686  * Channels of each sample. This is an integer field.
687  */
688 #define MMCAM_AUDIO_CHANNEL                     "audio-channel"
689
690 /**
691  * Input volume of audio source. Double value.
692  */
693 #define MMCAM_AUDIO_VOLUME                      "audio-volume"
694
695 /**
696  * Disable Audio stream when record.
697  */
698 #define MMCAM_AUDIO_DISABLE                     "audio-disable"
699
700 /**
701  * Set audio input route
702  * @remarks     Deprecated. This will be removed soon.
703  * @see         MMAudioRoutePolicy (in mm_types.h)
704  */
705 #define MMCAM_AUDIO_INPUT_ROUTE                 "audio-input-route"
706
707 /**
708  * Format of video stream. This is an integer field
709  * @see         MMPixelFormatType (in mm_types.h)
710  */
711 #define MMCAM_CAMERA_FORMAT                     "camera-format"
712
713 /**
714  * Slow motion rate when video recording
715  * @remarks     Deprecated
716  */
717 #define MMCAM_CAMERA_SLOW_MOTION_RATE           "camera-slow-motion-rate"
718
719 /**
720  * Motion rate when video recording
721  * @remarks     This should be bigger than 0(zero).
722  *              Default value is 1 and it's for normal video recording.
723  *              If the value is smaller than 1, recorded file will be played slower,
724  *              otherwise, recorded file will be played faster.
725  */
726 #define MMCAM_CAMERA_RECORDING_MOTION_RATE      "camera-recording-motion-rate"
727
728 /**
729  * Frames per second. This is an integer field
730  *
731  */
732 #define MMCAM_CAMERA_FPS                        "camera-fps"
733
734 /**
735  * Width of preview stream.
736  */
737 #define MMCAM_CAMERA_WIDTH                      "camera-width"
738
739 /**
740  * Height of preview stream.
741  */
742 #define MMCAM_CAMERA_HEIGHT                     "camera-height"
743
744 /**
745  * Width of video stream.
746  */
747 #define MMCAM_VIDEO_WIDTH                       "video-width"
748
749 /**
750  * Height of video stream.
751  */
752 #define MMCAM_VIDEO_HEIGHT                      "video-height"
753
754 /**
755  * Digital zoom level.
756  */
757 #define MMCAM_CAMERA_DIGITAL_ZOOM               "camera-digital-zoom"
758
759 /**
760  * Optical zoom level.
761  */
762 #define MMCAM_CAMERA_OPTICAL_ZOOM               "camera-optical-zoom"
763
764 /**
765  * Focus mode
766  * @see         MMCamcorderFocusMode
767  */
768 #define MMCAM_CAMERA_FOCUS_MODE                 "camera-focus-mode"
769
770 /**
771  * Focus level
772  */
773 #define MMCAM_CAMERA_FOCUS_LEVEL                "camera-focus-level"
774
775 /**
776  * AF Scan range
777  * @see         MMCamcorderAutoFocusType
778  */
779 #define MMCAM_CAMERA_AF_SCAN_RANGE              "camera-af-scan-range"
780
781 /**
782  * X coordinate of touching position. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
783  * @see         MMCamcorderAutoFocusType
784  */
785 #define MMCAM_CAMERA_AF_TOUCH_X                 "camera-af-touch-x"
786
787 /**
788  * Y coordinate of touching position. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
789  * @see         MMCamcorderAutoFocusType
790  */
791 #define MMCAM_CAMERA_AF_TOUCH_Y                 "camera-af-touch-y"
792
793 /**
794  * Width of touching area. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
795  * @see         MMCamcorderAutoFocusType
796  */
797 #define MMCAM_CAMERA_AF_TOUCH_WIDTH             "camera-af-touch-width"
798
799 /**
800  * Height of touching area. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
801  * @see         MMCamcorderAutoFocusType
802  */
803 #define MMCAM_CAMERA_AF_TOUCH_HEIGHT            "camera-af-touch-height"
804
805 /**
806  * Exposure mode
807  * @see         MMCamcorderAutoExposureType
808  */
809 #define MMCAM_CAMERA_EXPOSURE_MODE              "camera-exposure-mode"
810
811 /**
812  * Exposure value
813  */
814 #define MMCAM_CAMERA_EXPOSURE_VALUE             "camera-exposure-value"
815
816 /**
817  * f number of camera
818  */
819 #define MMCAM_CAMERA_F_NUMBER                   "camera-f-number"
820
821 /**
822  * Shutter speed
823  */
824 #define MMCAM_CAMERA_SHUTTER_SPEED              "camera-shutter-speed"
825
826 /**
827  * ISO of capturing image
828  * @see         MMCamcorderISOType
829  */
830 #define MMCAM_CAMERA_ISO                        "camera-iso"
831
832 /**
833  * Wide dynamic range.
834  * @see         MMCamcorderWDRMode
835  */
836 #define MMCAM_CAMERA_WDR                        "camera-wdr"
837
838 /**
839  * Focal length of camera lens.
840  */
841 #define MMCAM_CAMERA_FOCAL_LENGTH               "camera-focal-length"
842
843 /**
844  * Anti Handshake
845  * @see         MMCamcorderAHSMode
846  */
847 #define MMCAM_CAMERA_ANTI_HANDSHAKE             "camera-anti-handshake"
848
849 /**
850  * Video Stabilization
851  * @see         MMCamcorderVideoStabilizationMode
852  */
853 #define MMCAM_CAMERA_VIDEO_STABILIZATION        "camera-video-stabilization"
854
855 /**
856  * FPS Auto. When you set true to this attribute, FPS will vary depending on the amount of the light.
857  */
858 #define MMCAM_CAMERA_FPS_AUTO                   "camera-fps-auto"
859
860 /**
861  * Rotation angle of video input stream.
862  * @see         MMVideoInputRotationType (in mm_types.h)
863  */
864 #define MMCAM_CAMERA_ROTATION                   "camera-rotation"
865
866 /**
867  * HDR(High Dynamic Range) Capture mode
868  * @see         MMCamcorderHDRMode
869  */
870 #define MMCAM_CAMERA_HDR_CAPTURE                "camera-hdr-capture"
871
872 /**
873  * Bitrate of Audio Encoder
874  */
875 #define MMCAM_AUDIO_ENCODER_BITRATE             "audio-encoder-bitrate"
876
877 /**
878  * Bitrate of Video Encoder
879  */
880 #define MMCAM_VIDEO_ENCODER_BITRATE             "video-encoder-bitrate"
881
882 /**
883  * Encoding quality of Image codec
884  */
885 #define MMCAM_IMAGE_ENCODER_QUALITY             "image-encoder-quality"
886
887 /**
888  * Brightness level
889  */
890 #define MMCAM_FILTER_BRIGHTNESS                 "filter-brightness"
891
892 /**
893  * Contrast level
894  */
895 #define MMCAM_FILTER_CONTRAST                   "filter-contrast"
896
897 /**
898  * White balance
899  * @see         MMCamcorderWhiteBalanceType
900  */
901 #define MMCAM_FILTER_WB                         "filter-wb"
902
903 /**
904  * Color tone. (Color effect)
905  * @see         MMCamcorderColorToneType
906  */
907 #define MMCAM_FILTER_COLOR_TONE                 "filter-color-tone"
908
909 /**
910  * Scene mode (Program mode)
911  * @see         MMCamcorderSceneModeType
912  */
913 #define MMCAM_FILTER_SCENE_MODE                 "filter-scene-mode"
914
915 /**
916  * Saturation  level
917  */
918 #define MMCAM_FILTER_SATURATION                 "filter-saturation"
919
920 /**
921  * Hue  level
922  */
923 #define MMCAM_FILTER_HUE                        "filter-hue"
924
925 /**
926  * Sharpness  level
927  */
928 #define MMCAM_FILTER_SHARPNESS                  "filter-sharpness"
929
930 /**
931  * Pixel format that you want to capture. If you set MM_PIXEL_FORMAT_ENCODED,
932  * the result will be encoded by image codec specified in #MMCAM_IMAGE_ENCODER.
933  * If not, the result will be raw data.
934  *
935  * @see         MMPixelFormatType (in mm_types.h)
936  */
937 #define MMCAM_CAPTURE_FORMAT                    "capture-format"
938
939 /**
940  * Width of the image that you want to capture
941  */
942 #define MMCAM_CAPTURE_WIDTH                     "capture-width"
943
944 /**
945  * Height of the image that you want to capture
946
947  */
948 #define MMCAM_CAPTURE_HEIGHT                    "capture-height"
949
950 /**
951  * Total count of capturing. If you set this, it will capture multiple time.
952  */
953 #define MMCAM_CAPTURE_COUNT                     "capture-count"
954
955 /**
956  * Interval between each capturing on Multishot.
957  */
958 #define MMCAM_CAPTURE_INTERVAL                  "capture-interval"
959
960 /**
961  * Set this when you want to stop multishot immediately.
962  */
963 #define MMCAM_CAPTURE_BREAK_CONTINUOUS_SHOT     "capture-break-cont-shot"
964
965 /**
966  * Raw data of captured image which resolution is same as preview.
967  * This is READ-ONLY attribute and only available in capture callback.
968  * This should be used after casted as MMCamcorderCaptureDataType.
969  */
970 #define MMCAM_CAPTURED_SCREENNAIL               "captured-screennail"
971
972 /**
973  * Raw data of EXIF. This is READ-ONLY attribute and only available in capture callback.
974  */
975 #define MMCAM_CAPTURED_EXIF_RAW_DATA            "captured-exif-raw-data"
976
977 /**
978  * Pointer of display buffer or ID of xwindow.
979  */
980 #define MMCAM_DISPLAY_HANDLE                    "display-handle"
981
982 /**
983  * Device of display.
984  * @see         MMDisplayDeviceType (in mm_types.h)
985  */
986 #define MMCAM_DISPLAY_DEVICE                    "display-device"
987
988 /**
989  * Surface of display.
990  * @see         MMDisplaySurfaceType (in mm_types.h)
991  */
992 #define MMCAM_DISPLAY_SURFACE                    "display-surface"
993
994 /**
995  * Mode of display.
996  * @see         MMDisplayModeType (in mm_types.h)
997  */
998 #define MMCAM_DISPLAY_MODE                       "display-mode"
999
1000 /**
1001  * X position of display rectangle.
1002  * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1003  * @see         MMCamcorderGeometryMethod
1004  */
1005 #define MMCAM_DISPLAY_RECT_X                    "display-rect-x"
1006
1007 /**
1008  * Y position of display rectangle
1009  * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1010  * @see         MMCamcorderGeometryMethod
1011  */
1012 #define MMCAM_DISPLAY_RECT_Y                    "display-rect-y"
1013
1014 /**
1015  * Width of display rectangle
1016  * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1017  * @see         MMCamcorderGeometryMethod
1018  */
1019 #define MMCAM_DISPLAY_RECT_WIDTH                "display-rect-width"
1020
1021 /**
1022  * Height of display rectangle
1023  * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1024  * @see         MMCamcorderGeometryMethod
1025  */
1026 #define MMCAM_DISPLAY_RECT_HEIGHT               "display-rect-height"
1027
1028 /**
1029  * X position of source rectangle. When you want to crop the source, you can set the area with this value.
1030  */
1031 #define MMCAM_DISPLAY_SOURCE_X                  "display-src-x"
1032
1033 /**
1034  * Y position of source rectangle. When you want to crop the source, you can set the area with this value.
1035  */
1036 #define MMCAM_DISPLAY_SOURCE_Y                  "display-src-y"
1037
1038 /**
1039  * Width of source rectangle. When you want to crop the source, you can set the area with this value.
1040  */
1041 #define MMCAM_DISPLAY_SOURCE_WIDTH              "display-src-width"
1042
1043 /**
1044  * Height of source rectangle. When you want to crop the source, you can set the area with this value.
1045  */
1046 #define MMCAM_DISPLAY_SOURCE_HEIGHT             "display-src-height"
1047
1048 /**
1049  * Rotation angle of display.
1050  * @see         MMDisplayRotationType (in mm_types.h)
1051  */
1052 #define MMCAM_DISPLAY_ROTATION                  "display-rotation"
1053
1054 /**
1055  * Flip of display.
1056  * @see         MMFlipType (in mm_types.h)
1057  */
1058 #define MMCAM_DISPLAY_FLIP                      "display-flip"
1059
1060 /**
1061  * Visible of display.
1062  */
1063 #define MMCAM_DISPLAY_VISIBLE                   "display-visible"
1064
1065 /**
1066  * A scale of displayed image. Available value is like below.
1067  * @see         MMDisplayScaleType (in mm_types.h)
1068  */
1069 #define MMCAM_DISPLAY_SCALE                     "display-scale"
1070
1071 /**
1072  * A method that describes a form of geometry for display.
1073  * @see         MMCamcorderGeometryMethod
1074  */
1075 #define MMCAM_DISPLAY_GEOMETRY_METHOD           "display-geometry-method"
1076
1077 /**
1078  * A videosink name of evas surface.
1079  * This is READ-ONLY attribute.
1080  */
1081 #define MMCAM_DISPLAY_EVAS_SURFACE_SINK         "display-evas-surface-sink"
1082
1083 /**
1084  * This attribute is only available if value of MMCAM_DISPLAY_EVAS_SURFACE_SINK "evaspixmapsink"
1085  */
1086 #define MMCAM_DISPLAY_EVAS_DO_SCALING           "display-evas-do-scaling"
1087
1088 /**
1089  * Target filename. Only used in Audio/Video recording. This is not used for capturing.
1090  */
1091 #define MMCAM_TARGET_FILENAME                   "target-filename"
1092
1093 /**
1094  * Maximum size(Kbyte) of recording file. If the size of file reaches this value,
1095  * camcorder will send 'MM_MESSAGE_CAMCORDER_MAX_SIZE' message.
1096  */
1097 #define MMCAM_TARGET_MAX_SIZE                   "target-max-size"
1098
1099 /**
1100  * Time limit(Second) of recording file. If the elapsed time of recording reaches this value,
1101  * camcorder will send 'MM_MESSAGE_CAMCORDER_TIME_LIMIT' message.
1102  */
1103 #define MMCAM_TARGET_TIME_LIMIT                 "target-time-limit"
1104
1105 /**
1106  * Enable to write tags. If this value is FALSE, none of tag information will be written to captured file.
1107  */
1108 #define MMCAM_TAG_ENABLE                        "tag-enable"
1109
1110 /**
1111  * Image description.
1112  */
1113 #define MMCAM_TAG_IMAGE_DESCRIPTION             "tag-image-description"
1114
1115 /**
1116  * Orientation of captured image
1117  * @see         MMCamcorderTagOrientation
1118  */
1119 #define MMCAM_TAG_ORIENTATION                   "tag-orientation"
1120
1121 /**
1122  * Orientation of captured video
1123  * @see         MMCamcorderTagVideoOrientation
1124  */
1125 #define MMCAM_TAG_VIDEO_ORIENTATION            "tag-video-orientation"
1126
1127 /**
1128  * software name and version
1129  */
1130 #define MMCAM_TAG_SOFTWARE                      "tag-software"
1131
1132 /**
1133  * Enable to write tags related to GPS. If this value is TRUE, tags related GPS information will be written to captured file.
1134  */
1135 #define MMCAM_TAG_GPS_ENABLE                    "tag-gps-enable"
1136
1137 /**
1138  * Latitude of captured position. GPS information.
1139  */
1140 #define MMCAM_TAG_LATITUDE                      "tag-latitude"
1141
1142 /**
1143  * Longitude of captured position. GPS information.
1144  */
1145 #define MMCAM_TAG_LONGITUDE                     "tag-longitude"
1146
1147 /**
1148  * Altitude of captured position. GPS information.
1149  */
1150 #define MMCAM_TAG_ALTITUDE                      "tag-altitude"
1151
1152 /**
1153  * Strobe control
1154  * @see         MMCamcorderStrobeControl
1155  */
1156 #define MMCAM_STROBE_CONTROL                    "strobe-control"
1157
1158 /**
1159  * Operation Mode of strobe
1160  * @see         MMCamcorderStrobeMode
1161  */
1162 #define MMCAM_STROBE_MODE                       "strobe-mode"
1163
1164 /**
1165  * Brightness of strobe
1166  */
1167 #define MMCAM_STROBE_BRIGHTNESS                 "strobe-brightness"
1168
1169 /**
1170  * Detection mode
1171  * @see         MMCamcorderDetectMode
1172  */
1173 #define MMCAM_DETECT_MODE                       "detect-mode"
1174
1175 /**
1176  * Total number of detected object
1177  */
1178 #define MMCAM_DETECT_NUMBER                     "detect-number"
1179
1180 /**
1181  * You can use this attribute to select one of detected objects.
1182  */
1183 #define MMCAM_DETECT_FOCUS_SELECT               "detect-focus-select"
1184
1185 /**
1186  * Recommend preview format for capture
1187  */
1188 #define MMCAM_RECOMMEND_PREVIEW_FORMAT_FOR_CAPTURE     "recommend-preview-format-for-capture"
1189
1190 /**
1191  * Recommend preview format for recording
1192  */
1193 #define MMCAM_RECOMMEND_PREVIEW_FORMAT_FOR_RECORDING   "recommend-preview-format-for-recording"
1194
1195 /**
1196  * Recommend rotation of display
1197  */
1198 #define MMCAM_RECOMMEND_DISPLAY_ROTATION        "recommend-display-rotation"
1199
1200 /**
1201  * Recommend width of camera preview.
1202  * This attribute can be used with #mm_camcorder_get_attribute_info and #MMCamcorderPreviewType.
1203  * @see         mm_camcorder_get_attribute_info, MMCamcorderPreviewType
1204  */
1205 #define MMCAM_RECOMMEND_CAMERA_WIDTH            "recommend-camera-width"
1206
1207 /**
1208  * Recommend height of camera preview
1209  * This attribute can be used with #mm_camcorder_get_attribute_info and #MMCamcorderPreviewType.
1210  * @see         mm_camcorder_get_attribute_info, MMCamcorderPreviewType
1211  */
1212 #define MMCAM_RECOMMEND_CAMERA_HEIGHT           "recommend-camera-height"
1213
1214 /**
1215  * Enable to play capture sound
1216  */
1217 #define MMCAM_CAPTURE_SOUND_ENABLE              "capture-sound-enable"
1218
1219 /**
1220  * Flip of video input stream.
1221  * @see         MMFlipType (in mm_types.h)
1222  */
1223 #define MMCAM_CAMERA_FLIP                       "camera-flip"
1224
1225 /**
1226  * Support Zero Shutter Lag capture
1227  */
1228 #define MMCAM_SUPPORT_ZSL_CAPTURE               "support-zsl-capture"
1229
1230 /**
1231 * Support zero copy format
1232 */
1233 #define MMCAM_SUPPORT_ZERO_COPY_FORMAT          "support-zero-copy-format"
1234
1235 /**
1236 * Support media packet callback
1237 */
1238 #define MMCAM_SUPPORT_MEDIA_PACKET_PREVIEW_CB   "support-media-packet-preview-cb"
1239
1240 /**
1241 * Support user buffer for zero copy
1242 */
1243 #define MMCAM_SUPPORT_USER_BUFFER               "support-user-buffer"
1244
1245 /**
1246 * Buffer fd from user
1247 */
1248 #define MMCAM_USER_BUFFER_FD                    "user-buffer-fd"
1249
1250 /**
1251  * Enable to write tags for recorded file
1252  */
1253 #define MMCAM_RECORDER_TAG_ENABLE               "recorder-tag-enable"
1254
1255 /**
1256  * Determines the socket stream path
1257  */
1258 #define MMCAM_DISPLAY_SOCKET_PATH               "display-socket-path"
1259
1260 /**
1261  * Client PID
1262  */
1263 #define MMCAM_CLIENT_PID                        "client-pid"
1264
1265 /**
1266  * Root directory of application
1267  */
1268 #define MMCAM_ROOT_DIRECTORY                    "root-directory"
1269
1270 /**
1271  * Bitrate for encoded preview stream
1272  */
1273 #define MMCAM_ENCODED_PREVIEW_BITRATE           "encoded-preview-bitrate"
1274
1275 /**
1276  * GOP interval for encoded preview stream
1277  */
1278 #define MMCAM_ENCODED_PREVIEW_GOP_INTERVAL      "encoded-preview-gop-interval"
1279
1280 /**
1281  * The distance to move the camera horizontally and physically
1282  */
1283 #define MMCAM_CAMERA_PAN_MECHA                  "camera-pan-mecha"
1284
1285 /**
1286  * The distance to move the camera horizontally
1287  */
1288 #define MMCAM_CAMERA_PAN_ELEC                   "camera-pan-elec"
1289
1290 /**
1291  * The distance to move the camera vertically and physically
1292  */
1293 #define MMCAM_CAMERA_TILT_MECHA                 "camera-tilt-mecha"
1294
1295 /**
1296  * The distance to move the camera vertically
1297  */
1298 #define MMCAM_CAMERA_TILT_ELEC                  "camera-tilt-elec"
1299
1300 /**
1301  * The type of PTZ(Pan Tilt Zoom). Mechanical or Electronic PTZ.
1302  */
1303 #define MMCAM_CAMERA_PTZ_TYPE                   "camera-ptz-type"
1304
1305 /**
1306  * Stream type and index for sound route
1307  */
1308 #define MMCAM_SOUND_STREAM_TYPE                 "sound-stream-type"
1309 #define MMCAM_SOUND_STREAM_INDEX                "sound-stream-index"
1310
1311 /**
1312  * The display reuse flag and sink element pointer
1313  */
1314 #define MMCAM_DISPLAY_REUSE_HINT                "display-reuse-hint"
1315 #define MMCAM_DISPLAY_REUSE_ELEMENT             "display-reuse-element"
1316
1317 /**
1318  * The GDBus connection from outside
1319  */
1320 #define MMCAM_GDBUS_CONNECTION                  "gdbus-connection"
1321
1322 /**
1323  * Replay gain enable
1324  */
1325 #define MMCAM_AUDIO_REPLAY_GAIN_ENABLE          "audio-replay-gain-enable"
1326
1327 /**
1328  * Reference level for replay gain
1329  */
1330 #define MMCAM_AUDIO_REPLAY_GAIN_REFERENCE_LEVEL "audio-replay-gain-reference-level"
1331
1332 /**
1333  * Platform privilege name for camera device
1334  */
1335 #define MMCAM_PLATFORM_PRIVILEGE_CAMERA         "platform-privilege-camera"
1336
1337 /**
1338  * The name of videosrc element
1339  */
1340 #define MMCAM_VIDEOSRC_ELEMENT_NAME             "videosrc-element-name"
1341
1342 /**
1343  * The name of audiosrc element
1344  */
1345 #define MMCAM_AUDIOSRC_ELEMENT_NAME             "audiosrc-element-name"
1346
1347 /**
1348  * Extra preview enable
1349  */
1350 #define MMCAM_EXTRA_PREVIEW_ENABLE              "extra-preview-enable"
1351
1352
1353
1354 /*=======================================================================================
1355 | ENUM DEFINITIONS                                                                      |
1356 ========================================================================================*/
1357 /**
1358  * An enumeration for camcorder states.
1359  */
1360 typedef enum {
1361         MM_CAMCORDER_STATE_NONE,                /**< Camcorder is not created yet */
1362         MM_CAMCORDER_STATE_NULL,                /**< Camcorder is created, but not initialized yet */
1363         MM_CAMCORDER_STATE_READY,               /**< Camcorder is ready to capture */
1364         MM_CAMCORDER_STATE_PREPARE,             /**< Camcorder is prepared to capture (Preview) */
1365         MM_CAMCORDER_STATE_CAPTURING,           /**< Camcorder is now capturing still images */
1366         MM_CAMCORDER_STATE_RECORDING,           /**< Camcorder is now recording */
1367         MM_CAMCORDER_STATE_PAUSED,              /**< Camcorder is paused while recording */
1368         MM_CAMCORDER_STATE_NUM,                 /**< Number of camcorder states */
1369 } MMCamcorderStateType;
1370
1371 /**
1372  * An enumeration for camcorder mode.
1373  */
1374 typedef enum {
1375         MM_CAMCORDER_MODE_VIDEO_CAPTURE = 0,    /**< Video recording and Image capture mode */
1376         MM_CAMCORDER_MODE_AUDIO,                /**< Audio recording mode */
1377 } MMCamcorderModeType;
1378
1379 /**
1380  * An enumeration for facing direction.
1381  */
1382 typedef enum {
1383         MM_CAMCORDER_CAMERA_FACING_DIRECTION_REAR = 0, /**< Facing direction of camera is REAR */
1384         MM_CAMCORDER_CAMERA_FACING_DIRECTION_FRONT,    /**< Facing direction of camera is FRONT */
1385 } MMCamcorderCameraFacingDirection;
1386
1387
1388 /**
1389  * An enumeration of Audio Format.
1390  */
1391 typedef enum {
1392         MM_CAMCORDER_AUDIO_FORMAT_PCM_U8 = 0,           /**< unsigned 8bit audio */
1393         MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE = 2,       /**< signed 16bit audio. Little endian. */
1394 } MMCamcorderAudioFormat;
1395
1396
1397 /**
1398  * An enumeration for color tone. Color tone provides an impression of
1399  * seeing through a tinted glass.
1400  */
1401 enum MMCamcorderColorToneType {
1402         MM_CAMCORDER_COLOR_TONE_NONE = 0,               /**< None */
1403         MM_CAMCORDER_COLOR_TONE_MONO,                   /**< Mono */
1404         MM_CAMCORDER_COLOR_TONE_SEPIA,                  /**< Sepia */
1405         MM_CAMCORDER_COLOR_TONE_NEGATIVE,               /**< Negative */
1406         MM_CAMCORDER_COLOR_TONE_BLUE,                   /**< Blue */
1407         MM_CAMCORDER_COLOR_TONE_GREEN,                  /**< Green */
1408         MM_CAMCORDER_COLOR_TONE_AQUA,                   /**< Aqua */
1409         MM_CAMCORDER_COLOR_TONE_VIOLET,                 /**< Violet */
1410         MM_CAMCORDER_COLOR_TONE_ORANGE,                 /**< Orange */
1411         MM_CAMCORDER_COLOR_TONE_GRAY,                   /**< Gray */
1412         MM_CAMCORDER_COLOR_TONE_RED,                    /**< Red */
1413         MM_CAMCORDER_COLOR_TONE_ANTIQUE,                /**< Antique */
1414         MM_CAMCORDER_COLOR_TONE_WARM,                   /**< Warm */
1415         MM_CAMCORDER_COLOR_TONE_PINK,                   /**< Pink */
1416         MM_CAMCORDER_COLOR_TONE_YELLOW,                 /**< Yellow */
1417         MM_CAMCORDER_COLOR_TONE_PURPLE,                 /**< Purple */
1418         MM_CAMCORDER_COLOR_TONE_EMBOSS,                 /**< Emboss */
1419         MM_CAMCORDER_COLOR_TONE_OUTLINE,                /**< Outline */
1420         MM_CAMCORDER_COLOR_TONE_SOLARIZATION,           /**< Solarization */
1421         MM_CAMCORDER_COLOR_TONE_SKETCH,                 /**< Sketch */
1422         MM_CAMCORDER_COLOR_TONE_WASHED,                 /**< Washed */
1423         MM_CAMCORDER_COLOR_TONE_VINTAGE_WARM,           /**< Vintage warm */
1424         MM_CAMCORDER_COLOR_TONE_VINTAGE_COLD,           /**< Vintage cold */
1425         MM_CAMCORDER_COLOR_TONE_POSTERIZATION,          /**< Posterization */
1426         MM_CAMCORDER_COLOR_TONE_CARTOON,                /**< Cartoon */
1427         MM_CAMCORDER_COLOR_TONE_SELECTIVE_RED,          /**< Selective color - Red */
1428         MM_CAMCORDER_COLOR_TONE_SELECTIVE_GREEN,        /**< Selective color - Green */
1429         MM_CAMCORDER_COLOR_TONE_SELECTIVE_BLUE,         /**< Selective color - Blue */
1430         MM_CAMCORDER_COLOR_TONE_SELECTIVE_YELLOW,       /**< Selective color - Yellow */
1431         MM_CAMCORDER_COLOR_TONE_SELECTIVE_RED_YELLOW,   /**< Selective color - Red and Yellow */
1432 };
1433
1434
1435 /**
1436  * An enumeration for white balance. White Balance is the control that adjusts
1437  * the camcorder's color sensitivity to match the prevailing color of white
1438  * outdoor light, yellower indoor light, or (sometimes) greenish fluorescent
1439  * light. White balance may be set either automatically or manually. White balance
1440  * may be set "incorrectly" on purpose to achieve special effects.
1441  */
1442 enum MMCamcorderWhiteBalanceType {
1443         MM_CAMCORDER_WHITE_BALANCE_NONE = 0,            /**< None */
1444         MM_CAMCORDER_WHITE_BALANCE_AUTOMATIC,           /**< Automatic */
1445         MM_CAMCORDER_WHITE_BALANCE_DAYLIGHT,            /**< Daylight */
1446         MM_CAMCORDER_WHITE_BALANCE_CLOUDY,              /**< Cloudy */
1447         MM_CAMCORDER_WHITE_BALANCE_FLUORESCENT,         /**< Fluorescent */
1448         MM_CAMCORDER_WHITE_BALANCE_INCANDESCENT,        /**< Incandescent */
1449         MM_CAMCORDER_WHITE_BALANCE_SHADE,               /**< Shade */
1450         MM_CAMCORDER_WHITE_BALANCE_HORIZON,             /**< Horizon */
1451         MM_CAMCORDER_WHITE_BALANCE_FLASH,               /**< Flash */
1452         MM_CAMCORDER_WHITE_BALANCE_CUSTOM,              /**< Custom */
1453 };
1454
1455
1456 /**
1457  * An enumeration for scene mode. Scene mode gives the environment condition
1458  * for operating camcorder. The mode of operation can be in daylight, night and
1459  * backlight. It can be an automatic setting also.
1460  */
1461 enum MMCamcorderSceneModeType {
1462         MM_CAMCORDER_SCENE_MODE_NORMAL = 0,     /**< Normal */
1463         MM_CAMCORDER_SCENE_MODE_PORTRAIT,       /**< Portrait */
1464         MM_CAMCORDER_SCENE_MODE_LANDSCAPE,      /**< Landscape */
1465         MM_CAMCORDER_SCENE_MODE_SPORTS,         /**< Sports */
1466         MM_CAMCORDER_SCENE_MODE_PARTY_N_INDOOR, /**< Party & indoor */
1467         MM_CAMCORDER_SCENE_MODE_BEACH_N_INDOOR, /**< Beach & indoor */
1468         MM_CAMCORDER_SCENE_MODE_SUNSET,         /**< Sunset */
1469         MM_CAMCORDER_SCENE_MODE_DUSK_N_DAWN,    /**< Dusk & dawn */
1470         MM_CAMCORDER_SCENE_MODE_FALL_COLOR,     /**< Fall */
1471         MM_CAMCORDER_SCENE_MODE_NIGHT_SCENE,    /**< Night scene */
1472         MM_CAMCORDER_SCENE_MODE_FIREWORK,       /**< Firework */
1473         MM_CAMCORDER_SCENE_MODE_TEXT,           /**< Text */
1474         MM_CAMCORDER_SCENE_MODE_SHOW_WINDOW,    /**< Show window */
1475         MM_CAMCORDER_SCENE_MODE_CANDLE_LIGHT,   /**< Candle light */
1476         MM_CAMCORDER_SCENE_MODE_BACKLIGHT,      /**< Backlight */
1477         MM_CAMCORDER_SCENE_MODE_AQUA,           /**< Aqua */
1478 };
1479
1480
1481 /**
1482  * An enumeration for focusing .
1483  */
1484 enum MMCamcorderFocusMode {
1485         MM_CAMCORDER_FOCUS_MODE_NONE = 0,       /**< Focus mode is None */
1486         MM_CAMCORDER_FOCUS_MODE_PAN,            /**< Pan focus mode*/
1487         MM_CAMCORDER_FOCUS_MODE_AUTO,           /**< Autofocus mode*/
1488         MM_CAMCORDER_FOCUS_MODE_MANUAL,         /**< Manual focus mode*/
1489         MM_CAMCORDER_FOCUS_MODE_TOUCH_AUTO,     /**< Touch Autofocus mode*/
1490         MM_CAMCORDER_FOCUS_MODE_CONTINUOUS,     /**< Continuous Autofocus mode*/
1491 };
1492
1493
1494 /**
1495  * An enumeration for auto focus scan range (af scan range)
1496  */
1497 enum MMCamcorderAutoFocusType {
1498         MM_CAMCORDER_AUTO_FOCUS_NONE = 0,       /**< Scan autofocus is not set */
1499         MM_CAMCORDER_AUTO_FOCUS_NORMAL,         /**< Scan autofocus normally*/
1500         MM_CAMCORDER_AUTO_FOCUS_MACRO,          /**< Scan autofocus in macro mode(close distance)*/
1501         MM_CAMCORDER_AUTO_FOCUS_FULL,           /**< Scan autofocus in full mode(all range scan, limited by dev spec)*/
1502 };
1503
1504
1505 /**
1506  * An enumeration for focus state.
1507  * When 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED' is delivered through 'MMMessageCallback',
1508  * this enumeration will be set to 'code' of MMMessageParamType.
1509  */
1510 enum MMCamcorderFocusStateType {
1511         MM_CAMCORDER_FOCUS_STATE_RELEASED = 0,  /**< Focus released.*/
1512         MM_CAMCORDER_FOCUS_STATE_ONGOING,       /**< Focus in progress*/
1513         MM_CAMCORDER_FOCUS_STATE_FOCUSED,       /**< Focus success*/
1514         MM_CAMCORDER_FOCUS_STATE_FAILED,        /**< Focus failed*/
1515 };
1516
1517
1518 /**
1519  * An enumeration for ISO.
1520  */
1521 enum MMCamcorderISOType {
1522         MM_CAMCORDER_ISO_AUTO = 0,              /**< ISO auto mode*/
1523         MM_CAMCORDER_ISO_50,                    /**< ISO 50*/
1524         MM_CAMCORDER_ISO_100,                   /**< ISO 100*/
1525         MM_CAMCORDER_ISO_200,                   /**< ISO 200*/
1526         MM_CAMCORDER_ISO_400,                   /**< ISO 400*/
1527         MM_CAMCORDER_ISO_800,                   /**< ISO 800*/
1528         MM_CAMCORDER_ISO_1600,                  /**< ISO 1600*/
1529         MM_CAMCORDER_ISO_3200,                  /**< ISO 3200*/
1530         MM_CAMCORDER_ISO_6400,                  /**< ISO 6400*/
1531         MM_CAMCORDER_ISO_12800,                 /**< ISO 12800*/
1532 };
1533
1534 /**
1535  * An enumeration for Automatic exposure.
1536  */
1537 enum MMCamcorderAutoExposureType {
1538         MM_CAMCORDER_AUTO_EXPOSURE_OFF = 0,     /**< AE off*/
1539         MM_CAMCORDER_AUTO_EXPOSURE_ALL,         /**< AE on, XXX mode*/
1540         MM_CAMCORDER_AUTO_EXPOSURE_CENTER_1,    /**< AE on, XXX mode*/
1541         MM_CAMCORDER_AUTO_EXPOSURE_CENTER_2,    /**< AE on, XXX mode*/
1542         MM_CAMCORDER_AUTO_EXPOSURE_CENTER_3,    /**< AE on, XXX mode*/
1543         MM_CAMCORDER_AUTO_EXPOSURE_SPOT_1,      /**< AE on, XXX mode*/
1544         MM_CAMCORDER_AUTO_EXPOSURE_SPOT_2,      /**< AE on, XXX mode*/
1545         MM_CAMCORDER_AUTO_EXPOSURE_CUSTOM_1,    /**< AE on, XXX mode*/
1546         MM_CAMCORDER_AUTO_EXPOSURE_CUSTOM_2,    /**< AE on, XXX mode*/
1547 };
1548
1549
1550 /**
1551  * An enumeration for WDR mode .
1552  */
1553 enum MMCamcorderWDRMode {
1554         MM_CAMCORDER_WDR_OFF = 0,               /**< WDR OFF*/
1555         MM_CAMCORDER_WDR_ON,                    /**< WDR ON*/
1556         MM_CAMCORDER_WDR_AUTO,                  /**< WDR AUTO*/
1557 };
1558
1559
1560 /**
1561  * An enumeration for HDR capture mode
1562  */
1563 enum MMCamcorderHDRMode {
1564         MM_CAMCORDER_HDR_OFF = 0,               /**< HDR OFF */
1565         MM_CAMCORDER_HDR_ON,                    /**< HDR ON and no original data - capture callback will be come once */
1566         MM_CAMCORDER_HDR_ON_AND_ORIGINAL,       /**< HDR ON and original data - capture callback will be come twice(1st:Original, 2nd:HDR) */
1567 };
1568
1569
1570 /**
1571  * An enumeration for Anti-handshake mode .
1572  */
1573 enum MMCamcorderAHSMode {
1574         MM_CAMCORDER_AHS_OFF = 0,               /**< AHS OFF*/
1575         MM_CAMCORDER_AHS_ON,                    /**< AHS ON*/
1576         MM_CAMCORDER_AHS_AUTO,                  /**< AHS AUTO*/
1577         MM_CAMCORDER_AHS_MOVIE,                 /**< AHS MOVIE*/
1578 };
1579
1580
1581 /**
1582  * An enumeration for Video stabilization mode
1583  */
1584 enum MMCamcorderVideoStabilizationMode {
1585         MM_CAMCORDER_VIDEO_STABILIZATION_OFF = 0,       /**< Video Stabilization OFF*/
1586         MM_CAMCORDER_VIDEO_STABILIZATION_ON,            /**< Video Stabilization ON*/
1587 };
1588
1589
1590 /**
1591  * Geometry method for camcorder display.
1592  */
1593 enum MMCamcorderGeometryMethod {
1594         MM_CAMCORDER_LETTER_BOX = 0,            /**< Letter box*/
1595         MM_CAMCORDER_ORIGIN_SIZE,               /**< Origin size*/
1596         MM_CAMCORDER_FULL,                      /**< full-screen*/
1597         MM_CAMCORDER_CROPPED_FULL,              /**< Cropped full-screen*/
1598         MM_CAMCORDER_ORIGIN_OR_LETTER,          /**< Origin size or Letter box*/
1599         MM_CAMCORDER_CUSTOM_ROI,                /**< Explicitly described destination ROI*/
1600 };
1601
1602
1603 /**
1604  * An enumeration for orientation values of tag .
1605  */
1606 enum MMCamcorderTagOrientation {
1607         MM_CAMCORDER_TAG_ORT_NONE = 0,          /**< No Orientation.*/
1608         MM_CAMCORDER_TAG_ORT_0R_VT_0C_VL,       /**< The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side.*/
1609         MM_CAMCORDER_TAG_ORT_0R_VT_0C_VR,       /**< The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side.*/
1610         MM_CAMCORDER_TAG_ORT_0R_VB_0C_VR,       /**< The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side.*/
1611         MM_CAMCORDER_TAG_ORT_0R_VB_0C_VL,       /**< The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side.*/
1612         MM_CAMCORDER_TAG_ORT_0R_VL_0C_VT,       /**< The 0th row is the visual left-hand side of the image, and the 0th column is the visual top.*/
1613         MM_CAMCORDER_TAG_ORT_0R_VR_0C_VT,       /**< The 0th row is the visual right-hand side of the image, and the 0th column is the visual top.*/
1614         MM_CAMCORDER_TAG_ORT_0R_VR_0C_VB,       /**< The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom.*/
1615         MM_CAMCORDER_TAG_ORT_0R_VL_0C_VB,       /**< The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom.*/
1616 };
1617
1618 /**
1619  * An enumeration for captured video orientation values of tag .
1620  */
1621 enum MMCamcorderTagVideoOrientation {
1622         MM_CAMCORDER_TAG_VIDEO_ORT_NONE = 0,    /**< No Orientation.*/
1623         MM_CAMCORDER_TAG_VIDEO_ORT_90,          /**< 90 degree */
1624         MM_CAMCORDER_TAG_VIDEO_ORT_180, /**< 180 degree */
1625         MM_CAMCORDER_TAG_VIDEO_ORT_270, /**< 270 degree */
1626 };
1627
1628
1629
1630 /**
1631  * An enumeration for Strobe mode.
1632  */
1633 enum MMCamcorderStrobeMode {
1634         MM_CAMCORDER_STROBE_MODE_OFF = 0,               /**< Always off */
1635         MM_CAMCORDER_STROBE_MODE_ON,                    /**< Always splashes */
1636         MM_CAMCORDER_STROBE_MODE_AUTO,                  /**< Depending on intensity of light, strobe starts to flash. */
1637         MM_CAMCORDER_STROBE_MODE_REDEYE_REDUCTION,      /**< Red eye reduction. Multiple flash before capturing. */
1638         MM_CAMCORDER_STROBE_MODE_SLOW_SYNC,             /**< Slow sync. A type of curtain synchronization. */
1639         MM_CAMCORDER_STROBE_MODE_FRONT_CURTAIN,         /**< Front curtain. A type of curtain synchronization. */
1640         MM_CAMCORDER_STROBE_MODE_REAR_CURTAIN,          /**< Rear curtain. A type of curtain synchronization. */
1641         MM_CAMCORDER_STROBE_MODE_PERMANENT,             /**< keep turned on until turning off */
1642 };
1643
1644
1645 /**
1646  * An enumeration for Strobe Control.
1647  */
1648 enum MMCamcorderStrobeControl {
1649         MM_CAMCORDER_STROBE_CONTROL_OFF = 0,    /**< turn off the flash light */
1650         MM_CAMCORDER_STROBE_CONTROL_ON,         /**< turn on the flash light */
1651         MM_CAMCORDER_STROBE_CONTROL_CHARGE,     /**< charge the flash light */
1652 };
1653
1654
1655 /**
1656  * An enumeration for Detection mode.
1657  */
1658 enum MMCamcorderDetectMode {
1659         MM_CAMCORDER_DETECT_MODE_OFF = 0,       /**< turn detection off */
1660         MM_CAMCORDER_DETECT_MODE_ON,            /**< turn detection on */
1661 };
1662
1663
1664 /**
1665  * An enumeration for recommended preview resolution.
1666  */
1667 enum MMCamcorderPreviewType {
1668         MM_CAMCORDER_PREVIEW_TYPE_NORMAL = 0,   /**< normal ratio like 4:3 */
1669         MM_CAMCORDER_PREVIEW_TYPE_WIDE,         /**< wide ratio like 16:9 */
1670         MM_CAMCORDER_PREVIEW_TYPE_SQUARE,       /**< square ratio like 1:1 */
1671 };
1672
1673
1674 /**
1675  * An enumeration for log level.
1676  */
1677 enum MMCamcorderLogLevel {
1678         MM_CAMCORDER_LOG_LEVEL_CRITICAL = 0,
1679         MM_CAMCORDER_LOG_LEVEL_ERROR,
1680         MM_CAMCORDER_LOG_LEVEL_WARNING,
1681         MM_CAMCORDER_LOG_LEVEL_INFO,
1682         MM_CAMCORDER_LOG_LEVEL_DEBUG,
1683         MM_CAMCORDER_LOG_LEVEL_VERBOSE
1684 };
1685
1686
1687 /**********************************
1688 *          Attribute info         *
1689 **********************************/
1690 /**
1691  * An enumeration for attribute values types.
1692  */
1693 typedef enum {
1694         MM_CAM_ATTRS_TYPE_INVALID = -1,         /**< Type is invalid */
1695         MM_CAM_ATTRS_TYPE_INT,                  /**< Integer type attribute */
1696         MM_CAM_ATTRS_TYPE_DOUBLE,               /**< Double type attribute */
1697         MM_CAM_ATTRS_TYPE_STRING,               /**< UTF-8 String type attribute */
1698         MM_CAM_ATTRS_TYPE_DATA,                 /**< Pointer type attribute */
1699 } MMCamAttrsType;
1700
1701
1702 /**
1703  * An enumeration for attribute validation type.
1704  */
1705 typedef enum {
1706         MM_CAM_ATTRS_VALID_TYPE_INVALID = -1,   /**< Invalid validation type */
1707         MM_CAM_ATTRS_VALID_TYPE_NONE,           /**< Do not check validity */
1708         MM_CAM_ATTRS_VALID_TYPE_INT_ARRAY,      /**< validity checking type of integer array */
1709         MM_CAM_ATTRS_VALID_TYPE_INT_RANGE,      /**< validity checking type of integer range */
1710         MM_CAM_ATTRS_VALID_TYPE_DOUBLE_ARRAY,   /**< validity checking type of double array */
1711         MM_CAM_ATTRS_VALID_TYPE_DOUBLE_RANGE,   /**< validity checking type of double range */
1712 } MMCamAttrsValidType;
1713
1714
1715 /**
1716  * An enumeration for attribute access flag.
1717  */
1718 typedef enum {
1719         MM_CAM_ATTRS_FLAG_DISABLED = 0,         /**< None flag is set. This means the attribute is not allowed to use.  */
1720         MM_CAM_ATTRS_FLAG_READABLE = 1 << 0,    /**< Readable */
1721         MM_CAM_ATTRS_FLAG_WRITABLE = 1 << 1,    /**< Writable */
1722         MM_CAM_ATTRS_FLAG_MODIFIED = 1 << 2,    /**< Modified */
1723         MM_CAM_ATTRS_FLAG_RW = MM_CAM_ATTRS_FLAG_READABLE | MM_CAM_ATTRS_FLAG_WRITABLE, /**< Readable and Writable */
1724 } MMCamAttrsFlag;
1725
1726
1727 /**********************************
1728 *          Stream data            *
1729 **********************************/
1730 /**
1731  * An enumeration for stream data type.
1732  */
1733 typedef enum {
1734         MM_CAM_STREAM_DATA_YUV420 = 0,          /**< YUV420 Packed type - 1 plane */
1735         MM_CAM_STREAM_DATA_YUV422,              /**< YUV422 Packed type - 1 plane */
1736         MM_CAM_STREAM_DATA_YUV420SP,            /**< YUV420 SemiPlannar type - 2 planes */
1737         MM_CAM_STREAM_DATA_YUV420P,             /**< YUV420 Plannar type - 3 planes */
1738         MM_CAM_STREAM_DATA_YUV422P,             /**< YUV422 Plannar type - 3 planes */
1739         MM_CAM_STREAM_DATA_ENCODED,             /**< Encoded data type - 1 plane */
1740         MM_CAM_STREAM_DATA_DEPTH,               /**< Depth data type - 1 plane */
1741         MM_CAM_STREAM_DATA_RGB                  /**< RGB data type - 1 plane */
1742 } MMCamStreamData;
1743
1744
1745 /*=======================================================================================
1746 | STRUCTURE DEFINITIONS                                                                 |
1747 ========================================================================================*/
1748 /**
1749  * A structure for attribute information
1750  */
1751 typedef struct {
1752         MMCamAttrsType type;
1753         MMCamAttrsFlag flag;
1754         MMCamAttrsValidType validity_type;
1755
1756         /**
1757          * A union that describes validity of the attribute.
1758          * Only when type is 'MM_CAM_ATTRS_TYPE_INT' or 'MM_CAM_ATTRS_TYPE_DOUBLE',
1759          * the attribute can have validity.
1760          */
1761         union {
1762                 /**
1763                  * Validity structure for integer array.
1764                  */
1765                  struct {
1766                         int *array;             /**< a pointer of array */
1767                         int count;              /**< size of array */
1768                         int def;                /**< default value. Real value not index of array */
1769                 } int_array;
1770
1771                 /**
1772                  * Validity structure for integer range.
1773                  */
1774                 struct {
1775                         int min;                /**< minimum range */
1776                         int max;                /**< maximum range */
1777                         int def;                /**< default value */
1778                 } int_range;
1779
1780                 /**
1781                  * Validity structure for double array.
1782                  */
1783                  struct {
1784                         double *array;          /**< a pointer of array */
1785                         int count;              /**< size of array */
1786                         double def;             /**< default value. Real value not index of array */
1787                 } double_array;
1788
1789                 /**
1790                  * Validity structure for double range.
1791                  */
1792                 struct {
1793                         double min;             /**< minimum range */
1794                         double max;             /**< maximum range */
1795                         double def;             /**< default value */
1796                 } double_range;
1797         };
1798 } MMCamAttrsInfo;
1799
1800
1801 /* General Structure */
1802 /**
1803  * Structure for capture data.
1804  */
1805 typedef struct {
1806         void *data;                     /**< pointer of captured image */
1807         unsigned int length;            /**< length of captured image (in byte)*/
1808         MMPixelFormatType format;       /**< image format */
1809         int width;                      /**< width of captured image */
1810         int height;                     /**< height of captured image */
1811         int encoder_type;               /**< encoder type */
1812 } MMCamcorderCaptureDataType;
1813
1814
1815 /**
1816  * Structure for video stream data.
1817  */
1818 #define BUFFER_MAX_PLANE_NUM 4
1819
1820 typedef struct {
1821         union {
1822                 struct {
1823                         unsigned char *yuv;
1824                         unsigned int length_yuv;
1825                 } yuv420, yuv422;
1826                 struct {
1827                         unsigned char *y;
1828                         unsigned int length_y;
1829                         unsigned char *uv;
1830                         unsigned int length_uv;
1831                 } yuv420sp;
1832                 struct {
1833                         unsigned char *y;
1834                         unsigned int length_y;
1835                         unsigned char *u;
1836                         unsigned int length_u;
1837                         unsigned char *v;
1838                         unsigned int length_v;
1839                 } yuv420p, yuv422p;
1840                 struct {
1841                         unsigned char *data;
1842                         unsigned int length_data;
1843                         int is_delta_frame;
1844                 } encoded, depth, rgb;
1845         } data;                         /**< pointer of captured stream */
1846         MMCamStreamData data_type;      /**< data type */
1847         unsigned int length_total;      /**< total length of stream buffer (in byte)*/
1848         unsigned int num_planes;        /**< number of planes */
1849         MMPixelFormatType format;       /**< image format */
1850         int width;                      /**< width of video buffer */
1851         int height;                     /**< height of video buffer */
1852         unsigned int timestamp;         /**< timestamp of stream buffer (msec)*/
1853         void *bo[BUFFER_MAX_PLANE_NUM]; /**< TBM buffer object */
1854         void *internal_buffer;          /**< Internal buffer pointer */
1855         int stride[BUFFER_MAX_PLANE_NUM];    /**< Stride of each plane */
1856         int elevation[BUFFER_MAX_PLANE_NUM]; /**< Elevation of each plane */
1857         int extra_stream_id;            /**< ID of extra preview stream */
1858 } MMCamcorderVideoStreamDataType;
1859
1860
1861 /**
1862  * Structure for audio stream data.
1863  */
1864 typedef struct {
1865         void *data;                             /**< pointer of captured stream */
1866         unsigned int length;                    /**< length of stream buffer (in byte)*/
1867         MMCamcorderAudioFormat format;          /**< audio format */
1868         int channel;                            /**< number of channel of the stream */
1869         unsigned int timestamp;                 /**< timestamp of stream buffer (msec)*/
1870         float volume_dB;                        /**< dB value of audio stream */
1871 } MMCamcorderAudioStreamDataType;
1872
1873
1874 /**
1875  * Structure for muxed stream data.
1876  */
1877 typedef struct {
1878         void *data;             /**< pointer of muxed stream */
1879         unsigned int length;    /**< length of stream buffer (in byte) */
1880         unsigned long long offset;  /**< current offset for data */
1881 } MMCamcorderMuxedStreamDataType;
1882
1883
1884 /**
1885   * Prerequisite information for mm_camcorder_create()
1886   * The information to set prior to create.
1887   */
1888 typedef struct {
1889         enum MMVideoDeviceType videodev_type;   /**< Video device type */
1890         /* For future use */
1891         int reserved[4];                        /**< reserved fields */
1892 } MMCamPreset;
1893
1894
1895 /**
1896  * Report structure of recording file
1897  */
1898 typedef struct {
1899         char *recording_filename;               /**< File name of stored recording file. Please free after using. */
1900 } MMCamRecordingReport; /**< report structure definition of recording file */
1901
1902
1903 /**
1904  * Face detect detailed information
1905  */
1906 typedef struct _MMCamFaceInfo {
1907         int id;                                 /**< id of each face */
1908         int score;                              /**< score of each face */
1909         MMRectType rect;                        /**< area of face */
1910 } MMCamFaceInfo;
1911
1912 /**
1913  * Face detect information
1914  */
1915 typedef struct _MMCamFaceDetectInfo {
1916         int num_of_faces;                       /**< number of detected faces */
1917         MMCamFaceInfo *face_info;               /**< face information, this should be freed after use it. */
1918 } MMCamFaceDetectInfo;
1919
1920 /**
1921  * Window information
1922  */
1923 typedef struct _MMCamWindowInfo {
1924         int surface_id;
1925         MMRectType rect;
1926 } MMCamWindowInfo;
1927
1928
1929 /*=======================================================================================
1930 | TYPE DEFINITIONS                                                                      |
1931 ========================================================================================*/
1932 /**
1933  *      Function definition for video stream callback.
1934  *  Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(),
1935  *  mm_camcorder_unrealize(), mm_camcorder_record(), mm_camcorder_commit(), and mm_camcorder_cancel(), etc.
1936  *  Please don't hang this function long. It may cause low performance of preview or occur timeout error from video source.
1937  *  Also, you're not allowed to call mm_camcorder_stop() even in other context, while you're hanging this function.
1938  *  I recommend to you releasing this function ASAP.
1939  *
1940  *      @param[in]      stream                  Reference pointer to video stream data
1941  *      @param[in]      user_param              User parameter which is received from user when callback function was set
1942  *      @return         This function returns true on success, or false on failure.
1943  *      @remarks                This function is issued in the context of gstreamer (video sink thread).
1944  */
1945 typedef gboolean (*mm_camcorder_video_stream_callback)(MMCamcorderVideoStreamDataType *stream, void *user_param);
1946
1947
1948 /**
1949  *      Function definition for audio stream callback.
1950  *  Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(),
1951  *  mm_camcorder_unrealize(), mm_camcorder_record(), mm_camcorder_commit(), and mm_camcorder_cancel(), etc.
1952  *  Please don't hang this function long. It may cause low performance of camcorder or occur timeout error from audio source.
1953  *  I recommend to you releasing this function ASAP.
1954  *
1955  *      @param[in]      stream                  Reference pointer to audio stream data
1956  *      @param[in]      user_param              User parameter which is received from user when callback function was set
1957  *      @return         This function returns true on success, or false on failure.
1958  *      @remarks
1959  */
1960 typedef gboolean (*mm_camcorder_audio_stream_callback)(MMCamcorderAudioStreamDataType *stream, void *user_param);
1961
1962
1963 /**
1964  *      Function definition for muxed stream callback.
1965  *  Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(),
1966  *  mm_camcorder_unrealize(), mm_camcorder_record(), mm_camcorder_commit(), and mm_camcorder_cancel(), etc.
1967  *  Please don't hang this function long. It may cause low performance of camcorder or occur timeout error from encoding pipeline.
1968  *  I recommend to you releasing this function ASAP.
1969  *
1970  *      @param[in]      stream                  Reference pointer to muxed stream data
1971  *      @param[in]      user_param              User parameter which is received from user when callback function was set
1972  *      @return         This function returns true on success, or false on failure.
1973  *      @remarks
1974  */
1975 typedef gboolean (*mm_camcorder_muxed_stream_callback)(MMCamcorderMuxedStreamDataType *stream, void *user_param);
1976
1977
1978 /**
1979  *      Function definition for video capture callback.
1980  *  Like '#mm_camcorder_video_stream_callback', you can't call mm_camcorder_stop() while you are hanging this function.
1981  *
1982  *      @param[in]      frame                   Reference pointer to captured data
1983  *      @param[in]      thumbnail               Reference pointer to thumbnail data
1984  *      @param[in]      user_param              User parameter which is received from user when callback function was set
1985  *      @return         This function returns true on success, or false on failure.
1986  *      @remarks                This function is issued in the context of gstreamer (video src thread).
1987  */
1988 typedef gboolean (*mm_camcorder_video_capture_callback)(MMCamcorderCaptureDataType *frame, MMCamcorderCaptureDataType *thumbnail, void *user_param);
1989
1990 /**
1991  *      Function definition for video encode decision callback.
1992  *  Like '#mm_camcorder_video_stream_callback', you can't call mm_camcorder_stop() while you are hanging this function.
1993  *
1994  *      @param[in]      stream                  Reference pointer to video stream data
1995  *      @param[in]      user_param              User parameter which is received from user when callback function was set
1996  *      @return         This function returns true on encoding, or false on drop frame.
1997  *      @remarks                This function is issued in the context of gstreamer (video sink or internal of camerasrc thread).
1998  */
1999 typedef gboolean (*mm_camcorder_video_encode_decision_callback)(MMCamcorderVideoStreamDataType *stream, void *user_param);
2000
2001
2002 /*=======================================================================================
2003 | GLOBAL FUNCTION PROTOTYPES                                                            |
2004 ========================================================================================*/
2005 /**
2006  *    mm_camcorder_create:\n
2007  *  Create camcorder object. This is the function that an user who wants to use mm_camcorder calls first.
2008  *  This function creates handle structure and initialize mutex, attributes, gstreamer.
2009  *  When this function success, it will return  a handle of newly created object.
2010  *  A user have to put the handle when he calls every function of mm_camcorder. \n
2011  *  Second argument of this function is the field to describe pre-setting information of mm_camcorder such as which camera device it will use.
2012  *  Normally, MM_VIDEO_DEVICE_CAMERA0 is for Main camera(or Mega camera, Back camera),
2013  *  and MM_VIDEO_DEVICE_CAMERA1 is for VGA camera (or Front camera). If you want audio recording,
2014  *  please set MM_VIDEO_DEVICE_NONE. (No camera device is needed.)
2015  *
2016  *      @param[out]     camcorder       A handle of camcorder.
2017  *      @param[in]      info            Information for camera device. Depending on this information,
2018  *                                      camcorder opens different camera devices.
2019  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2020  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2021  *      @see            mm_camcorder_destroy
2022  *      @pre            None
2023  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_NULL
2024  *      @remarks        You can create multiple handles on a context at the same time. However,
2025  *                      camcorder cannot guarantee proper operation because of limitation of resources, such as
2026  *                      camera device, audio device, and display device.
2027  *      @par example
2028  *      @code
2029
2030 #include <mm_camcorder.h>
2031
2032 gboolean initialize_camcorder()
2033 {
2034         int err;
2035         MMCamPreset cam_info;
2036 #if 1
2037         cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2038 #else
2039         // when you want to record audio only, enable this.
2040         cam_info.videodev_type = MM_VIDEO_DEVICE_NONE;
2041 #endif
2042
2043         err = mm_camcorder_create(&hcam, &cam_info);
2044
2045         if (err != MM_ERROR_NONE) {
2046                 printf("Fail to call mm_camcorder_create = %x\n", err);
2047                 return FALSE;
2048         }
2049
2050         return TRUE;
2051 }
2052
2053  *      @endcode
2054  */
2055 int mm_camcorder_create(MMHandleType *camcorder, MMCamPreset *info);
2056
2057
2058 /**
2059  *    mm_camcorder_destroy:\n
2060  *  Destroy camcorder object. Release handle and all of the resources that were created in mm_camcorder_create().\n
2061  *  This is the finalizing function of mm_camcorder. If this function is not called or fails to call, the handle isn't released fully.
2062  *  This function releases attributes, mutexes, sessions, and handle itself. This function also removes all of remaining messages.
2063  *  So if your application should wait a certain message of mm_camcorder, please wait to call this function till getting the message.
2064  *
2065  *
2066  *      @param[in]      camcorder       A handle of camcorder.
2067  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2068  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2069  *      @see            mm_camcorder_create
2070  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_NULL
2071  *      @post           Because the handle is not valid, you can't check the state.
2072  *      @remarks        None
2073  *      @par example
2074  *      @code
2075
2076 #include <mm_camcorder.h>
2077
2078 gboolean destroy_camcorder()
2079 {
2080         int err;
2081
2082         //Destroy camcorder handle
2083         err = mm_camcorder_destroy(hcam);
2084         if (err < 0) {
2085                 printf("Fail to call mm_camcorder_destroy  = %x\n", err);
2086                 return FALSE;
2087         }
2088
2089         return TRUE;
2090 }
2091
2092  *      @endcode
2093  */
2094 int mm_camcorder_destroy(MMHandleType camcorder);
2095
2096
2097 /**
2098  *    mm_camcorder_realize:\n
2099  *  Allocate resources for camcorder and initialize it.
2100  *  This also creates streamer pipeline. So you have to set attributes that are pivotal to create
2101  *  the pipeline before calling this function. This function also takes a roll to manage conflict
2102  *  between different applications which use camcorder. For example, if you try to use camcorder when
2103  *  other application that is more important such as call application, this function will return
2104  *  'MM_ERROR_POLICY_BLOCKED'. On the contrary, if your application that uses camcorder starts to launch
2105  *  while another application that uses speaker and has lower priority, your application will kick
2106  *  another application.
2107  *
2108  *      @param[in]      camcorder       A handle of camcorder.
2109  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2110  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2111  *      @see            mm_camcorder_unrealize
2112  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_NULL
2113  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_READY
2114  *      @remarks        None
2115  *      @par example
2116  *      @code
2117
2118 #include <mm_camcorder.h>
2119
2120 //For image capturing
2121 gboolean initialize_image_capture()
2122 {
2123         int err;
2124         MMCamPreset cam_info;
2125         char *err_attr_name = NULL;
2126         void * hdisplay = NULL;
2127         int hsize = 0;
2128
2129         //Set video device as 'camera0' (main camera device)
2130         cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2131
2132         err = mm_camcorder_create(&hcam, &cam_info);
2133
2134         if (err != MM_ERROR_NONE) {
2135                 printf("Fail to call mm_camcorder_create = %x\n", err);
2136                 return FALSE;
2137         }
2138
2139         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2140         mm_camcorder_set_video_capture_callback(hcam,(mm_camcorder_video_capture_callback)camcordertest_video_capture_cb, (void*)hcam);
2141
2142         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2143         hsize = sizeof(ad.xid);         //size of xid structure.
2144
2145         // camcorder attribute setting
2146         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2147                                           MMCAM_MODE, MM_CAMCORDER_MODE_IMAGE,
2148                                           MMCAM_IMAGE_ENCODER, MM_IMAGE_CODEC_JPEG,
2149                                           MMCAM_CAMERA_WIDTH, 640,
2150                                           MMCAM_CAMERA_HEIGHT, 480,
2151                                           MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_YUYV,
2152                                           MMCAM_CAMERA_FPS, 30,
2153                                           MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2154                                           MMCAM_DISPLAY_HANDLE, (void*) hdisplay,          hsize,
2155                                           MMCAM_CAPTURE_FORMAT, MM_PIXEL_FORMAT_ENCODED,
2156                                           MMCAM_CAPTURE_WIDTH, 640,
2157                                           MMCAM_CAPTURE_HEIGHT, 480,
2158                                           NULL);
2159
2160         if (err < 0) {
2161                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2162                 if (err_attr_name) {
2163                         free(err_attr_name);
2164                         err_attr_name = NULL;
2165                         return FALSE;
2166                 }
2167         }
2168
2169         err =  mm_camcorder_realize(hcam);
2170         if (err < 0) {
2171                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2172                 return FALSE;
2173         }
2174
2175         return TRUE;
2176 }
2177
2178 //For A/V capturing
2179 gboolean initialize_video_capture()
2180 {
2181         int err;
2182         MMCamPreset cam_info;
2183         char *err_attr_name = NULL;
2184         void * hdisplay = NULL;
2185         int hsize = 0;
2186
2187         //Set video device as 'camera0' (main camera device)
2188         cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2189
2190         err = mm_camcorder_create(&hcam, &cam_info);
2191
2192         if (err != MM_ERROR_NONE) {
2193                 printf("Fail to call mm_camcorder_create = %x\n", err);
2194                 return FALSE;
2195         }
2196
2197         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, hcam);
2198
2199         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2200         hsize = sizeof(ad.xid);         //size of xid structure.
2201
2202         // camcorder attribute setting
2203         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2204                                           MMCAM_MODE, MM_CAMCORDER_MODE_VIDEO,
2205                                           MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2206                                           MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2207                                           MMCAM_VIDEO_ENCODER, MM_VIDEO_CODEC_MPEG4,
2208                                           MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2209                                           MMCAM_CAMERA_WIDTH, 1280,
2210                                           MMCAM_CAMERA_HEIGHT, 720,
2211                                           MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_NV12,
2212                                           MMCAM_CAMERA_FPS, 30,
2213                                           MMCAM_AUDIO_SAMPLERATE, 44100,
2214                                           MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2215                                           MMCAM_AUDIO_CHANNEL, 2,
2216                                           MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2217                                           MMCAM_DISPLAY_HANDLE, (void*) hdisplay,               hsize,
2218                                           MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2219                                           NULL);
2220
2221         if (err < 0) {
2222                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2223                 if (err_attr_name) {
2224                         free(err_attr_name);
2225                         err_attr_name = NULL;
2226                         return FALSE;
2227                 }
2228         }
2229
2230         err =  mm_camcorder_realize(hcam);
2231         if (err < 0) {
2232                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2233                 return FALSE;
2234         }
2235
2236         return TRUE;
2237 }
2238
2239 //For audio(only) capturing
2240 gboolean initialize_audio_capture()
2241 {
2242         int err;
2243         MMCamPreset cam_info;
2244         char *err_attr_name = NULL;
2245         void * hdisplay = NULL;
2246         int hsize = 0;
2247
2248         //Set no video device, because audio recording doesn't need video input.
2249         cam_info.videodev_type = MM_VIDEO_DEVICE_NONE;
2250
2251         err = mm_camcorder_create(&hcam, &cam_info);
2252
2253         if (err != MM_ERROR_NONE) {
2254                 printf("Fail to call mm_camcorder_create = %x\n", err);
2255                 return FALSE;
2256         }
2257
2258         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2259
2260         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2261         hsize = sizeof(ad.xid);         //size of xid structure.
2262
2263         // camcorder attribute setting
2264         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2265                                           MMCAM_MODE, MM_CAMCORDER_MODE_AUDIO,
2266                                           MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2267                                           MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2268                                           MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2269                                           MMCAM_AUDIO_SAMPLERATE, 44100,
2270                                           MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2271                                           MMCAM_AUDIO_CHANNEL, 2,
2272                                           MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2273                                           MMCAM_TARGET_TIME_LIMIT, 360000,
2274                                           NULL);
2275
2276         if (err < 0) {
2277                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2278                 if (err_attr_name) {
2279                         free(err_attr_name);
2280                         err_attr_name = NULL;
2281                         return FALSE;
2282                 }
2283         }
2284
2285         err =  mm_camcorder_realize(hcam);
2286         if (err < 0) {
2287                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2288                 return FALSE;
2289         }
2290
2291         return TRUE;
2292 }
2293  *      @endcode
2294  */
2295 int mm_camcorder_realize(MMHandleType camcorder);
2296
2297
2298 /**
2299  *    mm_camcorder_unrealize:\n
2300  *  Uninitialize camcoder resources and free allocated memory.
2301  *  Most important resource that is released here is gstreamer pipeline of mm_camcorder.
2302  *  Because most of resources, such as camera device, video display device, and audio I/O device, are operating on the gstreamer pipeline,
2303  *  this function should be called to release its resources.
2304  *
2305  *      @param[in]      camcorder       A handle of camcorder.
2306  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2307  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2308  *      @see            mm_camcorder_realize
2309  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_READY
2310  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_NULL
2311  *      @remarks        None
2312  *      @par example
2313  *      @code
2314
2315 #include <mm_camcorder.h>
2316
2317 gboolean unrealize_camcorder()
2318 {
2319         int err;
2320
2321         //Release all resources of camcorder handle
2322         err =  mm_camcorder_unrealize(hcam);
2323         if (err < 0) {
2324                 printf("Fail to call mm_camcorder_unrealize  = %x\n", err);
2325                 return FALSE;
2326         }
2327
2328         return TRUE;
2329 }
2330
2331  *      @endcode
2332  */
2333 int mm_camcorder_unrealize(MMHandleType camcorder);
2334
2335
2336 /**
2337  *      mm_camcorder_start:\n
2338  *   Start previewing. (Image/Video mode)
2339  *  'mm_camcorder_video_stream_callback' is activated after calling this function.
2340  *
2341  *      @param[in]      camcorder       A handle of camcorder.
2342  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2343  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2344  *      @see            mm_camcorder_stop
2345  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_READY
2346  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2347  *      @remarks        None
2348  *      @par example
2349  *      @code
2350
2351 #include <mm_camcorder.h>
2352
2353 //For image capturing
2354 gboolean initialize_image_capture()
2355 {
2356         int err;
2357         MMCamPreset cam_info;
2358         char *err_attr_name = NULL;
2359         void * hdisplay = NULL;
2360         int hsize = 0;
2361
2362         //Set video device as 'camera0' (main camera device)
2363         cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2364
2365         err = mm_camcorder_create(&hcam, &cam_info);
2366
2367         if (err != MM_ERROR_NONE) {
2368                         printf("Fail to call mm_camcorder_create = %x\n", err);
2369                         return FALSE;
2370         }
2371
2372         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2373         mm_camcorder_set_video_capture_callback(hcam,(mm_camcorder_video_capture_callback)camcordertest_video_capture_cb, (void*)hcam);
2374
2375         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2376         hsize = sizeof(ad.xid);         //size of xid structure.
2377
2378         // camcorder attribute setting
2379         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2380                                           MMCAM_MODE, MM_CAMCORDER_MODE_IMAGE,
2381                                           MMCAM_IMAGE_ENCODER, MM_IMAGE_CODEC_JPEG,
2382                                           MMCAM_CAMERA_WIDTH, 640,
2383                                           MMCAM_CAMERA_HEIGHT, 480,
2384                                           MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_YUYV,
2385                                           MMCAM_CAMERA_FPS, 30,
2386                                           MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2387                                           MMCAM_DISPLAY_HANDLE, (void*) hdisplay,          hsize,
2388                                           MMCAM_CAPTURE_FORMAT, MM_PIXEL_FORMAT_ENCODED,
2389                                           MMCAM_CAPTURE_WIDTH, 640,
2390                                           MMCAM_CAPTURE_HEIGHT, 480,
2391                                           NULL);
2392
2393         if (err < 0) {
2394                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2395                 if (err_attr_name) {
2396                         free(err_attr_name);
2397                         err_attr_name = NULL;
2398                         return FALSE;
2399                 }
2400         }
2401
2402         err =  mm_camcorder_realize(hcam);
2403         if (err < 0) {
2404                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2405                 return FALSE;
2406         }
2407
2408         // start camcorder
2409         err = mm_camcorder_start(hcam);
2410         if (err < 0) {
2411                 printf("Fail to call mm_camcorder_start  = %x\n", err);
2412                 return FALSE;
2413         }
2414
2415         return TRUE;
2416 }
2417
2418 //For A/V capturing
2419 gboolean initialize_video_capture()
2420 {
2421         int err;
2422         MMCamPreset cam_info;
2423         char *err_attr_name = NULL;
2424         void * hdisplay = NULL;
2425         int hsize = 0;
2426
2427         //Set video device as 'camera0' (main camera device)
2428         cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2429
2430         err = mm_camcorder_create(&hcam, &cam_info);
2431
2432         if (err != MM_ERROR_NONE) {
2433                         printf("Fail to call mm_camcorder_create = %x\n", err);
2434                         return FALSE;
2435         }
2436
2437         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, hcam);
2438
2439         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2440         hsize = sizeof(ad.xid);         //size of xid structure.
2441
2442         // camcorder attribute setting
2443         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2444                                           MMCAM_MODE, MM_CAMCORDER_MODE_VIDEO,
2445                                           MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2446                                           MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2447                                           MMCAM_VIDEO_ENCODER, MM_VIDEO_CODEC_MPEG4,
2448                                           MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2449                                           MMCAM_CAMERA_WIDTH, 1280,
2450                                           MMCAM_CAMERA_HEIGHT, 720,
2451                                           MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_NV12,
2452                                           MMCAM_CAMERA_FPS, 30,
2453                                           MMCAM_AUDIO_SAMPLERATE, 44100,
2454                                           MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2455                                           MMCAM_AUDIO_CHANNEL, 2,
2456                                           MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2457                                           MMCAM_DISPLAY_HANDLE, (void*) hdisplay,               hsize,
2458                                           MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2459                                           NULL);
2460
2461         if (err < 0) {
2462                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2463                 if (err_attr_name) {
2464                         free(err_attr_name);
2465                         err_attr_name = NULL;
2466                         return FALSE;
2467                 }
2468         }
2469
2470         err =  mm_camcorder_realize(hcam);
2471         if (err < 0) {
2472                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2473                 return FALSE;
2474         }
2475
2476         // start camcorder
2477         err = mm_camcorder_start(hcam);
2478         if (err < 0) {
2479                 printf("Fail to call mm_camcorder_start  = %x\n", err);
2480                 return FALSE;
2481         }
2482
2483         return TRUE;
2484 }
2485
2486 //For audio(only) capturing
2487 gboolean initialize_audio_capture()
2488 {
2489         int err;
2490         MMCamPreset cam_info;
2491         char *err_attr_name = NULL;
2492         void * hdisplay = NULL;
2493         int hsize = 0;
2494
2495         //Set no video device, because audio recording doesn't need video input.
2496         cam_info.videodev_type = MM_VIDEO_DEVICE_NONE;
2497
2498         err = mm_camcorder_create(&hcam, &cam_info);
2499
2500         if (err != MM_ERROR_NONE) {
2501                 printf("Fail to call mm_camcorder_create = %x\n", err);
2502                 return FALSE;
2503         }
2504
2505         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2506
2507         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2508         hsize = sizeof(ad.xid);         //size of xid structure.
2509
2510         // camcorder attribute setting
2511         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2512                                           MMCAM_MODE, MM_CAMCORDER_MODE_AUDIO,
2513                                           MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2514                                           MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2515                                           MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2516                                           MMCAM_AUDIO_SAMPLERATE, 44100,
2517                                           MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2518                                           MMCAM_AUDIO_CHANNEL, 2,
2519                                           MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2520                                           MMCAM_TARGET_TIME_LIMIT, 360000,
2521                                           NULL);
2522
2523         if (err < 0) {
2524                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2525                 if (err_attr_name) {
2526                         free(err_attr_name);
2527                         err_attr_name = NULL;
2528                         return FALSE;
2529                 }
2530         }
2531
2532         err =  mm_camcorder_realize(hcam);
2533         if (err < 0) {
2534                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2535                 return FALSE;
2536         }
2537
2538         // start camcorder
2539         err = mm_camcorder_start(hcam);
2540         if (err < 0) {
2541                 printf("Fail to call mm_camcorder_start  = %x\n", err);
2542                 return FALSE;
2543         }
2544
2545         return TRUE;
2546 }
2547  *      @endcode
2548  */
2549 int mm_camcorder_start(MMHandleType camcorder);
2550
2551
2552 /**
2553  *    mm_camcorder_stop:\n
2554  *  Stop previewing. (Image/Video mode)
2555  *  This function will change the status of pipeline. If an application doesn't return callbacks
2556  *  of camcorder, this function can be locked. For example, if your application still
2557  *  holds '#mm_camcorder_video_capture_callback' or '#mm_camcorder_video_stream_callback',
2558  *  this function could be hung. So users have to return every callback before calling this function.
2559  *
2560  *      @param[in]      camcorder       A handle of camcorder.
2561  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2562  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2563  *      @see            mm_camcorder_start
2564  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_PREPARE
2565  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_READY
2566  *      @remarks        None
2567  *      @par example
2568  *      @code
2569
2570 #include <mm_camcorder.h>
2571
2572 gboolean stop_camcorder()
2573 {
2574         int err;
2575
2576         //Stop preview
2577         err =  mm_camcorder_stop(hcam);
2578         if (err < 0) {
2579                 printf("Fail to call mm_camcorder_stop  = %x\n", err);
2580                 return FALSE;
2581         }
2582
2583         return TRUE;
2584 }
2585
2586  *      @endcode
2587  */
2588 int mm_camcorder_stop(MMHandleType camcorder);
2589
2590
2591 /**
2592  *    mm_camcorder_capture_start:\n
2593  *  Start capturing of still images. (Image mode only)
2594  *  Captured image will be delievered through 'mm_camcorder_video_capture_callback'.
2595  *  So basically, the operation is working asynchronously. \n
2596  *  When a user call this function, MSL will stop to retrieving preview from camera device.
2597  *  Then set capture resolution, pixel format, and encoding type to camera driver. After resuming,
2598  *  camera can get still image.  A user will be notified by
2599  *  'MM_MESSAGE_CAMCORDER_CAPTURED' message when capturing succeed. When a user sets
2600  *  multishot (by setting multiple number to MMCAM_CAPTURE_COUNT), the message
2601  *  will be called multiple time. You can get the number of image from 'code' of
2602  *  'MMMessageParamType'.
2603  *
2604  *      @param[in]      camcorder       A handle of camcorder.
2605  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2606  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2607  *      @see            mm_camcorder_capture_stop
2608  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_PREPARE
2609  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_CAPTURING
2610  *      @remarks        To call this function, preview should be started successfully.\n
2611  *                      This function is a pair of mm_camcorder_capture_stop().
2612  *                      So user should call mm_camcorder_capture_stop() after getting captured image.
2613  *      @par example
2614  *      @code
2615
2616 #include <mm_camcorder.h>
2617
2618 gboolean capturing_picture()
2619 {
2620         int err;
2621
2622         err =  mm_camcorder_capture_start(hcam);
2623         if (err < 0)
2624         {
2625                 printf("Fail to call mm_camcorder_capture_start  = %x\n", err);
2626                 return FALSE;
2627         }
2628
2629         //mm_camcorder_capture_stop should be called after getting
2630         //MM_MESSAGE_CAMCORDER_CAPTURED message.
2631
2632         return TRUE;
2633 }
2634
2635
2636  *      @endcode
2637  */
2638 int mm_camcorder_capture_start(MMHandleType camcorder);
2639
2640
2641 /**
2642  *    mm_camcorder_capture_stop:\n
2643  *  Stop capturing of still images. (Image mode only)
2644  *  This function notifies the end of capturing and launch preview again.
2645  *  Just as mm_camcorder_capture_start(), this function stops still image stream and set preview information such as
2646  *  resolution, pixel format, and framerate to camera driver. Then it command to start preview.
2647  *  If you don't call this, preview will not be displayed even though capturing was finished.
2648  *
2649  *      @param[in]      camcorder       A handle of camcorder.
2650  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2651  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2652  *      @see            mm_camcorder_capture_start
2653  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_CAPTURING
2654  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2655  *      @remarks        To call this function, a user has to call mm_camcorder_capture_start() first.\n
2656  *                      This is not a function to stop multishot in the middle of operation. For that,
2657  *                      please use '#MMCAM_CAPTURE_BREAK_CONTINUOUS_SHOT' instead.
2658  *      @par example
2659  *      @code
2660
2661 #include <mm_camcorder.h>
2662
2663 gboolean capturing_picture_stop()
2664 {
2665         int err;
2666
2667         err =  mm_camcorder_capture_stop(hcam);
2668         if (err < 0) {
2669                 printf("Fail to call mm_camcorder_capture_stop  = %x\n", err);
2670                 return FALSE;
2671         }
2672
2673         //After calling upper function, preview will start.
2674
2675         return TRUE;
2676 }
2677
2678  *      @endcode
2679  */
2680 int mm_camcorder_capture_stop(MMHandleType camcorder);
2681
2682
2683 /**
2684  *    mm_camcorder_record:\n
2685  *  Start recording. (Audio/Video mode only)
2686  *  Camcorder starts to write a file when you call this function. You can specify the name of file
2687  *  using '#MMCAM_TARGET_FILENAME'. Beware, if you fail to call mm_camcorder_commit() or mm_camcorder_cancel(),
2688  *  the recorded file is still on the storage.
2689  *
2690  *      @param[in]      camcorder       A handle of camcorder.
2691  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2692  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2693  *      @see            mm_camcorder_pause
2694  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_PREPARE
2695  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_RECORDING
2696  *      @remarks        None
2697  *      @par example
2698  *      @code
2699
2700 #include <mm_camcorder.h>
2701
2702 gboolean record_and_cancel_video_file()
2703 {
2704         int err;
2705
2706         // Start recording
2707         err =  mm_camcorder_record(hcam);
2708         if (err < 0) {
2709                 printf("Fail to call mm_camcorder_record  = %x\n", err);
2710                 return FALSE;
2711         }
2712
2713         return TRUE;
2714 }
2715
2716  *      @endcode
2717  */
2718 int mm_camcorder_record(MMHandleType camcorder);
2719
2720
2721 /**
2722  *    mm_camcorder_pause:\n
2723  *  Pause A/V recording or Audio recording. (Audio/Video mode only)
2724  *  On video recording, you can see preview while on pausing. So mm_camcorder cuts video stream path to encoder and keep the flow to preview.
2725  *  If you call mm_camcorder_commit() while on pausing, the recorded file only has Audio and Video stream which were generated before pause().
2726  *
2727  *      @param[in]      camcorder       A handle of camcorder.
2728  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2729  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2730  *      @see            mm_camcorder_record
2731  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_RECORDING
2732  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_PAUSED
2733  *      @remarks        Even though this function is for pausing recording, small amount of buffers could be recorded after pause().
2734  *                      Because the buffers which are existed in the queue were created before pause(), the buffers should be recorded.
2735  *      @par example
2736  *      @code
2737
2738 #include <mm_camcorder.h>
2739
2740 gboolean record_pause_and_resume_recording()
2741 {
2742         int err;
2743
2744         // Start recording
2745         err =  mm_camcorder_record(hcam);
2746         if (err < 0) {
2747                 printf("Fail to call mm_camcorder_record  = %x\n", err);
2748                 return FALSE;
2749         }
2750
2751         // Wait while recording...
2752
2753         // Pause
2754         err =  mm_camcorder_pause(hcam);
2755         if (err < 0) {
2756                 printf("Fail to call mm_camcorder_pause  = %x\n", err);
2757                 return FALSE;
2758         }
2759
2760         // Pausing...
2761
2762         // Resume
2763         err =  mm_camcorder_record(hcam);
2764         if (err < 0) {
2765                 printf("Fail to call mm_camcorder_record  = %x\n", err);
2766                 return FALSE;
2767         }
2768
2769         return TRUE;
2770 }
2771
2772
2773  *      @endcode
2774  */
2775 int mm_camcorder_pause(MMHandleType camcorder);
2776
2777
2778 /**
2779  *    mm_camcorder_commit:\n
2780  *  Stop recording and save results.  (Audio/Video mode only)\n
2781  *  After starting recording, encoded data frame will be stored in the location specified in MMCAM_TARGET_FILENAME.
2782  *  Some encoder or muxer require a certain type of finalizing such as adding some information to header.
2783  *  This function takes that roll. So if you don't call this function after recording, the result file may not be playable.\n
2784  *  After committing successfully, camcorder resumes displaying preview (video recording case).
2785  *  Because this is the function for saving the recording result, the operation is available
2786  *  only when the mode of camcorder is MM_CAMCORDER_MODE_AUDIO or MM_CAMCORDER_MODE_VIDEO.
2787  *
2788  *      @param[in]      camcorder       A handle of camcorder.
2789  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2790  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2791  *      @see            mm_camcorder_cancel
2792  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_RECORDING
2793  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2794  *      @remarks        This function can take a few second when recording time is long.
2795  *                      and if there are only quite few input buffer from video src or audio src,
2796  *                      committing could be failed.
2797  *      @par example
2798  *      @code
2799
2800 #include <mm_camcorder.h>
2801
2802 gboolean record_and_save_video_file()
2803 {
2804         int err;
2805
2806         // Start recording
2807         err =  mm_camcorder_record(hcam);
2808         if (err < 0) {
2809                 printf("Fail to call mm_camcorder_record  = %x\n", err);
2810                 return FALSE;
2811         }
2812
2813         // Wait while recording for test...
2814         // In normal case, mm_camcorder_record() and mm_camcorder_commit() aren't called in the same function.
2815
2816         // Save file
2817         err =  mm_camcorder_commit(hcam);
2818         if (err < 0) {
2819                 printf("Fail to call mm_camcorder_commit  = %x\n", err);
2820                 return FALSE;
2821         }
2822
2823         return TRUE;
2824 }
2825
2826  *      @endcode
2827  */
2828 int mm_camcorder_commit(MMHandleType camcorder);
2829
2830
2831 /**
2832  *      mm_camcorder_cancel:\n
2833  *    Stop recording and discard the result. (Audio/Video mode only)
2834  *      When a user want to finish recording without saving the result file, this function can be used.
2835  *      Like mm_camcorder_commit(), this function also stops recording, release related resources(like codec) ,and goes back to preview status.
2836  *      However, instead of saving file, this function unlinks(delete) the result.\n
2837  *      Because this is the function for canceling recording, the operation is available
2838  *      only when mode is MM_CAMCORDER_MODE_AUDIO or MM_CAMCORDER_MODE_VIDEO.
2839  *
2840  *      @param[in]      camcorder       A handle of camcorder.
2841  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2842  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2843  *      @see            mm_camcorder_commit
2844  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_RECORDING
2845  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2846  *      @remarks        None
2847  *      @par example
2848  *      @code
2849
2850 #include <mm_camcorder.h>
2851
2852 gboolean record_and_cancel_video_file()
2853 {
2854         int err;
2855
2856         // Start recording
2857         err =  mm_camcorder_record(hcam);
2858         if (err < 0) {
2859                 printf("Fail to call mm_camcorder_record  = %x\n", err);
2860                 return FALSE;
2861         }
2862
2863         // Wait while recording...
2864
2865         // Cancel recording
2866         err =  mm_camcorder_cancel(hcam);
2867         if (err < 0) {
2868                 printf("Fail to call mm_camcorder_cancel  = %x\n", err);
2869                 return FALSE;
2870         }
2871
2872         return TRUE;
2873 }
2874
2875  *      @endcode
2876  */
2877 int mm_camcorder_cancel(MMHandleType camcorder);
2878
2879
2880 /**
2881  *    mm_camcorder_set_message_callback:\n
2882  *  Set callback for receiving messages from camcorder. Through this callback function, camcorder
2883  *  sends various message including status changes, asynchronous error, capturing, and limitations.
2884  *  One thing you have to know is that message callback is working on the main loop of application.
2885  *  So until releasing the main loop, message callback will not be called.
2886  *
2887  *      @param[in]      camcorder       A handle of camcorder.
2888  *      @param[in]      callback        Function pointer of callback function. Please refer 'MMMessageCallback'.
2889  *      @param[in]      user_data       User parameter for passing to callback function.
2890  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2891  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2892  *      @see            MMMessageCallback
2893  *      @pre            None
2894  *      @post           None
2895  *      @remarks        registered 'callback' is called on main loop of the application. So until the main loop is released, 'callback' will not be called.
2896  *      @par example
2897  *      @code
2898
2899 #include <mm_camcorder.h>
2900
2901 gboolean setting_msg_callback()
2902 {
2903         //set callback
2904         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2905
2906         return TRUE;
2907 }
2908
2909
2910  *      @endcode
2911  */
2912 int mm_camcorder_set_message_callback(MMHandleType camcorder, MMMessageCallback callback, void *user_data);
2913
2914
2915 /**
2916  *    mm_camcorder_set_video_stream_callback:\n
2917  *  Set callback for user defined video stream callback function.
2918  *  Users can retrieve video frame using registered callback.
2919  *  The callback function holds the same buffer that will be drawn on the display device.
2920  *  So if an user change the buffer, it will be displayed on the device.
2921  *
2922  *      @param[in]      camcorder       A handle of camcorder.
2923  *      @param[in]      callback        Function pointer of callback function.
2924  *      @param[in]      user_data       User parameter for passing to callback function.
2925  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2926  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2927  *      @see            mm_camcorder_video_stream_callback
2928  *      @pre            None
2929  *      @post           None
2930  *      @remarks        registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
2931  *      @par example
2932  *      @code
2933
2934 #include <mm_camcorder.h>
2935
2936 gboolean setting_video_stream_callback()
2937 {
2938         //set callback
2939         mm_camcorder_set_video_stream_callback(hcam, (mm_camcorder_video_stream_callback)camcordertest_video_stream_cb, (void*)hcam);
2940
2941         return TRUE;
2942 }
2943  *      @endcode
2944  */
2945 int mm_camcorder_set_video_stream_callback(MMHandleType camcorder, mm_camcorder_video_stream_callback callback, void *user_data);
2946
2947
2948 /**
2949  *    mm_camcorder_set_video_capture_callback:\n
2950  *  Set callback for user defined video capture callback function.  (Image mode only)
2951  *  mm_camcorder deliver captured image through the callback.\n
2952  *  Normally, this function provides main captured image and thumbnail image. But depending on the environment,
2953  *  thumbnail would not be available. Information related with main captured image and thumbnail image is also included
2954  *  in the argument of the callback function.
2955  *  For more detail information of callback, please refer 'mm_camcorder_video_capture_callback'.
2956  *
2957  *      @param[in]      camcorder       A handle of camcorder.
2958  *      @param[in]      callback        Function pointer of callback function.
2959  *      @param[in]      user_data       User parameter for passing to callback function.
2960  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2961  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2962  *      @see            mm_camcorder_video_capture_callback
2963  *      @pre            None
2964  *      @post           None
2965  *      @remarks        registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
2966  *      @par example
2967  *      @code
2968
2969 #include <mm_camcorder.h>
2970
2971 gboolean setting_capture_callback()
2972 {
2973         //set callback
2974         mm_camcorder_set_video_capture_callback(hcam,(mm_camcorder_video_capture_callback)camcordertest_video_capture_cb, (void*)hcam);
2975
2976         return TRUE;
2977 }
2978  *      @endcode
2979  */
2980 int mm_camcorder_set_video_capture_callback(MMHandleType camcorder, mm_camcorder_video_capture_callback callback, void *user_data);
2981
2982
2983 /**
2984  *    mm_camcorder_set_audio_stream_callback:\n
2985  *  Set callback for user defined audio stream callback function.
2986  *  Users can retrieve audio data using registered callback.
2987  *  The callback function holds the same buffer that will be recorded.
2988  *  So if an user change the buffer, the result file will has the buffer.
2989  *
2990  *      @param[in]      camcorder       A handle of camcorder.
2991  *      @param[in]      callback        Function pointer of callback function.
2992  *      @param[in]      user_data       User parameter for passing to callback function.
2993  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2994  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2995  *      @see            mm_camcorder_audio_stream_callback
2996  *      @pre            None
2997  *      @post           None
2998  *      @remarks        registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
2999  *      @par example
3000  *      @code
3001
3002 #include <mm_camcorder.h>
3003
3004 gboolean setting_audio_stream_callback()
3005 {
3006         //set callback
3007         mm_camcorder_set_audio_stream_callback(hcam, (mm_camcorder_audio_stream_callback)camcordertest_audio_stream_cb, (void*)hcam);
3008
3009         return TRUE;
3010 }
3011  *  @endcode
3012  */
3013 int mm_camcorder_set_audio_stream_callback(MMHandleType camcorder, mm_camcorder_audio_stream_callback callback, void *user_data);
3014
3015
3016 /**
3017  *    mm_camcorder_set_muxed_stream_callback:\n
3018  *  Set callback for user defined muxed stream callback function.
3019  *  Users can retrieve muxed data using registered callback.
3020  *  The callback function holds the same buffer that will be recorded.
3021  *
3022  *      @param[in]      camcorder       A handle of camcorder.
3023  *      @param[in]      callback        Function pointer of callback function.
3024  *      @param[in]      user_data       User parameter for passing to callback function.
3025  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3026  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3027  *      @see            mm_camcorder_muxed_stream_callback
3028  *      @pre            None
3029  *      @post           None
3030  *      @remarks        registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
3031  *      @par example
3032  *      @code
3033
3034 #include <mm_camcorder.h>
3035
3036 gboolean setting_muxed_stream_callback()
3037 {
3038         //set callback
3039         mm_camcorder_set_muxed_stream_callback(hcam, (mm_camcorder_muxed_stream_callback)camcordertest_muxed_stream_cb, (void*)hcam);
3040
3041         return TRUE;
3042 }
3043  *  @endcode
3044  */
3045 int mm_camcorder_set_muxed_stream_callback(MMHandleType camcorder, mm_camcorder_muxed_stream_callback callback, void *user_data);
3046
3047
3048 /**
3049  *    mm_camcorder_set_video_encode_decision_callback:\n
3050  *  Set callback for user defined video encode decision callback function.
3051  *  Users can retrieve video frame using registered callback,
3052  *  and decide to encoding video frame by return value of function.
3053  *
3054  *      @param[in]      camcorder       A handle of camcorder.
3055  *      @param[in]      callback        Function pointer of callback function.
3056  *      @param[in]      user_data       User parameter for passing to callback function.
3057  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3058  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3059  *      @see            mm_camcorder_video_encode_decision_callback
3060  *      @pre            None
3061  *      @post           None
3062  *      @remarks        registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
3063  */
3064 int mm_camcorder_set_video_encode_decision_callback(MMHandleType camcorder, mm_camcorder_video_encode_decision_callback callback, void *user_data);
3065
3066
3067 /**
3068  *    mm_camcorder_get_state:\n
3069  *  Get the current state of camcorder.
3070  *  mm_camcorder is working on the base of its state. An user should check the state of mm_camcorder before calling its functions.
3071  *  If the handle is available, user can retrieve the value.
3072  *
3073  *      @param[in]      camcorder       A handle of camcorder.
3074  *      @param[out]     state           On return, it contains current state of camcorder.
3075  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3076  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3077  *      @see            MMCamcorderStateType
3078  *      @pre            None
3079  *      @post           None
3080  *      @remarks        None
3081  *      @par example
3082  *      @code
3083
3084 #include <mm_camcorder.h>
3085
3086 gboolean get_state_of_camcorder()
3087 {
3088         MMCamcorderStateType state;
3089
3090         //Get state of camcorder
3091         mm_camcorder_get_state(hcam, &state);
3092         printf("Current status is %d\n", state);
3093
3094         return TRUE;
3095 }
3096
3097  *      @endcode
3098  */
3099 int mm_camcorder_get_state(MMHandleType camcorder, MMCamcorderStateType *state);
3100 int mm_camcorder_get_state2(MMHandleType camcorder, MMCamcorderStateType *state, MMCamcorderStateType *old_state);
3101
3102
3103 /**
3104  *    mm_camcorder_get_attributes:\n
3105  *  Get attributes of camcorder with given attribute names. This function can get multiple attributes
3106  *  simultaneously. If one of attribute fails, this function will stop at the point.
3107  *  'err_attr_name' let you know the name of the attribute.
3108  *
3109  *      @param[in]      camcorder       Specifies the camcorder  handle.
3110  *      @param[out]     err_attr_name   Specifies the name of attributes that made an error. If the function doesn't make an error, this will be null. @n
3111  *                                      Free this variable after using.
3112  *      @param[in]      attribute_name  attribute name that user want to get.
3113  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3114  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3115  *      @pre            None
3116  *      @post           None
3117  *      @remarks        You can retrieve multiple attributes at the same time.  @n
3118  *                      This function must finish with 'NULL' argument.  @n
3119  *                      ex) mm_camcorder_get_attributes(....... , NULL);
3120  *      @see            mm_camcorder_set_attributes
3121  *      @par example
3122  *      @code
3123
3124 #include <mm_camcorder.h>
3125
3126 gboolean getting_attribute()
3127 {
3128         int err;
3129         MMCamPreset cam_info;
3130         char *err_attr_name = NULL;
3131         void * hdisplay = NULL;
3132         int hsize = 0;
3133
3134         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
3135         hsize = sizeof(ad.xid);         //size of xid structure.
3136
3137         // camcorder attribute setting
3138         err = mm_camcorder_get_attributes(hcamcorder, NULL,     //The second is the argument for debugging. But you can skip this.
3139                                           MMCAM_MODE,  &mode,   //You have to input a pointer instead of variable itself.
3140                                           NULL);                //mm_camcorder_set_attributes() should be finished with a NULL argument.
3141
3142         return TRUE;
3143 }
3144
3145  *      @endcode
3146  */
3147 int mm_camcorder_get_attributes(MMHandleType camcorder,  char **err_attr_name, const char *attribute_name, ...) G_GNUC_NULL_TERMINATED;
3148
3149
3150
3151 /**
3152  *    mm_camcorder_set_attributes:\n
3153  *  Set attributes of camcorder with given attribute names. This function can set multiple attributes
3154  *  simultaneously. If one of attribute fails, this function will stop at the point.
3155  *  'err_attr_name' let you know the name of the attribute.
3156  *
3157  *      @param[in]      camcorder       Specifies the camcorder  handle.
3158  *      @param[out]     err_attr_name   Specifies the name of attributes that made an error. If the function doesn't make an error, this will be null. @n
3159  *                                      Free this variable after using.
3160  *      @param[in]      attribute_name  attribute name that user want to set.
3161  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3162  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3163  *      @pre            None
3164  *      @post           None
3165  *      @remarks        You can put multiple attributes to camcorder at the same time.  @n
3166  *                      This function must finish with 'NULL' argument.  @n
3167  *                      ex) mm_camcorder_set_attributes(....... , NULL);
3168  *      @see            mm_camcorder_get_attributes
3169  *      @par example
3170  *      @code
3171
3172 #include <mm_camcorder.h>
3173
3174 gboolean setting_attribute()
3175 {
3176         int err;
3177         MMCamPreset cam_info;
3178         char *err_attr_name = NULL;
3179         void * hdisplay = NULL;
3180         int hsize = 0;
3181
3182         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
3183         hsize = sizeof(ad.xid);         //size of xid structure.
3184
3185         // camcorder attribute setting
3186         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,           //The second is the argument for debugging.
3187                                           MMCAM_MODE, MM_CAMCORDER_MODE_IMAGE,
3188                                           MMCAM_IMAGE_ENCODER, MM_IMAGE_CODEC_JPEG,
3189                                           MMCAM_CAMERA_WIDTH, 640,
3190                                           MMCAM_CAMERA_HEIGHT, 480,
3191                                           MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_YUYV,
3192                                           MMCAM_CAMERA_FPS, 30,
3193                                           MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
3194                                           MMCAM_DISPLAY_HANDLE, (void*) hdisplay,          hsize,               //Beware some types require 'size' value, too. (STRING, DATA type attributes)
3195                                           MMCAM_CAPTURE_FORMAT, MM_PIXEL_FORMAT_ENCODED,
3196                                           MMCAM_CAPTURE_WIDTH, 640,
3197                                           MMCAM_CAPTURE_HEIGHT, 480,
3198                                           NULL);                //mm_camcorder_set_attributes() should be finished with a NULL argument.
3199
3200         if (err < 0) {
3201                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);                //When the function failed, 'err_attr_name' has the name of attr that made the error.
3202                 if (err_attr_name) {
3203                         free(err_attr_name);                    //Please free 'err_attr_name', after using the argument.
3204                         err_attr_name = NULL;
3205                         return FALSE;
3206                 }
3207         }
3208
3209         return TRUE;
3210 }
3211  *      @endcode
3212  */
3213 int mm_camcorder_set_attributes(MMHandleType camcorder,  char **err_attr_name, const char *attribute_name, ...) G_GNUC_NULL_TERMINATED;
3214
3215
3216 /**
3217  *    mm_camcorder_get_attribute_info:\n
3218  *  Get detail information of the attribute. To manager attributes, an user may want to know the exact character of the attribute,
3219  *  such as type, flag, and validity. This is the function to provide such information.
3220  *  Depending on the 'validity_type', validity union would be different. To know about the type of union, please refer 'MMCamAttrsInfo'.
3221  *
3222  *      @param[in]      camcorder       Specifies the camcorder  handle.
3223  *      @param[in]      attribute_name  attribute name that user want to get information.
3224  *      @param[out]     info            a structure that holds information related with the attribute.
3225  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3226  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3227  *      @pre            None
3228  *      @post           None
3229  *      @remarks        If the function succeeds, 'info' holds detail information about the attribute, such as type,
3230  *                      flag, validity_type, validity_values, and default values.
3231  *      @see            mm_camcorder_get_attributes, mm_camcorder_set_attributes
3232  *      @par example
3233  *      @code
3234
3235 #include <mm_camcorder.h>
3236
3237 gboolean getting_info_from_attribute()
3238 {
3239         MMCamAttrsInfo info;
3240         int err;
3241
3242         err = mm_camcorder_get_attribute_info(handle, MMCAM_CAPTURE_HEIGHT, &info);
3243         if (err < 0) {
3244                 printf("Fail to call mm_camcorder_get_attribute_info()");
3245                 return FALSE;
3246         }
3247
3248         //Now 'info' has many information about 'MMCAM_CAPTURE_HEIGHT'
3249
3250         return TRUE;
3251 }
3252  *      @endcode
3253  */
3254 int mm_camcorder_get_attribute_info(MMHandleType camcorder, const char *attribute_name, MMCamAttrsInfo *info);
3255
3256
3257 /**
3258  *    mm_camcorder_get_fps_list_by_resolution:\n
3259  *  Get detail information of the fps configure. To manager fps, an user may want to know the supported fps list by the current preview resolution,
3260  *  Gives attribute information structure, from the configure data.
3261  *  Depending on the 'validity_type', validity union would be different. To know about the type of union, please refer 'MMCamAttrsInfo'.
3262  *
3263  *      @param[in]      camcorder       Specifies the camcorder  handle.
3264  *      @param[in]      width   width value of the current Preview resolution.
3265  *      @param[in]      height  height value of the current Preview resolution.
3266  *      @param[out]     fps_info                a structure that holds information related with the attribute.
3267  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3268  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3269  *      @pre            None
3270  *      @post           None
3271  *      @remarks        If the function succeeds, 'info' holds detail information about the attribute, such as type,
3272  *                      flag, validity_type, validity_values, and default values.
3273  *      @see            mm_camcorder_get_attributes, mm_camcorder_set_attributes
3274  *      @par example
3275  *      @code
3276
3277 #include <mm_camcorder.h>
3278
3279 gboolean getting_info_from_attribute()
3280 {
3281         MMCamAttrsInfo info;
3282         int err;
3283
3284         err = mm_camcorder_get_fps_list_by_resolution(handle, width, height, &info);
3285         if (err < 0) {
3286                 printf("Fail to call mm_camcorder_get_attribute_info()");
3287                 return FALSE;
3288         }
3289
3290         //Now 'info' has many information about 'MMCAM_CAPTURE_HEIGHT'
3291
3292         return TRUE;
3293 }
3294  *      @endcode
3295  */
3296 int mm_camcorder_get_fps_list_by_resolution(MMHandleType camcorder, int width, int height, MMCamAttrsInfo *fps_info);
3297
3298
3299 /**
3300  *    mm_camcorder_init_focusing:\n
3301  *  Initialize focusing. \n
3302  *  This function stops focusing action and adjust the camera lens to initial position.
3303  *  Some camera application requires to initialize its lens position after releasing half shutter. In that case,
3304  *  this should be a good choice. Comparing with mm_camcorder_stop_focusing, this function not only stops focusing,
3305  *  but also initialize the lens. Preview image might be out-focused after calling this function.
3306  *      @param[in]      camcorder  A handle of camcorder.
3307  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3308  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3309  *      @pre            The status of camcorder should be MM_CAMCORDER_STATE_PREPARE, MM_CAMCORDER_STATE_RECORDING, or MM_CAMCORDER_STATE_PAUSED.
3310  *      @post           None
3311  *      @remarks        None
3312  *      @see            mm_camcorder_start_focusing, mm_camcorder_stop_focusing
3313  *      @par example
3314  *      @code
3315
3316 #include <mm_camcorder.h>
3317
3318 gboolean start_autofocus()
3319 {
3320         int err;
3321         char * err_attr_name = NULL;
3322
3323         // Set focus mode to 'AUTO' and scan range to 'AF Normal'.
3324         //You just need to set these values one time. After that, just call mm_camcorder_start_focusing().
3325         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
3326                                           MMCAM_CAMERA_FOCUS_MODE, MM_CAMCORDER_FOCUS_MODE_AUTO,
3327                                           MMCAM_CAMERA_AF_SCAN_RANGE, MM_CAMCORDER_AUTO_FOCUS_NORMAL,
3328                                           NULL);
3329
3330         if (err < 0) {
3331                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
3332                 if (err_attr_name) {
3333                         free(err_attr_name);
3334                         err_attr_name = NULL;
3335                         return FALSE;
3336                 }
3337         }
3338
3339         mm_camcorder_init_focusing(hcam);
3340         mm_camcorder_start_focusing(hcam);
3341         printf("Waiting for adjusting focus\n");
3342
3343         // Waiting for 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED'
3344
3345         return TRUE;
3346 }
3347
3348  *      @endcode
3349  */
3350 int mm_camcorder_init_focusing(MMHandleType camcorder);
3351
3352
3353 /**
3354  *    mm_camcorder_start_focusing:\n
3355  *  Start focusing. \n
3356  *  This function command to start focusing operation. Because focusing operation depends on mechanic or electric module,
3357  *  it may take small amount of time. (For ex, 500ms ~ 3sec). \n
3358  *  This function works asynchronously. When an user call this function,  it will return immediately.
3359  *  However, focusing operation will continue until it gets results.
3360  *  After finishing operation, you can get 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED' message.
3361  *  'param.code' of the message structure describes the focusing was success or not.
3362  *
3363  *      @param[in]      camcorder       A handle of camcorder.
3364  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3365  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3366  *      @pre            None
3367  *      @post           None
3368  *      @remarks        None
3369  *      @see            mm_camcorder_init_focusing, mm_camcorder_stop_focusing
3370  *      @par example
3371  *      @code
3372
3373 #include <mm_camcorder.h>
3374
3375 gboolean start_autofocus()
3376 {
3377         int err;
3378         char * err_attr_name = NULL;
3379
3380         // Set focus mode to 'AUTO' and scan range to 'AF Normal'.
3381         //You just need to set these values one time. After that, just call mm_camcorder_start_focusing().
3382         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
3383                                           MMCAM_CAMERA_FOCUS_MODE, MM_CAMCORDER_FOCUS_MODE_AUTO,
3384                                           MMCAM_CAMERA_AF_SCAN_RANGE, MM_CAMCORDER_AUTO_FOCUS_NORMAL,
3385                                           NULL);
3386
3387         if (err < 0) {
3388                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
3389                 if (err_attr_name) {
3390                         free(err_attr_name);
3391                         err_attr_name = NULL;
3392                         return FALSE;
3393                 }
3394         }
3395
3396         mm_camcorder_init_focusing(hcam);
3397         mm_camcorder_start_focusing(hcam);
3398         printf("Waiting for adjusting focus\n");
3399
3400         // Waiting for 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED'
3401
3402         return TRUE;
3403 }
3404
3405  *      @endcode
3406  */
3407 int mm_camcorder_start_focusing(MMHandleType camcorder);
3408
3409
3410 /**
3411  *    mm_camcorder_stop_focusing:\n
3412  *  Stop focusing. This function halts focusing operation.\n
3413  *  This is the function to stop focusing in the middle of the operation. So if focusing is already finished or not started yet,
3414  *  this function will do nothing.
3415  *
3416  *      @param[in]      camcorder       A handle of camcorder.
3417  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3418  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3419  *      @see            mm_camcorder_init_focusing, mm_camcorder_start_focusing
3420  *      @pre            mm_camcorder_start_focusing() should be called before calling this function.
3421  *      @post           None
3422  *      @remarks        None
3423  *      @par example
3424  *      @code
3425
3426 #include <mm_camcorder.h>
3427
3428 gboolean stop_autofocus()
3429 {
3430         int err;
3431
3432         //Stop focusing
3433         mm_camcorder_stop_focusing(hcam);
3434
3435         return TRUE;
3436 }
3437
3438  *      @endcode
3439  */
3440 int mm_camcorder_stop_focusing(MMHandleType camcorder);
3441
3442 /* emit signal */
3443 void mm_camcorder_emit_signal(MMHandleType camcorder, const char *object_name,
3444         const char *interface_name, const char *signal_name, int value);
3445
3446 /* check compatibility between codec and file format */
3447 int mm_camcorder_check_codec_fileformat_compatibility(const char *codec_type, int codec, int file_format);
3448
3449 /* external storage state management */
3450 int mm_camcorder_manage_external_storage_state(MMHandleType camcorder, int storage_state);
3451
3452 /* get focus level */
3453 int mm_camcorder_get_focus_level(MMHandleType camcorder, int *level);
3454
3455 /* get log level */
3456 int mm_camcorder_get_log_level(void);
3457
3458 /**
3459         @}
3460  */
3461
3462 #ifdef __cplusplus
3463 }
3464 #endif
3465
3466 #endif /* __MM_CAMCORDER_H__ */