4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jeongmo Yang <jm80.yang@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
27 This part describes the APIs with respect to Multimedia Camcorder.
28 Camcorder is for recording audio and video from audio and video input devices, capturing
29 still image from video input device, and audio recording from audio input
33 Camcorder can be reached by calling functions as shown in the following
34 figure, "The State of Camcorder".
37 @image html camcorder_state.png "The State of Camcorder" width=12cm
38 @image latex camcorder_state.png "The State of Camcorder" width=12cm
41 Between each states there is intermediate state, and in this state,
42 any function call which change the camcorder state will be failed.
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
59 <td>mm_camcorder_create()</td>
65 <td>mm_camcorder_destroy()</td>
71 <td>mm_camcorder_realize()</td>
77 <td>mm_camcorder_unrealize()</td>
83 <td>mm_camcorder_start()</td>
89 <td>mm_camcorder_stop()</td>
95 <td>mm_camcorder_capture_start()</td>
101 <td>mm_camcorder_capture_stop()</td>
107 <td>mm_camcorder_record()</td>
108 <td>PREPARED/PAUSED</td>
113 <td>mm_camcorder_pause()</td>
119 <td>mm_camcorder_commit()</td>
120 <td>RECORDING/PAUSED</td>
125 <td>mm_camcorder_cancel()</td>
126 <td>RECORDING/PAUSED</td>
131 <td>mm_camcorder_set_message_callback()</td>
137 <td>mm_camcorder_set_video_stream_callback()</td>
143 <td>mm_camcorder_set_video_capture_callback()</td>
149 <td>mm_camcorder_get_state()</td>
155 <td>mm_camcorder_get_attributes()</td>
161 <td>mm_camcorder_set_attributes()</td>
167 <td>mm_camcorder_get_attribute_info()</td>
173 <td>mm_camcorder_init_focusing()</td>
179 <td>mm_camcorder_start_focusing()</td>
185 <td>mm_camcorder_stop_focusing()</td>
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.
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'.
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'.
211 Following are the attributes which should be set before initialization (#mm_camcorder_realize):
217 <td><center><b>Attribute</b></center></td>
218 <td><center><b>Description</b></center></td>
222 <td>Mode of camcorder ( still/video/audio )</td>
225 <td>#MMCAM_AUDIO_DEVICE</td>
226 <td>Audio device ID for capturing audio stream</td>
229 <td>#MMCAM_CAMERA_DEVICE_COUNT</td>
230 <td>Video device count</td>
233 <td>#MMCAM_AUDIO_ENCODER</td>
234 <td>Audio codec for encoding audio stream</td>
237 <td>#MMCAM_VIDEO_ENCODER</td>
238 <td>Video codec for encoding video stream</td>
241 <td>#MMCAM_IMAGE_ENCODER</td>
242 <td>Image codec for capturing still-image</td>
245 <td>#MMCAM_FILE_FORMAT</td>
246 <td>File format for recording media stream</td>
249 <td>#MMCAM_AUDIO_SAMPLERATE</td>
250 <td>Sampling rate of audio stream ( This is an integer field )</td>
253 <td>#MMCAM_AUDIO_FORMAT</td>
254 <td>Audio format of each sample</td>
257 <td>#MMCAM_AUDIO_CHANNEL</td>
258 <td>Channels of each sample ( This is an integer field )</td>
261 <td>#MMCAM_AUDIO_INPUT_ROUTE(deprecated)</td>
262 <td>Set audio input route</td>
265 <td>#MMCAM_CAMERA_FORMAT</td>
266 <td>Format of video stream. This is an integer field</td>
269 <td>#MMCAM_CAMERA_FPS</td>
270 <td>Frames per second ( This is an integer field )</td>
273 <td>#MMCAM_CAMERA_WIDTH</td>
274 <td>Width of input video stream</td>
277 <td>#MMCAM_CAMERA_HEIGHT</td>
278 <td>Height of input video stream</td>
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>
285 <td>#MMCAM_DISPLAY_HANDLE</td>
286 <td>Pointer of display buffer or ID of xwindow</td>
289 <td>#MMCAM_DISPLAY_DEVICE</td>
290 <td>Device of display</td>
293 <td>#MMCAM_DISPLAY_SURFACE</td>
294 <td>Surface of display</td>
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>
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>
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>
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>
313 <td>#MMCAM_DISPLAY_ROTATION</td>
314 <td>Rotation of display</td>
317 <td>#MMCAM_DISPLAY_VISIBLE</td>
318 <td>Visible of display</td>
321 <td>#MMCAM_DISPLAY_SCALE</td>
322 <td>A scale of displayed image</td>
325 <td>#MMCAM_DISPLAY_GEOMETRY_METHOD</td>
326 <td>A method that describes a form of geometry for display</td>
332 Following are the attributes which should be set before recording (mm_camcorder_record()):
338 <td><center><b>Attribute</b></center></td>
339 <td><center><b>Description</b></center></td>
342 <td>#MMCAM_AUDIO_ENCODER_BITRATE</td>
343 <td>Bitrate of Audio Encoder</td>
346 <td>#MMCAM_VIDEO_ENCODER_BITRATE</td>
347 <td>Bitrate of Video Encoder</td>
350 <td>#MMCAM_TARGET_FILENAME</td>
351 <td>Target filename. Only used in Audio/Video recording. This is not used for capturing.</td>
354 <td>#MMCAM_TARGET_MAX_SIZE</td>
355 <td>Maximum size of recording file(Kbyte). If the size of file reaches this value.</td>
358 <td>#MMCAM_TARGET_TIME_LIMIT</td>
359 <td>Time limit of recording file. If the elapsed time of recording reaches this value.</td>
365 Following are the attributes which should be set before capturing (mm_camcorder_capture_start()):
371 <td><center><b>Attribute</b></center></td>
372 <td><center><b>Description</b></center></td>
375 <td>#MMCAM_IMAGE_ENCODER_QUALITY</td>
376 <td>Encoding quality of Image codec</td>
379 <td>#MMCAM_CAPTURE_FORMAT</td>
380 <td>Pixel format that you want to capture</td>
383 <td>#MMCAM_CAPTURE_WIDTH</td>
384 <td>Width of the image that you want to capture</td>
387 <td>#MMCAM_CAPTURE_HEIGHT</td>
388 <td>Height of the image that you want to capture</td>
391 <td>#MMCAM_CAPTURE_COUNT</td>
392 <td>Total count of capturing</td>
395 <td>#MMCAM_CAPTURE_INTERVAL</td>
396 <td>Interval between each capturing on Multishot ( MMCAM_CAPTURE_COUNT > 1 )</td>
402 Following are the attributes which can be set anytime:
408 <td><center><b>Attribute</b></center></td>
409 <td><center><b>Description</b></center></td>
412 <td>#MMCAM_AUDIO_VOLUME</td>
413 <td>Input volume of audio source ( double value )</td>
416 <td>#MMCAM_CAMERA_DIGITAL_ZOOM</td>
417 <td>Digital zoom level</td>
420 <td>#MMCAM_CAMERA_OPTICAL_ZOOM</td>
421 <td>Optical zoom level</td>
424 <td>#MMCAM_CAMERA_FOCUS_MODE</td>
428 <td>#MMCAM_CAMERA_AF_SCAN_RANGE</td>
429 <td>AF Scan range</td>
432 <td>#MMCAM_CAMERA_AF_TOUCH_X</td>
433 <td>X coordinate of touching position</td>
436 <td>#MMCAM_CAMERA_AF_TOUCH_Y</td>
437 <td>Y coordinate of touching position</td>
440 <td>#MMCAM_CAMERA_AF_TOUCH_WIDTH</td>
441 <td>Width of touching area</td>
444 <td>#MMCAM_CAMERA_AF_TOUCH_HEIGHT</td>
445 <td>Height of touching area</td>
448 <td>#MMCAM_CAMERA_EXPOSURE_MODE</td>
449 <td>Exposure mode</td>
452 <td>#MMCAM_CAMERA_EXPOSURE_VALUE</td>
453 <td>Exposure value</td>
456 <td>#MMCAM_CAMERA_F_NUMBER</td>
457 <td>f number of camera</td>
460 <td>#MMCAM_CAMERA_SHUTTER_SPEED</td>
461 <td>Shutter speed</td>
464 <td>#MMCAM_CAMERA_ISO</td>
465 <td>ISO of capturing image</td>
468 <td>#MMCAM_CAMERA_WDR</td>
469 <td>Wide dynamic range</td>
472 <td>#MMCAM_CAMERA_ANTI_HANDSHAKE</td>
473 <td>Anti Handshake</td>
476 <td>#MMCAM_CAMERA_FOCAL_LENGTH</td>
477 <td>Focal length of camera lens</td>
480 <td>#MMCAM_FILTER_BRIGHTNESS</td>
481 <td>Brightness level</td>
484 <td>#MMCAM_FILTER_CONTRAST</td>
485 <td>Contrast level</td>
488 <td>#MMCAM_FILTER_WB</td>
489 <td>White balance</td>
492 <td>#MMCAM_FILTER_COLOR_TONE</td>
493 <td>Color tone (Color effect)</td>
496 <td>#MMCAM_FILTER_SCENE_MODE</td>
497 <td>Scene mode (Program mode)</td>
500 <td>#MMCAM_FILTER_SATURATION</td>
501 <td>Saturation level</td>
504 <td>#MMCAM_FILTER_HUE</td>
508 <td>#MMCAM_FILTER_SHARPNESS</td>
509 <td>Sharpness level</td>
512 <td>#MMCAM_CAPTURE_BREAK_CONTINUOUS_SHOT</td>
513 <td>Set this as true when you want to stop multishot immediately</td>
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>
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>
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>
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>
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>
536 <td>#MMCAM_TAG_IMAGE_DESCRIPTION</td>
537 <td>Image description</td>
540 <td>#MMCAM_TAG_ORIENTATION</td>
541 <td>Orientation of captured image</td>
544 <td>#MMCAM_TAG_VIDEO_ORIENTATION</td>
545 <td>Orientation of encoded video</td>
548 <td>#MMCAM_TAG_SOFTWARE</td>
549 <td>software name and version</td>
552 <td>#MMCAM_TAG_LATITUDE</td>
553 <td>Latitude of captured position (GPS information)</td>
556 <td>#MMCAM_TAG_LONGITUDE</td>
557 <td>Longitude of captured position (GPS information)</td>
560 <td>#MMCAM_TAG_ALTITUDE</td>
561 <td>Altitude of captured position (GPS information)</td>
564 <td>#MMCAM_STROBE_CONTROL</td>
565 <td>Strobe control</td>
568 <td>#MMCAM_STROBE_MODE</td>
569 <td>Operation Mode of strobe</td>
572 <td>#MMCAM_DETECT_MODE</td>
573 <td>Detection mode</td>
576 <td>#MMCAM_DETECT_NUMBER</td>
577 <td>Total number of detected object</td>
580 <td>#MMCAM_DETECT_FOCUS_SELECT</td>
581 <td>Select one of detected objects</td>
589 #ifndef __MM_CAMCORDER_H__
590 #define __MM_CAMCORDER_H__
593 /*=======================================================================================
595 ========================================================================================*/
598 #include <mm_types.h>
599 #include <mm_error.h>
600 #include <mm_message.h>
606 /*=======================================================================================
607 | GLOBAL DEFINITIONS AND DECLARATIONS FOR CAMCORDER |
608 ========================================================================================*/
609 #define MM_CAMCORDER_EXTRA_PREVIEW_STREAM_MAX 10 /**< The maximum number of extra preview stream */
611 /*=======================================================================================
612 | MACRO DEFINITIONS |
613 ========================================================================================*/
615 * Get numerator. Definition for fraction setting, such as MMCAM_CAMERA_SHUTTER_SPEED and MMCAM_CAMERA_EXPOSURE_VALUE.
617 #define MM_CAMCORDER_GET_NUMERATOR(x) ((int)(((int)(x) >> 16) & 0xFFFF))
619 * Get denominator. Definition for fraction setting, such as MMCAM_CAMERA_SHUTTER_SPEED and MMCAM_CAMERA_EXPOSURE_VALUE.
621 #define MM_CAMCORDER_GET_DENOMINATOR(x) ((int)(((int)(x)) & 0xFFFF))
623 * Set fraction value. Definition for fraction setting, such as MMCAM_CAMERA_SHUTTER_SPEED and MMCAM_CAMERA_EXPOSURE_VALUE.
625 #define MM_CAMCORDER_SET_FRACTION(numerator, denominator) ((int)((((int)(numerator)) << 16) | (int)(denominator)))
627 /* Attributes Macros */
629 * Mode of camcorder (still/video/audio).
630 * @see MMCamcorderModeType
632 #define MMCAM_MODE "mode"
635 * Audio device ID for capturing audio stream.
636 * @see MMAudioDeviceType (in mm_types.h)
638 #define MMCAM_AUDIO_DEVICE "audio-device"
641 * Video device count.
643 #define MMCAM_CAMERA_DEVICE_COUNT "camera-device-count"
646 * Facing direction of camera device.
647 * @see MMCamcorderCameraFacingDirection
649 #define MMCAM_CAMERA_FACING_DIRECTION "camera-facing-direction"
652 * Audio codec for encoding audio stream.
653 * @see MMAudioCodecType (in mm_types.h)
655 #define MMCAM_AUDIO_ENCODER "audio-encoder"
658 * Video codec for encoding video stream.
659 * @see MMVideoCodecType (in mm_types.h)
661 #define MMCAM_VIDEO_ENCODER "video-encoder"
664 * Image codec for capturing still-image.
665 * @see MMImageCodecType (in mm_types.h)
667 #define MMCAM_IMAGE_ENCODER "image-encoder"
670 * File format for recording media stream.
671 * @see MMFileFormatType (in mm_types.h)
673 #define MMCAM_FILE_FORMAT "file-format"
676 * Sampling rate of audio stream. This is an integer field.
678 #define MMCAM_AUDIO_SAMPLERATE "audio-samplerate"
681 * Audio format of each sample.
682 * @see MMCamcorderAudioFormat
684 #define MMCAM_AUDIO_FORMAT "audio-format"
687 * Channels of each sample. This is an integer field.
689 #define MMCAM_AUDIO_CHANNEL "audio-channel"
692 * Input volume of audio source. Double value.
694 #define MMCAM_AUDIO_VOLUME "audio-volume"
697 * Disable Audio stream when record.
699 #define MMCAM_AUDIO_DISABLE "audio-disable"
702 * Set audio input route
703 * @remarks Deprecated. This will be removed soon.
704 * @see MMAudioRoutePolicy (in mm_types.h)
706 #define MMCAM_AUDIO_INPUT_ROUTE "audio-input-route"
709 * Format of video stream. This is an integer field
710 * @see MMPixelFormatType (in mm_types.h)
712 #define MMCAM_CAMERA_FORMAT "camera-format"
715 * Slow motion rate when video recording
716 * @remarks Deprecated
718 #define MMCAM_CAMERA_SLOW_MOTION_RATE "camera-slow-motion-rate"
721 * Motion rate when video recording
722 * @remarks This should be bigger than 0(zero).
723 * Default value is 1 and it's for normal video recording.
724 * If the value is smaller than 1, recorded file will be played slower,
725 * otherwise, recorded file will be played faster.
727 #define MMCAM_CAMERA_RECORDING_MOTION_RATE "camera-recording-motion-rate"
730 * Frames per second. This is an integer field
733 #define MMCAM_CAMERA_FPS "camera-fps"
736 * Width of preview stream.
738 #define MMCAM_CAMERA_WIDTH "camera-width"
741 * Height of preview stream.
743 #define MMCAM_CAMERA_HEIGHT "camera-height"
746 * Width of video stream.
748 #define MMCAM_VIDEO_WIDTH "video-width"
751 * Height of video stream.
753 #define MMCAM_VIDEO_HEIGHT "video-height"
756 * Digital zoom level.
758 #define MMCAM_CAMERA_DIGITAL_ZOOM "camera-digital-zoom"
761 * Optical zoom level.
763 #define MMCAM_CAMERA_OPTICAL_ZOOM "camera-optical-zoom"
767 * @see MMCamcorderFocusMode
769 #define MMCAM_CAMERA_FOCUS_MODE "camera-focus-mode"
774 #define MMCAM_CAMERA_FOCUS_LEVEL "camera-focus-level"
778 * @see MMCamcorderAutoFocusType
780 #define MMCAM_CAMERA_AF_SCAN_RANGE "camera-af-scan-range"
783 * X coordinate of touching position. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
784 * @see MMCamcorderAutoFocusType
786 #define MMCAM_CAMERA_AF_TOUCH_X "camera-af-touch-x"
789 * Y coordinate of touching position. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
790 * @see MMCamcorderAutoFocusType
792 #define MMCAM_CAMERA_AF_TOUCH_Y "camera-af-touch-y"
795 * Width of touching area. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
796 * @see MMCamcorderAutoFocusType
798 #define MMCAM_CAMERA_AF_TOUCH_WIDTH "camera-af-touch-width"
801 * Height of touching area. Only available when you set '#MM_CAMCORDER_AUTO_FOCUS_TOUCH' to '#MMCAM_CAMERA_AF_SCAN_RANGE'.
802 * @see MMCamcorderAutoFocusType
804 #define MMCAM_CAMERA_AF_TOUCH_HEIGHT "camera-af-touch-height"
808 * @see MMCamcorderAutoExposureType
810 #define MMCAM_CAMERA_EXPOSURE_MODE "camera-exposure-mode"
815 #define MMCAM_CAMERA_EXPOSURE_VALUE "camera-exposure-value"
820 #define MMCAM_CAMERA_F_NUMBER "camera-f-number"
825 #define MMCAM_CAMERA_SHUTTER_SPEED "camera-shutter-speed"
828 * ISO of capturing image
829 * @see MMCamcorderISOType
831 #define MMCAM_CAMERA_ISO "camera-iso"
836 #define MMCAM_CAMERA_GAIN "camera-gain"
839 * Step of camera gain
841 #define MMCAM_CAMERA_GAIN_STEP "camera-gain-step"
844 * Wide dynamic range.
845 * @see MMCamcorderWDRMode
847 #define MMCAM_CAMERA_WDR "camera-wdr"
850 * Focal length of camera lens.
852 #define MMCAM_CAMERA_FOCAL_LENGTH "camera-focal-length"
856 * @see MMCamcorderAHSMode
858 #define MMCAM_CAMERA_ANTI_HANDSHAKE "camera-anti-handshake"
861 * Video Stabilization
862 * @see MMCamcorderVideoStabilizationMode
864 #define MMCAM_CAMERA_VIDEO_STABILIZATION "camera-video-stabilization"
867 * FPS Auto. When you set true to this attribute, FPS will vary depending on the amount of the light.
869 #define MMCAM_CAMERA_FPS_AUTO "camera-fps-auto"
872 * Rotation angle of video input stream.
873 * @see MMVideoInputRotationType (in mm_types.h)
875 #define MMCAM_CAMERA_ROTATION "camera-rotation"
878 * HDR(High Dynamic Range) Capture mode
879 * @see MMCamcorderHDRMode
881 #define MMCAM_CAMERA_HDR_CAPTURE "camera-hdr-capture"
884 * Bitrate of Audio Encoder
886 #define MMCAM_AUDIO_ENCODER_BITRATE "audio-encoder-bitrate"
889 * Bitrate of Video Encoder
891 #define MMCAM_VIDEO_ENCODER_BITRATE "video-encoder-bitrate"
894 * Encoding quality of Image codec
896 #define MMCAM_IMAGE_ENCODER_QUALITY "image-encoder-quality"
901 #define MMCAM_FILTER_BRIGHTNESS "filter-brightness"
906 #define MMCAM_FILTER_CONTRAST "filter-contrast"
910 * @see MMCamcorderWhiteBalanceType
912 #define MMCAM_FILTER_WB "filter-wb"
915 * White balance temperature
917 #define MMCAM_FILTER_WB_TEMPERATURE "filter-wb-temperature"
920 * Step of white balance temperature
922 #define MMCAM_FILTER_WB_TEMPERATURE_STEP "filter-wb-temperature-step"
925 * Color tone. (Color effect)
926 * @see MMCamcorderColorToneType
928 #define MMCAM_FILTER_COLOR_TONE "filter-color-tone"
931 * Scene mode (Program mode)
932 * @see MMCamcorderSceneModeType
934 #define MMCAM_FILTER_SCENE_MODE "filter-scene-mode"
939 #define MMCAM_FILTER_SATURATION "filter-saturation"
944 #define MMCAM_FILTER_HUE "filter-hue"
949 #define MMCAM_FILTER_SHARPNESS "filter-sharpness"
952 * Pixel format that you want to capture. If you set MM_PIXEL_FORMAT_ENCODED,
953 * the result will be encoded by image codec specified in #MMCAM_IMAGE_ENCODER.
954 * If not, the result will be raw data.
956 * @see MMPixelFormatType (in mm_types.h)
958 #define MMCAM_CAPTURE_FORMAT "capture-format"
961 * Width of the image that you want to capture
963 #define MMCAM_CAPTURE_WIDTH "capture-width"
966 * Height of the image that you want to capture
969 #define MMCAM_CAPTURE_HEIGHT "capture-height"
972 * Total count of capturing. If you set this, it will capture multiple time.
974 #define MMCAM_CAPTURE_COUNT "capture-count"
977 * Interval between each capturing on Multishot.
979 #define MMCAM_CAPTURE_INTERVAL "capture-interval"
982 * Set this when you want to stop multishot immediately.
984 #define MMCAM_CAPTURE_BREAK_CONTINUOUS_SHOT "capture-break-cont-shot"
987 * Raw data of captured image which resolution is same as preview.
988 * This is READ-ONLY attribute and only available in capture callback.
989 * This should be used after casted as MMCamcorderCaptureDataType.
991 #define MMCAM_CAPTURED_SCREENNAIL "captured-screennail"
994 * Raw data of EXIF. This is READ-ONLY attribute and only available in capture callback.
996 #define MMCAM_CAPTURED_EXIF_RAW_DATA "captured-exif-raw-data"
999 * Pointer of display buffer or ID of xwindow.
1001 #define MMCAM_DISPLAY_HANDLE "display-handle"
1004 * Device of display.
1005 * @see MMDisplayDeviceType (in mm_types.h)
1007 #define MMCAM_DISPLAY_DEVICE "display-device"
1010 * Surface of display.
1011 * @see MMDisplaySurfaceType (in mm_types.h)
1013 #define MMCAM_DISPLAY_SURFACE "display-surface"
1017 * @see MMDisplayModeType (in mm_types.h)
1019 #define MMCAM_DISPLAY_MODE "display-mode"
1022 * X position of display rectangle.
1023 * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1024 * @see MMCamcorderGeometryMethod
1026 #define MMCAM_DISPLAY_RECT_X "display-rect-x"
1029 * Y position of display rectangle
1030 * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1031 * @see MMCamcorderGeometryMethod
1033 #define MMCAM_DISPLAY_RECT_Y "display-rect-y"
1036 * Width of display rectangle
1037 * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1038 * @see MMCamcorderGeometryMethod
1040 #define MMCAM_DISPLAY_RECT_WIDTH "display-rect-width"
1043 * Height of display rectangle
1044 * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
1045 * @see MMCamcorderGeometryMethod
1047 #define MMCAM_DISPLAY_RECT_HEIGHT "display-rect-height"
1050 * X position of source rectangle. When you want to crop the source, you can set the area with this value.
1052 #define MMCAM_DISPLAY_SOURCE_X "display-src-x"
1055 * Y position of source rectangle. When you want to crop the source, you can set the area with this value.
1057 #define MMCAM_DISPLAY_SOURCE_Y "display-src-y"
1060 * Width of source rectangle. When you want to crop the source, you can set the area with this value.
1062 #define MMCAM_DISPLAY_SOURCE_WIDTH "display-src-width"
1065 * Height of source rectangle. When you want to crop the source, you can set the area with this value.
1067 #define MMCAM_DISPLAY_SOURCE_HEIGHT "display-src-height"
1070 * Rotation angle of display.
1071 * @see MMDisplayRotationType (in mm_types.h)
1073 #define MMCAM_DISPLAY_ROTATION "display-rotation"
1077 * @see MMFlipType (in mm_types.h)
1079 #define MMCAM_DISPLAY_FLIP "display-flip"
1082 * Visible of display.
1084 #define MMCAM_DISPLAY_VISIBLE "display-visible"
1087 * A scale of displayed image. Available value is like below.
1088 * @see MMDisplayScaleType (in mm_types.h)
1090 #define MMCAM_DISPLAY_SCALE "display-scale"
1093 * A method that describes a form of geometry for display.
1094 * @see MMCamcorderGeometryMethod
1096 #define MMCAM_DISPLAY_GEOMETRY_METHOD "display-geometry-method"
1099 * A videosink name of evas surface.
1100 * This is READ-ONLY attribute.
1102 #define MMCAM_DISPLAY_EVAS_SURFACE_SINK "display-evas-surface-sink"
1105 * This attribute is only available if value of MMCAM_DISPLAY_EVAS_SURFACE_SINK "evaspixmapsink"
1107 #define MMCAM_DISPLAY_EVAS_DO_SCALING "display-evas-do-scaling"
1110 * Target filename. Only used in Audio/Video recording. This is not used for capturing.
1112 #define MMCAM_TARGET_FILENAME "target-filename"
1115 * Maximum size(Kbyte) of recording file. If the size of file reaches this value,
1116 * camcorder will send 'MM_MESSAGE_CAMCORDER_MAX_SIZE' message.
1118 #define MMCAM_TARGET_MAX_SIZE "target-max-size"
1121 * Time limit(Second) of recording file. If the elapsed time of recording reaches this value,
1122 * camcorder will send 'MM_MESSAGE_CAMCORDER_TIME_LIMIT' message.
1124 #define MMCAM_TARGET_TIME_LIMIT "target-time-limit"
1127 * Enable to write tags. If this value is FALSE, none of tag information will be written to captured file.
1129 #define MMCAM_TAG_ENABLE "tag-enable"
1132 * Image description.
1134 #define MMCAM_TAG_IMAGE_DESCRIPTION "tag-image-description"
1137 * Orientation of captured image
1138 * @see MMCamcorderTagOrientation
1140 #define MMCAM_TAG_ORIENTATION "tag-orientation"
1143 * Orientation of captured video
1144 * @see MMCamcorderTagVideoOrientation
1146 #define MMCAM_TAG_VIDEO_ORIENTATION "tag-video-orientation"
1149 * software name and version
1151 #define MMCAM_TAG_SOFTWARE "tag-software"
1154 * Enable to write tags related to GPS. If this value is TRUE, tags related GPS information will be written to captured file.
1156 #define MMCAM_TAG_GPS_ENABLE "tag-gps-enable"
1159 * Latitude of captured position. GPS information.
1161 #define MMCAM_TAG_LATITUDE "tag-latitude"
1164 * Longitude of captured position. GPS information.
1166 #define MMCAM_TAG_LONGITUDE "tag-longitude"
1169 * Altitude of captured position. GPS information.
1171 #define MMCAM_TAG_ALTITUDE "tag-altitude"
1175 * @see MMCamcorderStrobeControl
1177 #define MMCAM_STROBE_CONTROL "strobe-control"
1180 * Operation Mode of strobe
1181 * @see MMCamcorderStrobeMode
1183 #define MMCAM_STROBE_MODE "strobe-mode"
1186 * Brightness of strobe
1188 #define MMCAM_STROBE_BRIGHTNESS "strobe-brightness"
1192 * @see MMCamcorderDetectMode
1194 #define MMCAM_DETECT_MODE "detect-mode"
1197 * Total number of detected object
1199 #define MMCAM_DETECT_NUMBER "detect-number"
1202 * You can use this attribute to select one of detected objects.
1204 #define MMCAM_DETECT_FOCUS_SELECT "detect-focus-select"
1207 * Recommend preview format for capture
1209 #define MMCAM_RECOMMEND_PREVIEW_FORMAT_FOR_CAPTURE "recommend-preview-format-for-capture"
1212 * Recommend preview format for recording
1214 #define MMCAM_RECOMMEND_PREVIEW_FORMAT_FOR_RECORDING "recommend-preview-format-for-recording"
1217 * Recommend rotation of display
1219 #define MMCAM_RECOMMEND_DISPLAY_ROTATION "recommend-display-rotation"
1222 * Recommend width of camera preview.
1223 * This attribute can be used with #mm_camcorder_get_attribute_info and #MMCamcorderPreviewType.
1224 * @see mm_camcorder_get_attribute_info, MMCamcorderPreviewType
1226 #define MMCAM_RECOMMEND_CAMERA_WIDTH "recommend-camera-width"
1229 * Recommend height of camera preview
1230 * This attribute can be used with #mm_camcorder_get_attribute_info and #MMCamcorderPreviewType.
1231 * @see mm_camcorder_get_attribute_info, MMCamcorderPreviewType
1233 #define MMCAM_RECOMMEND_CAMERA_HEIGHT "recommend-camera-height"
1236 * Enable to play capture sound
1238 #define MMCAM_CAPTURE_SOUND_ENABLE "capture-sound-enable"
1241 * Flip of video input stream.
1242 * @see MMFlipType (in mm_types.h)
1244 #define MMCAM_CAMERA_FLIP "camera-flip"
1247 * Support Zero Shutter Lag capture
1249 #define MMCAM_SUPPORT_ZSL_CAPTURE "support-zsl-capture"
1252 * Support zero copy format
1254 #define MMCAM_SUPPORT_ZERO_COPY_FORMAT "support-zero-copy-format"
1257 * Support media packet callback
1259 #define MMCAM_SUPPORT_MEDIA_PACKET_PREVIEW_CB "support-media-packet-preview-cb"
1262 * Support user buffer for zero copy
1264 #define MMCAM_SUPPORT_USER_BUFFER "support-user-buffer"
1267 * Support Extra Preview
1269 #define MMCAM_SUPPORT_EXTRA_PREVIEW "support-extra-preview"
1272 * Request codec config for encoded format
1274 #define MMCAM_REQUEST_CODEC_CONFIG "request-codec-config"
1277 * Buffer fd from user
1279 #define MMCAM_USER_BUFFER_FD "user-buffer-fd"
1282 * Enable to write tags for recorded file
1284 #define MMCAM_RECORDER_TAG_ENABLE "recorder-tag-enable"
1287 * Determines the socket stream path
1289 #define MMCAM_DISPLAY_SOCKET_PATH "display-socket-path"
1294 #define MMCAM_CLIENT_PID "client-pid"
1297 * Root directory of application
1299 #define MMCAM_ROOT_DIRECTORY "root-directory"
1302 * Bitrate for encoded preview stream
1304 #define MMCAM_ENCODED_PREVIEW_BITRATE "encoded-preview-bitrate"
1307 * GOP interval for encoded preview stream
1309 #define MMCAM_ENCODED_PREVIEW_GOP_INTERVAL "encoded-preview-gop-interval"
1312 * The distance to move the camera horizontally and physically
1314 #define MMCAM_CAMERA_PAN_MECHA "camera-pan-mecha"
1317 * The distance to move the camera horizontally
1319 #define MMCAM_CAMERA_PAN_ELEC "camera-pan-elec"
1322 * The distance to move the camera vertically and physically
1324 #define MMCAM_CAMERA_TILT_MECHA "camera-tilt-mecha"
1327 * The distance to move the camera vertically
1329 #define MMCAM_CAMERA_TILT_ELEC "camera-tilt-elec"
1332 * The type of PTZ(Pan Tilt Zoom). Mechanical or Electronic PTZ.
1334 #define MMCAM_CAMERA_PTZ_TYPE "camera-ptz-type"
1337 * Stream type and index for sound route
1339 #define MMCAM_SOUND_STREAM_TYPE "sound-stream-type"
1340 #define MMCAM_SOUND_STREAM_INDEX "sound-stream-index"
1343 * The display reuse flag and sink element pointer
1345 #define MMCAM_DISPLAY_REUSE_HINT "display-reuse-hint"
1346 #define MMCAM_DISPLAY_REUSE_ELEMENT "display-reuse-element"
1349 * The GDBus connection from outside
1351 #define MMCAM_GDBUS_CONNECTION "gdbus-connection"
1354 * Replay gain enable
1356 #define MMCAM_AUDIO_REPLAY_GAIN_ENABLE "audio-replay-gain-enable"
1359 * Reference level for replay gain
1361 #define MMCAM_AUDIO_REPLAY_GAIN_REFERENCE_LEVEL "audio-replay-gain-reference-level"
1364 * Platform privilege name for camera device
1366 #define MMCAM_PLATFORM_PRIVILEGE_CAMERA "platform-privilege-camera"
1369 * The name of videosrc element
1371 #define MMCAM_VIDEOSRC_ELEMENT_NAME "videosrc-element-name"
1374 * The name of audiosrc element
1376 #define MMCAM_AUDIOSRC_ELEMENT_NAME "audiosrc-element-name"
1379 * Extra preview enable
1381 #define MMCAM_EXTRA_PREVIEW_ENABLE "extra-preview-enable"
1385 /*=======================================================================================
1386 | ENUM DEFINITIONS |
1387 ========================================================================================*/
1389 * An enumeration for camcorder states.
1392 MM_CAMCORDER_STATE_NONE, /**< Camcorder is not created yet */
1393 MM_CAMCORDER_STATE_NULL, /**< Camcorder is created, but not initialized yet */
1394 MM_CAMCORDER_STATE_READY, /**< Camcorder is ready to capture */
1395 MM_CAMCORDER_STATE_PREPARE, /**< Camcorder is prepared to capture (Preview) */
1396 MM_CAMCORDER_STATE_CAPTURING, /**< Camcorder is now capturing still images */
1397 MM_CAMCORDER_STATE_RECORDING, /**< Camcorder is now recording */
1398 MM_CAMCORDER_STATE_PAUSED, /**< Camcorder is paused while recording */
1399 MM_CAMCORDER_STATE_NUM, /**< Number of camcorder states */
1400 } MMCamcorderStateType;
1403 * An enumeration for camcorder mode.
1406 MM_CAMCORDER_MODE_VIDEO_CAPTURE = 0, /**< Video recording and Image capture mode */
1407 MM_CAMCORDER_MODE_AUDIO, /**< Audio recording mode */
1408 } MMCamcorderModeType;
1411 * An enumeration for facing direction.
1414 MM_CAMCORDER_CAMERA_FACING_DIRECTION_REAR = 0, /**< Facing direction of camera is REAR */
1415 MM_CAMCORDER_CAMERA_FACING_DIRECTION_FRONT, /**< Facing direction of camera is FRONT */
1416 } MMCamcorderCameraFacingDirection;
1420 * An enumeration of audio format.
1423 MM_CAMCORDER_AUDIO_FORMAT_PCM_U8 = 0, /**< unsigned 8bit audio */
1424 MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE = 2, /**< signed 16bit audio. Little endian. */
1425 } MMCamcorderAudioFormat;
1428 * An enumeration of capture mode.
1431 MM_CAMCORDER_CAPTURE_MODE_ENCODEBIN = 0, /**< Capture through encodebin */
1432 MM_CAMCORDER_CAPTURE_MODE_CAMERA_CONTROL, /**< Capture through camera control interface in camerasrc plugin */
1433 MM_CAMCORDER_CAPTURE_MODE_IMAGE_PAD /**< Capture through image source pad in camerasrc plugin */
1434 } MMCamcorderCaptureMode;
1437 * An enumeration of extra preview mode.
1440 MM_CAMCORDER_EXTRA_PREVIEW_MODE_CAMERA_CONTROL = 0, /**< Extra preview through camera control interface of camerasrc plugin */
1441 MM_CAMCORDER_EXTRA_PREVIEW_MODE_PIPELINE_SRCPAD, /**< Extra preview through additional source pad in camerasrc plugin */
1442 MM_CAMCORDER_EXTRA_PREVIEW_MODE_PIPELINE_ELEMENT /**< Extra preview through additional element */
1443 } MMCamcorderExtraPreviewMode;
1447 * An enumeration for color tone. Color tone provides an impression of
1448 * seeing through a tinted glass.
1450 enum MMCamcorderColorToneType {
1451 MM_CAMCORDER_COLOR_TONE_NONE = 0, /**< None */
1452 MM_CAMCORDER_COLOR_TONE_MONO, /**< Mono */
1453 MM_CAMCORDER_COLOR_TONE_SEPIA, /**< Sepia */
1454 MM_CAMCORDER_COLOR_TONE_NEGATIVE, /**< Negative */
1455 MM_CAMCORDER_COLOR_TONE_BLUE, /**< Blue */
1456 MM_CAMCORDER_COLOR_TONE_GREEN, /**< Green */
1457 MM_CAMCORDER_COLOR_TONE_AQUA, /**< Aqua */
1458 MM_CAMCORDER_COLOR_TONE_VIOLET, /**< Violet */
1459 MM_CAMCORDER_COLOR_TONE_ORANGE, /**< Orange */
1460 MM_CAMCORDER_COLOR_TONE_GRAY, /**< Gray */
1461 MM_CAMCORDER_COLOR_TONE_RED, /**< Red */
1462 MM_CAMCORDER_COLOR_TONE_ANTIQUE, /**< Antique */
1463 MM_CAMCORDER_COLOR_TONE_WARM, /**< Warm */
1464 MM_CAMCORDER_COLOR_TONE_PINK, /**< Pink */
1465 MM_CAMCORDER_COLOR_TONE_YELLOW, /**< Yellow */
1466 MM_CAMCORDER_COLOR_TONE_PURPLE, /**< Purple */
1467 MM_CAMCORDER_COLOR_TONE_EMBOSS, /**< Emboss */
1468 MM_CAMCORDER_COLOR_TONE_OUTLINE, /**< Outline */
1469 MM_CAMCORDER_COLOR_TONE_SOLARIZATION, /**< Solarization */
1470 MM_CAMCORDER_COLOR_TONE_SKETCH, /**< Sketch */
1471 MM_CAMCORDER_COLOR_TONE_WASHED, /**< Washed */
1472 MM_CAMCORDER_COLOR_TONE_VINTAGE_WARM, /**< Vintage warm */
1473 MM_CAMCORDER_COLOR_TONE_VINTAGE_COLD, /**< Vintage cold */
1474 MM_CAMCORDER_COLOR_TONE_POSTERIZATION, /**< Posterization */
1475 MM_CAMCORDER_COLOR_TONE_CARTOON, /**< Cartoon */
1476 MM_CAMCORDER_COLOR_TONE_SELECTIVE_RED, /**< Selective color - Red */
1477 MM_CAMCORDER_COLOR_TONE_SELECTIVE_GREEN, /**< Selective color - Green */
1478 MM_CAMCORDER_COLOR_TONE_SELECTIVE_BLUE, /**< Selective color - Blue */
1479 MM_CAMCORDER_COLOR_TONE_SELECTIVE_YELLOW, /**< Selective color - Yellow */
1480 MM_CAMCORDER_COLOR_TONE_SELECTIVE_RED_YELLOW, /**< Selective color - Red and Yellow */
1485 * An enumeration for white balance. White Balance is the control that adjusts
1486 * the camcorder's color sensitivity to match the prevailing color of white
1487 * outdoor light, yellower indoor light, or (sometimes) greenish fluorescent
1488 * light. White balance may be set either automatically or manually. White balance
1489 * may be set "incorrectly" on purpose to achieve special effects.
1491 enum MMCamcorderWhiteBalanceType {
1492 MM_CAMCORDER_WHITE_BALANCE_NONE = 0, /**< None */
1493 MM_CAMCORDER_WHITE_BALANCE_AUTOMATIC, /**< Automatic */
1494 MM_CAMCORDER_WHITE_BALANCE_DAYLIGHT, /**< Daylight */
1495 MM_CAMCORDER_WHITE_BALANCE_CLOUDY, /**< Cloudy */
1496 MM_CAMCORDER_WHITE_BALANCE_FLUORESCENT, /**< Fluorescent */
1497 MM_CAMCORDER_WHITE_BALANCE_INCANDESCENT, /**< Incandescent */
1498 MM_CAMCORDER_WHITE_BALANCE_SHADE, /**< Shade */
1499 MM_CAMCORDER_WHITE_BALANCE_HORIZON, /**< Horizon */
1500 MM_CAMCORDER_WHITE_BALANCE_FLASH, /**< Flash */
1501 MM_CAMCORDER_WHITE_BALANCE_CUSTOM, /**< Custom */
1506 * An enumeration for scene mode. Scene mode gives the environment condition
1507 * for operating camcorder. The mode of operation can be in daylight, night and
1508 * backlight. It can be an automatic setting also.
1510 enum MMCamcorderSceneModeType {
1511 MM_CAMCORDER_SCENE_MODE_NORMAL = 0, /**< Normal */
1512 MM_CAMCORDER_SCENE_MODE_PORTRAIT, /**< Portrait */
1513 MM_CAMCORDER_SCENE_MODE_LANDSCAPE, /**< Landscape */
1514 MM_CAMCORDER_SCENE_MODE_SPORTS, /**< Sports */
1515 MM_CAMCORDER_SCENE_MODE_PARTY_N_INDOOR, /**< Party & indoor */
1516 MM_CAMCORDER_SCENE_MODE_BEACH_N_INDOOR, /**< Beach & indoor */
1517 MM_CAMCORDER_SCENE_MODE_SUNSET, /**< Sunset */
1518 MM_CAMCORDER_SCENE_MODE_DUSK_N_DAWN, /**< Dusk & dawn */
1519 MM_CAMCORDER_SCENE_MODE_FALL_COLOR, /**< Fall */
1520 MM_CAMCORDER_SCENE_MODE_NIGHT_SCENE, /**< Night scene */
1521 MM_CAMCORDER_SCENE_MODE_FIREWORK, /**< Firework */
1522 MM_CAMCORDER_SCENE_MODE_TEXT, /**< Text */
1523 MM_CAMCORDER_SCENE_MODE_SHOW_WINDOW, /**< Show window */
1524 MM_CAMCORDER_SCENE_MODE_CANDLE_LIGHT, /**< Candle light */
1525 MM_CAMCORDER_SCENE_MODE_BACKLIGHT, /**< Backlight */
1526 MM_CAMCORDER_SCENE_MODE_AQUA, /**< Aqua */
1531 * An enumeration for focusing .
1533 enum MMCamcorderFocusMode {
1534 MM_CAMCORDER_FOCUS_MODE_NONE = 0, /**< Focus mode is None */
1535 MM_CAMCORDER_FOCUS_MODE_PAN, /**< Pan focus mode*/
1536 MM_CAMCORDER_FOCUS_MODE_AUTO, /**< Autofocus mode*/
1537 MM_CAMCORDER_FOCUS_MODE_MANUAL, /**< Manual focus mode*/
1538 MM_CAMCORDER_FOCUS_MODE_TOUCH_AUTO, /**< Touch Autofocus mode*/
1539 MM_CAMCORDER_FOCUS_MODE_CONTINUOUS, /**< Continuous Autofocus mode*/
1544 * An enumeration for auto focus scan range (af scan range)
1546 enum MMCamcorderAutoFocusType {
1547 MM_CAMCORDER_AUTO_FOCUS_NONE = 0, /**< Scan autofocus is not set */
1548 MM_CAMCORDER_AUTO_FOCUS_NORMAL, /**< Scan autofocus normally*/
1549 MM_CAMCORDER_AUTO_FOCUS_MACRO, /**< Scan autofocus in macro mode(close distance)*/
1550 MM_CAMCORDER_AUTO_FOCUS_FULL, /**< Scan autofocus in full mode(all range scan, limited by dev spec)*/
1555 * An enumeration for focus state.
1556 * When 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED' is delivered through 'MMMessageCallback',
1557 * this enumeration will be set to 'code' of MMMessageParamType.
1559 enum MMCamcorderFocusStateType {
1560 MM_CAMCORDER_FOCUS_STATE_RELEASED = 0, /**< Focus released.*/
1561 MM_CAMCORDER_FOCUS_STATE_ONGOING, /**< Focus in progress*/
1562 MM_CAMCORDER_FOCUS_STATE_FOCUSED, /**< Focus success*/
1563 MM_CAMCORDER_FOCUS_STATE_FAILED, /**< Focus failed*/
1568 * An enumeration for ISO.
1570 enum MMCamcorderISOType {
1571 MM_CAMCORDER_ISO_AUTO = 0, /**< ISO auto mode*/
1572 MM_CAMCORDER_ISO_50, /**< ISO 50*/
1573 MM_CAMCORDER_ISO_100, /**< ISO 100*/
1574 MM_CAMCORDER_ISO_200, /**< ISO 200*/
1575 MM_CAMCORDER_ISO_400, /**< ISO 400*/
1576 MM_CAMCORDER_ISO_800, /**< ISO 800*/
1577 MM_CAMCORDER_ISO_1600, /**< ISO 1600*/
1578 MM_CAMCORDER_ISO_3200, /**< ISO 3200*/
1579 MM_CAMCORDER_ISO_6400, /**< ISO 6400*/
1580 MM_CAMCORDER_ISO_12800, /**< ISO 12800*/
1584 * An enumeration for Automatic exposure.
1586 enum MMCamcorderAutoExposureType {
1587 MM_CAMCORDER_AUTO_EXPOSURE_OFF = 0, /**< AE off*/
1588 MM_CAMCORDER_AUTO_EXPOSURE_ALL, /**< AE default */
1589 MM_CAMCORDER_AUTO_EXPOSURE_CENTER_1, /**< AE center mode*/
1590 MM_CAMCORDER_AUTO_EXPOSURE_CENTER_2, /**< Unused */
1591 MM_CAMCORDER_AUTO_EXPOSURE_CENTER_3, /**< Unused */
1592 MM_CAMCORDER_AUTO_EXPOSURE_SPOT_1, /**< AE spot mode*/
1593 MM_CAMCORDER_AUTO_EXPOSURE_SPOT_2, /**< Unused */
1594 MM_CAMCORDER_AUTO_EXPOSURE_CUSTOM_1, /**< AE manual mode */
1595 MM_CAMCORDER_AUTO_EXPOSURE_CUSTOM_2, /**< Unused */
1596 MM_CAMCORDER_AUTO_EXPOSURE_SHUTTER_PRIORITY, /**< AE shutter priority mode */
1597 MM_CAMCORDER_AUTO_EXPOSURE_APERTURE_PRIORITY /**< AE aperture priority mode */
1602 * An enumeration for WDR mode .
1604 enum MMCamcorderWDRMode {
1605 MM_CAMCORDER_WDR_OFF = 0, /**< WDR OFF*/
1606 MM_CAMCORDER_WDR_ON, /**< WDR ON*/
1607 MM_CAMCORDER_WDR_AUTO, /**< WDR AUTO*/
1612 * An enumeration for HDR capture mode
1614 enum MMCamcorderHDRMode {
1615 MM_CAMCORDER_HDR_OFF = 0, /**< HDR OFF */
1616 MM_CAMCORDER_HDR_ON, /**< HDR ON and no original data - capture callback will be come once */
1617 MM_CAMCORDER_HDR_ON_AND_ORIGINAL, /**< HDR ON and original data - capture callback will be come twice(1st:Original, 2nd:HDR) */
1622 * An enumeration for Anti-handshake mode .
1624 enum MMCamcorderAHSMode {
1625 MM_CAMCORDER_AHS_OFF = 0, /**< AHS OFF*/
1626 MM_CAMCORDER_AHS_ON, /**< AHS ON*/
1627 MM_CAMCORDER_AHS_AUTO, /**< AHS AUTO*/
1628 MM_CAMCORDER_AHS_MOVIE, /**< AHS MOVIE*/
1633 * An enumeration for Video stabilization mode
1635 enum MMCamcorderVideoStabilizationMode {
1636 MM_CAMCORDER_VIDEO_STABILIZATION_OFF = 0, /**< Video Stabilization OFF*/
1637 MM_CAMCORDER_VIDEO_STABILIZATION_ON, /**< Video Stabilization ON*/
1642 * Geometry method for camcorder display.
1644 enum MMCamcorderGeometryMethod {
1645 MM_CAMCORDER_LETTER_BOX = 0, /**< Letter box*/
1646 MM_CAMCORDER_ORIGIN_SIZE, /**< Origin size*/
1647 MM_CAMCORDER_FULL, /**< full-screen*/
1648 MM_CAMCORDER_CROPPED_FULL, /**< Cropped full-screen*/
1649 MM_CAMCORDER_ORIGIN_OR_LETTER, /**< Origin size or Letter box*/
1650 MM_CAMCORDER_CUSTOM_ROI, /**< Explicitly described destination ROI*/
1655 * An enumeration for orientation values of tag .
1657 enum MMCamcorderTagOrientation {
1658 MM_CAMCORDER_TAG_ORT_NONE = 0, /**< No Orientation.*/
1659 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.*/
1660 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.*/
1661 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.*/
1662 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.*/
1663 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.*/
1664 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.*/
1665 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.*/
1666 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.*/
1670 * An enumeration for captured video orientation values of tag .
1672 enum MMCamcorderTagVideoOrientation {
1673 MM_CAMCORDER_TAG_VIDEO_ORT_NONE = 0, /**< No Orientation.*/
1674 MM_CAMCORDER_TAG_VIDEO_ORT_90, /**< 90 degree */
1675 MM_CAMCORDER_TAG_VIDEO_ORT_180, /**< 180 degree */
1676 MM_CAMCORDER_TAG_VIDEO_ORT_270, /**< 270 degree */
1682 * An enumeration for Strobe mode.
1684 enum MMCamcorderStrobeMode {
1685 MM_CAMCORDER_STROBE_MODE_OFF = 0, /**< Always off */
1686 MM_CAMCORDER_STROBE_MODE_ON, /**< Always splashes */
1687 MM_CAMCORDER_STROBE_MODE_AUTO, /**< Depending on intensity of light, strobe starts to flash. */
1688 MM_CAMCORDER_STROBE_MODE_REDEYE_REDUCTION, /**< Red eye reduction. Multiple flash before capturing. */
1689 MM_CAMCORDER_STROBE_MODE_SLOW_SYNC, /**< Slow sync. A type of curtain synchronization. */
1690 MM_CAMCORDER_STROBE_MODE_FRONT_CURTAIN, /**< Front curtain. A type of curtain synchronization. */
1691 MM_CAMCORDER_STROBE_MODE_REAR_CURTAIN, /**< Rear curtain. A type of curtain synchronization. */
1692 MM_CAMCORDER_STROBE_MODE_PERMANENT, /**< keep turned on until turning off */
1697 * An enumeration for Strobe Control.
1699 enum MMCamcorderStrobeControl {
1700 MM_CAMCORDER_STROBE_CONTROL_OFF = 0, /**< turn off the flash light */
1701 MM_CAMCORDER_STROBE_CONTROL_ON, /**< turn on the flash light */
1702 MM_CAMCORDER_STROBE_CONTROL_CHARGE, /**< charge the flash light */
1707 * An enumeration for Detection mode.
1709 enum MMCamcorderDetectMode {
1710 MM_CAMCORDER_DETECT_MODE_OFF = 0, /**< turn detection off */
1711 MM_CAMCORDER_DETECT_MODE_ON, /**< turn detection on */
1716 * An enumeration for recommended preview resolution.
1718 enum MMCamcorderPreviewType {
1719 MM_CAMCORDER_PREVIEW_TYPE_NORMAL = 0, /**< normal ratio like 4:3 */
1720 MM_CAMCORDER_PREVIEW_TYPE_WIDE, /**< wide ratio like 16:9 */
1721 MM_CAMCORDER_PREVIEW_TYPE_SQUARE, /**< square ratio like 1:1 */
1726 * An enumeration for log level.
1728 enum MMCamcorderLogLevel {
1729 MM_CAMCORDER_LOG_LEVEL_CRITICAL = 0,
1730 MM_CAMCORDER_LOG_LEVEL_ERROR,
1731 MM_CAMCORDER_LOG_LEVEL_WARNING,
1732 MM_CAMCORDER_LOG_LEVEL_INFO,
1733 MM_CAMCORDER_LOG_LEVEL_DEBUG,
1734 MM_CAMCORDER_LOG_LEVEL_VERBOSE
1738 /**********************************
1740 **********************************/
1742 * An enumeration for attribute values types.
1745 MM_CAM_ATTRS_TYPE_INVALID = -1, /**< Type is invalid */
1746 MM_CAM_ATTRS_TYPE_INT, /**< Integer type attribute */
1747 MM_CAM_ATTRS_TYPE_DOUBLE, /**< Double type attribute */
1748 MM_CAM_ATTRS_TYPE_STRING, /**< UTF-8 String type attribute */
1749 MM_CAM_ATTRS_TYPE_DATA, /**< Pointer type attribute */
1754 * An enumeration for attribute validation type.
1757 MM_CAM_ATTRS_VALID_TYPE_INVALID = -1, /**< Invalid validation type */
1758 MM_CAM_ATTRS_VALID_TYPE_NONE, /**< Do not check validity */
1759 MM_CAM_ATTRS_VALID_TYPE_INT_ARRAY, /**< validity checking type of integer array */
1760 MM_CAM_ATTRS_VALID_TYPE_INT_RANGE, /**< validity checking type of integer range */
1761 MM_CAM_ATTRS_VALID_TYPE_DOUBLE_ARRAY, /**< validity checking type of double array */
1762 MM_CAM_ATTRS_VALID_TYPE_DOUBLE_RANGE, /**< validity checking type of double range */
1763 } MMCamAttrsValidType;
1767 * An enumeration for attribute access flag.
1770 MM_CAM_ATTRS_FLAG_DISABLED = 0, /**< None flag is set. This means the attribute is not allowed to use. */
1771 MM_CAM_ATTRS_FLAG_READABLE = 1 << 0, /**< Readable */
1772 MM_CAM_ATTRS_FLAG_WRITABLE = 1 << 1, /**< Writable */
1773 MM_CAM_ATTRS_FLAG_MODIFIED = 1 << 2, /**< Modified */
1774 MM_CAM_ATTRS_FLAG_RW = MM_CAM_ATTRS_FLAG_READABLE | MM_CAM_ATTRS_FLAG_WRITABLE, /**< Readable and Writable */
1778 /**********************************
1780 **********************************/
1782 * An enumeration for stream data type.
1785 MM_CAM_STREAM_DATA_YUV420 = 0, /**< YUV420 Packed type - 1 plane */
1786 MM_CAM_STREAM_DATA_YUV422, /**< YUV422 Packed type - 1 plane */
1787 MM_CAM_STREAM_DATA_YUV420SP, /**< YUV420 SemiPlannar type - 2 planes */
1788 MM_CAM_STREAM_DATA_YUV420P, /**< YUV420 Plannar type - 3 planes */
1789 MM_CAM_STREAM_DATA_YUV422P, /**< YUV422 Plannar type - 3 planes */
1790 MM_CAM_STREAM_DATA_ENCODED, /**< Encoded data type - 1 plane */
1791 MM_CAM_STREAM_DATA_DEPTH, /**< Depth data type - 1 plane */
1792 MM_CAM_STREAM_DATA_RGB /**< RGB data type - 1 plane */
1796 /*=======================================================================================
1797 | STRUCTURE DEFINITIONS |
1798 ========================================================================================*/
1800 * A structure for attribute information
1803 MMCamAttrsType type;
1804 MMCamAttrsFlag flag;
1805 MMCamAttrsValidType validity_type;
1808 * A union that describes validity of the attribute.
1809 * Only when type is 'MM_CAM_ATTRS_TYPE_INT' or 'MM_CAM_ATTRS_TYPE_DOUBLE',
1810 * the attribute can have validity.
1814 * Validity structure for integer array.
1817 int *array; /**< a pointer of array */
1818 int count; /**< size of array */
1819 int def; /**< default value. Real value not index of array */
1823 * Validity structure for integer range.
1826 int min; /**< minimum range */
1827 int max; /**< maximum range */
1828 int def; /**< default value */
1832 * Validity structure for double array.
1835 double *array; /**< a pointer of array */
1836 int count; /**< size of array */
1837 double def; /**< default value. Real value not index of array */
1841 * Validity structure for double range.
1844 double min; /**< minimum range */
1845 double max; /**< maximum range */
1846 double def; /**< default value */
1852 /* General Structure */
1854 * Structure for capture data.
1857 void *data; /**< pointer of captured image */
1858 unsigned int length; /**< length of captured image (in byte)*/
1859 MMPixelFormatType format; /**< image format */
1860 int width; /**< width of captured image */
1861 int height; /**< height of captured image */
1862 int encoder_type; /**< encoder type */
1863 } MMCamcorderCaptureDataType;
1867 * Structure for metadata of stream buffer.
1870 unsigned long long ts_soe;
1871 unsigned long long ts_eoe;
1872 unsigned long long ts_sof;
1873 unsigned long long ts_eof;
1874 unsigned long long ts_hal;
1875 unsigned long long ts_qmf;
1876 unsigned long long ts_gst;
1877 unsigned long long td_exp;
1878 unsigned long long ts_aux;
1879 unsigned long long td_aux;
1880 unsigned long long seqnum;
1881 unsigned long long flags;
1882 } MMCamcorderFrameMeta;
1886 * Structure for video stream data.
1888 #define BUFFER_MAX_PLANE_NUM 4
1894 unsigned int length_yuv;
1898 unsigned int length_y;
1900 unsigned int length_uv;
1904 unsigned int length_y;
1906 unsigned int length_u;
1908 unsigned int length_v;
1911 unsigned char *data;
1912 unsigned int length_data;
1914 int is_header_included;
1915 } encoded, depth, rgb;
1916 } data; /**< pointer of captured stream */
1917 MMCamStreamData data_type; /**< data type */
1918 unsigned int length_total; /**< total length of stream buffer(byte) */
1919 unsigned int num_planes; /**< number of planes */
1920 MMPixelFormatType format; /**< image format */
1921 int width; /**< width of video buffer */
1922 int height; /**< height of video buffer */
1923 unsigned int timestamp; /**< timestamp of stream buffer(msec) */
1924 void *bo[BUFFER_MAX_PLANE_NUM]; /**< TBM buffer object */
1925 void *internal_buffer; /**< Internal buffer pointer */
1926 int stride[BUFFER_MAX_PLANE_NUM]; /**< Stride of each plane */
1927 int elevation[BUFFER_MAX_PLANE_NUM];/**< Elevation of each plane */
1928 int extra_stream_id; /**< ID of extra preview stream */
1929 int focus_state; /**< Focus state */
1930 int facing_direction; /**< Facing direction */
1931 int flip; /**< Flip */
1932 int rotation; /**< Rotation */
1933 unsigned long long timestamp_nsec; /**< timestamp of stream buffer(nsec) */
1934 MMCamcorderFrameMeta frame_meta; /**< Metadata of stream buffer */
1935 int status_ae; /**< Status of auto exposure */
1936 int status_awb; /**< Status of auto white balance */
1937 } MMCamcorderVideoStreamDataType;
1941 * Structure for audio stream data.
1944 void *data; /**< pointer of captured stream */
1945 unsigned int length; /**< length of stream buffer (in byte)*/
1946 MMCamcorderAudioFormat format; /**< audio format */
1947 int channel; /**< number of channel of the stream */
1948 unsigned int timestamp; /**< timestamp of stream buffer (msec)*/
1949 float volume_dB; /**< dB value of audio stream */
1950 } MMCamcorderAudioStreamDataType;
1954 * Structure for muxed stream data.
1957 void *data; /**< pointer of muxed stream */
1958 unsigned int length; /**< length of stream buffer (in byte) */
1959 unsigned long long offset; /**< current offset for data */
1960 } MMCamcorderMuxedStreamDataType;
1964 * Prerequisite information for mm_camcorder_create()
1965 * The information to set prior to create.
1968 enum MMVideoDeviceType videodev_type; /**< Video device type */
1969 /* For future use */
1970 int reserved[4]; /**< reserved fields */
1975 * Report structure of recording file
1978 char *recording_filename; /**< File name of stored recording file. Please free after using. */
1979 } MMCamRecordingReport; /**< report structure definition of recording file */
1983 * Face detect detailed information
1985 typedef struct _MMCamFaceInfo {
1986 int id; /**< id of each face */
1987 int score; /**< score of each face */
1988 MMRectType rect; /**< area of face */
1992 * Face detect information
1994 typedef struct _MMCamFaceDetectInfo {
1995 int num_of_faces; /**< number of detected faces */
1996 MMCamFaceInfo *face_info; /**< face information, this should be freed after use it. */
1997 } MMCamFaceDetectInfo;
2000 * Window information
2002 typedef struct _MMCamWindowInfo {
2008 /*=======================================================================================
2009 | TYPE DEFINITIONS |
2010 ========================================================================================*/
2012 * Function definition for video stream callback.
2013 * Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(),
2014 * mm_camcorder_unrealize(), mm_camcorder_record(), mm_camcorder_commit(), and mm_camcorder_cancel(), etc.
2015 * Please don't hang this function long. It may cause low performance of preview or occur timeout error from video source.
2016 * Also, you're not allowed to call mm_camcorder_stop() even in other context, while you're hanging this function.
2017 * I recommend to you releasing this function ASAP.
2019 * @param[in] stream Reference pointer to video stream data
2020 * @param[in] user_param User parameter which is received from user when callback function was set
2021 * @return This function returns true on success, or false on failure.
2022 * @remarks This function is issued in the context of gstreamer (video sink thread).
2024 typedef gboolean (*mm_camcorder_video_stream_callback)(MMCamcorderVideoStreamDataType *stream, void *user_param);
2028 * Function definition for audio stream callback.
2029 * Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(),
2030 * mm_camcorder_unrealize(), mm_camcorder_record(), mm_camcorder_commit(), and mm_camcorder_cancel(), etc.
2031 * Please don't hang this function long. It may cause low performance of camcorder or occur timeout error from audio source.
2032 * I recommend to you releasing this function ASAP.
2034 * @param[in] stream Reference pointer to audio stream data
2035 * @param[in] user_param User parameter which is received from user when callback function was set
2036 * @return This function returns true on success, or false on failure.
2039 typedef gboolean (*mm_camcorder_audio_stream_callback)(MMCamcorderAudioStreamDataType *stream, void *user_param);
2043 * Function definition for muxed stream callback.
2044 * Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(),
2045 * mm_camcorder_unrealize(), mm_camcorder_record(), mm_camcorder_commit(), and mm_camcorder_cancel(), etc.
2046 * Please don't hang this function long. It may cause low performance of camcorder or occur timeout error from encoding pipeline.
2047 * I recommend to you releasing this function ASAP.
2049 * @param[in] stream Reference pointer to muxed stream data
2050 * @param[in] user_param User parameter which is received from user when callback function was set
2051 * @return This function returns true on success, or false on failure.
2054 typedef gboolean (*mm_camcorder_muxed_stream_callback)(MMCamcorderMuxedStreamDataType *stream, void *user_param);
2058 * Function definition for video capture callback.
2059 * Like '#mm_camcorder_video_stream_callback', you can't call mm_camcorder_stop() while you are hanging this function.
2061 * @param[in] frame Reference pointer to captured data
2062 * @param[in] thumbnail Reference pointer to thumbnail data
2063 * @param[in] user_param User parameter which is received from user when callback function was set
2064 * @return This function returns true on success, or false on failure.
2065 * @remarks This function is issued in the context of gstreamer (video src thread).
2067 typedef gboolean (*mm_camcorder_video_capture_callback)(MMCamcorderCaptureDataType *frame, MMCamcorderCaptureDataType *thumbnail, void *user_param);
2070 * Function definition for video encode decision callback.
2071 * Like '#mm_camcorder_video_stream_callback', you can't call mm_camcorder_stop() while you are hanging this function.
2073 * @param[in] stream Reference pointer to video stream data
2074 * @param[in] user_param User parameter which is received from user when callback function was set
2075 * @return This function returns true on encoding, or false on drop frame.
2076 * @remarks This function is issued in the context of gstreamer (video sink or internal of camerasrc thread).
2078 typedef gboolean (*mm_camcorder_video_encode_decision_callback)(MMCamcorderVideoStreamDataType *stream, void *user_param);
2081 /*=======================================================================================
2082 | GLOBAL FUNCTION PROTOTYPES |
2083 ========================================================================================*/
2085 * mm_camcorder_create:\n
2086 * Create camcorder object. This is the function that an user who wants to use mm_camcorder calls first.
2087 * This function creates handle structure and initialize mutex, attributes, gstreamer.
2088 * When this function success, it will return a handle of newly created object.
2089 * A user have to put the handle when he calls every function of mm_camcorder. \n
2090 * Second argument of this function is the field to describe pre-setting information of mm_camcorder such as which camera device it will use.
2091 * Normally, MM_VIDEO_DEVICE_CAMERA0 is for Main camera(or Mega camera, Back camera),
2092 * and MM_VIDEO_DEVICE_CAMERA1 is for VGA camera (or Front camera). If you want audio recording,
2093 * please set MM_VIDEO_DEVICE_NONE. (No camera device is needed.)
2095 * @param[out] camcorder A handle of camcorder.
2096 * @param[in] info Information for camera device. Depending on this information,
2097 * camcorder opens different camera devices.
2098 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2099 * Please refer 'mm_error.h' to know the exact meaning of the error.
2100 * @see mm_camcorder_destroy
2102 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_NULL
2103 * @remarks You can create multiple handles on a context at the same time. However,
2104 * camcorder cannot guarantee proper operation because of limitation of resources, such as
2105 * camera device, audio device, and display device.
2109 #include <mm_camcorder.h>
2111 gboolean initialize_camcorder()
2114 MMCamPreset cam_info;
2116 cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2118 // when you want to record audio only, enable this.
2119 cam_info.videodev_type = MM_VIDEO_DEVICE_NONE;
2122 err = mm_camcorder_create(&hcam, &cam_info);
2124 if (err != MM_ERROR_NONE) {
2125 printf("Fail to call mm_camcorder_create = %x\n", err);
2134 int mm_camcorder_create(MMHandleType *camcorder, MMCamPreset *info);
2138 * mm_camcorder_destroy:\n
2139 * Destroy camcorder object. Release handle and all of the resources that were created in mm_camcorder_create().\n
2140 * This is the finalizing function of mm_camcorder. If this function is not called or fails to call, the handle isn't released fully.
2141 * This function releases attributes, mutexes, sessions, and handle itself. This function also removes all of remaining messages.
2142 * So if your application should wait a certain message of mm_camcorder, please wait to call this function till getting the message.
2145 * @param[in] camcorder A handle of camcorder.
2146 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2147 * Please refer 'mm_error.h' to know the exact meaning of the error.
2148 * @see mm_camcorder_create
2149 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_NULL
2150 * @post Because the handle is not valid, you can't check the state.
2155 #include <mm_camcorder.h>
2157 gboolean destroy_camcorder()
2161 //Destroy camcorder handle
2162 err = mm_camcorder_destroy(hcam);
2164 printf("Fail to call mm_camcorder_destroy = %x\n", err);
2173 int mm_camcorder_destroy(MMHandleType camcorder);
2177 * mm_camcorder_realize:\n
2178 * Allocate resources for camcorder and initialize it.
2179 * This also creates streamer pipeline. So you have to set attributes that are pivotal to create
2180 * the pipeline before calling this function. This function also takes a roll to manage conflict
2181 * between different applications which use camcorder. For example, if you try to use camcorder when
2182 * other application that is more important such as call application, this function will return
2183 * 'MM_ERROR_POLICY_BLOCKED'. On the contrary, if your application that uses camcorder starts to launch
2184 * while another application that uses speaker and has lower priority, your application will kick
2185 * another application.
2187 * @param[in] camcorder A handle of camcorder.
2188 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2189 * Please refer 'mm_error.h' to know the exact meaning of the error.
2190 * @see mm_camcorder_unrealize
2191 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_NULL
2192 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_READY
2197 #include <mm_camcorder.h>
2199 //For image capturing
2200 gboolean initialize_image_capture()
2203 MMCamPreset cam_info;
2204 char *err_attr_name = NULL;
2205 void * hdisplay = NULL;
2208 //Set video device as 'camera0' (main camera device)
2209 cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2211 err = mm_camcorder_create(&hcam, &cam_info);
2213 if (err != MM_ERROR_NONE) {
2214 printf("Fail to call mm_camcorder_create = %x\n", err);
2218 mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2219 mm_camcorder_set_video_capture_callback(hcam,(mm_camcorder_video_capture_callback)camcordertest_video_capture_cb, (void*)hcam);
2221 hdisplay = &ad.xid; //xid of xwindow. This value can be different depending on your environment.
2222 hsize = sizeof(ad.xid); //size of xid structure.
2224 // camcorder attribute setting
2225 err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2226 MMCAM_MODE, MM_CAMCORDER_MODE_IMAGE,
2227 MMCAM_IMAGE_ENCODER, MM_IMAGE_CODEC_JPEG,
2228 MMCAM_CAMERA_WIDTH, 640,
2229 MMCAM_CAMERA_HEIGHT, 480,
2230 MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_YUYV,
2231 MMCAM_CAMERA_FPS, 30,
2232 MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2233 MMCAM_DISPLAY_HANDLE, (void*) hdisplay, hsize,
2234 MMCAM_CAPTURE_FORMAT, MM_PIXEL_FORMAT_ENCODED,
2235 MMCAM_CAPTURE_WIDTH, 640,
2236 MMCAM_CAPTURE_HEIGHT, 480,
2240 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2241 if (err_attr_name) {
2242 free(err_attr_name);
2243 err_attr_name = NULL;
2248 err = mm_camcorder_realize(hcam);
2250 printf("Fail to call mm_camcorder_realize = %x\n", err);
2258 gboolean initialize_video_capture()
2261 MMCamPreset cam_info;
2262 char *err_attr_name = NULL;
2263 void * hdisplay = NULL;
2266 //Set video device as 'camera0' (main camera device)
2267 cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2269 err = mm_camcorder_create(&hcam, &cam_info);
2271 if (err != MM_ERROR_NONE) {
2272 printf("Fail to call mm_camcorder_create = %x\n", err);
2276 mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, hcam);
2278 hdisplay = &ad.xid; //xid of xwindow. This value can be different depending on your environment.
2279 hsize = sizeof(ad.xid); //size of xid structure.
2281 // camcorder attribute setting
2282 err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2283 MMCAM_MODE, MM_CAMCORDER_MODE_VIDEO,
2284 MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2285 MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2286 MMCAM_VIDEO_ENCODER, MM_VIDEO_CODEC_MPEG4,
2287 MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2288 MMCAM_CAMERA_WIDTH, 1280,
2289 MMCAM_CAMERA_HEIGHT, 720,
2290 MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_NV12,
2291 MMCAM_CAMERA_FPS, 30,
2292 MMCAM_AUDIO_SAMPLERATE, 44100,
2293 MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2294 MMCAM_AUDIO_CHANNEL, 2,
2295 MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2296 MMCAM_DISPLAY_HANDLE, (void*) hdisplay, hsize,
2297 MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2301 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2302 if (err_attr_name) {
2303 free(err_attr_name);
2304 err_attr_name = NULL;
2309 err = mm_camcorder_realize(hcam);
2311 printf("Fail to call mm_camcorder_realize = %x\n", err);
2318 //For audio(only) capturing
2319 gboolean initialize_audio_capture()
2322 MMCamPreset cam_info;
2323 char *err_attr_name = NULL;
2324 void * hdisplay = NULL;
2327 //Set no video device, because audio recording doesn't need video input.
2328 cam_info.videodev_type = MM_VIDEO_DEVICE_NONE;
2330 err = mm_camcorder_create(&hcam, &cam_info);
2332 if (err != MM_ERROR_NONE) {
2333 printf("Fail to call mm_camcorder_create = %x\n", err);
2337 mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2339 hdisplay = &ad.xid; //xid of xwindow. This value can be different depending on your environment.
2340 hsize = sizeof(ad.xid); //size of xid structure.
2342 // camcorder attribute setting
2343 err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2344 MMCAM_MODE, MM_CAMCORDER_MODE_AUDIO,
2345 MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2346 MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2347 MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2348 MMCAM_AUDIO_SAMPLERATE, 44100,
2349 MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2350 MMCAM_AUDIO_CHANNEL, 2,
2351 MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2352 MMCAM_TARGET_TIME_LIMIT, 360000,
2356 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2357 if (err_attr_name) {
2358 free(err_attr_name);
2359 err_attr_name = NULL;
2364 err = mm_camcorder_realize(hcam);
2366 printf("Fail to call mm_camcorder_realize = %x\n", err);
2374 int mm_camcorder_realize(MMHandleType camcorder);
2378 * mm_camcorder_unrealize:\n
2379 * Uninitialize camcoder resources and free allocated memory.
2380 * Most important resource that is released here is gstreamer pipeline of mm_camcorder.
2381 * Because most of resources, such as camera device, video display device, and audio I/O device, are operating on the gstreamer pipeline,
2382 * this function should be called to release its resources.
2384 * @param[in] camcorder A handle of camcorder.
2385 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2386 * Please refer 'mm_error.h' to know the exact meaning of the error.
2387 * @see mm_camcorder_realize
2388 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_READY
2389 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_NULL
2394 #include <mm_camcorder.h>
2396 gboolean unrealize_camcorder()
2400 //Release all resources of camcorder handle
2401 err = mm_camcorder_unrealize(hcam);
2403 printf("Fail to call mm_camcorder_unrealize = %x\n", err);
2412 int mm_camcorder_unrealize(MMHandleType camcorder);
2416 * mm_camcorder_start:\n
2417 * Start previewing. (Image/Video mode)
2418 * 'mm_camcorder_video_stream_callback' is activated after calling this function.
2420 * @param[in] camcorder A handle of camcorder.
2421 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2422 * Please refer 'mm_error.h' to know the exact meaning of the error.
2423 * @see mm_camcorder_stop
2424 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_READY
2425 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2430 #include <mm_camcorder.h>
2432 //For image capturing
2433 gboolean initialize_image_capture()
2436 MMCamPreset cam_info;
2437 char *err_attr_name = NULL;
2438 void * hdisplay = NULL;
2441 //Set video device as 'camera0' (main camera device)
2442 cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2444 err = mm_camcorder_create(&hcam, &cam_info);
2446 if (err != MM_ERROR_NONE) {
2447 printf("Fail to call mm_camcorder_create = %x\n", err);
2451 mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2452 mm_camcorder_set_video_capture_callback(hcam,(mm_camcorder_video_capture_callback)camcordertest_video_capture_cb, (void*)hcam);
2454 hdisplay = &ad.xid; //xid of xwindow. This value can be different depending on your environment.
2455 hsize = sizeof(ad.xid); //size of xid structure.
2457 // camcorder attribute setting
2458 err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2459 MMCAM_MODE, MM_CAMCORDER_MODE_IMAGE,
2460 MMCAM_IMAGE_ENCODER, MM_IMAGE_CODEC_JPEG,
2461 MMCAM_CAMERA_WIDTH, 640,
2462 MMCAM_CAMERA_HEIGHT, 480,
2463 MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_YUYV,
2464 MMCAM_CAMERA_FPS, 30,
2465 MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2466 MMCAM_DISPLAY_HANDLE, (void*) hdisplay, hsize,
2467 MMCAM_CAPTURE_FORMAT, MM_PIXEL_FORMAT_ENCODED,
2468 MMCAM_CAPTURE_WIDTH, 640,
2469 MMCAM_CAPTURE_HEIGHT, 480,
2473 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2474 if (err_attr_name) {
2475 free(err_attr_name);
2476 err_attr_name = NULL;
2481 err = mm_camcorder_realize(hcam);
2483 printf("Fail to call mm_camcorder_realize = %x\n", err);
2488 err = mm_camcorder_start(hcam);
2490 printf("Fail to call mm_camcorder_start = %x\n", err);
2498 gboolean initialize_video_capture()
2501 MMCamPreset cam_info;
2502 char *err_attr_name = NULL;
2503 void * hdisplay = NULL;
2506 //Set video device as 'camera0' (main camera device)
2507 cam_info.videodev_type = MM_VIDEO_DEVICE_CAMERA0;
2509 err = mm_camcorder_create(&hcam, &cam_info);
2511 if (err != MM_ERROR_NONE) {
2512 printf("Fail to call mm_camcorder_create = %x\n", err);
2516 mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, hcam);
2518 hdisplay = &ad.xid; //xid of xwindow. This value can be different depending on your environment.
2519 hsize = sizeof(ad.xid); //size of xid structure.
2521 // camcorder attribute setting
2522 err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2523 MMCAM_MODE, MM_CAMCORDER_MODE_VIDEO,
2524 MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2525 MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2526 MMCAM_VIDEO_ENCODER, MM_VIDEO_CODEC_MPEG4,
2527 MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2528 MMCAM_CAMERA_WIDTH, 1280,
2529 MMCAM_CAMERA_HEIGHT, 720,
2530 MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_NV12,
2531 MMCAM_CAMERA_FPS, 30,
2532 MMCAM_AUDIO_SAMPLERATE, 44100,
2533 MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2534 MMCAM_AUDIO_CHANNEL, 2,
2535 MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
2536 MMCAM_DISPLAY_HANDLE, (void*) hdisplay, hsize,
2537 MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2541 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2542 if (err_attr_name) {
2543 free(err_attr_name);
2544 err_attr_name = NULL;
2549 err = mm_camcorder_realize(hcam);
2551 printf("Fail to call mm_camcorder_realize = %x\n", err);
2556 err = mm_camcorder_start(hcam);
2558 printf("Fail to call mm_camcorder_start = %x\n", err);
2565 //For audio(only) capturing
2566 gboolean initialize_audio_capture()
2569 MMCamPreset cam_info;
2570 char *err_attr_name = NULL;
2571 void * hdisplay = NULL;
2574 //Set no video device, because audio recording doesn't need video input.
2575 cam_info.videodev_type = MM_VIDEO_DEVICE_NONE;
2577 err = mm_camcorder_create(&hcam, &cam_info);
2579 if (err != MM_ERROR_NONE) {
2580 printf("Fail to call mm_camcorder_create = %x\n", err);
2584 mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2586 hdisplay = &ad.xid; //xid of xwindow. This value can be different depending on your environment.
2587 hsize = sizeof(ad.xid); //size of xid structure.
2589 // camcorder attribute setting
2590 err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
2591 MMCAM_MODE, MM_CAMCORDER_MODE_AUDIO,
2592 MMCAM_AUDIO_DEVICE, MM_AUDIO_DEVICE_MIC,
2593 MMCAM_AUDIO_ENCODER, MM_AUDIO_CODEC_AAC,
2594 MMCAM_FILE_FORMAT, MM_FILE_FORMAT_3GP,
2595 MMCAM_AUDIO_SAMPLERATE, 44100,
2596 MMCAM_AUDIO_FORMAT, MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE,
2597 MMCAM_AUDIO_CHANNEL, 2,
2598 MMCAM_TARGET_FILENAME, TARGET_FILENAME, strlen(TARGET_FILENAME),
2599 MMCAM_TARGET_TIME_LIMIT, 360000,
2603 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
2604 if (err_attr_name) {
2605 free(err_attr_name);
2606 err_attr_name = NULL;
2611 err = mm_camcorder_realize(hcam);
2613 printf("Fail to call mm_camcorder_realize = %x\n", err);
2618 err = mm_camcorder_start(hcam);
2620 printf("Fail to call mm_camcorder_start = %x\n", err);
2628 int mm_camcorder_start(MMHandleType camcorder);
2632 * mm_camcorder_stop:\n
2633 * Stop previewing. (Image/Video mode)
2634 * This function will change the status of pipeline. If an application doesn't return callbacks
2635 * of camcorder, this function can be locked. For example, if your application still
2636 * holds '#mm_camcorder_video_capture_callback' or '#mm_camcorder_video_stream_callback',
2637 * this function could be hung. So users have to return every callback before calling this function.
2639 * @param[in] camcorder A handle of camcorder.
2640 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2641 * Please refer 'mm_error.h' to know the exact meaning of the error.
2642 * @see mm_camcorder_start
2643 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_PREPARE
2644 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_READY
2649 #include <mm_camcorder.h>
2651 gboolean stop_camcorder()
2656 err = mm_camcorder_stop(hcam);
2658 printf("Fail to call mm_camcorder_stop = %x\n", err);
2667 int mm_camcorder_stop(MMHandleType camcorder);
2671 * mm_camcorder_capture_start:\n
2672 * Start capturing of still images. (Image mode only)
2673 * Captured image will be delievered through 'mm_camcorder_video_capture_callback'.
2674 * So basically, the operation is working asynchronously. \n
2675 * When a user call this function, MSL will stop to retrieving preview from camera device.
2676 * Then set capture resolution, pixel format, and encoding type to camera driver. After resuming,
2677 * camera can get still image. A user will be notified by
2678 * 'MM_MESSAGE_CAMCORDER_CAPTURED' message when capturing succeed. When a user sets
2679 * multishot (by setting multiple number to MMCAM_CAPTURE_COUNT), the message
2680 * will be called multiple time. You can get the number of image from 'code' of
2681 * 'MMMessageParamType'.
2683 * @param[in] camcorder A handle of camcorder.
2684 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2685 * Please refer 'mm_error.h' to know the exact meaning of the error.
2686 * @see mm_camcorder_capture_stop
2687 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_PREPARE
2688 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_CAPTURING
2689 * @remarks To call this function, preview should be started successfully.\n
2690 * This function is a pair of mm_camcorder_capture_stop().
2691 * So user should call mm_camcorder_capture_stop() after getting captured image.
2695 #include <mm_camcorder.h>
2697 gboolean capturing_picture()
2701 err = mm_camcorder_capture_start(hcam);
2704 printf("Fail to call mm_camcorder_capture_start = %x\n", err);
2708 //mm_camcorder_capture_stop should be called after getting
2709 //MM_MESSAGE_CAMCORDER_CAPTURED message.
2717 int mm_camcorder_capture_start(MMHandleType camcorder);
2721 * mm_camcorder_capture_stop:\n
2722 * Stop capturing of still images. (Image mode only)
2723 * This function notifies the end of capturing and launch preview again.
2724 * Just as mm_camcorder_capture_start(), this function stops still image stream and set preview information such as
2725 * resolution, pixel format, and framerate to camera driver. Then it command to start preview.
2726 * If you don't call this, preview will not be displayed even though capturing was finished.
2728 * @param[in] camcorder A handle of camcorder.
2729 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2730 * Please refer 'mm_error.h' to know the exact meaning of the error.
2731 * @see mm_camcorder_capture_start
2732 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_CAPTURING
2733 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2734 * @remarks To call this function, a user has to call mm_camcorder_capture_start() first.\n
2735 * This is not a function to stop multishot in the middle of operation. For that,
2736 * please use '#MMCAM_CAPTURE_BREAK_CONTINUOUS_SHOT' instead.
2740 #include <mm_camcorder.h>
2742 gboolean capturing_picture_stop()
2746 err = mm_camcorder_capture_stop(hcam);
2748 printf("Fail to call mm_camcorder_capture_stop = %x\n", err);
2752 //After calling upper function, preview will start.
2759 int mm_camcorder_capture_stop(MMHandleType camcorder);
2763 * mm_camcorder_record:\n
2764 * Start recording. (Audio/Video mode only)
2765 * Camcorder starts to write a file when you call this function. You can specify the name of file
2766 * using '#MMCAM_TARGET_FILENAME'. Beware, if you fail to call mm_camcorder_commit() or mm_camcorder_cancel(),
2767 * the recorded file is still on the storage.
2769 * @param[in] camcorder A handle of camcorder.
2770 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2771 * Please refer 'mm_error.h' to know the exact meaning of the error.
2772 * @see mm_camcorder_pause
2773 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_PREPARE
2774 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_RECORDING
2779 #include <mm_camcorder.h>
2781 gboolean record_and_cancel_video_file()
2786 err = mm_camcorder_record(hcam);
2788 printf("Fail to call mm_camcorder_record = %x\n", err);
2797 int mm_camcorder_record(MMHandleType camcorder);
2801 * mm_camcorder_pause:\n
2802 * Pause A/V recording or Audio recording. (Audio/Video mode only)
2803 * 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.
2804 * If you call mm_camcorder_commit() while on pausing, the recorded file only has Audio and Video stream which were generated before pause().
2806 * @param[in] camcorder A handle of camcorder.
2807 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2808 * Please refer 'mm_error.h' to know the exact meaning of the error.
2809 * @see mm_camcorder_record
2810 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_RECORDING
2811 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_PAUSED
2812 * @remarks Even though this function is for pausing recording, small amount of buffers could be recorded after pause().
2813 * Because the buffers which are existed in the queue were created before pause(), the buffers should be recorded.
2817 #include <mm_camcorder.h>
2819 gboolean record_pause_and_resume_recording()
2824 err = mm_camcorder_record(hcam);
2826 printf("Fail to call mm_camcorder_record = %x\n", err);
2830 // Wait while recording...
2833 err = mm_camcorder_pause(hcam);
2835 printf("Fail to call mm_camcorder_pause = %x\n", err);
2842 err = mm_camcorder_record(hcam);
2844 printf("Fail to call mm_camcorder_record = %x\n", err);
2854 int mm_camcorder_pause(MMHandleType camcorder);
2858 * mm_camcorder_commit:\n
2859 * Stop recording and save results. (Audio/Video mode only)\n
2860 * After starting recording, encoded data frame will be stored in the location specified in MMCAM_TARGET_FILENAME.
2861 * Some encoder or muxer require a certain type of finalizing such as adding some information to header.
2862 * This function takes that roll. So if you don't call this function after recording, the result file may not be playable.\n
2863 * After committing successfully, camcorder resumes displaying preview (video recording case).
2864 * Because this is the function for saving the recording result, the operation is available
2865 * only when the mode of camcorder is MM_CAMCORDER_MODE_AUDIO or MM_CAMCORDER_MODE_VIDEO.
2867 * @param[in] camcorder A handle of camcorder.
2868 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2869 * Please refer 'mm_error.h' to know the exact meaning of the error.
2870 * @see mm_camcorder_cancel
2871 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_RECORDING
2872 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2873 * @remarks This function can take a few second when recording time is long.
2874 * and if there are only quite few input buffer from video src or audio src,
2875 * committing could be failed.
2879 #include <mm_camcorder.h>
2881 gboolean record_and_save_video_file()
2886 err = mm_camcorder_record(hcam);
2888 printf("Fail to call mm_camcorder_record = %x\n", err);
2892 // Wait while recording for test...
2893 // In normal case, mm_camcorder_record() and mm_camcorder_commit() aren't called in the same function.
2896 err = mm_camcorder_commit(hcam);
2898 printf("Fail to call mm_camcorder_commit = %x\n", err);
2907 int mm_camcorder_commit(MMHandleType camcorder);
2911 * mm_camcorder_cancel:\n
2912 * Stop recording and discard the result. (Audio/Video mode only)
2913 * When a user want to finish recording without saving the result file, this function can be used.
2914 * Like mm_camcorder_commit(), this function also stops recording, release related resources(like codec) ,and goes back to preview status.
2915 * However, instead of saving file, this function unlinks(delete) the result.\n
2916 * Because this is the function for canceling recording, the operation is available
2917 * only when mode is MM_CAMCORDER_MODE_AUDIO or MM_CAMCORDER_MODE_VIDEO.
2919 * @param[in] camcorder A handle of camcorder.
2920 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2921 * Please refer 'mm_error.h' to know the exact meaning of the error.
2922 * @see mm_camcorder_commit
2923 * @pre Previous state of mm-camcorder should be MM_CAMCORDER_STATE_RECORDING
2924 * @post Next state of mm-camcorder will be MM_CAMCORDER_STATE_PREPARE
2929 #include <mm_camcorder.h>
2931 gboolean record_and_cancel_video_file()
2936 err = mm_camcorder_record(hcam);
2938 printf("Fail to call mm_camcorder_record = %x\n", err);
2942 // Wait while recording...
2945 err = mm_camcorder_cancel(hcam);
2947 printf("Fail to call mm_camcorder_cancel = %x\n", err);
2956 int mm_camcorder_cancel(MMHandleType camcorder);
2960 * mm_camcorder_set_message_callback:\n
2961 * Set callback for receiving messages from camcorder. Through this callback function, camcorder
2962 * sends various message including status changes, asynchronous error, capturing, and limitations.
2963 * One thing you have to know is that message callback is working on the main loop of application.
2964 * So until releasing the main loop, message callback will not be called.
2966 * @param[in] camcorder A handle of camcorder.
2967 * @param[in] callback Function pointer of callback function. Please refer 'MMMessageCallback'.
2968 * @param[in] user_data User parameter for passing to callback function.
2969 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
2970 * Please refer 'mm_error.h' to know the exact meaning of the error.
2971 * @see MMMessageCallback
2974 * @remarks registered 'callback' is called on main loop of the application. So until the main loop is released, 'callback' will not be called.
2978 #include <mm_camcorder.h>
2980 gboolean setting_msg_callback()
2983 mm_camcorder_set_message_callback(hcam,(MMMessageCallback)msg_callback, (void*)hcam);
2991 int mm_camcorder_set_message_callback(MMHandleType camcorder, MMMessageCallback callback, void *user_data);
2995 * mm_camcorder_set_video_stream_callback:\n
2996 * Set callback for user defined video stream callback function.
2997 * Users can retrieve video frame using registered callback.
2998 * The callback function holds the same buffer that will be drawn on the display device.
2999 * So if an user change the buffer, it will be displayed on the device.
3001 * @param[in] camcorder A handle of camcorder.
3002 * @param[in] callback Function pointer of callback function.
3003 * @param[in] user_data User parameter for passing to callback function.
3004 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3005 * Please refer 'mm_error.h' to know the exact meaning of the error.
3006 * @see mm_camcorder_video_stream_callback
3009 * @remarks registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
3013 #include <mm_camcorder.h>
3015 gboolean setting_video_stream_callback()
3018 mm_camcorder_set_video_stream_callback(hcam, (mm_camcorder_video_stream_callback)camcordertest_video_stream_cb, (void*)hcam);
3024 int mm_camcorder_set_video_stream_callback(MMHandleType camcorder, mm_camcorder_video_stream_callback callback, void *user_data);
3028 * mm_camcorder_set_video_capture_callback:\n
3029 * Set callback for user defined video capture callback function. (Image mode only)
3030 * mm_camcorder deliver captured image through the callback.\n
3031 * Normally, this function provides main captured image and thumbnail image. But depending on the environment,
3032 * thumbnail would not be available. Information related with main captured image and thumbnail image is also included
3033 * in the argument of the callback function.
3034 * For more detail information of callback, please refer 'mm_camcorder_video_capture_callback'.
3036 * @param[in] camcorder A handle of camcorder.
3037 * @param[in] callback Function pointer of callback function.
3038 * @param[in] user_data User parameter for passing to callback function.
3039 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3040 * Please refer 'mm_error.h' to know the exact meaning of the error.
3041 * @see mm_camcorder_video_capture_callback
3044 * @remarks registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
3048 #include <mm_camcorder.h>
3050 gboolean setting_capture_callback()
3053 mm_camcorder_set_video_capture_callback(hcam,(mm_camcorder_video_capture_callback)camcordertest_video_capture_cb, (void*)hcam);
3059 int mm_camcorder_set_video_capture_callback(MMHandleType camcorder, mm_camcorder_video_capture_callback callback, void *user_data);
3063 * mm_camcorder_set_audio_stream_callback:\n
3064 * Set callback for user defined audio stream callback function.
3065 * Users can retrieve audio data using registered callback.
3066 * The callback function holds the same buffer that will be recorded.
3067 * So if an user change the buffer, the result file will has the buffer.
3069 * @param[in] camcorder A handle of camcorder.
3070 * @param[in] callback Function pointer of callback function.
3071 * @param[in] user_data User parameter for passing to callback function.
3072 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3073 * Please refer 'mm_error.h' to know the exact meaning of the error.
3074 * @see mm_camcorder_audio_stream_callback
3077 * @remarks registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
3081 #include <mm_camcorder.h>
3083 gboolean setting_audio_stream_callback()
3086 mm_camcorder_set_audio_stream_callback(hcam, (mm_camcorder_audio_stream_callback)camcordertest_audio_stream_cb, (void*)hcam);
3092 int mm_camcorder_set_audio_stream_callback(MMHandleType camcorder, mm_camcorder_audio_stream_callback callback, void *user_data);
3096 * mm_camcorder_set_muxed_stream_callback:\n
3097 * Set callback for user defined muxed stream callback function.
3098 * Users can retrieve muxed data using registered callback.
3099 * The callback function holds the same buffer that will be recorded.
3101 * @param[in] camcorder A handle of camcorder.
3102 * @param[in] callback Function pointer of callback function.
3103 * @param[in] user_data User parameter for passing to callback function.
3104 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3105 * Please refer 'mm_error.h' to know the exact meaning of the error.
3106 * @see mm_camcorder_muxed_stream_callback
3109 * @remarks registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
3113 #include <mm_camcorder.h>
3115 gboolean setting_muxed_stream_callback()
3118 mm_camcorder_set_muxed_stream_callback(hcam, (mm_camcorder_muxed_stream_callback)camcordertest_muxed_stream_cb, (void*)hcam);
3124 int mm_camcorder_set_muxed_stream_callback(MMHandleType camcorder, mm_camcorder_muxed_stream_callback callback, void *user_data);
3128 * mm_camcorder_set_video_encode_decision_callback:\n
3129 * Set callback for user defined video encode decision callback function.
3130 * Users can retrieve video frame using registered callback,
3131 * and decide to encoding video frame by return value of function.
3133 * @param[in] camcorder A handle of camcorder.
3134 * @param[in] callback Function pointer of callback function.
3135 * @param[in] user_data User parameter for passing to callback function.
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 * @see mm_camcorder_video_encode_decision_callback
3141 * @remarks registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
3143 int mm_camcorder_set_video_encode_decision_callback(MMHandleType camcorder, mm_camcorder_video_encode_decision_callback callback, void *user_data);
3147 * mm_camcorder_get_state:\n
3148 * Get the current state of camcorder.
3149 * mm_camcorder is working on the base of its state. An user should check the state of mm_camcorder before calling its functions.
3150 * If the handle is available, user can retrieve the value.
3152 * @param[in] camcorder A handle of camcorder.
3153 * @param[out] state On return, it contains current state of camcorder.
3154 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3155 * Please refer 'mm_error.h' to know the exact meaning of the error.
3156 * @see MMCamcorderStateType
3163 #include <mm_camcorder.h>
3165 gboolean get_state_of_camcorder()
3167 MMCamcorderStateType state;
3169 //Get state of camcorder
3170 mm_camcorder_get_state(hcam, &state);
3171 printf("Current status is %d\n", state);
3178 int mm_camcorder_get_state(MMHandleType camcorder, MMCamcorderStateType *state);
3179 int mm_camcorder_get_state2(MMHandleType camcorder, MMCamcorderStateType *state, MMCamcorderStateType *old_state);
3183 * mm_camcorder_get_attributes:\n
3184 * Get attributes of camcorder with given attribute names. This function can get multiple attributes
3185 * simultaneously. If one of attribute fails, this function will stop at the point.
3186 * 'err_attr_name' let you know the name of the attribute.
3188 * @param[in] camcorder Specifies the camcorder handle.
3189 * @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
3190 * Free this variable after using.
3191 * @param[in] attribute_name attribute name that user want to get.
3192 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3193 * Please refer 'mm_error.h' to know the exact meaning of the error.
3196 * @remarks You can retrieve multiple attributes at the same time. @n
3197 * This function must finish with 'NULL' argument. @n
3198 * ex) mm_camcorder_get_attributes(....... , NULL);
3199 * @see mm_camcorder_set_attributes
3203 #include <mm_camcorder.h>
3205 gboolean getting_attribute()
3208 MMCamPreset cam_info;
3209 char *err_attr_name = NULL;
3210 void * hdisplay = NULL;
3213 hdisplay = &ad.xid; //xid of xwindow. This value can be different depending on your environment.
3214 hsize = sizeof(ad.xid); //size of xid structure.
3216 // camcorder attribute setting
3217 err = mm_camcorder_get_attributes(hcamcorder, NULL, //The second is the argument for debugging. But you can skip this.
3218 MMCAM_MODE, &mode, //You have to input a pointer instead of variable itself.
3219 NULL); //mm_camcorder_set_attributes() should be finished with a NULL argument.
3226 int mm_camcorder_get_attributes(MMHandleType camcorder, char **err_attr_name, const char *attribute_name, ...) G_GNUC_NULL_TERMINATED;
3231 * mm_camcorder_set_attributes:\n
3232 * Set attributes of camcorder with given attribute names. This function can set multiple attributes
3233 * simultaneously. If one of attribute fails, this function will stop at the point.
3234 * 'err_attr_name' let you know the name of the attribute.
3236 * @param[in] camcorder Specifies the camcorder handle.
3237 * @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
3238 * Free this variable after using.
3239 * @param[in] attribute_name attribute name that user want to set.
3240 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3241 * Please refer 'mm_error.h' to know the exact meaning of the error.
3244 * @remarks You can put multiple attributes to camcorder at the same time. @n
3245 * This function must finish with 'NULL' argument. @n
3246 * ex) mm_camcorder_set_attributes(....... , NULL);
3247 * @see mm_camcorder_get_attributes
3251 #include <mm_camcorder.h>
3253 gboolean setting_attribute()
3256 MMCamPreset cam_info;
3257 char *err_attr_name = NULL;
3258 void * hdisplay = NULL;
3261 hdisplay = &ad.xid; //xid of xwindow. This value can be different depending on your environment.
3262 hsize = sizeof(ad.xid); //size of xid structure.
3264 // camcorder attribute setting
3265 err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name, //The second is the argument for debugging.
3266 MMCAM_MODE, MM_CAMCORDER_MODE_IMAGE,
3267 MMCAM_IMAGE_ENCODER, MM_IMAGE_CODEC_JPEG,
3268 MMCAM_CAMERA_WIDTH, 640,
3269 MMCAM_CAMERA_HEIGHT, 480,
3270 MMCAM_CAMERA_FORMAT, MM_PIXEL_FORMAT_YUYV,
3271 MMCAM_CAMERA_FPS, 30,
3272 MMCAM_DISPLAY_ROTATION, MM_DISPLAY_ROTATION_270,
3273 MMCAM_DISPLAY_HANDLE, (void*) hdisplay, hsize, //Beware some types require 'size' value, too. (STRING, DATA type attributes)
3274 MMCAM_CAPTURE_FORMAT, MM_PIXEL_FORMAT_ENCODED,
3275 MMCAM_CAPTURE_WIDTH, 640,
3276 MMCAM_CAPTURE_HEIGHT, 480,
3277 NULL); //mm_camcorder_set_attributes() should be finished with a NULL argument.
3280 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.
3281 if (err_attr_name) {
3282 free(err_attr_name); //Please free 'err_attr_name', after using the argument.
3283 err_attr_name = NULL;
3292 int mm_camcorder_set_attributes(MMHandleType camcorder, char **err_attr_name, const char *attribute_name, ...) G_GNUC_NULL_TERMINATED;
3296 * mm_camcorder_get_attribute_info:\n
3297 * Get detail information of the attribute. To manager attributes, an user may want to know the exact character of the attribute,
3298 * such as type, flag, and validity. This is the function to provide such information.
3299 * Depending on the 'validity_type', validity union would be different. To know about the type of union, please refer 'MMCamAttrsInfo'.
3301 * @param[in] camcorder Specifies the camcorder handle.
3302 * @param[in] attribute_name attribute name that user want to get information.
3303 * @param[out] info a structure that holds information related with the attribute.
3304 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3305 * Please refer 'mm_error.h' to know the exact meaning of the error.
3308 * @remarks If the function succeeds, 'info' holds detail information about the attribute, such as type,
3309 * flag, validity_type, validity_values, and default values.
3310 * @see mm_camcorder_get_attributes, mm_camcorder_set_attributes
3314 #include <mm_camcorder.h>
3316 gboolean getting_info_from_attribute()
3318 MMCamAttrsInfo info;
3321 err = mm_camcorder_get_attribute_info(handle, MMCAM_CAPTURE_HEIGHT, &info);
3323 printf("Fail to call mm_camcorder_get_attribute_info()");
3327 //Now 'info' has many information about 'MMCAM_CAPTURE_HEIGHT'
3333 int mm_camcorder_get_attribute_info(MMHandleType camcorder, const char *attribute_name, MMCamAttrsInfo *info);
3337 * mm_camcorder_get_fps_list_by_resolution:\n
3338 * 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,
3339 * Gives attribute information structure, from the configure data.
3340 * Depending on the 'validity_type', validity union would be different. To know about the type of union, please refer 'MMCamAttrsInfo'.
3342 * @param[in] camcorder Specifies the camcorder handle.
3343 * @param[in] width width value of the current Preview resolution.
3344 * @param[in] height height value of the current Preview resolution.
3345 * @param[out] fps_info a structure that holds information related with the attribute.
3346 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3347 * Please refer 'mm_error.h' to know the exact meaning of the error.
3350 * @remarks If the function succeeds, 'info' holds detail information about the attribute, such as type,
3351 * flag, validity_type, validity_values, and default values.
3352 * @see mm_camcorder_get_attributes, mm_camcorder_set_attributes
3356 #include <mm_camcorder.h>
3358 gboolean getting_info_from_attribute()
3360 MMCamAttrsInfo info;
3363 err = mm_camcorder_get_fps_list_by_resolution(handle, width, height, &info);
3365 printf("Fail to call mm_camcorder_get_attribute_info()");
3369 //Now 'info' has many information about 'MMCAM_CAPTURE_HEIGHT'
3375 int mm_camcorder_get_fps_list_by_resolution(MMHandleType camcorder, int width, int height, MMCamAttrsInfo *fps_info);
3379 * mm_camcorder_init_focusing:\n
3380 * Initialize focusing. \n
3381 * This function stops focusing action and adjust the camera lens to initial position.
3382 * Some camera application requires to initialize its lens position after releasing half shutter. In that case,
3383 * this should be a good choice. Comparing with mm_camcorder_stop_focusing, this function not only stops focusing,
3384 * but also initialize the lens. Preview image might be out-focused after calling this function.
3385 * @param[in] camcorder A handle of camcorder.
3386 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3387 * Please refer 'mm_error.h' to know the exact meaning of the error.
3388 * @pre The status of camcorder should be MM_CAMCORDER_STATE_PREPARE, MM_CAMCORDER_STATE_RECORDING, or MM_CAMCORDER_STATE_PAUSED.
3391 * @see mm_camcorder_start_focusing, mm_camcorder_stop_focusing
3395 #include <mm_camcorder.h>
3397 gboolean start_autofocus()
3400 char * err_attr_name = NULL;
3402 // Set focus mode to 'AUTO' and scan range to 'AF Normal'.
3403 //You just need to set these values one time. After that, just call mm_camcorder_start_focusing().
3404 err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
3405 MMCAM_CAMERA_FOCUS_MODE, MM_CAMCORDER_FOCUS_MODE_AUTO,
3406 MMCAM_CAMERA_AF_SCAN_RANGE, MM_CAMCORDER_AUTO_FOCUS_NORMAL,
3410 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
3411 if (err_attr_name) {
3412 free(err_attr_name);
3413 err_attr_name = NULL;
3418 mm_camcorder_init_focusing(hcam);
3419 mm_camcorder_start_focusing(hcam);
3420 printf("Waiting for adjusting focus\n");
3422 // Waiting for 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED'
3429 int mm_camcorder_init_focusing(MMHandleType camcorder);
3433 * mm_camcorder_start_focusing:\n
3434 * Start focusing. \n
3435 * This function command to start focusing operation. Because focusing operation depends on mechanic or electric module,
3436 * it may take small amount of time. (For ex, 500ms ~ 3sec). \n
3437 * This function works asynchronously. When an user call this function, it will return immediately.
3438 * However, focusing operation will continue until it gets results.
3439 * After finishing operation, you can get 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED' message.
3440 * 'param.code' of the message structure describes the focusing was success or not.
3442 * @param[in] camcorder A handle of camcorder.
3443 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3444 * Please refer 'mm_error.h' to know the exact meaning of the error.
3448 * @see mm_camcorder_init_focusing, mm_camcorder_stop_focusing
3452 #include <mm_camcorder.h>
3454 gboolean start_autofocus()
3457 char * err_attr_name = NULL;
3459 // Set focus mode to 'AUTO' and scan range to 'AF Normal'.
3460 //You just need to set these values one time. After that, just call mm_camcorder_start_focusing().
3461 err = mm_camcorder_set_attributes((MMHandleType)hcam, &err_attr_name,
3462 MMCAM_CAMERA_FOCUS_MODE, MM_CAMCORDER_FOCUS_MODE_AUTO,
3463 MMCAM_CAMERA_AF_SCAN_RANGE, MM_CAMCORDER_AUTO_FOCUS_NORMAL,
3467 printf("Set attrs fail. (%s:%x)\n", err_attr_name, err);
3468 if (err_attr_name) {
3469 free(err_attr_name);
3470 err_attr_name = NULL;
3475 mm_camcorder_init_focusing(hcam);
3476 mm_camcorder_start_focusing(hcam);
3477 printf("Waiting for adjusting focus\n");
3479 // Waiting for 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED'
3486 int mm_camcorder_start_focusing(MMHandleType camcorder);
3490 * mm_camcorder_stop_focusing:\n
3491 * Stop focusing. This function halts focusing operation.\n
3492 * This is the function to stop focusing in the middle of the operation. So if focusing is already finished or not started yet,
3493 * this function will do nothing.
3495 * @param[in] camcorder A handle of camcorder.
3496 * @return This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
3497 * Please refer 'mm_error.h' to know the exact meaning of the error.
3498 * @see mm_camcorder_init_focusing, mm_camcorder_start_focusing
3499 * @pre mm_camcorder_start_focusing() should be called before calling this function.
3505 #include <mm_camcorder.h>
3507 gboolean stop_autofocus()
3512 mm_camcorder_stop_focusing(hcam);
3519 int mm_camcorder_stop_focusing(MMHandleType camcorder);
3522 void mm_camcorder_emit_signal(MMHandleType camcorder, const char *object_name,
3523 const char *interface_name, const char *signal_name, int value);
3525 /* check compatibility between codec and file format */
3526 int mm_camcorder_check_codec_fileformat_compatibility(const char *codec_type, int codec, int file_format);
3528 /* external storage state management */
3529 int mm_camcorder_manage_external_storage_state(MMHandleType camcorder, int storage_state);
3532 int mm_camcorder_get_log_level(void);
3535 int mm_camcorder_set_extra_preview_device_type(MMHandleType camcorder, int stream_id, int device_type);
3536 int mm_camcorder_set_extra_preview_stream_format(MMHandleType camcorder, int stream_id, int pixel_format, int width, int height, int fps);
3537 int mm_camcorder_get_extra_preview_stream_format(MMHandleType camcorder, int stream_id, int *pixel_format, int *width, int *height, int *fps);
3538 int mm_camcorder_set_extra_preview_bitrate(MMHandleType camcorder, int stream_id, int bitrate);
3539 int mm_camcorder_get_extra_preview_bitrate(MMHandleType camcorder, int stream_id, int *bitrate);
3540 int mm_camcorder_set_extra_preview_gop_interval(MMHandleType camcorder, int stream_id, int interval);
3541 int mm_camcorder_get_extra_preview_gop_interval(MMHandleType camcorder, int stream_id, int *interval);
3544 int mm_camcorder_get_exposure(MMHandleType camcorder, int *exposure);
3554 #endif /* __MM_CAMCORDER_H__ */