tizen 2.4 release
[framework/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 repect 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         exsit.
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 postion (GPS information)</td>
554         </tr>
555         <tr>
556                 <td>#MMCAM_TAG_LONGITUDE</td>
557                 <td>Longitude of captured postion (GPS information)</td>
558         </tr>
559         <tr>
560                 <td>#MMCAM_TAG_ALTITUDE</td>
561                 <td>Altitude of captured postion (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  * Digital pan level.
761  */
762 #define MMCAM_CAMERA_PAN               "camera-pan"
763
764 /**
765  * Digital tilt level.
766  */
767 #define MMCAM_CAMERA_TILT               "camera-tilt"
768
769 /**
770  * Optical zoom level.
771  */
772 #define MMCAM_CAMERA_OPTICAL_ZOOM               "camera-optical-zoom"
773
774 /**
775  * Focus mode
776  * @see         MMCamcorderFocusMode
777  */
778 #define MMCAM_CAMERA_FOCUS_MODE                 "camera-focus-mode"
779
780 /**
781  * AF Scan range
782  * @see         MMCamcorderAutoFocusType
783  */
784 #define MMCAM_CAMERA_AF_SCAN_RANGE              "camera-af-scan-range"
785
786 /**
787  * X coordinate of touching position. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
788  * @see         MMCamcorderAutoFocusType
789  */
790 #define MMCAM_CAMERA_AF_TOUCH_X                 "camera-af-touch-x"
791
792 /**
793  * Y coordinate of touching position. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
794  * @see         MMCamcorderAutoFocusType
795  */
796 #define MMCAM_CAMERA_AF_TOUCH_Y                 "camera-af-touch-y"
797
798 /**
799  * Width of touching area. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
800  * @see         MMCamcorderAutoFocusType
801  */
802 #define MMCAM_CAMERA_AF_TOUCH_WIDTH             "camera-af-touch-width"
803
804 /**
805  * Height of touching area. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
806  * @see         MMCamcorderAutoFocusType
807  */
808 #define MMCAM_CAMERA_AF_TOUCH_HEIGHT            "camera-af-touch-height"
809
810 /**
811  * Exposure mode
812  * @see         MMCamcorderAutoExposureType
813  */
814 #define MMCAM_CAMERA_EXPOSURE_MODE              "camera-exposure-mode"
815
816 /**
817  * Exposure value
818  */
819 #define MMCAM_CAMERA_EXPOSURE_VALUE             "camera-exposure-value"
820
821 /**
822  * f number of camera
823  */
824 #define MMCAM_CAMERA_F_NUMBER                   "camera-f-number"
825
826 /**
827  * Shutter speed
828  */
829 #define MMCAM_CAMERA_SHUTTER_SPEED              "camera-shutter-speed"
830
831 /**
832  * ISO of capturing image
833  * @see         MMCamcorderISOType
834  */
835 #define MMCAM_CAMERA_ISO                        "camera-iso"
836
837 /**
838  * Wide dynamic range.
839  * @see         MMCamcorderWDRMode
840  */
841 #define MMCAM_CAMERA_WDR                        "camera-wdr"
842
843 /**
844  * Focal length of camera lens.
845  */
846 #define MMCAM_CAMERA_FOCAL_LENGTH               "camera-focal-length"
847
848 /**
849  * Anti Handshake
850  * @see         MMCamcorderAHSMode
851  */
852 #define MMCAM_CAMERA_ANTI_HANDSHAKE             "camera-anti-handshake"
853
854 /**
855  * Video Stabilization
856  * @see         MMCamcorderVideoStabilizationMode
857  */
858 #define MMCAM_CAMERA_VIDEO_STABILIZATION        "camera-video-stabilization"
859
860 /**
861  * FPS Auto. When you set true to this attribute, FPS will vary depending on the amount of the light.
862  */
863 #define MMCAM_CAMERA_FPS_AUTO                   "camera-fps-auto"
864
865 /**
866  * Rotation angle of video input stream.
867  * @see         MMVideoInputRotationType (in mm_types.h)
868  */
869 #define MMCAM_CAMERA_ROTATION                   "camera-rotation"
870
871 /**
872  * HDR(High Dynamic Range) Capture mode
873  * @see         MMCamcorderHDRMode
874  */
875 #define MMCAM_CAMERA_HDR_CAPTURE                "camera-hdr-capture"
876
877 /**
878  * Bitrate of Audio Encoder
879  */
880 #define MMCAM_AUDIO_ENCODER_BITRATE             "audio-encoder-bitrate"
881
882 /**
883  * Bitrate of Video Encoder
884  */
885 #define MMCAM_VIDEO_ENCODER_BITRATE             "video-encoder-bitrate"
886
887 /**
888  * Encoding quality of Image codec
889  */
890 #define MMCAM_IMAGE_ENCODER_QUALITY             "image-encoder-quality"
891
892 /**
893  * Brightness level
894  */
895 #define MMCAM_FILTER_BRIGHTNESS                 "filter-brightness"
896
897 /**
898  * Contrast level
899  */
900 #define MMCAM_FILTER_CONTRAST                   "filter-contrast"
901
902 /**
903  * White balance
904  * @see         MMCamcorderWhiteBalanceType
905  */
906 #define MMCAM_FILTER_WB                         "filter-wb"
907
908 /**
909  * Color tone. (Color effect)
910  * @see         MMCamcorderColorToneType
911  */
912 #define MMCAM_FILTER_COLOR_TONE                 "filter-color-tone"
913
914 /**
915  * Scene mode (Program mode)
916  * @see         MMCamcorderSceneModeType
917  */
918 #define MMCAM_FILTER_SCENE_MODE                 "filter-scene-mode"
919
920 /**
921  * Saturation  level
922  */
923 #define MMCAM_FILTER_SATURATION                 "filter-saturation"
924
925 /**
926  * Hue  level
927  */
928 #define MMCAM_FILTER_HUE                        "filter-hue"
929
930 /**
931  * Sharpness  level
932  */
933 #define MMCAM_FILTER_SHARPNESS                  "filter-sharpness"
934
935 /**
936  * Pixel format that you want to capture. If you set MM_PIXEL_FORMAT_ENCODED, 
937  * the result will be encoded by image codec specified in #MMCAM_IMAGE_ENCODER.
938  * If not, the result will be raw data.
939  *
940  * @see         MMPixelFormatType (in mm_types.h)
941  */
942 #define MMCAM_CAPTURE_FORMAT                    "capture-format"
943
944 /**
945  * Width of the image that you want to capture
946  */
947 #define MMCAM_CAPTURE_WIDTH                     "capture-width"
948
949 /**
950  * Height of the image that you want to capture
951
952  */
953 #define MMCAM_CAPTURE_HEIGHT                    "capture-height"
954
955 /**
956  * Total count of capturing. If you set this, it will caputre multiple time.
957  */
958 #define MMCAM_CAPTURE_COUNT                     "capture-count"
959
960 /**
961  * Interval between each capturing on Multishot.
962  */
963 #define MMCAM_CAPTURE_INTERVAL                  "capture-interval"
964
965 /**
966  * Set this when you want to stop multishot immediately.
967  */
968 #define MMCAM_CAPTURE_BREAK_CONTINUOUS_SHOT     "capture-break-cont-shot"
969
970 /**
971  * Raw data of captured image which resolution is same as preview.
972  * This is READ-ONLY attribute and only available in capture callback.
973  * This should be used after casted as MMCamcorderCaptureDataType.
974  */
975 #define MMCAM_CAPTURED_SCREENNAIL               "captured-screennail"
976
977 /**
978  * Raw data of EXIF. This is READ-ONLY attribute and only available in capture callback.
979  */
980 #define MMCAM_CAPTURED_EXIF_RAW_DATA            "captured-exif-raw-data"
981
982 /**
983  * Pointer of display buffer or ID of xwindow.
984  */
985 #define MMCAM_DISPLAY_HANDLE                    "display-handle"
986
987 /**
988  * Pointer of user data for display updated callback.
989  */
990 #define MMCAM_DISPLAY_HANDLE_USER_DATA          "display-handle-user-data"
991
992 /**
993  * Device of display.
994  * @see         MMDisplayDeviceType (in mm_types.h)
995  */
996 #define MMCAM_DISPLAY_DEVICE                    "display-device"
997
998 /**
999  * Surface of display.
1000  * @see         MMDisplaySurfaceType (in mm_types.h)
1001  */
1002 #define MMCAM_DISPLAY_SURFACE                    "display-surface"
1003
1004 /**
1005  * Mode of display.
1006  * @see         MMDisplayModeType (in mm_types.h)
1007  */
1008 #define MMCAM_DISPLAY_MODE                       "display-mode"
1009
1010 /**
1011  * X position of display rectangle.
1012  * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1013  * @see         MMCamcorderGeometryMethod
1014  */
1015 #define MMCAM_DISPLAY_RECT_X                    "display-rect-x"
1016
1017 /**
1018  * Y position of display rectangle
1019  * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1020  * @see         MMCamcorderGeometryMethod
1021  */
1022 #define MMCAM_DISPLAY_RECT_Y                    "display-rect-y"
1023
1024 /**
1025  * Width of display rectangle
1026  * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1027  * @see         MMCamcorderGeometryMethod
1028  */
1029 #define MMCAM_DISPLAY_RECT_WIDTH                "display-rect-width"
1030
1031 /**
1032  * Height of display rectangle
1033  * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1034  * @see         MMCamcorderGeometryMethod
1035  */
1036 #define MMCAM_DISPLAY_RECT_HEIGHT               "display-rect-height"
1037
1038 /**
1039  * X position of source rectangle. When you want to crop the source, you can set the area with this value.
1040  */
1041 #define MMCAM_DISPLAY_SOURCE_X                  "display-src-x"
1042
1043 /**
1044  * Y position of source rectangle. When you want to crop the source, you can set the area with this value.
1045  */
1046 #define MMCAM_DISPLAY_SOURCE_Y                  "display-src-y"
1047
1048 /**
1049  * Width of source rectangle. When you want to crop the source, you can set the area with this value.
1050  */
1051 #define MMCAM_DISPLAY_SOURCE_WIDTH              "display-src-width"
1052
1053 /**
1054  * Height of source rectangle. When you want to crop the source, you can set the area with this value.
1055  */
1056 #define MMCAM_DISPLAY_SOURCE_HEIGHT             "display-src-height"
1057
1058 /**
1059  * Rotation angle of display.
1060  * @see         MMDisplayRotationType (in mm_types.h)
1061  */
1062 #define MMCAM_DISPLAY_ROTATION                  "display-rotation"
1063
1064 /**
1065  * Flip of display.
1066  * @see         MMFlipType (in mm_types.h)
1067  */
1068 #define MMCAM_DISPLAY_FLIP                      "display-flip"
1069
1070 /**
1071  * Visible of display.
1072  */
1073 #define MMCAM_DISPLAY_VISIBLE                   "display-visible"
1074
1075 /**
1076  * A scale of displayed image. Available value is like below.
1077  * @see         MMDisplayScaleType (in mm_types.h)
1078  */
1079 #define MMCAM_DISPLAY_SCALE                     "display-scale"
1080
1081 /**
1082  * A method that describes a form of geometry for display.
1083  * @see         MMCamcorderGeometryMethod
1084  */
1085 #define MMCAM_DISPLAY_GEOMETRY_METHOD           "display-geometry-method"
1086
1087 /**
1088  * A videosink name of evas surface.
1089  * This is READ-ONLY attribute.
1090  */
1091 #define MMCAM_DISPLAY_EVAS_SURFACE_SINK         "display-evas-surface-sink"
1092
1093 /**
1094  * This attribute is only available if value of MMCAM_DISPLAY_EVAS_SURFACE_SINK "evaspixmapsink"
1095  */
1096 #define MMCAM_DISPLAY_EVAS_DO_SCALING           "display-evas-do-scaling"
1097
1098 /**
1099  * Target filename. Only used in Audio/Video recording. This is not used for capturing.
1100  */
1101 #define MMCAM_TARGET_FILENAME                   "target-filename"
1102
1103 /**
1104  * Maximum size(Kbyte) of recording file. If the size of file reaches this value,
1105  * camcorder will send 'MM_MESSAGE_CAMCORDER_MAX_SIZE' message.
1106  */
1107 #define MMCAM_TARGET_MAX_SIZE                   "target-max-size"
1108
1109 /**
1110  * Time limit(Second) of recording file. If the elapsed time of recording reaches this value, 
1111  * camcorder will send 'MM_MESSAGE_CAMCORDER_TIME_LIMIT' message.
1112  */
1113 #define MMCAM_TARGET_TIME_LIMIT                 "target-time-limit"
1114
1115 /**
1116  * Enable to write tags. If this value is FALSE, none of tag information will be written to captured file.
1117  */
1118 #define MMCAM_TAG_ENABLE                        "tag-enable"
1119
1120 /**
1121  * Image description.
1122  */
1123 #define MMCAM_TAG_IMAGE_DESCRIPTION             "tag-image-description"
1124
1125 /**
1126  * Orientation of captured image
1127  * @see         MMCamcorderTagOrientation
1128  */
1129 #define MMCAM_TAG_ORIENTATION                   "tag-orientation"
1130
1131 /**
1132  * Orientation of captured video
1133  * @see         MMCamcorderTagVideoOrientation
1134  */
1135 #define MMCAM_TAG_VIDEO_ORIENTATION            "tag-video-orientation"
1136
1137 /**
1138  * software name and version
1139  */
1140 #define MMCAM_TAG_SOFTWARE                      "tag-software"
1141
1142 /**
1143  * Enable to write tags related to GPS. If this value is TRUE, tags related GPS information will be written to captured file.
1144  */
1145 #define MMCAM_TAG_GPS_ENABLE                    "tag-gps-enable"
1146
1147 /**
1148  * Latitude of captured postion. GPS information.
1149  */
1150 #define MMCAM_TAG_LATITUDE                      "tag-latitude"
1151
1152 /**
1153  * Longitude of captured postion. GPS information.
1154  */
1155 #define MMCAM_TAG_LONGITUDE                     "tag-longitude"
1156
1157 /**
1158  * Altitude of captured postion. GPS information.
1159  */
1160 #define MMCAM_TAG_ALTITUDE                      "tag-altitude"
1161
1162 /**
1163  * Strobe control
1164  * @see         MMCamcorderStrobeControl
1165  */
1166 #define MMCAM_STROBE_CONTROL                    "strobe-control"
1167
1168 /**
1169  * Operation Mode of strobe
1170  * @see         MMCamcorderStrobeMode
1171  */
1172 #define MMCAM_STROBE_MODE                       "strobe-mode"
1173
1174 /**
1175  * Detection mode
1176  * @see         MMCamcorderDetectMode
1177  */
1178 #define MMCAM_DETECT_MODE                       "detect-mode"
1179
1180 /**
1181  * Total number of detected object
1182  */
1183 #define MMCAM_DETECT_NUMBER                     "detect-number"
1184
1185 /**
1186  * You can use this attribute to select one of detected objects.
1187  */
1188 #define MMCAM_DETECT_FOCUS_SELECT               "detect-focus-select"
1189
1190 /**
1191  * Recommend preview format for capture
1192  */
1193 #define MMCAM_RECOMMEND_PREVIEW_FORMAT_FOR_CAPTURE     "recommend-preview-format-for-capture"
1194
1195 /**
1196  * Recommend preview format for recording
1197  */
1198 #define MMCAM_RECOMMEND_PREVIEW_FORMAT_FOR_RECORDING   "recommend-preview-format-for-recording"
1199
1200 /**
1201  * Recommend rotation of display
1202  */
1203 #define MMCAM_RECOMMEND_DISPLAY_ROTATION        "recommend-display-rotation"
1204
1205 /**
1206  * Recommend width of camera preview.
1207  * This attribute can be used with #mm_camcorder_get_attribute_info and #MMCamcorderPreviewType.
1208  * @see         mm_camcorder_get_attribute_info, MMCamcorderPreviewType
1209  */
1210 #define MMCAM_RECOMMEND_CAMERA_WIDTH            "recommend-camera-width"
1211
1212 /**
1213  * Recommend height of camera preview
1214  * This attribute can be used with #mm_camcorder_get_attribute_info and #MMCamcorderPreviewType.
1215  * @see         mm_camcorder_get_attribute_info, MMCamcorderPreviewType
1216  */
1217 #define MMCAM_RECOMMEND_CAMERA_HEIGHT           "recommend-camera-height"
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  * Display scaler
1242  */
1243 #define MMCAM_DISPLAY_SCALER                    "display-scaler"
1244
1245 /**
1246  * Bitrate for encoded preview stream
1247  */
1248 #define MMCAM_ENCODED_PREVIEW_BITRATE           "encoded-preview-bitrate"
1249
1250 /**
1251  * I-frame interval for encoded preview stream
1252  */
1253 #define MMCAM_ENCODED_PREVIEW_IFRAME_INTERVAL   "encoded-preview-iframe-interval"
1254
1255 /**
1256  * Name of usb audio device id
1257  */
1258 #define MMCAM_USB_AUDIO_UDEV_ID                 "usb-audio-device-id"
1259
1260 /**
1261  * Enable to write tags for recorded file
1262  */
1263 #define MMCAM_RECORDER_TAG_ENABLE               "recorder-tag-enable"
1264
1265 /*=======================================================================================
1266 | ENUM DEFINITIONS                                                                      |
1267 ========================================================================================*/
1268 /**
1269  * An enumeration for camcorder states.
1270  */
1271 typedef enum {
1272         MM_CAMCORDER_STATE_NONE,                /**< Camcorder is not created yet */
1273         MM_CAMCORDER_STATE_NULL,                /**< Camcorder is created, but not initialized yet */
1274         MM_CAMCORDER_STATE_READY,               /**< Camcorder is ready to capture */
1275         MM_CAMCORDER_STATE_PREPARE,             /**< Camcorder is prepared to capture (Preview) */
1276         MM_CAMCORDER_STATE_CAPTURING,           /**< Camcorder is now capturing still images */
1277         MM_CAMCORDER_STATE_RECORDING,           /**< Camcorder is now recording */
1278         MM_CAMCORDER_STATE_PAUSED,              /**< Camcorder is paused while recording */
1279         MM_CAMCORDER_STATE_NUM,                 /**< Number of camcorder states */
1280 } MMCamcorderStateType;
1281
1282 /**
1283  * An enumeration for camcorder mode.
1284  */
1285 typedef enum {
1286         MM_CAMCORDER_MODE_VIDEO_CAPTURE = 0,    /**< Video recording and Image capture mode */
1287         MM_CAMCORDER_MODE_AUDIO,                /**< Audio recording mode */
1288 } MMCamcorderModeType;
1289
1290 /**
1291  * An enumeration for facing direction.
1292  */
1293 typedef enum {
1294         MM_CAMCORDER_CAMERA_FACING_DIRECTION_REAR = 0, /**< Facing direction of camera is REAR */
1295         MM_CAMCORDER_CAMERA_FACING_DIRECTION_FRONT,    /**< Facing direction of camera is FRONT */
1296 } MMCamcorderCameraFacingDirection;
1297
1298
1299 /**
1300  * An enumeration of Audio Format.
1301  */
1302 typedef enum
1303 {
1304         MM_CAMCORDER_AUDIO_FORMAT_PCM_U8 = 0,           /**< unsigned 8bit audio */
1305         MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE = 2,       /**< signed 16bit audio. Little endian. */
1306 } MMCamcorderAudioFormat;
1307
1308
1309 /**
1310  * An enumeration for color tone. Color tone provides an impression of
1311  * seeing through a tinted glass.
1312  */
1313 enum MMCamcorderColorToneType {
1314         MM_CAMCORDER_COLOR_TONE_NONE = 0,               /**< None */
1315         MM_CAMCORDER_COLOR_TONE_MONO,                   /**< Mono */
1316         MM_CAMCORDER_COLOR_TONE_SEPIA,                  /**< Sepia */
1317         MM_CAMCORDER_COLOR_TONE_NEGATIVE,               /**< Negative */
1318         MM_CAMCORDER_COLOR_TONE_BLUE,                   /**< Blue */
1319         MM_CAMCORDER_COLOR_TONE_GREEN,                  /**< Green */
1320         MM_CAMCORDER_COLOR_TONE_AQUA,                   /**< Aqua */
1321         MM_CAMCORDER_COLOR_TONE_VIOLET,                 /**< Violet */
1322         MM_CAMCORDER_COLOR_TONE_ORANGE,                 /**< Orange */
1323         MM_CAMCORDER_COLOR_TONE_GRAY,                   /**< Gray */
1324         MM_CAMCORDER_COLOR_TONE_RED,                    /**< Red */
1325         MM_CAMCORDER_COLOR_TONE_ANTIQUE,                /**< Antique */
1326         MM_CAMCORDER_COLOR_TONE_WARM,                   /**< Warm */
1327         MM_CAMCORDER_COLOR_TONE_PINK,                   /**< Pink */
1328         MM_CAMCORDER_COLOR_TONE_YELLOW,                 /**< Yellow */
1329         MM_CAMCORDER_COLOR_TONE_PURPLE,                 /**< Purple */
1330         MM_CAMCORDER_COLOR_TONE_EMBOSS,                 /**< Emboss */
1331         MM_CAMCORDER_COLOR_TONE_OUTLINE,                /**< Outline */
1332         MM_CAMCORDER_COLOR_TONE_SOLARIZATION,           /**< Solarization */
1333         MM_CAMCORDER_COLOR_TONE_SKETCH,                 /**< Sketch */
1334         MM_CAMCORDER_COLOR_TONE_WASHED,                 /**< Washed */
1335         MM_CAMCORDER_COLOR_TONE_VINTAGE_WARM,           /**< Vintage warm */
1336         MM_CAMCORDER_COLOR_TONE_VINTAGE_COLD,           /**< Vintage cold */
1337         MM_CAMCORDER_COLOR_TONE_POSTERIZATION,          /**< Posterization */
1338         MM_CAMCORDER_COLOR_TONE_CARTOON,                /**< Cartoon */
1339         MM_CAMCORDER_COLOR_TONE_SELECTIVE_RED,          /**< Selective color - Red */
1340         MM_CAMCORDER_COLOR_TONE_SELECTIVE_GREEN,        /**< Selective color - Green */
1341         MM_CAMCORDER_COLOR_TONE_SELECTIVE_BLUE,         /**< Selective color - Blue */
1342         MM_CAMCORDER_COLOR_TONE_SELECTIVE_YELLOW,       /**< Selective color - Yellow */
1343         MM_CAMCORDER_COLOR_TONE_SELECTIVE_RED_YELLOW,   /**< Selective color - Red and Yellow */
1344 };
1345
1346
1347 /**
1348  * An enumeration for white balance. White Balance is the control that adjusts
1349  * the camcorder's color sensitivity to match the prevailing color of white
1350  * outdoor light, yellower indoor light, or (sometimes) greenish fluorescent
1351  * light. White balance may be set either automatically or manually. White balance
1352  * may be set "incorrectly" on purpose to achieve special effects.
1353  */
1354 enum MMCamcorderWhiteBalanceType {
1355         MM_CAMCORDER_WHITE_BALANCE_NONE = 0,            /**< None */
1356         MM_CAMCORDER_WHITE_BALANCE_AUTOMATIC,           /**< Automatic */
1357         MM_CAMCORDER_WHITE_BALANCE_DAYLIGHT,            /**< Daylight */
1358         MM_CAMCORDER_WHITE_BALANCE_CLOUDY,              /**< Cloudy */
1359         MM_CAMCORDER_WHITE_BALANCE_FLUOROSCENT,         /**< Fluorescent */
1360         MM_CAMCORDER_WHITE_BALANCE_INCANDESCENT,        /**< Incandescent */
1361         MM_CAMCORDER_WHITE_BALANCE_SHADE,               /**< Shade */
1362         MM_CAMCORDER_WHITE_BALANCE_HORIZON,             /**< Horizon */
1363         MM_CAMCORDER_WHITE_BALANCE_FLASH,               /**< Flash */
1364         MM_CAMCORDER_WHITE_BALANCE_CUSTOM,              /**< Custom */
1365 };
1366
1367
1368 /**
1369  * An enumeration for scene mode. Scene mode gives the environment condition
1370  * for operating camcorder. The mode of operation can be in daylight, night and
1371  * backlight. It can be an automatic setting also.
1372  */
1373 enum MMCamcorderSceneModeType {
1374         MM_CAMCORDER_SCENE_MODE_NORMAL = 0,     /**< Normal */
1375         MM_CAMCORDER_SCENE_MODE_PORTRAIT,       /**< Portrait */
1376         MM_CAMCORDER_SCENE_MODE_LANDSCAPE,      /**< Landscape */
1377         MM_CAMCORDER_SCENE_MODE_SPORTS,         /**< Sports */
1378         MM_CAMCORDER_SCENE_MODE_PARTY_N_INDOOR, /**< Party & indoor */
1379         MM_CAMCORDER_SCENE_MODE_BEACH_N_INDOOR, /**< Beach & indoor */
1380         MM_CAMCORDER_SCENE_MODE_SUNSET,         /**< Sunset */
1381         MM_CAMCORDER_SCENE_MODE_DUSK_N_DAWN,    /**< Dusk & dawn */
1382         MM_CAMCORDER_SCENE_MODE_FALL_COLOR,     /**< Fall */
1383         MM_CAMCORDER_SCENE_MODE_NIGHT_SCENE,    /**< Night scene */
1384         MM_CAMCORDER_SCENE_MODE_FIREWORK,       /**< Firework */
1385         MM_CAMCORDER_SCENE_MODE_TEXT,           /**< Text */
1386         MM_CAMCORDER_SCENE_MODE_SHOW_WINDOW,    /**< Show window */
1387         MM_CAMCORDER_SCENE_MODE_CANDLE_LIGHT,   /**< Candle light */
1388         MM_CAMCORDER_SCENE_MODE_BACKLIGHT,      /**< Backlight */
1389         MM_CAMCORDER_SCENE_MODE_AQUA,           /**< Aqua */
1390 };
1391
1392
1393 /**
1394  * An enumeration for focusing .
1395  */
1396 enum MMCamcorderFocusMode {
1397         MM_CAMCORDER_FOCUS_MODE_NONE = 0,       /**< Focus mode is None */
1398         MM_CAMCORDER_FOCUS_MODE_PAN,            /**< Pan focus mode*/
1399         MM_CAMCORDER_FOCUS_MODE_AUTO,           /**< Autofocus mode*/
1400         MM_CAMCORDER_FOCUS_MODE_MANUAL,         /**< Manual focus mode*/
1401         MM_CAMCORDER_FOCUS_MODE_TOUCH_AUTO,     /**< Touch Autofocus mode*/
1402         MM_CAMCORDER_FOCUS_MODE_CONTINUOUS,     /**< Continuous Autofocus mode*/
1403 };
1404
1405
1406 /**
1407  * An enumeration for auto focus scan range (af scan range)
1408  */
1409 enum MMCamcorderAutoFocusType {
1410         MM_CAMCORDER_AUTO_FOCUS_NONE = 0,       /**< Scan autofocus is not set */
1411         MM_CAMCORDER_AUTO_FOCUS_NORMAL,         /**< Scan autofocus normally*/
1412         MM_CAMCORDER_AUTO_FOCUS_MACRO,          /**< Scan autofocus in macro mode(close distance)*/
1413         MM_CAMCORDER_AUTO_FOCUS_FULL,           /**< Scan autofocus in full mode(all range scan, limited by dev spec)*/
1414 };
1415
1416
1417 /**
1418  * An enumeration for focus state.
1419  * When 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED' is delievered through 'MMMessageCallback',
1420  * this enumeration will be set to 'code' of MMMessageParamType.
1421  */
1422 enum MMCamcorderFocusStateType {
1423         MM_CAMCORDER_FOCUS_STATE_RELEASED = 0,  /**< Focus released.*/
1424         MM_CAMCORDER_FOCUS_STATE_ONGOING,       /**< Focus in pregress*/
1425         MM_CAMCORDER_FOCUS_STATE_FOCUSED,       /**< Focus success*/
1426         MM_CAMCORDER_FOCUS_STATE_FAILED,        /**< Focus failed*/
1427 };
1428
1429
1430 /**
1431  * An enumeration for ISO.
1432  */
1433 enum MMCamcorderISOType {
1434         MM_CAMCORDER_ISO_AUTO = 0,              /**< ISO auto mode*/
1435         MM_CAMCORDER_ISO_50,                    /**< ISO 50*/
1436         MM_CAMCORDER_ISO_100,                   /**< ISO 100*/
1437         MM_CAMCORDER_ISO_200,                   /**< ISO 200*/
1438         MM_CAMCORDER_ISO_400,                   /**< ISO 400*/
1439         MM_CAMCORDER_ISO_800,                   /**< ISO 800*/
1440         MM_CAMCORDER_ISO_1600,                  /**< ISO 1600*/
1441         MM_CAMCORDER_ISO_3200,                  /**< ISO 3200*/
1442         MM_CAMCORDER_ISO_6400,                  /**< ISO 6400*/
1443         MM_CAMCORDER_ISO_12800,                 /**< ISO 12800*/
1444 };
1445
1446 /**
1447  * An enumeration for Automatic exposure.
1448  */
1449 enum MMCamcorderAutoExposureType {
1450         MM_CAMCORDER_AUTO_EXPOSURE_OFF = 0,     /**< AE off*/
1451         MM_CAMCORDER_AUTO_EXPOSURE_ALL,         /**< AE on, XXX mode*/
1452         MM_CAMCORDER_AUTO_EXPOSURE_CENTER_1,    /**< AE on, XXX mode*/
1453         MM_CAMCORDER_AUTO_EXPOSURE_CENTER_2,    /**< AE on, XXX mode*/
1454         MM_CAMCORDER_AUTO_EXPOSURE_CENTER_3,    /**< AE on, XXX mode*/
1455         MM_CAMCORDER_AUTO_EXPOSURE_SPOT_1,      /**< AE on, XXX mode*/
1456         MM_CAMCORDER_AUTO_EXPOSURE_SPOT_2,      /**< AE on, XXX mode*/
1457         MM_CAMCORDER_AUTO_EXPOSURE_CUSTOM_1,    /**< AE on, XXX mode*/
1458         MM_CAMCORDER_AUTO_EXPOSURE_CUSTOM_2,    /**< AE on, XXX mode*/
1459 };
1460
1461
1462 /**
1463  * An enumeration for WDR mode .
1464  */
1465 enum MMCamcorderWDRMode {
1466         MM_CAMCORDER_WDR_OFF = 0,               /**< WDR OFF*/
1467         MM_CAMCORDER_WDR_ON,                    /**< WDR ON*/
1468         MM_CAMCORDER_WDR_AUTO,                  /**< WDR AUTO*/
1469 };
1470
1471
1472 /**
1473  * An enumeration for HDR capture mode
1474  */
1475 enum MMCamcorderHDRMode {
1476         MM_CAMCORDER_HDR_OFF = 0,               /**< HDR OFF */
1477         MM_CAMCORDER_HDR_ON,                    /**< HDR ON and no original data - capture callback will be come once */
1478         MM_CAMCORDER_HDR_ON_AND_ORIGINAL,       /**< HDR ON and original data - capture callback will be come twice(1st:Original, 2nd:HDR) */
1479 };
1480
1481
1482 /**
1483  * An enumeration for Anti-handshake mode .
1484  */
1485 enum MMCamcorderAHSMode {
1486         MM_CAMCORDER_AHS_OFF = 0,               /**< AHS OFF*/
1487         MM_CAMCORDER_AHS_ON,                    /**< AHS ON*/
1488         MM_CAMCORDER_AHS_AUTO,                  /**< AHS AUTO*/
1489         MM_CAMCORDER_AHS_MOVIE,                 /**< AHS MOVIE*/
1490 };
1491
1492
1493 /**
1494  * An enumeration for Video stabilization mode
1495  */
1496 enum MMCamcorderVideoStabilizationMode {
1497         MM_CAMCORDER_VIDEO_STABILIZATION_OFF = 0,       /**< Video Stabilization OFF*/
1498         MM_CAMCORDER_VIDEO_STABILIZATION_ON,            /**< Video Stabilization ON*/
1499 };
1500
1501
1502 /**
1503  * Geometry method for camcorder display.
1504  */
1505 enum MMCamcorderGeometryMethod {
1506         MM_CAMCORDER_LETTER_BOX = 0,            /**< Letter box*/
1507         MM_CAMCORDER_ORIGIN_SIZE,               /**< Origin size*/
1508         MM_CAMCORDER_FULL,                      /**< full-screen*/
1509         MM_CAMCORDER_CROPPED_FULL,              /**< Cropped full-screen*/
1510         MM_CAMCORDER_ORIGIN_OR_LETTER,          /**< Origin size or Letter box*/
1511         MM_CAMCORDER_CUSTOM_ROI,                /**< Explicitely described destination ROI*/
1512 };
1513
1514
1515 /**
1516  * An enumeration for orientation values of tag .
1517  */
1518 enum MMCamcorderTagOrientation {
1519         MM_CAMCORDER_TAG_ORT_NONE =0,           /**< No Orientation.*/
1520         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.*/
1521         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.*/
1522         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.*/
1523         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.*/
1524         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.*/
1525         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.*/
1526         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.*/
1527         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.*/
1528 };
1529
1530 /**
1531  * An enumeration for captured video orientation values of tag .
1532  */
1533 enum MMCamcorderTagVideoOrientation {
1534         MM_CAMCORDER_TAG_VIDEO_ORT_NONE =0,     /**< No Orientation.*/
1535         MM_CAMCORDER_TAG_VIDEO_ORT_90,          /**< 90 degree */
1536         MM_CAMCORDER_TAG_VIDEO_ORT_180, /**< 180 degree */
1537         MM_CAMCORDER_TAG_VIDEO_ORT_270, /**< 270 degree */
1538 };
1539
1540
1541
1542 /**
1543  * An enumeration for Strobe mode.
1544  */
1545 enum MMCamcorderStrobeMode {
1546         MM_CAMCORDER_STROBE_MODE_OFF = 0,               /**< Always off */
1547         MM_CAMCORDER_STROBE_MODE_ON,                    /**< Always splashes */
1548         MM_CAMCORDER_STROBE_MODE_AUTO,                  /**< Depending on intensity of light, strobe starts to flash. */
1549         MM_CAMCORDER_STROBE_MODE_REDEYE_REDUCTION,      /**< Red eye reduction. Multiple flash before capturing. */
1550         MM_CAMCORDER_STROBE_MODE_SLOW_SYNC,             /**< Slow sync. A type of curtain synchronization. */
1551         MM_CAMCORDER_STROBE_MODE_FRONT_CURTAIN,         /**< Front curtain. A type of curtain synchronization. */
1552         MM_CAMCORDER_STROBE_MODE_REAR_CURTAIN,          /**< Rear curtain. A type of curtain synchronization. */
1553         MM_CAMCORDER_STROBE_MODE_PERMANENT,             /**< keep turned on until turning off */
1554 };
1555
1556
1557 /**
1558  * An enumeration for Strobe Control.
1559  */
1560 enum MMCamcorderStrobeControl {
1561         MM_CAMCORDER_STROBE_CONTROL_OFF = 0,    /**< turn off the flash light */
1562         MM_CAMCORDER_STROBE_CONTROL_ON,         /**< turn on the flash light */
1563         MM_CAMCORDER_STROBE_CONTROL_CHARGE,     /**< charge the flash light */
1564 };
1565
1566
1567 /**
1568  * An enumeration for Detection mode.
1569  */
1570 enum MMCamcorderDetectMode {
1571         MM_CAMCORDER_DETECT_MODE_OFF = 0,       /**< turn detection off */
1572         MM_CAMCORDER_DETECT_MODE_ON,            /**< turn detection on */
1573 };
1574
1575
1576 /**
1577  * An enumeration for recommended preview resolution.
1578  */
1579 enum MMCamcorderPreviewType {
1580         MM_CAMCORDER_PREVIEW_TYPE_NORMAL = 0,   /**< normal ratio like 4:3 */
1581         MM_CAMCORDER_PREVIEW_TYPE_WIDE,         /**< wide ratio like 16:9 */
1582         MM_CAMCORDER_PREVIEW_TYPE_SQUARE,       /**< square ratio like 1:1 */
1583 };
1584
1585
1586 /**********************************
1587 *          Attribute info         *
1588 **********************************/
1589 /**
1590  * An enumeration for attribute values types.
1591  */
1592 typedef enum{
1593         MM_CAM_ATTRS_TYPE_INVALID = -1,         /**< Type is invalid */
1594         MM_CAM_ATTRS_TYPE_INT,                  /**< Integer type attribute */
1595         MM_CAM_ATTRS_TYPE_DOUBLE,               /**< Double type attribute */
1596         MM_CAM_ATTRS_TYPE_STRING,               /**< UTF-8 String type attribute */
1597         MM_CAM_ATTRS_TYPE_DATA,                 /**< Pointer type attribute */
1598 }MMCamAttrsType;
1599
1600
1601 /**
1602  * An enumeration for attribute validation type.
1603  */
1604 typedef enum {
1605         MM_CAM_ATTRS_VALID_TYPE_INVALID = -1,   /**< Invalid validation type */
1606         MM_CAM_ATTRS_VALID_TYPE_NONE,           /**< Do not check validity */
1607         MM_CAM_ATTRS_VALID_TYPE_INT_ARRAY,      /**< validity checking type of integer array */
1608         MM_CAM_ATTRS_VALID_TYPE_INT_RANGE,      /**< validity checking type of integer range */
1609         MM_CAM_ATTRS_VALID_TYPE_DOUBLE_ARRAY,   /**< validity checking type of double array */
1610         MM_CAM_ATTRS_VALID_TYPE_DOUBLE_RANGE,   /**< validity checking type of double range */
1611 } MMCamAttrsValidType;
1612
1613
1614 /**
1615  * An enumeration for attribute access flag.
1616  */
1617 typedef enum {
1618         MM_CAM_ATTRS_FLAG_DISABLED = 0,         /**< None flag is set. This means the attribute is not allowed to use.  */
1619         MM_CAM_ATTRS_FLAG_READABLE = 1 << 0,    /**< Readable */
1620         MM_CAM_ATTRS_FLAG_WRITABLE = 1 << 1,    /**< Writable */
1621         MM_CAM_ATTRS_FLAG_MODIFIED = 1 << 2,    /**< Modified */
1622         MM_CAM_ATTRS_FLAG_RW = MM_CAM_ATTRS_FLAG_READABLE | MM_CAM_ATTRS_FLAG_WRITABLE, /**< Readable and Writable */
1623 } MMCamAttrsFlag;
1624
1625
1626 /**********************************
1627 *          Stream data            *
1628 **********************************/
1629 /**
1630  * An enumeration for stream data type.
1631  */
1632 typedef enum {
1633         MM_CAM_STREAM_DATA_YUV420 = 0,          /**< YUV420 Packed type - 1 plane */
1634         MM_CAM_STREAM_DATA_YUV422,              /**< YUV422 Packed type - 1 plane */
1635         MM_CAM_STREAM_DATA_YUV420SP,            /**< YUV420 SemiPlannar type - 2 planes */
1636         MM_CAM_STREAM_DATA_YUV420P,             /**< YUV420 Plannar type - 3 planes */
1637         MM_CAM_STREAM_DATA_YUV422P,             /**< YUV422 Plannar type - 3 planes */
1638         MM_CAM_STREAM_DATA_ENCODED              /**< Encoded data type - 1 plane */
1639 } MMCamStreamData;
1640
1641
1642 /*=======================================================================================
1643 | STRUCTURE DEFINITIONS                                                                 |
1644 ========================================================================================*/
1645 /**
1646  * A structure for attribute information
1647  */
1648 typedef struct {
1649         MMCamAttrsType type;
1650         MMCamAttrsFlag flag;
1651         MMCamAttrsValidType validity_type;
1652
1653         /**
1654          * A union that describes validity of the attribute. 
1655          * Only when type is 'MM_CAM_ATTRS_TYPE_INT' or 'MM_CAM_ATTRS_TYPE_DOUBLE',
1656          * the attribute can have validity.
1657          */
1658         union {
1659                 /**
1660                  * Validity structure for integer array.
1661                  */
1662                  struct {
1663                         int *array;             /**< a pointer of array */
1664                         int count;              /**< size of array */
1665                         int def;                /**< default value. Real value not index of array */
1666                 } int_array;
1667
1668                 /**
1669                  * Validity structure for integer range.
1670                  */
1671                 struct {
1672                         int min;                /**< minimum range */
1673                         int max;                /**< maximum range */
1674                         int def;                /**< default value */
1675                 } int_range;
1676
1677                 /**
1678                  * Validity structure for double array.
1679                  */
1680                  struct {
1681                         double *array;          /**< a pointer of array */
1682                         int count;              /**< size of array */
1683                         double def;             /**< default value. Real value not index of array */
1684                 } double_array;
1685
1686                 /**
1687                  * Validity structure for double range.
1688                  */
1689                 struct {
1690                         double min;             /**< minimum range */
1691                         double max;             /**< maximum range */
1692                         double def;             /**< default value */
1693                 } double_range;
1694         };
1695 } MMCamAttrsInfo;
1696
1697
1698 /* General Structure */
1699 /**
1700  * Structure for capture data.
1701  */
1702 typedef struct {
1703         void *data;                     /**< pointer of captured image */
1704         unsigned int length;            /**< length of captured image (in byte)*/
1705         MMPixelFormatType format;       /**< image format */
1706         int width;                      /**< width of captured image */
1707         int height;                     /**< height of captured image */
1708         int encoder_type;               /**< encoder type */
1709 } MMCamcorderCaptureDataType;
1710
1711
1712 /**
1713  * Structure for video stream data.
1714  */
1715 #define BUFFER_MAX_PLANE_NUM 4
1716
1717 typedef struct {
1718         union {
1719                 struct {
1720                         unsigned char *yuv;
1721                         unsigned int length_yuv;
1722                 } yuv420, yuv422;
1723                 struct {
1724                         unsigned char *y;
1725                         unsigned int length_y;
1726                         unsigned char *uv;
1727                         unsigned int length_uv;
1728                 } yuv420sp;
1729                 struct {
1730                         unsigned char *y;
1731                         unsigned int length_y;
1732                         unsigned char *u;
1733                         unsigned int length_u;
1734                         unsigned char *v;
1735                         unsigned int length_v;
1736                 } yuv420p, yuv422p;
1737                 struct {
1738                         unsigned char *data;
1739                         unsigned int length_data;
1740                 } encoded;
1741         } data;                         /**< pointer of captured stream */
1742         MMCamStreamData data_type;      /**< data type */
1743         unsigned int length_total;      /**< total length of stream buffer (in byte)*/
1744         unsigned int num_planes;        /**< number of planes */
1745         MMPixelFormatType format;       /**< image format */
1746         int width;                      /**< width of video buffer */
1747         int height;                     /**< height of video buffer */
1748         unsigned int timestamp;         /**< timestamp of stream buffer (msec)*/
1749         void *bo[BUFFER_MAX_PLANE_NUM]; /**< TBM buffer object */
1750         void *internal_buffer;          /**< Internal buffer pointer */
1751         int stride[BUFFER_MAX_PLANE_NUM];    /**< Stride of each plane */
1752         int elevation[BUFFER_MAX_PLANE_NUM]; /**< Elevation of each plane */
1753 } MMCamcorderVideoStreamDataType;
1754
1755
1756 /**
1757  * Structure for audio stream data.
1758  */
1759 typedef struct {
1760         void *data;                             /**< pointer of captured stream */
1761         unsigned int length;                    /**< length of stream buffer (in byte)*/
1762         MMCamcorderAudioFormat format;          /**< audio format */
1763         int channel;                            /**< number of channel of the stream */
1764         unsigned int timestamp;                 /**< timestamp of stream buffer (msec)*/
1765         float volume_dB;                        /**< dB value of audio stream */
1766 } MMCamcorderAudioStreamDataType;
1767
1768
1769 /**
1770   * Prerequisite information for mm_camcorder_create()
1771   * The information to set prior to create.
1772   */
1773 typedef struct {
1774         enum MMVideoDeviceType videodev_type;   /**< Video device type */
1775         /* For future use */
1776         int reserved[4];                        /**< reserved fields */
1777 } MMCamPreset;
1778
1779
1780 /**
1781  * Report structure of recording file
1782  */
1783 typedef struct {
1784         char *recording_filename;               /**< File name of stored recording file. Please free after using. */
1785 } MMCamRecordingReport; /**< report structure definition of recording file */
1786
1787
1788 /**
1789  * Face detect defailed information
1790  */
1791 typedef struct _MMCamFaceInfo {
1792         int id;                                 /**< id of each face */
1793         int score;                              /**< score of each face */
1794         MMRectType rect;                        /**< area of face */
1795 } MMCamFaceInfo;
1796
1797 /**
1798  * Face detect information
1799  */
1800 typedef struct _MMCamFaceDetectInfo {
1801         int num_of_faces;                       /**< number of detected faces */
1802         MMCamFaceInfo *face_info;               /**< face information, this should be freed after use it. */
1803 } MMCamFaceDetectInfo;
1804
1805
1806 /*=======================================================================================
1807 | TYPE DEFINITIONS                                                                      |
1808 ========================================================================================*/
1809 /**
1810  *      Function definition for video stream callback.
1811  *  Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(), 
1812  *  mm_camcorder_unrealize(), mm_camcorder_record(), mm_camcorder_commit(), and mm_camcorder_cancel(), etc.
1813  *  Please don't hang this function long. It may cause low performance of preview or occur timeout error from video source. 
1814  *  Also, you're not allowed to call mm_camcorder_stop() even in other context, while you're hanging this function. 
1815  *  I recommend to you releasing this function ASAP.
1816  *
1817  *      @param[in]      stream                  Reference pointer to video stream data
1818  *      @param[in]      user_param              User parameter which is received from user when callback function was set
1819  *      @return         This function returns true on success, or false on failure.
1820  *      @remarks                This function is issued in the context of gstreamer (video sink thread).
1821  */
1822 typedef gboolean (*mm_camcorder_video_stream_callback)(MMCamcorderVideoStreamDataType *stream, void *user_param);
1823
1824
1825 /**
1826  * Video frame render error callback function type.
1827  *
1828  *      @param[in]      error_id                cause of error
1829  *      @param[in]      user_param              User defined parameter which is passed when set video frame render error callback
1830  *
1831  * @return      This callback function have to return MM_ERROR_NONE.
1832  */
1833 typedef gboolean (*mm_camcorder_video_frame_render_error_callback) (void *error_id, void *user_param);
1834
1835
1836 /**
1837  *      Function definition for audio stream callback.
1838  *  Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(),
1839  *  mm_camcorder_unrealize(), mm_camcorder_record(), mm_camcorder_commit(), and mm_camcorder_cancel(), etc.
1840  *  Please don't hang this function long. It may cause low performance of camcorder or occur timeout error from audio source.
1841  *  I recommend to you releasing this function ASAP.
1842  *
1843  *      @param[in]      stream                  Reference pointer to audio stream data
1844  *      @param[in]      user_param              User parameter which is received from user when callback function was set
1845  *      @return         This function returns true on success, or false on failure.
1846  *      @remarks
1847  */
1848 typedef gboolean (*mm_camcorder_audio_stream_callback)(MMCamcorderAudioStreamDataType *stream, void *user_param);
1849
1850
1851 /**
1852  *      Function definition for video capture callback.
1853  *  Like '#mm_camcorder_video_stream_callback', you can't call mm_camcorder_stop() while you are hanging this function.
1854  *
1855  *      @param[in]      frame                   Reference pointer to captured data
1856  *      @param[in]      thumbnail               Reference pointer to thumbnail data
1857  *      @param[in]      user_param              User parameter which is received from user when callback function was set
1858  *      @return         This function returns true on success, or false on failure.
1859  *      @remarks                This function is issued in the context of gstreamer (video src thread).
1860  */
1861 typedef gboolean (*mm_camcorder_video_capture_callback)(MMCamcorderCaptureDataType *frame, MMCamcorderCaptureDataType *thumbnail, void *user_param);
1862
1863
1864 /*=======================================================================================
1865 | GLOBAL FUNCTION PROTOTYPES                                                            |
1866 ========================================================================================*/
1867 /**
1868  *    mm_camcorder_create:\n
1869  *  Create camcorder object. This is the function that an user who wants to use mm_camcorder calls first. 
1870  *  This function creates handle structure and initialize mutex, attributes, gstreamer.
1871  *  When this function success, it will return  a handle of newly created object. 
1872  *  A user have to put the handle when he calls every function of mm_camcorder. \n
1873  *  Second argument of this function is the field to decribe pre-setting information of mm_camcorder such as which camera device it will use.
1874  *  Normally, MM_VIDEO_DEVICE_CAMERA0 is for Main camera(or Mega camera, Back camera), 
1875  *  and MM_VIDEO_DEVICE_CAMERA1 is for VGA camera (or Front camera). If you want audio recording,
1876  *  please set MM_VIDEO_DEVICE_NONE. (No camera device is needed.)
1877  *
1878  *      @param[out]     camcorder       A handle of camcorder.
1879  *      @param[in]      info            Information for camera device. Depending on this information,
1880  *                                      camcorder opens different camera devices.
1881  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
1882  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
1883  *      @see            mm_camcorder_destroy
1884  *      @pre            None
1885  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_NULL
1886  *      @remarks        You can create multiple handles on a context at the same time. However,
1887  *                      camcorder cannot guarantee proper operation because of limitation of resources, such as
1888  *                      camera device, audio device, and display device.
1889  *      @par example
1890  *      @code
1891
1892 #include <mm_camcorder.h>
1893
1894 gboolean initialize_camcorder()
1895 {
1896         int err;
1897         MMCamPreset cam_info;
1898 #if 1
1899         cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
1900 #else
1901         // when you want to record audio only, enable this.
1902         cam_info.videodev_type = MM_VIDEO_DEVICE_NONE;
1903 #endif
1904
1905         err = mm_camcorder_create(&hcam, &cam_info);
1906
1907         if (err != MM_ERROR_NONE) {
1908                 printf("Fail to call mm_camcorder_create = %x\n", err);
1909                 return FALSE;
1910         }
1911
1912         return TRUE;
1913 }
1914
1915  *      @endcode
1916  */
1917 int mm_camcorder_create(MMHandleType *camcorder, MMCamPreset *info);
1918
1919
1920 /**
1921  *    mm_camcorder_destroy:\n
1922  *  Destroy camcorder object. Release handle and all of the resources that were created in mm_camcorder_create().\n
1923  *  This is the finalizing function of mm_camcorder. If this function is not called or fails to call, the handle isn't released fully.
1924  *  This function releases attributes, mutexes, sessions, and handle itself. This function also removes all of remaining messages.
1925  *  So if your application should wait a certain message of mm_camcorder, please wait to call this function till getting the message.
1926  *      
1927  *
1928  *      @param[in]      camcorder       A handle of camcorder.
1929  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
1930  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
1931  *      @see            mm_camcorder_create
1932  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_NULL
1933  *      @post           Because the handle is not valid, you can't check the state.
1934  *      @remarks        None
1935  *      @par example
1936  *      @code
1937
1938 #include <mm_camcorder.h>
1939
1940 gboolean destroy_camcorder()
1941 {
1942         int err;
1943
1944         //Destroy camcorder handle
1945         err = mm_camcorder_destroy(hcam);
1946         if (err < 0) {
1947                 printf("Fail to call mm_camcorder_destroy  = %x\n", err);
1948                 return FALSE;
1949         }
1950
1951         return TRUE;
1952 }
1953
1954  *      @endcode
1955  */
1956 int mm_camcorder_destroy(MMHandleType camcorder);
1957
1958
1959 /**
1960  *    mm_camcorder_realize:\n
1961  *  Allocate resources for camcorder and initialize it.
1962  *  This also creates streamer pipeline. So you have to set attributes that are pivotal to create
1963  *  the pipeline before calling this function. This function also takes a roll to manage confliction
1964  *  between different applications which use camcorder. For example, if you try to use camcorder when
1965  *  other application that is more important such as call application, this function will return
1966  *  'MM_ERROR_POLICY_BLOCKED'. On the contrary, if your application that uses camcorder starts to launch
1967  *  while another application that uses speaker and has lower priority, your application will kick
1968  *  another application.
1969  *
1970  *      @param[in]      camcorder       A handle of camcorder.
1971  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
1972  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
1973  *      @see            mm_camcorder_unrealize
1974  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_NULL
1975  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_READY
1976  *      @remarks        None
1977  *      @par example
1978  *      @code
1979
1980 #include <mm_camcorder.h>
1981
1982 //For image capturing
1983 gboolean initialize_image_capture()
1984 {
1985         int err;
1986         MMCamPreset cam_info;
1987         char *err_attr_name = NULL;
1988         void * hdisplay = NULL;
1989         int hsize = 0;
1990
1991         //Set video device as 'camera0' (main camera device)
1992         cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
1993
1994         err = mm_camcorder_create(&hcam, &cam_info);
1995
1996         if (err != MM_ERROR_NONE) {
1997                 printf("Fail to call mm_camcorder_create = %x\n", err);
1998                 return FALSE;
1999         }
2000
2001         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2002         mm_camcorder_set_video_capture_callback(hcam,(mm_camcorder_video_capture_callback)camcordertest_video_capture_cb, (void*)hcam);
2003
2004         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2005         hsize = sizeof(ad.xid);         //size of xid structure.
2006
2007         // camcorder attribute setting
2008         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2009                                           MMCAM_MODE, MM_CAMCORDER_MODE_IMAGE,
2010                                           MMCAM_IMAGE_ENCODER, MM_IMAGE_CODEC_JPEG,
2011                                           MMCAM_CAMERA_WIDTH, 640,
2012                                           MMCAM_CAMERA_HEIGHT, 480,
2013                                           MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_YUYV,
2014                                           MMCAM_CAMERA_FPS, 30,
2015                                           MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2016                                           MMCAM_DISPLAY_HANDLE, (void*) hdisplay,          hsize,
2017                                           MMCAM_CAPTURE_FORMAT, MM_PIXEL_FORMAT_ENCODED,
2018                                           MMCAM_CAPTURE_WIDTH, 640,
2019                                           MMCAM_CAPTURE_HEIGHT, 480,
2020                                           NULL);
2021
2022         if (err < 0) {
2023                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2024                 if (err_attr_name) {
2025                         free(err_attr_name);
2026                         err_attr_name = NULL;
2027                         return FALSE;
2028                 }
2029         }
2030
2031         err =  mm_camcorder_realize(hcam);
2032         if (err < 0) {
2033                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2034                 return FALSE;
2035         }
2036
2037         return TRUE;
2038 }
2039
2040 //For A/V capturing
2041 gboolean initialize_video_capture()
2042 {
2043         int err;
2044         MMCamPreset cam_info;
2045         char *err_attr_name = NULL;
2046         void * hdisplay = NULL;
2047         int hsize = 0;
2048
2049         //Set video device as 'camera0' (main camera device)
2050         cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2051
2052         err = mm_camcorder_create(&hcam, &cam_info);
2053
2054         if (err != MM_ERROR_NONE) {
2055                 printf("Fail to call mm_camcorder_create = %x\n", err);
2056                 return FALSE;
2057         }
2058
2059         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, hcam);
2060
2061         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2062         hsize = sizeof(ad.xid);         //size of xid structure.
2063
2064         // camcorder attribute setting
2065         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2066                                           MMCAM_MODE, MM_CAMCORDER_MODE_VIDEO,
2067                                           MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2068                                           MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2069                                           MMCAM_VIDEO_ENCODER, MM_VIDEO_CODEC_MPEG4,
2070                                           MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2071                                           MMCAM_CAMERA_WIDTH, 1280,
2072                                           MMCAM_CAMERA_HEIGHT, 720,
2073                                           MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_NV12,
2074                                           MMCAM_CAMERA_FPS, 30,
2075                                           MMCAM_AUDIO_SAMPLERATE, 44100,
2076                                           MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2077                                           MMCAM_AUDIO_CHANNEL, 2,
2078                                           MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2079                                           MMCAM_DISPLAY_HANDLE, (void*) hdisplay,               hsize,
2080                                           MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2081                                           NULL);
2082
2083         if (err < 0) {
2084                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2085                 if (err_attr_name) {
2086                         free(err_attr_name);
2087                         err_attr_name = NULL;
2088                         return FALSE;
2089                 }
2090         }
2091
2092         err =  mm_camcorder_realize(hcam);
2093         if (err < 0) {
2094                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2095                 return FALSE;
2096         }
2097
2098         return TRUE;
2099 }
2100
2101 //For audio(only) capturing
2102 gboolean initialize_audio_capture()
2103 {
2104         int err;
2105         MMCamPreset cam_info;
2106         char *err_attr_name = NULL;
2107         void * hdisplay = NULL;
2108         int hsize = 0;
2109
2110         //Set no video device, because audio recording doesn't need video input.
2111         cam_info.videodev_type = MM_VIDEO_DEVICE_NONE;
2112
2113         err = mm_camcorder_create(&hcam, &cam_info);
2114
2115         if (err != MM_ERROR_NONE) {
2116                 printf("Fail to call mm_camcorder_create = %x\n", err);
2117                 return FALSE;
2118         }
2119
2120         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2121
2122         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2123         hsize = sizeof(ad.xid);         //size of xid structure.
2124
2125         // camcorder attribute setting
2126         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2127                                           MMCAM_MODE, MM_CAMCORDER_MODE_AUDIO,
2128                                           MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2129                                           MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2130                                           MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2131                                           MMCAM_AUDIO_SAMPLERATE, 44100,
2132                                           MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2133                                           MMCAM_AUDIO_CHANNEL, 2,
2134                                           MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2135                                           MMCAM_TARGET_TIME_LIMIT, 360000,
2136                                           NULL);
2137
2138         if (err < 0) {
2139                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2140                 if (err_attr_name) {
2141                         free(err_attr_name);
2142                         err_attr_name = NULL;
2143                         return FALSE;
2144                 }
2145         }
2146
2147         err =  mm_camcorder_realize(hcam);
2148         if (err < 0) {
2149                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2150                 return FALSE;
2151         }
2152
2153         return TRUE;
2154 }
2155  *      @endcode
2156  */
2157 int mm_camcorder_realize(MMHandleType camcorder);
2158
2159
2160 /**
2161  *    mm_camcorder_unrealize:\n
2162  *  Uninitialize camcoder resources and free allocated memory.
2163  *  Most important resource that is released here is gstreamer pipeline of mm_camcorder.
2164  *  Because most of resources, such as camera device, video display device, and audio I/O device, are operating on the gstreamer pipeline, 
2165  *  this function should be called to release its resources.
2166  *  Moreover, mm_camcorder is controlled by audio session manager. If an user doesn't call this function when he want to release mm_camcorder,
2167  *  other multimedia frameworks may face session problem. For more detail information, please refer mm_session module.
2168  *
2169  *      @param[in]      camcorder       A handle of camcorder.
2170  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2171  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2172  *      @see            mm_camcorder_realize
2173  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_READY
2174  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_NULL
2175  *      @remarks        None
2176  *      @par example
2177  *      @code
2178
2179 #include <mm_camcorder.h>
2180
2181 gboolean unrealize_camcorder()
2182 {
2183         int err;
2184
2185         //Release all resources of camcorder handle
2186         err =  mm_camcorder_unrealize(hcam);
2187         if (err < 0) {
2188                 printf("Fail to call mm_camcorder_unrealize  = %x\n", err);
2189                 return FALSE;
2190         }
2191
2192         return TRUE;
2193 }
2194
2195  *      @endcode
2196  */
2197 int mm_camcorder_unrealize(MMHandleType camcorder);
2198
2199
2200 /**
2201  *      mm_camcorder_start:\n
2202  *   Start previewing. (Image/Video mode)
2203  *  'mm_camcorder_video_stream_callback' is activated after calling this function.
2204  *
2205  *      @param[in]      camcorder       A handle of camcorder.
2206  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2207  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2208  *      @see            mm_camcorder_stop
2209  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_READY
2210  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2211  *      @remarks        None
2212  *      @par example
2213  *      @code
2214
2215 #include <mm_camcorder.h>
2216
2217 //For image capturing
2218 gboolean initialize_image_capture()
2219 {
2220         int err;
2221         MMCamPreset cam_info;
2222         char *err_attr_name = NULL;
2223         void * hdisplay = NULL;
2224         int hsize = 0;
2225
2226         //Set video device as 'camera0' (main camera device)
2227         cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2228
2229         err = mm_camcorder_create(&hcam, &cam_info);
2230
2231         if (err != MM_ERROR_NONE) {
2232                         printf("Fail to call mm_camcorder_create = %x\n", err);
2233                         return FALSE;
2234         }
2235
2236         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2237         mm_camcorder_set_video_capture_callback(hcam,(mm_camcorder_video_capture_callback)camcordertest_video_capture_cb, (void*)hcam);
2238
2239         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2240         hsize = sizeof(ad.xid);         //size of xid structure.
2241
2242         // camcorder attribute setting
2243         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2244                                           MMCAM_MODE, MM_CAMCORDER_MODE_IMAGE,
2245                                           MMCAM_IMAGE_ENCODER, MM_IMAGE_CODEC_JPEG,
2246                                           MMCAM_CAMERA_WIDTH, 640,
2247                                           MMCAM_CAMERA_HEIGHT, 480,
2248                                           MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_YUYV,
2249                                           MMCAM_CAMERA_FPS, 30,
2250                                           MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2251                                           MMCAM_DISPLAY_HANDLE, (void*) hdisplay,          hsize,
2252                                           MMCAM_CAPTURE_FORMAT, MM_PIXEL_FORMAT_ENCODED,
2253                                           MMCAM_CAPTURE_WIDTH, 640,
2254                                           MMCAM_CAPTURE_HEIGHT, 480,
2255                                           NULL);
2256
2257         if (err < 0) {
2258                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2259                 if (err_attr_name) {
2260                         free(err_attr_name);
2261                         err_attr_name = NULL;
2262                         return FALSE;
2263                 }
2264         }
2265
2266         err =  mm_camcorder_realize(hcam);
2267         if (err < 0) {
2268                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2269                 return FALSE;
2270         }
2271
2272         // start camcorder
2273         err = mm_camcorder_start(hcam);
2274         if (err < 0) {
2275                 printf("Fail to call mm_camcorder_start  = %x\n", err);
2276                 return FALSE;
2277         }
2278
2279         return TRUE;
2280 }
2281
2282 //For A/V capturing
2283 gboolean initialize_video_capture()
2284 {
2285         int err;
2286         MMCamPreset cam_info;
2287         char *err_attr_name = NULL;
2288         void * hdisplay = NULL;
2289         int hsize = 0;
2290
2291         //Set video device as 'camera0' (main camera device)
2292         cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2293
2294         err = mm_camcorder_create(&hcam, &cam_info);
2295
2296         if (err != MM_ERROR_NONE) {
2297                         printf("Fail to call mm_camcorder_create = %x\n", err);
2298                         return FALSE;
2299         }
2300
2301         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, hcam);
2302
2303         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2304         hsize = sizeof(ad.xid);         //size of xid structure.
2305
2306         // camcorder attribute setting
2307         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2308                                           MMCAM_MODE, MM_CAMCORDER_MODE_VIDEO,
2309                                           MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2310                                           MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2311                                           MMCAM_VIDEO_ENCODER, MM_VIDEO_CODEC_MPEG4,
2312                                           MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2313                                           MMCAM_CAMERA_WIDTH, 1280,
2314                                           MMCAM_CAMERA_HEIGHT, 720,
2315                                           MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_NV12,
2316                                           MMCAM_CAMERA_FPS, 30,
2317                                           MMCAM_AUDIO_SAMPLERATE, 44100,
2318                                           MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2319                                           MMCAM_AUDIO_CHANNEL, 2,
2320                                           MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2321                                           MMCAM_DISPLAY_HANDLE, (void*) hdisplay,               hsize,
2322                                           MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2323                                           NULL);
2324
2325         if (err < 0) {
2326                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2327                 if (err_attr_name) {
2328                         free(err_attr_name);
2329                         err_attr_name = NULL;
2330                         return FALSE;
2331                 }
2332         }
2333
2334         err =  mm_camcorder_realize(hcam);
2335         if (err < 0) {
2336                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2337                 return FALSE;
2338         }
2339
2340         // start camcorder
2341         err = mm_camcorder_start(hcam);
2342         if (err < 0) {
2343                 printf("Fail to call mm_camcorder_start  = %x\n", err);
2344                 return FALSE;
2345         }
2346
2347         return TRUE;
2348 }
2349
2350 //For audio(only) capturing
2351 gboolean initialize_audio_capture()
2352 {
2353         int err;
2354         MMCamPreset cam_info;
2355         char *err_attr_name = NULL;
2356         void * hdisplay = NULL;
2357         int hsize = 0;
2358
2359         //Set no video device, because audio recording doesn't need video input.
2360         cam_info.videodev_type = MM_VIDEO_DEVICE_NONE;
2361
2362         err = mm_camcorder_create(&hcam, &cam_info);
2363
2364         if (err != MM_ERROR_NONE) {
2365                 printf("Fail to call mm_camcorder_create = %x\n", err);
2366                 return FALSE;
2367         }
2368
2369         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2370
2371         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2372         hsize = sizeof(ad.xid);         //size of xid structure.
2373
2374         // camcorder attribute setting
2375         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2376                                           MMCAM_MODE, MM_CAMCORDER_MODE_AUDIO,
2377                                           MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2378                                           MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2379                                           MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2380                                           MMCAM_AUDIO_SAMPLERATE, 44100,
2381                                           MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2382                                           MMCAM_AUDIO_CHANNEL, 2,
2383                                           MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2384                                           MMCAM_TARGET_TIME_LIMIT, 360000,
2385                                           NULL);
2386
2387         if (err < 0) {
2388                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2389                 if (err_attr_name) {
2390                         free(err_attr_name);
2391                         err_attr_name = NULL;
2392                         return FALSE;
2393                 }
2394         }
2395
2396         err =  mm_camcorder_realize(hcam);
2397         if (err < 0) {
2398                 printf("Fail to call mm_camcorder_realize  = %x\n", err);
2399                 return FALSE;
2400         }
2401
2402         // start camcorder
2403         err = mm_camcorder_start(hcam);
2404         if (err < 0) {
2405                 printf("Fail to call mm_camcorder_start  = %x\n", err);
2406                 return FALSE;
2407         }
2408
2409         return TRUE;
2410 }
2411  *      @endcode
2412  */
2413 int mm_camcorder_start(MMHandleType camcorder);
2414
2415
2416 /**
2417  *    mm_camcorder_stop:\n
2418  *  Stop previewing. (Image/Video mode)
2419  *  This function will change the status of pipeline. If an application doesn't return callbacks
2420  *  of camcorder, this function can be locked. For example, if your application still
2421  *  holds '#mm_camcorder_video_capture_callback' or '#mm_camcorder_video_stream_callback',
2422  *  this function could be hung. So users have to return every callback before calling this function.
2423  *
2424  *      @param[in]      camcorder       A handle of camcorder.
2425  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2426  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2427  *      @see            mm_camcorder_start
2428  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_PREPARE
2429  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_READY
2430  *      @remarks        None
2431  *      @par example
2432  *      @code
2433
2434 #include <mm_camcorder.h>
2435
2436 gboolean stop_camcorder()
2437 {
2438         int err;
2439
2440         //Stop preview
2441         err =  mm_camcorder_stop(hcam);
2442         if (err < 0) {
2443                 printf("Fail to call mm_camcorder_stop  = %x\n", err);
2444                 return FALSE;
2445         }
2446
2447         return TRUE;
2448 }
2449
2450  *      @endcode
2451  */
2452 int mm_camcorder_stop(MMHandleType camcorder);
2453
2454
2455 /**
2456  *    mm_camcorder_capture_start:\n
2457  *  Start capturing of still images. (Image mode only)
2458  *  Captured image will be delievered through 'mm_camcorder_video_capture_callback'.
2459  *  So basically, the operation is working asynchronously. \n
2460  *  When a user call this function, MSL will stop to retrieving preview from camera device.
2461  *  Then set capture resolution, pixel format, and encoding type to camera driver. After resuming,
2462  *  camera can get still image.  A user will be notified by
2463  *  'MM_MESSAGE_CAMCORDER_CAPTURED' message when capturing succeed. When a user sets
2464  *  multishot (by setting multiple number to MMCAM_CAPTURE_COUNT), the message
2465  *  will be called multiple time. You can get the number of image from 'code' of
2466  *  'MMMessageParamType'.
2467  *
2468  *      @param[in]      camcorder       A handle of camcorder.
2469  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2470  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2471  *      @see            mm_camcorder_capture_stop
2472  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_PREPARE
2473  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_CAPTURING
2474  *      @remarks        To call this function, preview should be started successfully.\n
2475  *                      This function is a pair of mm_camcorder_capture_stop(). 
2476  *                      So user should call mm_camcorder_capture_stop() after getting captured image.
2477  *      @par example
2478  *      @code
2479
2480 #include <mm_camcorder.h>
2481
2482 gboolean capturing_picture()
2483 {
2484         int err;
2485
2486         err =  mm_camcorder_capture_start(hcam);
2487         if (err < 0) 
2488         {
2489                 printf("Fail to call mm_camcorder_capture_start  = %x\n", err);
2490                 return FALSE;
2491         }
2492
2493         //mm_camcorder_capture_stop should be called after getting
2494         //MM_MESSAGE_CAMCORDER_CAPTURED message.
2495
2496         return TRUE;
2497 }
2498
2499
2500  *      @endcode
2501  */
2502 int mm_camcorder_capture_start(MMHandleType camcorder);
2503
2504
2505 /**
2506  *    mm_camcorder_capture_stop:\n
2507  *  Stop capturing of still images. (Image mode only)
2508  *  This function notifies the end of capturing and launch preview again.
2509  *  Just as mm_camcorder_capture_start(), this funciton stops still image stream and set preview information such as
2510  *  resolution, pixel format, and framerate to camera driver. Then it command to start preview.
2511  *  If you don't call this, preview will not be displayed even though capturing was finished.
2512  *
2513  *      @param[in]      camcorder       A handle of camcorder.
2514  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2515  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2516  *      @see            mm_camcorder_capture_start
2517  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_CAPTURING
2518  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2519  *      @remarks        To call this function, a user has to call mm_camcorder_capture_start() first.\n
2520  *                      This is not a function to stop multishot in the middle of operation. For that,
2521  *                      please use '#MMCAM_CAPTURE_BREAK_CONTINUOUS_SHOT' instead.
2522  *      @par example
2523  *      @code
2524
2525 #include <mm_camcorder.h>
2526
2527 gboolean capturing_picture_stop()
2528 {
2529         int err;
2530
2531         err =  mm_camcorder_capture_stop(hcam);
2532         if (err < 0) {
2533                 printf("Fail to call mm_camcorder_capture_stop  = %x\n", err);
2534                 return FALSE;
2535         }
2536
2537         //After calling upper function, preview will start.
2538
2539         return TRUE;
2540 }
2541
2542  *      @endcode
2543  */
2544 int mm_camcorder_capture_stop(MMHandleType camcorder);
2545
2546
2547 /**
2548  *    mm_camcorder_record:\n
2549  *  Start recording. (Audio/Video mode only)
2550  *  Camcorder starts to write a file when you call this function. You can specify the name of file
2551  *  using '#MMCAM_TARGET_FILENAME'. Beware, if you fail to call mm_camcorder_commit() or mm_camcorder_cancel(),
2552  *  the recorded file is still on the storage.
2553  *
2554  *      @param[in]      camcorder       A handle of camcorder.
2555  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2556  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2557  *      @see            mm_camcorder_pause
2558  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_PREPARE
2559  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_RECORDING
2560  *      @remarks        None
2561  *      @par example
2562  *      @code
2563
2564 #include <mm_camcorder.h>
2565
2566 gboolean record_and_cancel_video_file()
2567 {
2568         int err;
2569
2570         // Start recording
2571         err =  mm_camcorder_record(hcam);
2572         if (err < 0) {
2573                 printf("Fail to call mm_camcorder_record  = %x\n", err);
2574                 return FALSE;
2575         }
2576
2577         return TRUE;
2578 }
2579
2580  *      @endcode
2581  */
2582 int mm_camcorder_record(MMHandleType camcorder);
2583
2584
2585 /**
2586  *    mm_camcorder_pause:\n
2587  *  Pause A/V recording or Audio recording. (Audio/Video mode only)
2588  *  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.
2589  *  If you call mm_camcorder_commit() while on pausing, the recorded file only has Audio and Video stream which were generated before pause().
2590  *
2591  *      @param[in]      camcorder       A handle of camcorder.
2592  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2593  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2594  *      @see            mm_camcorder_record
2595  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_RECORDING
2596  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_PAUSED
2597  *      @remarks        Even though this function is for pausing recording, small amount of buffers could be recorded after pause().
2598  *                      Because the buffers which are existed in the queue were created before pause(), the buffers should be recorded.
2599  *      @par example
2600  *      @code
2601
2602 #include <mm_camcorder.h>
2603
2604 gboolean record_pause_and_resume_recording()
2605 {
2606         int err;
2607
2608         // Start recording
2609         err =  mm_camcorder_record(hcam);
2610         if (err < 0) {
2611                 printf("Fail to call mm_camcorder_record  = %x\n", err);
2612                 return FALSE;
2613         }
2614
2615         // Wait while recording...
2616
2617         // Pause
2618         err =  mm_camcorder_pause(hcam);
2619         if (err < 0) {
2620                 printf("Fail to call mm_camcorder_pause  = %x\n", err);
2621                 return FALSE;
2622         }
2623
2624         // Pausing...
2625
2626         // Resume
2627         err =  mm_camcorder_record(hcam);
2628         if (err < 0) {
2629                 printf("Fail to call mm_camcorder_record  = %x\n", err);
2630                 return FALSE;
2631         }
2632
2633         return TRUE;
2634 }
2635
2636
2637  *      @endcode
2638  */
2639 int mm_camcorder_pause(MMHandleType camcorder);
2640
2641
2642 /**
2643  *    mm_camcorder_commit:\n
2644  *  Stop recording and save results.  (Audio/Video mode only)\n
2645  *  After starting recording, encoded data frame will be stored in the location specified in MMCAM_TARGET_FILENAME.
2646  *  Some encoder or muxer require a certain type of finalizing such as adding some information to header.
2647  *  This function takes that roll. So if you don't call this function after recording, the result file may not be playable.\n
2648  *  After committing successfully, camcorder resumes displaying preview (video recording case).
2649  *  Because this is the function for saving the recording result, the operation is available 
2650  *  only when the mode of camcorder is MM_CAMCORDER_MODE_AUDIO or MM_CAMCORDER_MODE_VIDEO. 
2651  *
2652  *      @param[in]      camcorder       A handle of camcorder.
2653  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2654  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2655  *      @see            mm_camcorder_cancel
2656  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_RECORDING
2657  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2658  *      @remarks        This function can take a few second when recording time is long.
2659  *                      and if there are only quite few input buffer from video src or audio src,
2660  *                      committing could be failed.
2661  *      @par example
2662  *      @code
2663
2664 #include <mm_camcorder.h>
2665
2666 gboolean record_and_save_video_file()
2667 {
2668         int err;
2669
2670         // Start recording
2671         err =  mm_camcorder_record(hcam);
2672         if (err < 0) {
2673                 printf("Fail to call mm_camcorder_record  = %x\n", err);
2674                 return FALSE;
2675         }
2676
2677         // Wait while recording for test...
2678         // In normal case, mm_camcorder_record() and mm_camcorder_commit() aren't called in the same function.
2679
2680         // Save file
2681         err =  mm_camcorder_commit(hcam);
2682         if (err < 0) {
2683                 printf("Fail to call mm_camcorder_commit  = %x\n", err);
2684                 return FALSE;
2685         }
2686
2687         return TRUE;
2688 }
2689
2690  *      @endcode
2691  */
2692 int mm_camcorder_commit(MMHandleType camcorder);
2693
2694
2695 /**
2696  *      mm_camcorder_cancel:\n
2697  *    Stop recording and discard the result. (Audio/Video mode only)
2698  *      When a user want to finish recording without saving the result file, this function can be used.
2699  *      Like mm_camcorder_commit(), this function also stops recording, release related resources(like codec) ,and goes back to preview status.
2700  *      However, instead of saving file, this function unlinks(delete) the result.\n
2701  *      Because this is the function for canceling recording, the operation is available 
2702  *      only when mode is MM_CAMCORDER_MODE_AUDIO or MM_CAMCORDER_MODE_VIDEO. 
2703  *
2704  *      @param[in]      camcorder       A handle of camcorder.
2705  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2706  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2707  *      @see            mm_camcorder_commit
2708  *      @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_RECORDING
2709  *      @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2710  *      @remarks        None
2711  *      @par example
2712  *      @code
2713
2714 #include <mm_camcorder.h>
2715
2716 gboolean record_and_cancel_video_file()
2717 {
2718         int err;
2719
2720         // Start recording
2721         err =  mm_camcorder_record(hcam);
2722         if (err < 0) {
2723                 printf("Fail to call mm_camcorder_record  = %x\n", err);
2724                 return FALSE;
2725         }
2726
2727         // Wait while recording...
2728
2729         // Cancel recording
2730         err =  mm_camcorder_cancel(hcam);
2731         if (err < 0) {
2732                 printf("Fail to call mm_camcorder_cancel  = %x\n", err);
2733                 return FALSE;
2734         }
2735
2736         return TRUE;
2737 }
2738
2739  *      @endcode
2740  */
2741 int mm_camcorder_cancel(MMHandleType camcorder);
2742
2743
2744 /**
2745  *    mm_camcorder_set_message_callback:\n
2746  *  Set callback for receiving messages from camcorder. Through this callback function, camcorder
2747  *  sends various message including status changes, asynchronous error, capturing, and limitations.
2748  *  One thing you have to know is that message callback is working on the main loop of application.
2749  *  So until releasing the main loop, message callback will not be called.
2750  *
2751  *      @param[in]      camcorder       A handle of camcorder.
2752  *      @param[in]      callback        Function pointer of callback function. Please refer 'MMMessageCallback'.
2753  *      @param[in]      user_data       User parameter for passing to callback function.
2754  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2755  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2756  *      @see            MMMessageCallback
2757  *      @pre            None
2758  *      @post           None
2759  *      @remarks        registered 'callback' is called on main loop of the application. So until the main loop is released, 'callback' will not be called.
2760  *      @par example
2761  *      @code
2762
2763 #include <mm_camcorder.h>
2764
2765 gboolean setting_msg_callback()
2766 {
2767         //set callback
2768         mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2769
2770         return TRUE;
2771 }
2772
2773
2774  *      @endcode
2775  */
2776 int mm_camcorder_set_message_callback(MMHandleType camcorder, MMMessageCallback callback, void *user_data);
2777
2778
2779 /**
2780  *    mm_camcorder_set_video_stream_callback:\n
2781  *  Set callback for user defined video stream callback function.
2782  *  Users can retrieve video frame using registered callback. 
2783  *  The callback function holds the same buffer that will be drawed on the display device.
2784  *  So if an user change the buffer, it will be displayed on the device.
2785  *
2786  *      @param[in]      camcorder       A handle of camcorder.
2787  *      @param[in]      callback        Function pointer of callback function.
2788  *      @param[in]      user_data       User parameter for passing to callback function.
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_video_stream_callback
2792  *      @pre            None
2793  *      @post           None
2794  *      @remarks        registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
2795  *      @par example
2796  *      @code
2797
2798 #include <mm_camcorder.h>
2799
2800 gboolean setting_video_stream_callback()
2801 {
2802         //set callback
2803         mm_camcorder_set_video_stream_callback(hcam, (mm_camcorder_video_stream_callback)camcordertest_video_stream_cb, (void*)hcam);
2804
2805         return TRUE;
2806 }
2807  *      @endcode
2808  */
2809 int mm_camcorder_set_video_stream_callback(MMHandleType camcorder, mm_camcorder_video_stream_callback callback, void *user_data);
2810
2811
2812 /**
2813  * This function set callback function for rendering error information of video render plug-in.
2814  *
2815  *      @param[in]      camcorder               Handle of camcorder.
2816  *      @param[in]      callback                Frame render error callback function.
2817  *      @param[in]      user_data               User data which is passed to callback function.
2818  *
2819  *      @return This function returns zero on success, or negative value with error code.
2820  *      @see
2821  *      @remarks        None
2822  *      @par Example
2823  *      @code
2824  *      @endcode
2825  */
2826 int mm_camcorder_set_video_frame_render_error_callback(MMHandleType camcorder, mm_camcorder_video_frame_render_error_callback callback, void *user_data);
2827
2828
2829 /**
2830  *    mm_camcorder_set_video_capture_callback:\n
2831  *  Set callback for user defined video capture callback function.  (Image mode only)
2832  *  mm_camcorder deliever captured image through the callback.\n
2833  *  Normally, this function provides main captured image and thumnail image. But depending on the environment,
2834  *  thumnail would not be available. Information related with main captured image and thumnail image is also included
2835  *  in the argument of the callback function. 
2836  *  For more detail information of callback, please refer 'mm_camcorder_video_capture_callback'.
2837  *
2838  *      @param[in]      camcorder       A handle of camcorder.
2839  *      @param[in]      callback        Function pointer of callback function.
2840  *      @param[in]      user_data       User parameter for passing to callback function.
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_video_capture_callback
2844  *      @pre            None
2845  *      @post           None
2846  *      @remarks        registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
2847  *      @par example
2848  *      @code
2849
2850 #include <mm_camcorder.h>
2851
2852 gboolean setting_capture_callback()
2853 {
2854         //set callback
2855         mm_camcorder_set_video_capture_callback(hcam,(mm_camcorder_video_capture_callback)camcordertest_video_capture_cb, (void*)hcam);
2856
2857         return TRUE;
2858 }
2859  *      @endcode
2860  */
2861 int mm_camcorder_set_video_capture_callback(MMHandleType camcorder, mm_camcorder_video_capture_callback callback, void *user_data);
2862
2863
2864 /**
2865  *    mm_camcorder_set_audio_stream_callback:\n
2866  *  Set callback for user defined audio stream callback function.
2867  *  Users can retrieve audio data using registered callback.
2868  *  The callback function holds the same buffer that will be recorded.
2869  *  So if an user change the buffer, the result file will has the buffer.
2870  *
2871  *      @param[in]      camcorder       A handle of camcorder.
2872  *      @param[in]      callback        Function pointer of callback function.
2873  *      @param[in]      user_data       User parameter for passing to callback function.
2874  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2875  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2876  *      @see            mm_camcorder_audio_stream_callback
2877  *      @pre            None
2878  *      @post           None
2879  *      @remarks        registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
2880  *      @par example
2881  *      @code
2882
2883 #include <mm_camcorder.h>
2884
2885 gboolean setting_audio_stream_callback()
2886 {
2887         //set callback
2888         mm_camcorder_set_audio_stream_callback(hcam, (mm_camcorder_audio_stream_callback)camcordertest_audio_stream_cb, (void*)hcam);
2889
2890         return TRUE;
2891 }
2892  *      @endcode
2893  */
2894 int mm_camcorder_set_audio_stream_callback(MMHandleType camcorder, mm_camcorder_audio_stream_callback callback, void *user_data);
2895
2896
2897 /**
2898  *    mm_camcorder_get_state:\n
2899  *  Get the current state of camcorder.
2900  *  mm_camcorder is working on the base of its state. An user should check the state of mm_camcorder before calling its functions.
2901  *  If the handle is avaiable, user can retrieve the value.
2902  *
2903  *      @param[in]      camcorder       A handle of camcorder.
2904  *      @param[out]     state           On return, it contains current state of camcorder.
2905  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2906  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2907  *      @see            MMCamcorderStateType
2908  *      @pre            None
2909  *      @post           None
2910  *      @remarks        None
2911  *      @par example
2912  *      @code
2913
2914 #include <mm_camcorder.h>
2915
2916 gboolean get_state_of_camcorder()
2917 {
2918         MMCamcorderStateType state;
2919
2920         //Get state of camcorder
2921         mm_camcorder_get_state(hcam, &state);
2922         printf("Current status is %d\n", state);
2923
2924         return TRUE;
2925 }
2926
2927  *      @endcode
2928  */
2929 int mm_camcorder_get_state(MMHandleType camcorder, MMCamcorderStateType *state);
2930
2931
2932 /**
2933  *    mm_camcorder_get_attributes:\n
2934  *  Get attributes of camcorder with given attribute names. This function can get multiple attributes
2935  *  simultaneously. If one of attribute fails, this function will stop at the point. 
2936  *  'err_attr_name' let you know the name of the attribute.
2937  *
2938  *      @param[in]      camcorder       Specifies the camcorder  handle.
2939  *      @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
2940  *                                      Free this variable after using.
2941  *      @param[in]      attribute_name  attribute name that user want to get.
2942  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2943  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2944  *      @pre            None
2945  *      @post           None
2946  *      @remarks        You can retrieve multiple attributes at the same time.  @n
2947  *                      This function must finish with 'NULL' argument.  @n
2948  *                      ex) mm_camcorder_get_attributes(....... , NULL);
2949  *      @see            mm_camcorder_set_attributes
2950  *      @par example
2951  *      @code
2952
2953 #include <mm_camcorder.h>
2954
2955 gboolean getting_attribute()
2956 {
2957         int err;
2958         MMCamPreset cam_info;
2959         char *err_attr_name = NULL;
2960         void * hdisplay = NULL;
2961         int hsize = 0;
2962
2963         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
2964         hsize = sizeof(ad.xid);         //size of xid structure.
2965
2966         // camcorder attribute setting
2967         err = mm_camcorder_get_attributes(hcamcorder, NULL,     //The second is the argument for debugging. But you can skip this.
2968                                           MMCAM_MODE,  &mode,   //You have to input a pointer instead of variable itself.
2969                                           NULL);                //mm_camcorder_set_attributes() should be finished with a NULL argument.
2970
2971         return TRUE;
2972 }
2973
2974  *      @endcode
2975  */
2976 int mm_camcorder_get_attributes(MMHandleType camcorder,  char **err_attr_name, const char *attribute_name, ...) G_GNUC_NULL_TERMINATED;
2977
2978
2979
2980 /**
2981  *    mm_camcorder_set_attributes:\n
2982  *  Set attributes of camcorder with given attribute names. This function can set multiple attributes
2983  *  simultaneously. If one of attribute fails, this function will stop at the point. 
2984  *  'err_attr_name' let you know the name of the attribute.
2985  *
2986  *      @param[in]      camcorder       Specifies the camcorder  handle.
2987  *      @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
2988  *                                      Free this variable after using.
2989  *      @param[in]      attribute_name  attribute name that user want to set.
2990  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2991  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
2992  *      @pre            None
2993  *      @post           None
2994  *      @remarks        You can put multiple attributes to camcorder at the same time.  @n
2995  *                      This function must finish with 'NULL' argument.  @n
2996  *                      ex) mm_camcorder_set_attributes(....... , NULL);
2997  *      @see            mm_camcorder_get_attributes
2998  *      @par example
2999  *      @code
3000
3001 #include <mm_camcorder.h>
3002
3003 gboolean setting_attribute()
3004 {
3005         int err;
3006         MMCamPreset cam_info;
3007         char *err_attr_name = NULL;
3008         void * hdisplay = NULL;
3009         int hsize = 0;
3010
3011         hdisplay = &ad.xid;             //xid of xwindow. This value can be different depending on your environment.
3012         hsize = sizeof(ad.xid);         //size of xid structure.
3013
3014         // camcorder attribute setting
3015         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,           //The second is the argument for debugging.
3016                                           MMCAM_MODE, MM_CAMCORDER_MODE_IMAGE,
3017                                           MMCAM_IMAGE_ENCODER, MM_IMAGE_CODEC_JPEG,
3018                                           MMCAM_CAMERA_WIDTH, 640,
3019                                           MMCAM_CAMERA_HEIGHT, 480,
3020                                           MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_YUYV,
3021                                           MMCAM_CAMERA_FPS, 30,
3022                                           MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
3023                                           MMCAM_DISPLAY_HANDLE, (void*) hdisplay,          hsize,               //Beware some types require 'size' value, too. (STRING, DATA type attributes)
3024                                           MMCAM_CAPTURE_FORMAT, MM_PIXEL_FORMAT_ENCODED,
3025                                           MMCAM_CAPTURE_WIDTH, 640,
3026                                           MMCAM_CAPTURE_HEIGHT, 480,
3027                                           NULL);                //mm_camcorder_set_attributes() should be finished with a NULL argument.
3028
3029         if (err < 0) {
3030                 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.
3031                 if (err_attr_name) {
3032                         free(err_attr_name);                    //Please free 'err_attr_name', after using the argument.
3033                         err_attr_name = NULL;
3034                         return FALSE;
3035                 }
3036         }
3037
3038         return TRUE;
3039 }
3040  *      @endcode
3041  */
3042 int mm_camcorder_set_attributes(MMHandleType camcorder,  char **err_attr_name, const char *attribute_name, ...) G_GNUC_NULL_TERMINATED;
3043
3044
3045 /**
3046  *    mm_camcorder_get_attribute_info:\n
3047  *  Get detail information of the attribute. To manager attributes, an user may want to know the exact character of the attribute,
3048  *  such as type, flag, and validity. This is the function to provide such information.
3049  *  Depending on the 'validity_type', validity union would be different. To know about the type of union, please refer 'MMCamAttrsInfo'.
3050  *
3051  *      @param[in]      camcorder       Specifies the camcorder  handle.
3052  *      @param[in]      attribute_name  attribute name that user want to get information.
3053  *      @param[out]     info            a structure that holds information related with the attribute.
3054  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3055  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3056  *      @pre            None
3057  *      @post           None
3058  *      @remarks        If the function succeeds, 'info' holds detail information about the attribute, such as type,
3059  *                      flag, validity_type, validity_values, and default values.
3060  *      @see            mm_camcorder_get_attributes, mm_camcorder_set_attributes
3061  *      @par example
3062  *      @code
3063
3064 #include <mm_camcorder.h>
3065
3066 gboolean getting_info_from_attribute()
3067 {
3068         MMCamAttrsInfo info;
3069         int err;
3070
3071         err = mm_camcorder_get_attribute_info(handle, MMCAM_CAPTURE_HEIGHT, &info);
3072         if (err < 0) {
3073                 printf("Fail to call mm_camcorder_get_attribute_info()");
3074                 return FALSE;
3075         }
3076
3077         //Now 'info' has many information about 'MMCAM_CAPTURE_HEIGHT'
3078
3079         return TRUE;
3080 }
3081  *      @endcode
3082  */
3083 int mm_camcorder_get_attribute_info(MMHandleType camcorder, const char *attribute_name, MMCamAttrsInfo *info);
3084
3085
3086 /**
3087  *    mm_camcorder_get_fps_list_by_resolution:\n
3088  *  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,
3089  *  Gives attribute information structure, from the configure data.
3090  *  Depending on the 'validity_type', validity union would be different. To know about the type of union, please refer 'MMCamAttrsInfo'.
3091  *
3092  *      @param[in]      camcorder       Specifies the camcorder  handle.
3093  *      @param[in]      width   width value of the current Preview resolution.
3094  *      @param[in]      height  height value of the current Preview resolution.
3095  *      @param[out]     fps_info                a structure that holds information related with the attribute.
3096  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3097  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3098  *      @pre            None
3099  *      @post           None
3100  *      @remarks        If the function succeeds, 'info' holds detail information about the attribute, such as type,
3101  *                      flag, validity_type, validity_values, and default values.
3102  *      @see            mm_camcorder_get_attributes, mm_camcorder_set_attributes
3103  *      @par example
3104  *      @code
3105
3106 #include <mm_camcorder.h>
3107
3108 gboolean getting_info_from_attribute()
3109 {
3110         MMCamAttrsInfo info;
3111         int err;
3112
3113         err = mm_camcorder_get_fps_list_by_resolution(handle, width, height, &info);
3114         if (err < 0) {
3115                 printf("Fail to call mm_camcorder_get_attribute_info()");
3116                 return FALSE;
3117         }
3118
3119         //Now 'info' has many information about 'MMCAM_CAPTURE_HEIGHT'
3120
3121         return TRUE;
3122 }
3123  *      @endcode
3124  */
3125 int mm_camcorder_get_fps_list_by_resolution(MMHandleType camcorder, int width, int height, MMCamAttrsInfo *fps_info);
3126
3127
3128 /**
3129  *    mm_camcorder_init_focusing:\n
3130  *  Initialize focusing. \n
3131  *  This function stops focusing action and adjust the camera lens to initial position.
3132  *  Some camera applciation requires to initialize its lens position after releasing half shutter. In that case,
3133  *  this should be a good choice. Comparing with mm_camcorder_stop_focusing, this function not only stops focusing,
3134  *  but also initialize the lens. Preview image might be out-focused after calling this function.
3135  *      @param[in]      camcorder  A handle of camcorder.
3136  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3137  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3138  *      @pre            The status of camcorder should be MM_CAMCORDER_STATE_PREPARE, MM_CAMCORDER_STATE_RECORDING, or MM_CAMCORDER_STATE_PAUSED.
3139  *      @post           None
3140  *      @remarks        None
3141  *      @see            mm_camcorder_start_focusing, mm_camcorder_stop_focusing
3142  *      @par example
3143  *      @code
3144
3145 #include <mm_camcorder.h>
3146
3147 gboolean start_autofocus()
3148 {
3149         int err;
3150         char * err_attr_name = NULL;
3151
3152         // Set focus mode to 'AUTO' and scan range to 'AF Normal'.
3153         //You just need to set these values one time. After that, just call mm_camcorder_start_focusing().
3154         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
3155                                           MMCAM_CAMERA_FOCUS_MODE, MM_CAMCORDER_FOCUS_MODE_AUTO,
3156                                           MMCAM_CAMERA_AF_SCAN_RANGE, MM_CAMCORDER_AUTO_FOCUS_NORMAL,
3157                                           NULL);
3158
3159         if (err < 0) {
3160                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
3161                 if (err_attr_name) {
3162                         free(err_attr_name);
3163                         err_attr_name = NULL;
3164                         return FALSE;
3165                 }
3166         }
3167
3168         mm_camcorder_init_focusing(hcam);
3169         mm_camcorder_start_focusing(hcam);
3170         printf("Waiting for adjusting focus\n");
3171
3172         // Waiting for 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED'
3173
3174         return TRUE;
3175 }
3176
3177  *      @endcode
3178  */
3179 int mm_camcorder_init_focusing(MMHandleType camcorder);
3180
3181
3182 /**
3183  *    mm_camcorder_start_focusing:\n
3184  *  Start focusing. \n
3185  *  This function command to start focusing opeartion. Because focusing operation depends on mechanic or electric module,
3186  *  it may take small amount of time. (For ex, 500ms ~ 3sec). \n
3187  *  This function works asynchronously. When an user call this function,  it will return immediately. 
3188  *  However, focusing operation will continue until it gets results. 
3189  *  After finishing operation, you can get 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED' message.
3190  *  'param.code' of the message structure describes the fucusing was success or not.
3191  *
3192  *      @param[in]      camcorder       A handle of camcorder.
3193  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3194  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3195  *      @pre            None
3196  *      @post           None
3197  *      @remarks        None
3198  *      @see            mm_camcorder_init_focusing, mm_camcorder_stop_focusing
3199  *      @par example
3200  *      @code
3201
3202 #include <mm_camcorder.h>
3203
3204 gboolean start_autofocus()
3205 {
3206         int err;
3207         char * err_attr_name = NULL;
3208
3209         // Set focus mode to 'AUTO' and scan range to 'AF Normal'.
3210         //You just need to set these values one time. After that, just call mm_camcorder_start_focusing().
3211         err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
3212                                           MMCAM_CAMERA_FOCUS_MODE, MM_CAMCORDER_FOCUS_MODE_AUTO,
3213                                           MMCAM_CAMERA_AF_SCAN_RANGE, MM_CAMCORDER_AUTO_FOCUS_NORMAL,
3214                                           NULL);
3215
3216         if (err < 0) {
3217                 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
3218                 if (err_attr_name) {
3219                         free(err_attr_name);
3220                         err_attr_name = NULL;
3221                         return FALSE;
3222                 }
3223         }
3224
3225         mm_camcorder_init_focusing(hcam);
3226         mm_camcorder_start_focusing(hcam);
3227         printf("Waiting for adjusting focus\n");
3228
3229         // Waiting for 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED'
3230
3231         return TRUE;
3232 }
3233
3234  *      @endcode
3235  */
3236 int mm_camcorder_start_focusing(MMHandleType camcorder);
3237
3238
3239 /**
3240  *    mm_camcorder_stop_focusing:\n
3241  *  Stop focusing. This function halts focusing operation.\n
3242  *  This is the function to stop focusing in the middle of the operation. So if focusing is already finished or not started yet,
3243  *  this function will do nothing.
3244  *
3245  *      @param[in]      camcorder       A handle of camcorder.
3246  *      @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3247  *                      Please refer 'mm_error.h' to know the exact meaning of the error.
3248  *      @see            mm_camcorder_init_focusing, mm_camcorder_start_focusing
3249  *      @pre            mm_camcorder_start_focusing() should be called before calling this function. 
3250  *      @post           None
3251  *      @remarks        None
3252  *      @par example
3253  *      @code
3254
3255 #include <mm_camcorder.h>
3256
3257 gboolean stop_autofocus()
3258 {
3259         int err;
3260
3261         //Stop focusing
3262         mm_camcorder_stop_focusing(hcam);
3263
3264         return TRUE;
3265 }
3266
3267  *      @endcode
3268  */
3269 int mm_camcorder_stop_focusing(MMHandleType camcorder);
3270
3271 /**
3272         @}
3273  */
3274
3275 #ifdef __cplusplus
3276 }
3277 #endif
3278
3279 #endif /* __MM_CAMCORDER_H__ */