Update code for RGB data handling in preview callback
[platform/core/multimedia/libmm-camcorder.git] / src / include / mm_camcorder.h
index a3f2f73..9ad8416 100644 (file)
@@ -43,7 +43,7 @@
 
        @par
        Recording state and paused state exists when the mode of camcorder is
-       video-capture or audio-capture mode. In case of image-capture mode, CAPTURING state will 
+       video-capture or audio-capture mode. In case of image-capture mode, CAPTURING state will
        exsit.
 
        @par
        * Attribute @n
        Attribute system is an interface to operate camcorder. Depending on each attribute, camcorder behaves differently.
        Attribute system provides get/set functions. Setting proper attributes, a user can control camcorder as he want. (mm_camcorder_set_attributes())
-       Also, a user can comprehend current status of the camcorder, calling getter function(mm_camcorder_get_attributes()). 
+       Also, a user can comprehend current status of the camcorder, calling getter function(mm_camcorder_get_attributes()).
        Beware, arguments of mm_camcorder_set_attributes() and mm_camcorder_get_attributes() should be finished with 'NULL'.
        This is a rule for the variable argument.
        @par
                <td><center><b>Attribute</b></center></td>
                <td><center><b>Description</b></center></td>
        </tr>
-       <tr>
+       <tr>
                <td>#MMCAM_MODE</td>
                <td>Mode of camcorder ( still/video/audio )</td>
        </tr>
                <td>Audio device ID for capturing audio stream</td>
        </tr>
        <tr>
-               <td>#MMCAM_CAMERA_DEVICE</td>
-               <td>Video device ID for capturing video stream</td>
+               <td>#MMCAM_CAMERA_DEVICE_COUNT</td>
+               <td>Video device count</td>
        </tr>
        <tr>
                <td>#MMCAM_AUDIO_ENCODER</td>
                <td><center><b>Attribute</b></center></td>
                <td><center><b>Description</b></center></td>
        </tr>
-       <tr>
+       <tr>
                <td>#MMCAM_AUDIO_ENCODER_BITRATE</td>
                <td>Bitrate of Audio Encoder</td>
        </tr>
                <td>Target filename. Only used in Audio/Video recording. This is not used for capturing.</td>
        </tr>
        <tr>
+               <td>#MMCAM_TARGET_MAX_SIZE</td>
+               <td>Maximum size of recording file(Kbyte). If the size of file reaches this value.</td>
+       </tr>
+       <tr>
                <td>#MMCAM_TARGET_TIME_LIMIT</td>
                <td>Time limit of recording file. If the elapsed time of recording reaches this value.</td>
        </tr>
                <td><center><b>Attribute</b></center></td>
                <td><center><b>Description</b></center></td>
        </tr>
-       <tr>
+       <tr>
                <td>#MMCAM_IMAGE_ENCODER_QUALITY</td>
                <td>Encoding quality of Image codec</td>
        </tr>
                <td><center><b>Attribute</b></center></td>
                <td><center><b>Description</b></center></td>
        </tr>
-       <tr>
+       <tr>
                <td>#MMCAM_AUDIO_VOLUME</td>
                <td>Input volume of audio source ( double value )</td>
        </tr>
                <td>Orientation of captured image</td>
        </tr>
        <tr>
+               <td>#MMCAM_TAG_VIDEO_ORIENTATION</td>
+               <td>Orientation of encoded video</td>
+       </tr>
+       <tr>
                <td>#MMCAM_TAG_SOFTWARE</td>
                <td>software name and version</td>
        </tr>
