X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fmultimedia%2Flibmm-camcorder.git;a=blobdiff_plain;f=src%2Finclude%2Fmm_camcorder.h;h=9ca12b044d4619c81f84d9f0e9f0fff84f74b24b;hp=e078aa279f941d17171eac18465d0e786fd55f49;hb=633f96af86163942d6f4237f0ab2b5204b9e1930;hpb=020c1d5863c4608a1fce14425a0bc0ddde110388 diff --git a/src/include/mm_camcorder.h b/src/include/mm_camcorder.h index e078aa2..9ca12b0 100644 --- a/src/include/mm_camcorder.h +++ b/src/include/mm_camcorder.h @@ -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 @@ -194,7 +194,7 @@ * 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 @@ -217,7 +217,7 @@
Attribute
Description
- + #MMCAM_MODE Mode of camcorder ( still/video/audio ) @@ -338,7 +338,7 @@
Attribute
Description
- + #MMCAM_AUDIO_ENCODER_BITRATE Bitrate of Audio Encoder @@ -371,7 +371,7 @@
Attribute
Description
- + #MMCAM_IMAGE_ENCODER_QUALITY Encoding quality of Image codec @@ -408,7 +408,7 @@
Attribute
Description
- + #MMCAM_AUDIO_VOLUME Input volume of audio source ( double value ) @@ -541,6 +541,10 @@ Orientation of captured image + #MMCAM_TAG_VIDEO_ORIENTATION + Orientation of encoded video + + #MMCAM_TAG_SOFTWARE software name and version @@ -617,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 */ /** @@ -723,22 +727,31 @@ extern "C" { /** * 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" @@ -910,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. * @@ -1079,7 +1092,7 @@ extern "C" { #define MMCAM_TARGET_MAX_SIZE "target-max-size" /** - * Time limit(Second) of recording file. If the elapsed time of recording reaches this value, + * 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" @@ -1101,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" @@ -1166,49 +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" +#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" +#define MMCAM_RECOMMEND_CAMERA_HEIGHT "recommend-camera-height" + +/** + * Enable to play capture sound + */ +#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" +#define MMCAM_CAMERA_FLIP "camera-flip" /** - * X coordinate of Face zoom. + * Support Zero Shutter Lag capture */ -#define MMCAM_CAMERA_FACE_ZOOM_X "camera-face-zoom-x" +#define MMCAM_SUPPORT_ZSL_CAPTURE "support-zsl-capture" /** - * Y coordinate of Face zoom. +* 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_CAMERA_FACE_ZOOM_Y "camera-face-zoom-y" +#define MMCAM_DISPLAY_SOCKET_PATH "display-socket-path" /** - * Zoom level of Face zoom. + * PID for sound focus */ -#define MMCAM_CAMERA_FACE_ZOOM_LEVEL "camera-face-zoom-level" +#define MMCAM_PID_FOR_SOUND_FOCUS "pid-for-sound-focus" /** - * Mode of Face zoom. - * @see MMCamcorderFaceZoomMode + * Root directory of application */ -#define MMCAM_CAMERA_FACE_ZOOM_MODE "camera-face-zoom-mode" +#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 | @@ -1247,8 +1346,7 @@ typedef enum { /** * 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; @@ -1294,10 +1392,10 @@ enum MMCamcorderColorToneType { /** * 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 */ @@ -1310,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 { @@ -1335,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 */ }; @@ -1343,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*/ @@ -1464,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.*/ @@ -1475,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. @@ -1511,19 +1620,12 @@ enum MMCamcorderDetectMode { /** - * An enumeration for Face zoom mode. - */ -enum MMCamcorderFaceZoomMode { - MM_CAMCORDER_FACE_ZOOM_MODE_OFF = 0, /**< turn face zoom off */ - MM_CAMCORDER_FACE_ZOOM_MODE_ON, /**< turn face zoom on */ -}; - -/** * 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 */ }; @@ -1533,13 +1635,13 @@ enum MMCamcorderPreviewType { /** * 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 */ -}MMCamAttrsType; +} MMCamAttrsType; /** @@ -1579,6 +1681,7 @@ typedef enum { 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 */ } MMCamStreamData; @@ -1594,7 +1697,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. */ @@ -1655,6 +1758,8 @@ typedef struct { /** * Structure for video stream data. */ +#define BUFFER_MAX_PLANE_NUM 4 + typedef struct { union { struct { @@ -1675,6 +1780,10 @@ typedef struct { unsigned char *v; unsigned int length_v; } yuv420p, yuv422p; + struct { + unsigned char *data; + unsigned int length_data; + } encoded; } data; /**< pointer of captured stream */ MMCamStreamData data_type; /**< data type */ unsigned int length_total; /**< total length of stream buffer (in byte)*/ @@ -1683,6 +1792,10 @@ typedef struct { 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; @@ -1700,6 +1813,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. */ @@ -1741,10 +1864,10 @@ typedef struct _MMCamFaceDetectInfo { ========================================================================================*/ /** * 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 @@ -1771,6 +1894,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. * @@ -1788,12 +1926,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.) * @@ -1845,7 +1983,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 @@ -2083,7 +2221,7 @@ 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. @@ -2394,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 @@ -2406,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; @@ -2568,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 @@ -2620,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 @@ -2701,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. * @@ -2737,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. @@ -2794,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 + +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. @@ -2832,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. @@ -2885,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. @@ -2989,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 + +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. @@ -3047,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. * @@ -3109,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 @@ -3131,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); + /** @} */