@@ -613,7 +621,7 @@ extern "C" {
 /**
  * Set fraction value. Definition for fraction setting, such as MMCAM_CAMERA_SHUTTER_SPEED and MMCAM_CAMERA_EXPOSURE_VALUE.
  */
-#define MM_CAMCORDER_SET_FRACTION(numerator,denominator)       ((int)((((int)(numerator)) << 16) | (int)(denominator)))
+#define MM_CAMCORDER_SET_FRACTION(numerator, denominator)      ((int)((((int)(numerator)) << 16) | (int)(denominator)))
 
 /* Attributes Macros */
 /**
@@ -629,10 +637,15 @@ extern "C" {
 #define MMCAM_AUDIO_DEVICE                      "audio-device"
 
 /**
- * Video device ID for capturing video stream.
- * @see                MMVideoDeviceType (in mm_types.h)
+ * Video device count.
  */
-#define MMCAM_CAMERA_DEVICE                     "camera-device"
+#define MMCAM_CAMERA_DEVICE_COUNT               "camera-device-count"
+
+/**
+ * Facing direction of camera device.
+ * @see                MMCamcorderCameraFacingDirection
+ */
+#define MMCAM_CAMERA_FACING_DIRECTION           "camera-facing-direction"
 
 /**
  * Audio codec for encoding audio stream.
@@ -680,6 +693,11 @@ extern "C" {
 #define MMCAM_AUDIO_VOLUME                      "audio-volume"
 
 /**
+ * Disable Audio stream when record.
+ */
+#define MMCAM_AUDIO_DISABLE                     "audio-disable"
+
+/**
  * Set audio input route
  * @remarks    Deprecated. This will be removed soon.
  * @see                MMAudioRoutePolicy (in mm_types.h)
@@ -693,23 +711,47 @@ extern "C" {
 #define MMCAM_CAMERA_FORMAT                     "camera-format"
 
 /**
+ * Slow motion rate when video recording
+ * @remarks    Deprecated
+ */
+#define MMCAM_CAMERA_SLOW_MOTION_RATE           "camera-slow-motion-rate"
+
+/**
+ * Motion rate when video recording
+ * @remarks    This should be bigger than 0(zero).
+ *             Default value is 1 and it's for normal video recording.
+ *             If the value is smaller than 1, recorded file will be played slower,
+ *             otherwise, recorded file will be played faster.
+ */
+#define MMCAM_CAMERA_RECORDING_MOTION_RATE      "camera-recording-motion-rate"
+
+/**
  * Frames per second. This is an integer field
- * 
+ *
  */
 #define MMCAM_CAMERA_FPS                        "camera-fps"
 
 /**
- * Width of input video stream.
+ * Width of preview stream.
  */
 #define MMCAM_CAMERA_WIDTH                      "camera-width"
 
 /**
- * Height of input video stream.
- * @see                
+ * Height of preview stream.
  */
 #define MMCAM_CAMERA_HEIGHT                     "camera-height"
 
 /**
+ * Width of video stream.
+ */
+#define MMCAM_VIDEO_WIDTH                       "video-width"
+
+/**
+ * Height of video stream.
+ */
+#define MMCAM_VIDEO_HEIGHT                      "video-height"
+
+/**
  * Digital zoom level.
  */
 #define MMCAM_CAMERA_DIGITAL_ZOOM               "camera-digital-zoom"
@@ -800,6 +842,12 @@ extern "C" {
 #define MMCAM_CAMERA_ANTI_HANDSHAKE             "camera-anti-handshake"
 
 /**
+ * Video Stabilization
+ * @see                MMCamcorderVideoStabilizationMode
+ */
+#define MMCAM_CAMERA_VIDEO_STABILIZATION        "camera-video-stabilization"
+
+/**
  * FPS Auto. When you set true to this attribute, FPS will vary depending on the amount of the light.
  */
 #define MMCAM_CAMERA_FPS_AUTO                   "camera-fps-auto"
@@ -811,6 +859,12 @@ extern "C" {
 #define MMCAM_CAMERA_ROTATION                   "camera-rotation"
 
 /**
+ * HDR(High Dynamic Range) Capture mode
+ * @see                MMCamcorderHDRMode
+ */
+#define MMCAM_CAMERA_HDR_CAPTURE                "camera-hdr-capture"
+
+/**
  * Bitrate of Audio Encoder
  */
 #define MMCAM_AUDIO_ENCODER_BITRATE             "audio-encoder-bitrate"
@@ -869,7 +923,7 @@ extern "C" {
 #define MMCAM_FILTER_SHARPNESS                  "filter-sharpness"
 
 /**
- * Pixel format that you want to capture. If you set MM_PIXEL_FORMAT_ENCODED, 
+ * Pixel format that you want to capture. If you set MM_PIXEL_FORMAT_ENCODED,
  * the result will be encoded by image codec specified in #MMCAM_IMAGE_ENCODER.
  * If not, the result will be raw data.
  *
@@ -904,6 +958,18 @@ extern "C" {
 #define MMCAM_CAPTURE_BREAK_CONTINUOUS_SHOT     "capture-break-cont-shot"
 
 /**
+ * Raw data of captured image which resolution is same as preview.
+ * This is READ-ONLY attribute and only available in capture callback.
+ * This should be used after casted as MMCamcorderCaptureDataType.
+ */
+#define MMCAM_CAPTURED_SCREENNAIL               "captured-screennail"
+
+/**
+ * Raw data of EXIF. This is READ-ONLY attribute and only available in capture callback.
+ */
+#define MMCAM_CAPTURED_EXIF_RAW_DATA            "captured-exif-raw-data"
+
+/**
  * Pointer of display buffer or ID of xwindow.
  */
 #define MMCAM_DISPLAY_HANDLE                    "display-handle"
@@ -921,6 +987,12 @@ extern "C" {
 #define MMCAM_DISPLAY_SURFACE                    "display-surface"
 
 /**
+ * Mode of display.
+ * @see                MMDisplayModeType (in mm_types.h)
+ */
+#define MMCAM_DISPLAY_MODE                       "display-mode"
+
+/**
  * X position of display rectangle.
  * This is only available when #MMCAM_DISPLAY_GEOMETRY_METHOD is MM_CAMCORDER_CUSTOM_ROI.
  * @see                MMCamcorderGeometryMethod
@@ -975,6 +1047,12 @@ extern "C" {
 #define MMCAM_DISPLAY_ROTATION                  "display-rotation"
 
 /**
+ * Flip of display.
+ * @see                MMFlipType (in mm_types.h)
+ */
+#define MMCAM_DISPLAY_FLIP                      "display-flip"
+
+/**
  * Visible of display.
  */
 #define MMCAM_DISPLAY_VISIBLE                   "display-visible"
@@ -992,12 +1070,29 @@ extern "C" {
 #define MMCAM_DISPLAY_GEOMETRY_METHOD           "display-geometry-method"
 
 /**
+ * A videosink name of evas surface.
+ * This is READ-ONLY attribute.
+ */
+#define MMCAM_DISPLAY_EVAS_SURFACE_SINK         "display-evas-surface-sink"
+
+/**
+ * This attribute is only available if value of MMCAM_DISPLAY_EVAS_SURFACE_SINK "evaspixmapsink"
+ */
+#define MMCAM_DISPLAY_EVAS_DO_SCALING           "display-evas-do-scaling"
+
+/**
  * Target filename. Only used in Audio/Video recording. This is not used for capturing.
  */
 #define MMCAM_TARGET_FILENAME                   "target-filename"
 
 /**
- * Time limit(Second) of recording file. If the elapsed time of recording reaches this value, 
+ * Maximum size(Kbyte) of recording file. If the size of file reaches this value,
+ * camcorder will send 'MM_MESSAGE_CAMCORDER_MAX_SIZE' message.
+ */
+#define MMCAM_TARGET_MAX_SIZE                   "target-max-size"
+
+/**
+ * Time limit(Second) of recording file. If the elapsed time of recording reaches this value,
  * camcorder will send 'MM_MESSAGE_CAMCORDER_TIME_LIMIT' message.
  */
 #define MMCAM_TARGET_TIME_LIMIT                 "target-time-limit"
@@ -1019,6 +1114,12 @@ extern "C" {
 #define MMCAM_TAG_ORIENTATION                   "tag-orientation"
 
 /**
+ * Orientation of captured video
+ * @see                MMCamcorderTagVideoOrientation
+ */
+#define MMCAM_TAG_VIDEO_ORIENTATION            "tag-video-orientation"
+
+/**
  * software name and version
  */
 #define MMCAM_TAG_SOFTWARE                      "tag-software"
@@ -1084,12 +1185,129 @@ extern "C" {
 /**
  * Recommend rotation of display
  */
-#define MMCAM_RECOMMEND_DISPLAY_ROTATION               "recommend-display-rotation"
+#define MMCAM_RECOMMEND_DISPLAY_ROTATION        "recommend-display-rotation"
+
+/**
+ * Recommend width of camera preview.
+ * This attribute can be used with #mm_camcorder_get_attribute_info and #MMCamcorderPreviewType.
+ * @see                mm_camcorder_get_attribute_info, MMCamcorderPreviewType
+ */
+#define MMCAM_RECOMMEND_CAMERA_WIDTH            "recommend-camera-width"
+
+/**
+ * Recommend height of camera preview
+ * This attribute can be used with #mm_camcorder_get_attribute_info and #MMCamcorderPreviewType.
+ * @see                mm_camcorder_get_attribute_info, MMCamcorderPreviewType
+ */
+#define MMCAM_RECOMMEND_CAMERA_HEIGHT           "recommend-camera-height"
 
 /**
- * Rotation angle of video input stream and display for video recording.
+ * Enable to play capture sound
  */
-#define MMCAM_CAMCORDER_ROTATION                   "camcorder-rotation"
+#define MMCAM_CAPTURE_SOUND_ENABLE              "capture-sound-enable"
+
+/**
+ * Flip of video input stream.
+ * @see                MMFlipType (in mm_types.h)
+ */
+#define MMCAM_CAMERA_FLIP                       "camera-flip"
+
+/**
+ * Support Zero Shutter Lag capture
+ */
+#define MMCAM_SUPPORT_ZSL_CAPTURE               "support-zsl-capture"
+
+/**
+* Support zero copy format
+*/
+#define MMCAM_SUPPORT_ZERO_COPY_FORMAT          "support-zero-copy-format"
+
+/**
+* Support media packet callback
+*/
+#define MMCAM_SUPPORT_MEDIA_PACKET_PREVIEW_CB   "support-media-packet-preview-cb"
+
+/**
+ * Enable to write tags for recorded file
+ */
+#define MMCAM_RECORDER_TAG_ENABLE               "recorder-tag-enable"
+
+/**
+ * Determines the socket stream path
+ */
+#define MMCAM_DISPLAY_SOCKET_PATH               "display-socket-path"
+
+/**
+ * Client PID
+ */
+#define MMCAM_CLIENT_PID                        "client-pid"
+
+/**
+ * Root directory of application
+ */
+#define MMCAM_ROOT_DIRECTORY                    "root-directory"
+
+/**
+ * Bitrate for encoded preview stream
+ */
+#define MMCAM_ENCODED_PREVIEW_BITRATE           "encoded-preview-bitrate"
+
+/**
+ * GOP interval for encoded preview stream
+ */
+#define MMCAM_ENCODED_PREVIEW_GOP_INTERVAL      "encoded-preview-gop-interval"
+
+/**
+ * The distance to move the camera horizontally and physically
+ */
+#define MMCAM_CAMERA_PAN_MECHA                  "camera-pan-mecha"
+
+/**
+ * The distance to move the camera horizontally
+ */
+#define MMCAM_CAMERA_PAN_ELEC                   "camera-pan-elec"
+
+/**
+ * The distance to move the camera vertically and physically
+ */
+#define MMCAM_CAMERA_TILT_MECHA                 "camera-tilt-mecha"
+
+/**
+ * The distance to move the camera vertically
+ */
+#define MMCAM_CAMERA_TILT_ELEC                  "camera-tilt-elec"
+
+/**
+ * The type of PTZ(Pan Tilt Zoom). Mechanical or Electonic PTZ.
+ */
+#define MMCAM_CAMERA_PTZ_TYPE                   "camera-ptz-type"
+
+/**
+ * Stream type and index for sound route
+ */
+#define MMCAM_SOUND_STREAM_TYPE                 "sound-stream-type"
+#define MMCAM_SOUND_STREAM_INDEX                "sound-stream-index"
+
+/**
+ * The display reuse flag and sink element pointer
+ */
+#define MMCAM_DISPLAY_REUSE_HINT                "display-reuse-hint"
+#define MMCAM_DISPLAY_REUSE_ELEMENT             "display-reuse-element"
+
+/**
+ * The GBbus connection from outside
+ */
+#define MMCAM_GDBUS_CONNECTION                  "gdbus-connection"
+
+/**
+ * Replay gain enable
+ */
+#define MMCAM_AUDIO_REPLAY_GAIN_ENABLE          "audio-replay-gain-enable"
+
+/**
+ * Reference level for replay gain
+ */
+#define MMCAM_AUDIO_REPLAY_GAIN_REFERENCE_LEVEL "audio-replay-gain-reference-level"
 
 /*=======================================================================================
 | ENUM DEFINITIONS                                                                     |
@@ -1112,17 +1330,23 @@ typedef enum {
  * An enumeration for camcorder mode.
  */
 typedef enum {
-       MM_CAMCORDER_MODE_IMAGE = 0,            /**< Still image capture mode */
-       MM_CAMCORDER_MODE_AUDIO,                /**< Audio recording mode */
-       MM_CAMCORDER_MODE_VIDEO,                /**< Video recording mode */
+       MM_CAMCORDER_MODE_VIDEO_CAPTURE = 0,    /**< Video recording and Image capture mode */
+       MM_CAMCORDER_MODE_AUDIO,                /**< Audio recording mode */
 } MMCamcorderModeType;
 
+/**
+ * An enumeration for facing direction.
+ */
+typedef enum {
+       MM_CAMCORDER_CAMERA_FACING_DIRECTION_REAR = 0, /**< Facing direction of camera is REAR */
+       MM_CAMCORDER_CAMERA_FACING_DIRECTION_FRONT,    /**< Facing direction of camera is FRONT */
+} MMCamcorderCameraFacingDirection;
+
 
 /**
  * An enumeration of Audio Format.
  */
-typedef enum
-{
+typedef enum {
        MM_CAMCORDER_AUDIO_FORMAT_PCM_U8 = 0,           /**< unsigned 8bit audio */
        MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE = 2,       /**< signed 16bit audio. Little endian. */
 } MMCamcorderAudioFormat;
@@ -1133,43 +1357,45 @@ typedef enum
  * seeing through a tinted glass.
  */
 enum MMCamcorderColorToneType {
-       MM_CAMCORDER_COLOR_TONE_NONE = 0,               /**< None */
-       MM_CAMCORDER_COLOR_TONE_MONO,                   /**< Mono */
-       MM_CAMCORDER_COLOR_TONE_SEPIA,                  /**< Sepia */
-       MM_CAMCORDER_COLOR_TONE_NEGATIVE,               /**< Negative */
-       MM_CAMCORDER_COLOR_TONE_BLUE,                   /**< Blue */
-       MM_CAMCORDER_COLOR_TONE_GREEN,                  /**< Green */
-       MM_CAMCORDER_COLOR_TONE_AQUA,                   /**< Aqua */
-       MM_CAMCORDER_COLOR_TONE_VIOLET,                 /**< Violet */
-       MM_CAMCORDER_COLOR_TONE_ORANGE,                 /**< Orange */
-       MM_CAMCORDER_COLOR_TONE_GRAY,                   /**< Gray */
-       MM_CAMCORDER_COLOR_TONE_RED,                    /**< Red */
-       MM_CAMCORDER_COLOR_TONE_ANTIQUE,                /**< Antique */
-       MM_CAMCORDER_COLOR_TONE_WARM,                   /**< Warm */
-       MM_CAMCORDER_COLOR_TONE_PINK,                   /**< Pink */
-       MM_CAMCORDER_COLOR_TONE_YELLOW,                 /**< Yellow */
-       MM_CAMCORDER_COLOR_TONE_PURPLE,                 /**< Purple */
-       MM_CAMCORDER_COLOR_TONE_EMBOSS,                 /**< Emboss */
-       MM_CAMCORDER_COLOR_TONE_OUTLINE,                /**< Outline */
-
-       MM_CAMCORDER_COLOR_TONE_SOLARIZATION_1,         /**< Solarization1 */
-       MM_CAMCORDER_COLOR_TONE_SOLARIZATION_2,         /**< Solarization2 */
-       MM_CAMCORDER_COLOR_TONE_SOLARIZATION_3,         /**< Solarization3 */
-       MM_CAMCORDER_COLOR_TONE_SOLARIZATION_4,         /**< Solarization4 */
-
-       MM_CAMCORDER_COLOR_TONE_SKETCH_1,               /**< Sketch1 */
-       MM_CAMCORDER_COLOR_TONE_SKETCH_2,               /**< Sketch2 */
-       MM_CAMCORDER_COLOR_TONE_SKETCH_3,               /**< Sketch3 */
-       MM_CAMCORDER_COLOR_TONE_SKETCH_4,               /**< Sketch4 */ 
+       MM_CAMCORDER_COLOR_TONE_NONE = 0,               /**< None */
+       MM_CAMCORDER_COLOR_TONE_MONO,                   /**< Mono */
+       MM_CAMCORDER_COLOR_TONE_SEPIA,                  /**< Sepia */
+       MM_CAMCORDER_COLOR_TONE_NEGATIVE,               /**< Negative */
+       MM_CAMCORDER_COLOR_TONE_BLUE,                   /**< Blue */
+       MM_CAMCORDER_COLOR_TONE_GREEN,                  /**< Green */
+       MM_CAMCORDER_COLOR_TONE_AQUA,                   /**< Aqua */
+       MM_CAMCORDER_COLOR_TONE_VIOLET,                 /**< Violet */
+       MM_CAMCORDER_COLOR_TONE_ORANGE,                 /**< Orange */
+       MM_CAMCORDER_COLOR_TONE_GRAY,                   /**< Gray */
+       MM_CAMCORDER_COLOR_TONE_RED,                    /**< Red */
+       MM_CAMCORDER_COLOR_TONE_ANTIQUE,                /**< Antique */
+       MM_CAMCORDER_COLOR_TONE_WARM,                   /**< Warm */
+       MM_CAMCORDER_COLOR_TONE_PINK,                   /**< Pink */
+       MM_CAMCORDER_COLOR_TONE_YELLOW,                 /**< Yellow */
+       MM_CAMCORDER_COLOR_TONE_PURPLE,                 /**< Purple */
+       MM_CAMCORDER_COLOR_TONE_EMBOSS,                 /**< Emboss */
+       MM_CAMCORDER_COLOR_TONE_OUTLINE,                /**< Outline */
+       MM_CAMCORDER_COLOR_TONE_SOLARIZATION,           /**< Solarization */
+       MM_CAMCORDER_COLOR_TONE_SKETCH,                 /**< Sketch */
+       MM_CAMCORDER_COLOR_TONE_WASHED,                 /**< Washed */
+       MM_CAMCORDER_COLOR_TONE_VINTAGE_WARM,           /**< Vintage warm */
+       MM_CAMCORDER_COLOR_TONE_VINTAGE_COLD,           /**< Vintage cold */
+       MM_CAMCORDER_COLOR_TONE_POSTERIZATION,          /**< Posterization */
+       MM_CAMCORDER_COLOR_TONE_CARTOON,                /**< Cartoon */
+       MM_CAMCORDER_COLOR_TONE_SELECTIVE_RED,          /**< Selective color - Red */
+       MM_CAMCORDER_COLOR_TONE_SELECTIVE_GREEN,        /**< Selective color - Green */
+       MM_CAMCORDER_COLOR_TONE_SELECTIVE_BLUE,         /**< Selective color - Blue */
+       MM_CAMCORDER_COLOR_TONE_SELECTIVE_YELLOW,       /**< Selective color - Yellow */
+       MM_CAMCORDER_COLOR_TONE_SELECTIVE_RED_YELLOW,   /**< Selective color - Red and Yellow */
 };
 
 
 /**
  * An enumeration for white balance. White Balance is the control that adjusts
- * the camcorder's color sensitivity to match the prevailing color of white 
- * outdoor light, yellower indoor light, or (sometimes) greenish fluorescent 
- * light. White balance may be set either automatically or manually. White balance 
- * may be set "incorrectly" on purpose to achieve special effects. 
+ * the camcorder's color sensitivity to match the prevailing color of white
+ * outdoor light, yellower indoor light, or (sometimes) greenish fluorescent
+ * light. White balance may be set either automatically or manually. White balance
+ * may be set "incorrectly" on purpose to achieve special effects.
  */
 enum MMCamcorderWhiteBalanceType {
        MM_CAMCORDER_WHITE_BALANCE_NONE = 0,            /**< None */
@@ -1182,13 +1408,12 @@ enum MMCamcorderWhiteBalanceType {
        MM_CAMCORDER_WHITE_BALANCE_HORIZON,             /**< Horizon */
        MM_CAMCORDER_WHITE_BALANCE_FLASH,               /**< Flash */
        MM_CAMCORDER_WHITE_BALANCE_CUSTOM,              /**< Custom */
-       
 };
 
 
 /**
  * An enumeration for scene mode. Scene mode gives the environment condition
- * for operating camcorder. The mode of operation can be in daylight, night and 
+ * for operating camcorder. The mode of operation can be in daylight, night and
  * backlight. It can be an automatic setting also.
  */
 enum MMCamcorderSceneModeType {
@@ -1207,6 +1432,7 @@ enum MMCamcorderSceneModeType {
        MM_CAMCORDER_SCENE_MODE_SHOW_WINDOW,    /**< Show window */
        MM_CAMCORDER_SCENE_MODE_CANDLE_LIGHT,   /**< Candle light */
        MM_CAMCORDER_SCENE_MODE_BACKLIGHT,      /**< Backlight */
+       MM_CAMCORDER_SCENE_MODE_AQUA,           /**< Aqua */
 };
 
 
@@ -1215,8 +1441,8 @@ enum MMCamcorderSceneModeType {
  */
 enum MMCamcorderFocusMode {
        MM_CAMCORDER_FOCUS_MODE_NONE = 0,       /**< Focus mode is None */
-       MM_CAMCORDER_FOCUS_MODE_PAN,            /**< Pan focus mode*/   
-       MM_CAMCORDER_FOCUS_MODE_AUTO,           /**< Autofocus mode*/   
+       MM_CAMCORDER_FOCUS_MODE_PAN,            /**< Pan focus mode*/
+       MM_CAMCORDER_FOCUS_MODE_AUTO,           /**< Autofocus mode*/
        MM_CAMCORDER_FOCUS_MODE_MANUAL,         /**< Manual focus mode*/
        MM_CAMCORDER_FOCUS_MODE_TOUCH_AUTO,     /**< Touch Autofocus mode*/
        MM_CAMCORDER_FOCUS_MODE_CONTINUOUS,     /**< Continuous Autofocus mode*/
@@ -1290,6 +1516,16 @@ enum MMCamcorderWDRMode {
 
 
 /**
+ * An enumeration for HDR capture mode
+ */
+enum MMCamcorderHDRMode {
+       MM_CAMCORDER_HDR_OFF = 0,               /**< HDR OFF */
+       MM_CAMCORDER_HDR_ON,                    /**< HDR ON and no original data - capture callback will be come once */
+       MM_CAMCORDER_HDR_ON_AND_ORIGINAL,       /**< HDR ON and original data - capture callback will be come twice(1st:Original, 2nd:HDR) */
+};
+
+
+/**
  * An enumeration for Anti-handshake mode .
  */
 enum MMCamcorderAHSMode {
@@ -1301,6 +1537,15 @@ enum MMCamcorderAHSMode {
 
 
 /**
+ * An enumeration for Video stabilization mode
+ */
+enum MMCamcorderVideoStabilizationMode {
+       MM_CAMCORDER_VIDEO_STABILIZATION_OFF = 0,       /**< Video Stabilization OFF*/
+       MM_CAMCORDER_VIDEO_STABILIZATION_ON,            /**< Video Stabilization ON*/
+};
+
+
+/**
  * Geometry method for camcorder display.
  */
 enum MMCamcorderGeometryMethod {
@@ -1308,6 +1553,7 @@ enum MMCamcorderGeometryMethod {
        MM_CAMCORDER_ORIGIN_SIZE,               /**< Origin size*/
        MM_CAMCORDER_FULL,                      /**< full-screen*/
        MM_CAMCORDER_CROPPED_FULL,              /**< Cropped full-screen*/
+       MM_CAMCORDER_ORIGIN_OR_LETTER,          /**< Origin size or Letter box*/
        MM_CAMCORDER_CUSTOM_ROI,                /**< Explicitely described destination ROI*/
 };
 
@@ -1316,7 +1562,7 @@ enum MMCamcorderGeometryMethod {
  * An enumeration for orientation values of tag .
  */
 enum MMCamcorderTagOrientation {
-       MM_CAMCORDER_TAG_ORT_NONE =0,           /**< No Orientation.*/
+       MM_CAMCORDER_TAG_ORT_NONE = 0,          /**< No Orientation.*/
        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.*/
        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.*/
        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.*/
@@ -1327,6 +1573,17 @@ enum MMCamcorderTagOrientation {
        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.*/
 };
 
+/**
+ * An enumeration for captured video orientation values of tag .
+ */
+enum MMCamcorderTagVideoOrientation {
+       MM_CAMCORDER_TAG_VIDEO_ORT_NONE = 0,    /**< No Orientation.*/
+       MM_CAMCORDER_TAG_VIDEO_ORT_90,          /**< 90 degree */
+       MM_CAMCORDER_TAG_VIDEO_ORT_180, /**< 180 degree */
+       MM_CAMCORDER_TAG_VIDEO_ORT_270, /**< 270 degree */
+};
+
+
 
 /**
  * An enumeration for Strobe mode.
@@ -1362,21 +1619,29 @@ enum MMCamcorderDetectMode {
 };
 
 
+/**
+ * An enumeration for recommended preview resolution.
+ */
+enum MMCamcorderPreviewType {
+       MM_CAMCORDER_PREVIEW_TYPE_NORMAL = 0,   /**< normal ratio like 4:3 */
+       MM_CAMCORDER_PREVIEW_TYPE_WIDE,         /**< wide ratio like 16:9 */
+       MM_CAMCORDER_PREVIEW_TYPE_SQUARE,       /**< square ratio like 1:1 */
+};
+
+
 /**********************************
 *          Attribute info         *
 **********************************/
 /**
  * An enumeration for attribute values types.
  */
-typedef enum{
+typedef enum {
        MM_CAM_ATTRS_TYPE_INVALID = -1,         /**< Type is invalid */
        MM_CAM_ATTRS_TYPE_INT,                  /**< Integer type attribute */
        MM_CAM_ATTRS_TYPE_DOUBLE,               /**< Double type attribute */
        MM_CAM_ATTRS_TYPE_STRING,               /**< UTF-8 String type attribute */
        MM_CAM_ATTRS_TYPE_DATA,                 /**< Pointer type attribute */
-       MM_CAM_ATTRS_TYPE_ARRAY,                /**< Array type attribute */
-       MM_CAM_ATTRS_TYPE_RANGE,                /**< Range type attribute */
-}MMCamAttrsType;
+} MMCamAttrsType;
 
 
 /**
@@ -1404,6 +1669,24 @@ typedef enum {
 } MMCamAttrsFlag;
 
 
+/**********************************
+*          Stream data            *
+**********************************/
+/**
+ * An enumeration for stream data type.
+ */
+typedef enum {
+       MM_CAM_STREAM_DATA_YUV420 = 0,          /**< YUV420 Packed type - 1 plane */
+       MM_CAM_STREAM_DATA_YUV422,              /**< YUV422 Packed type - 1 plane */
+       MM_CAM_STREAM_DATA_YUV420SP,            /**< YUV420 SemiPlannar type - 2 planes */
+       MM_CAM_STREAM_DATA_YUV420P,             /**< YUV420 Plannar type - 3 planes */
+       MM_CAM_STREAM_DATA_YUV422P,             /**< YUV422 Plannar type - 3 planes */
+       MM_CAM_STREAM_DATA_ENCODED,             /**< Encoded data type - 1 plane */
+       MM_CAM_STREAM_DATA_DEPTH,               /**< Depth data type - 1 plane */
+       MM_CAM_STREAM_DATA_RGB                  /**< RGB data type - 1 plane */
+} MMCamStreamData;
+
+
 /*=======================================================================================
 | STRUCTURE DEFINITIONS                                                                        |
 ========================================================================================*/
@@ -1416,7 +1699,7 @@ typedef struct {
        MMCamAttrsValidType validity_type;
 
        /**
-        * A union that describes validity of the attribute. 
+        * A union that describes validity of the attribute.
         * Only when type is 'MM_CAM_ATTRS_TYPE_INT' or 'MM_CAM_ATTRS_TYPE_DOUBLE',
         * the attribute can have validity.
         */
@@ -1477,13 +1760,44 @@ typedef struct {
 /**
  * Structure for video stream data.
  */
+#define BUFFER_MAX_PLANE_NUM 4
+
 typedef struct {
-       void *data;                     /**< pointer of captured stream */
-       unsigned int length;            /**< length of stream buffer (in byte)*/
-       MMPixelFormatType format;       /**< image format */
-       int width;                      /**< width of video buffer */
-       int height;                     /**< height of video buffer */
-       unsigned int timestamp;         /**< timestamp of stream buffer (msec)*/
+       union {
+               struct {
+                       unsigned char *yuv;
+                       unsigned int length_yuv;
+               } yuv420, yuv422;
+               struct {
+                       unsigned char *y;
+                       unsigned int length_y;
+                       unsigned char *uv;
+                       unsigned int length_uv;
+               } yuv420sp;
+               struct {
+                       unsigned char *y;
+                       unsigned int length_y;
+                       unsigned char *u;
+                       unsigned int length_u;
+                       unsigned char *v;
+                       unsigned int length_v;
+               } yuv420p, yuv422p;
+               struct {
+                       unsigned char *data;
+                       unsigned int length_data;
+               } encoded, depth, rgb;
+       } data;                         /**< pointer of captured stream */
+       MMCamStreamData data_type;      /**< data type */
+       unsigned int length_total;      /**< total length of stream buffer (in byte)*/
+       unsigned int num_planes;        /**< number of planes */
+       MMPixelFormatType format;       /**< image format */
+       int width;                      /**< width of video buffer */
+       int height;                     /**< height of video buffer */
+       unsigned int timestamp;         /**< timestamp of stream buffer (msec)*/
+       void *bo[BUFFER_MAX_PLANE_NUM]; /**< TBM buffer object */
+       void *internal_buffer;          /**< Internal buffer pointer */
+       int stride[BUFFER_MAX_PLANE_NUM];    /**< Stride of each plane */
+       int elevation[BUFFER_MAX_PLANE_NUM]; /**< Elevation of each plane */
 } MMCamcorderVideoStreamDataType;
 
 
@@ -1501,6 +1815,16 @@ typedef struct {
 
 
 /**
+ * Structure for muxed stream data.
+ */
+typedef struct {
+       void *data;             /**< pointer of muxed stream */
+       unsigned int length;    /**< length of stream buffer (in byte) */
+       unsigned long long offset;  /**< current offset for data */
+} MMCamcorderMuxedStreamDataType;
+
+
+/**
   * Prerequisite information for mm_camcorder_create()
   * The information to set prior to create.
   */
@@ -1514,9 +1838,27 @@ typedef struct {
 /**
  * Report structure of recording file
  */
-typedef struct MMCamRecordingReport {
+typedef struct {
        char *recording_filename;               /**< File name of stored recording file. Please free after using. */
-}MMCamRecordingReport; /**< report structure definition of recording file */
+} MMCamRecordingReport; /**< report structure definition of recording file */
+
+
+/**
+ * Face detect defailed information
+ */
+typedef struct _MMCamFaceInfo {
+       int id;                                 /**< id of each face */
+       int score;                              /**< score of each face */
+       MMRectType rect;                        /**< area of face */
+} MMCamFaceInfo;
+
+/**
+ * Face detect information
+ */
+typedef struct _MMCamFaceDetectInfo {
+       int num_of_faces;                       /**< number of detected faces */
+       MMCamFaceInfo *face_info;               /**< face information, this should be freed after use it. */
+} MMCamFaceDetectInfo;
 
 
 /*=======================================================================================
@@ -1524,10 +1866,10 @@ typedef struct MMCamRecordingReport {
 ========================================================================================*/
 /**
  *     Function definition for video stream callback.
- *  Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(), 
+ *  Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(),
  *  mm_camcorder_unrealize(), mm_camcorder_record(), mm_camcorder_commit(), and mm_camcorder_cancel(), etc.
- *  Please don't hang this function long. It may cause low performance of preview or occur timeout error from video source. 
- *  Also, you're not allowed to call mm_camcorder_stop() even in other context, while you're hanging this function. 
+ *  Please don't hang this function long. It may cause low performance of preview or occur timeout error from video source.
+ *  Also, you're not allowed to call mm_camcorder_stop() even in other context, while you're hanging this function.
  *  I recommend to you releasing this function ASAP.
  *
  *     @param[in]      stream                  Reference pointer to video stream data
@@ -1554,6 +1896,21 @@ typedef gboolean (*mm_camcorder_audio_stream_callback)(MMCamcorderAudioStreamDat
 
 
 /**
+ *     Function definition for muxed stream callback.
+ *  Be careful! In this function, you can't call functions that change the state of camcorder such as mm_camcorder_stop(),
+ *  mm_camcorder_unrealize(), mm_camcorder_record(), mm_camcorder_commit(), and mm_camcorder_cancel(), etc.
+ *  Please don't hang this function long. It may cause low performance of camcorder or occur timeout error from encoding pipeline.
+ *  I recommend to you releasing this function ASAP.
+ *
+ *     @param[in]      stream                  Reference pointer to muxed stream data
+ *     @param[in]      user_param              User parameter which is received from user when callback function was set
+ *     @return         This function returns true on success, or false on failure.
+ *     @remarks
+ */
+typedef gboolean (*mm_camcorder_muxed_stream_callback)(MMCamcorderMuxedStreamDataType *stream, void *user_param);
+
+
+/**
  *     Function definition for video capture callback.
  *  Like '#mm_camcorder_video_stream_callback', you can't call mm_camcorder_stop() while you are hanging this function.
  *
@@ -1571,12 +1928,12 @@ typedef gboolean (*mm_camcorder_video_capture_callback)(MMCamcorderCaptureDataTy
 ========================================================================================*/
 /**
  *    mm_camcorder_create:\n
- *  Create camcorder object. This is the function that an user who wants to use mm_camcorder calls first. 
+ *  Create camcorder object. This is the function that an user who wants to use mm_camcorder calls first.
  *  This function creates handle structure and initialize mutex, attributes, gstreamer.
- *  When this function success, it will return  a handle of newly created object. 
+ *  When this function success, it will return  a handle of newly created object.
  *  A user have to put the handle when he calls every function of mm_camcorder. \n
  *  Second argument of this function is the field to decribe pre-setting information of mm_camcorder such as which camera device it will use.
- *  Normally, MM_VIDEO_DEVICE_CAMERA0 is for Main camera(or Mega camera, Back camera), 
+ *  Normally, MM_VIDEO_DEVICE_CAMERA0 is for Main camera(or Mega camera, Back camera),
  *  and MM_VIDEO_DEVICE_CAMERA1 is for VGA camera (or Front camera). If you want audio recording,
  *  please set MM_VIDEO_DEVICE_NONE. (No camera device is needed.)
  *
@@ -1628,7 +1985,7 @@ int mm_camcorder_create(MMHandleType *camcorder, MMCamPreset *info);
  *  This is the finalizing function of mm_camcorder. If this function is not called or fails to call, the handle isn't released fully.
  *  This function releases attributes, mutexes, sessions, and handle itself. This function also removes all of remaining messages.
  *  So if your application should wait a certain message of mm_camcorder, please wait to call this function till getting the message.
- *     
+ *
  *
  *     @param[in]      camcorder       A handle of camcorder.
  *     @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
@@ -1866,10 +2223,8 @@ int mm_camcorder_realize(MMHandleType camcorder);
  *    mm_camcorder_unrealize:\n
  *  Uninitialize camcoder resources and free allocated memory.
  *  Most important resource that is released here is gstreamer pipeline of mm_camcorder.
- *  Because most of resources, such as camera device, video display device, and audio I/O device, are operating on the gstreamer pipeline, 
+ *  Because most of resources, such as camera device, video display device, and audio I/O device, are operating on the gstreamer pipeline,
  *  this function should be called to release its resources.
- *  Moreover, mm_camcorder is controlled by audio session manager. If an user doesn't call this function when he want to release mm_camcorder,
- *  other multimedia frameworks may face session problem. For more detail information, please refer mm_session module.
  *
  *     @param[in]      camcorder       A handle of camcorder.
  *     @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
@@ -2177,7 +2532,7 @@ int mm_camcorder_stop(MMHandleType camcorder);
  *     @pre            Previous state of mm-camcorder should be MM_CAMCORDER_STATE_PREPARE
  *     @post           Next state of mm-camcorder will be MM_CAMCORDER_STATE_CAPTURING
  *     @remarks        To call this function, preview should be started successfully.\n
- *                     This function is a pair of mm_camcorder_capture_stop(). 
+ *                     This function is a pair of mm_camcorder_capture_stop().
  *                     So user should call mm_camcorder_capture_stop() after getting captured image.
  *     @par example
  *     @code
@@ -2189,7 +2544,7 @@ gboolean capturing_picture()
        int err;
 
        err =  mm_camcorder_capture_start(hcam);
-       if (err < 0) 
+       if (err < 0)
        {
                printf("Fail to call mm_camcorder_capture_start  = %x\n", err);
                return FALSE;
@@ -2351,8 +2706,8 @@ int mm_camcorder_pause(MMHandleType camcorder);
  *  Some encoder or muxer require a certain type of finalizing such as adding some information to header.
  *  This function takes that roll. So if you don't call this function after recording, the result file may not be playable.\n
  *  After committing successfully, camcorder resumes displaying preview (video recording case).
- *  Because this is the function for saving the recording result, the operation is available 
- *  only when the mode of camcorder is MM_CAMCORDER_MODE_AUDIO or MM_CAMCORDER_MODE_VIDEO. 
+ *  Because this is the function for saving the recording result, the operation is available
+ *  only when the mode of camcorder is MM_CAMCORDER_MODE_AUDIO or MM_CAMCORDER_MODE_VIDEO.
  *
  *     @param[in]      camcorder       A handle of camcorder.
  *     @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
@@ -2403,8 +2758,8 @@ int mm_camcorder_commit(MMHandleType camcorder);
  *     When a user want to finish recording without saving the result file, this function can be used.
  *     Like mm_camcorder_commit(), this function also stops recording, release related resources(like codec) ,and goes back to preview status.
  *     However, instead of saving file, this function unlinks(delete) the result.\n
- *     Because this is the function for canceling recording, the operation is available 
- *     only when mode is MM_CAMCORDER_MODE_AUDIO or MM_CAMCORDER_MODE_VIDEO. 
+ *     Because this is the function for canceling recording, the operation is available
+ *     only when mode is MM_CAMCORDER_MODE_AUDIO or MM_CAMCORDER_MODE_VIDEO.
  *
  *     @param[in]      camcorder       A handle of camcorder.
  *     @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
@@ -2484,7 +2839,7 @@ int mm_camcorder_set_message_callback(MMHandleType camcorder, MMMessageCallback
 /**
  *    mm_camcorder_set_video_stream_callback:\n
  *  Set callback for user defined video stream callback function.
- *  Users can retrieve video frame using registered callback. 
+ *  Users can retrieve video frame using registered callback.
  *  The callback function holds the same buffer that will be drawed on the display device.
  *  So if an user change the buffer, it will be displayed on the device.
  *
@@ -2520,7 +2875,7 @@ int mm_camcorder_set_video_stream_callback(MMHandleType camcorder, mm_camcorder_
  *  mm_camcorder deliever captured image through the callback.\n
  *  Normally, this function provides main captured image and thumnail image. But depending on the environment,
  *  thumnail would not be available. Information related with main captured image and thumnail image is also included
- *  in the argument of the callback function. 
+ *  in the argument of the callback function.
  *  For more detail information of callback, please refer 'mm_camcorder_video_capture_callback'.
  *
  *     @param[in]      camcorder       A handle of camcorder.
@@ -2577,12 +2932,44 @@ gboolean setting_audio_stream_callback()
 
        return TRUE;
 }
- *     @endcode
+ *  @endcode
  */
 int mm_camcorder_set_audio_stream_callback(MMHandleType camcorder, mm_camcorder_audio_stream_callback callback, void *user_data);
 
 
 /**
+ *    mm_camcorder_set_muxed_stream_callback:\n
+ *  Set callback for user defined muxed stream callback function.
+ *  Users can retrieve muxed data using registered callback.
+ *  The callback function holds the same buffer that will be recorded.
+ *
+ *     @param[in]      camcorder       A handle of camcorder.
+ *     @param[in]      callback        Function pointer of callback function.
+ *     @param[in]      user_data       User parameter for passing to callback function.
+ *     @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
+ *                     Please refer 'mm_error.h' to know the exact meaning of the error.
+ *     @see            mm_camcorder_muxed_stream_callback
+ *     @pre            None
+ *     @post           None
+ *     @remarks        registered 'callback' is called on internal thread of camcorder. Regardless of the status of main loop, this function will be called.
+ *     @par example
+ *     @code
+
+#include <mm_camcorder.h>
+
+gboolean setting_muxed_stream_callback()
+{
+       //set callback
+       mm_camcorder_set_muxed_stream_callback(hcam, (mm_camcorder_muxed_stream_callback)camcordertest_muxed_stream_cb, (void*)hcam);
+
+       return TRUE;
+}
+ *  @endcode
+ */
+int mm_camcorder_set_muxed_stream_callback(MMHandleType camcorder, mm_camcorder_muxed_stream_callback callback, void *user_data);
+
+
+/**
  *    mm_camcorder_get_state:\n
  *  Get the current state of camcorder.
  *  mm_camcorder is working on the base of its state. An user should check the state of mm_camcorder before calling its functions.
@@ -2615,12 +3002,13 @@ gboolean get_state_of_camcorder()
  *     @endcode
  */
 int mm_camcorder_get_state(MMHandleType camcorder, MMCamcorderStateType *state);
+int mm_camcorder_get_state2(MMHandleType camcorder, MMCamcorderStateType *state, MMCamcorderStateType *old_state);
 
 
 /**
  *    mm_camcorder_get_attributes:\n
  *  Get attributes of camcorder with given attribute names. This function can get multiple attributes
- *  simultaneously. If one of attribute fails, this function will stop at the point. 
+ *  simultaneously. If one of attribute fails, this function will stop at the point.
  *  'err_attr_name' let you know the name of the attribute.
  *
  *     @param[in]      camcorder       Specifies the camcorder  handle.
@@ -2668,7 +3056,7 @@ int mm_camcorder_get_attributes(MMHandleType camcorder,  char **err_attr_name, c
 /**
  *    mm_camcorder_set_attributes:\n
  *  Set attributes of camcorder with given attribute names. This function can set multiple attributes
- *  simultaneously. If one of attribute fails, this function will stop at the point. 
+ *  simultaneously. If one of attribute fails, this function will stop at the point.
  *  'err_attr_name' let you know the name of the attribute.
  *
  *     @param[in]      camcorder       Specifies the camcorder  handle.
@@ -2772,6 +3160,48 @@ int mm_camcorder_get_attribute_info(MMHandleType camcorder, const char *attribut
 
 
 /**
+ *    mm_camcorder_get_fps_list_by_resolution:\n
+ *  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,
+ *  Gives attribute information structure, from the configure data.
+ *  Depending on the 'validity_type', validity union would be different. To know about the type of union, please refer 'MMCamAttrsInfo'.
+ *
+ *     @param[in]      camcorder       Specifies the camcorder  handle.
+ *     @param[in]      width   width value of the current Preview resolution.
+ *     @param[in]      height  height value of the current Preview resolution.
+ *     @param[out]     fps_info                a structure that holds information related with the attribute.
+ *     @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
+ *                     Please refer 'mm_error.h' to know the exact meaning of the error.
+ *     @pre            None
+ *     @post           None
+ *     @remarks        If the function succeeds, 'info' holds detail information about the attribute, such as type,
+ *                     flag, validity_type, validity_values, and default values.
+ *     @see            mm_camcorder_get_attributes, mm_camcorder_set_attributes
+ *     @par example
+ *     @code
+
+#include <mm_camcorder.h>
+
+gboolean getting_info_from_attribute()
+{
+       MMCamAttrsInfo info;
+       int err;
+
+       err = mm_camcorder_get_fps_list_by_resolution(handle, width, height, &info);
+       if (err < 0) {
+               printf("Fail to call mm_camcorder_get_attribute_info()");
+               return FALSE;
+       }
+
+       //Now 'info' has many information about 'MMCAM_CAPTURE_HEIGHT'
+
+       return TRUE;
+}
+ *     @endcode
+ */
+int mm_camcorder_get_fps_list_by_resolution(MMHandleType camcorder, int width, int height, MMCamAttrsInfo *fps_info);
+
+
+/**
  *    mm_camcorder_init_focusing:\n
  *  Initialize focusing. \n
  *  This function stops focusing action and adjust the camera lens to initial position.
@@ -2830,8 +3260,8 @@ int mm_camcorder_init_focusing(MMHandleType camcorder);
  *  Start focusing. \n
  *  This function command to start focusing opeartion. Because focusing operation depends on mechanic or electric module,
  *  it may take small amount of time. (For ex, 500ms ~ 3sec). \n
- *  This function works asynchronously. When an user call this function,  it will return immediately. 
- *  However, focusing operation will continue until it gets results. 
+ *  This function works asynchronously. When an user call this function,  it will return immediately.
+ *  However, focusing operation will continue until it gets results.
  *  After finishing operation, you can get 'MM_MESSAGE_CAMCORDER_FOCUS_CHANGED' message.
  *  'param.code' of the message structure describes the fucusing was success or not.
  *
@@ -2892,7 +3322,7 @@ int mm_camcorder_start_focusing(MMHandleType camcorder);
  *     @return         This function returns zero(MM_ERROR_NONE) on success, or negative value with error code.\n
  *                     Please refer 'mm_error.h' to know the exact meaning of the error.
  *     @see            mm_camcorder_init_focusing, mm_camcorder_start_focusing
- *     @pre            mm_camcorder_start_focusing() should be called before calling this function. 
+ *     @pre            mm_camcorder_start_focusing() should be called before calling this function.
  *     @post           None
  *     @remarks        None
  *     @par example
@@ -2914,6 +3344,16 @@ gboolean stop_autofocus()
  */
 int mm_camcorder_stop_focusing(MMHandleType camcorder);
 
+/* emit signal */
+void mm_camcorder_emit_signal(MMHandleType camcorder, const char *object_name,
+       const char *interface_name, const char *signal_name, int value);
+
+/* check compatability between codec and file format */
+int mm_camcorder_check_codec_fileformat_compatibility(const char *codec_type, int codec, int file_format);
+
+/* external storage state management */
+int mm_camcorder_manage_external_storage_state(MMHandleType camcorder, int storage_state);
+
 /**
        @}
  */