Merge "[0.6.58] add rm and display handling about audio_only" into tizen
[platform/core/multimedia/libmm-player.git] / src / include / mm_player.h
old mode 100755 (executable)
new mode 100644 (file)
index cdfbada..29f9cdd
@@ -34,6 +34,7 @@
 
 #include <mm_types.h>
 #include <mm_message.h>
+#include <media_packet.h>
 
 #ifdef __cplusplus
        extern "C" {
        by registering callback function.
 
        @par
-       In case of streaming playback, network has to be opend by using datanetwork API. 
-       If proxy, cookies and the other attributes for streaming playback are needed, 
+       In case of streaming playback, network has to be opend by using datanetwork API.
+       If proxy, cookies and the other attributes for streaming playback are needed,
        set those attributes using mm_player_set_attribute() before create player.
 
        @par
-       The subtitle for local video playback is supported. Set "subtitle_uri" attribute 
+       The subtitle for local video playback is supported. Set "subtitle_uri" attribute
        using mm_player_set_attribute() before the application creates the player.
        Then the application could receive MMMessageParamType which includes subtitle string and duration.
 
@@ -69,7 +70,7 @@
 
        @par
        Most of functions which change player state work as synchronous. But, mm_player_start() should be used
-       asynchronously. Both mm_player_pause() and mm_player_resume() should also be used asynchronously 
+       asynchronously. Both mm_player_pause() and mm_player_resume() should also be used asynchronously
        in the case of streaming data.
        So, application have to confirm the result of those APIs through message callback function.
 
        <td>range</td>
        </tr>
        <tr>
-       <td>"display_overlay"</td>
-       <td>data</td>
-       <td>N/A</td>
+       <td>"streaming_timeout"</td>
+       <td>int</td>
+       <td>range</td>
        </tr>
        <tr>
-       <td>"display_overlay_ext"</td>
+       <td>"display_overlay"</td>
        <td>data</td>
        <td>N/A</td>
        </tr>
 
        @par
        Following attributes are supported for playing stream data. Those value can be readable only and valid after starting playback.\n
-       Please use mm_fileinfo for local playback. 
+       Please use mm_fileinfo for local playback.
 
        @par
        <div><table>
        <td>range</td>
        </tr>
        <tr>
+       <td>"content_text_track_num"</td>
+       <td>int</td>
+       <td>range</td>
+       </tr>
+       <tr>
        <td>"tag_artist"</td>
        <td>string</td>
        <td>N/A</td>
 /**
  * MM_PLAYER_CONTENT_DURATION:
  *
- * get the duration (int) as millisecond, It's guaranteed after calling mm_player_start() or 
- * receiving MM_MESSAGE_BEGIN_OF_STREAM. 
+ * get the duration (int) as millisecond, It's guaranteed after calling mm_player_start() or
+ * receiving MM_MESSAGE_BEGIN_OF_STREAM.
  *
  */
 #define MM_PLAYER_CONTENT_DURATION                     "content_duration"
 /**
  * MM_PLAYER_VIDEO_WIDTH:
  *
- * get the video width (int), It's guaranteed after calling mm_player_start() or 
- * receiving MM_MESSAGE_BEGIN_OF_STREAM. 
+ * get the video width (int), It's guaranteed after calling mm_player_start() or
+ * receiving MM_MESSAGE_BEGIN_OF_STREAM.
  *
  */
 #define MM_PLAYER_VIDEO_WIDTH                          "content_video_width"
 /**
  * MM_PLAYER_VIDEO_HEIGHT:
  *
- * get the video height (int), It's guaranteed after calling mm_player_start() or 
- * receiving MM_MESSAGE_BEGIN_OF_STREAM. 
+ * get the video height (int), It's guaranteed after calling mm_player_start() or
+ * receiving MM_MESSAGE_BEGIN_OF_STREAM.
  *
  */
 #define MM_PLAYER_VIDEO_HEIGHT                         "content_video_height"
 /**
  * MM_PLAYER_PLAYBACK_COUNT
  *
- * can set playback count (int), Default value is 1 and -1 is for infinity playing until releasing it. 
+ * can set playback count (int), Default value is 1 and -1 is for infinity playing until releasing it.
  *
  */
 #define MM_PLAYER_PLAYBACK_COUNT                               "profile_play_count"
  */
 #define MM_PLAYER_STREAMING_PROXY_PORT         "streaming_proxy_port"
 /**
+ * MM_PLAYER_STREAMING_TIMEOUT
+ *
+ * set the streaming timeout (int)
+ */
+#define MM_PLAYER_STREAMING_TIMEOUT                    "streaming_timeout"
+/**
  * MM_PLAYER_VIDEO_CODEC
  *
  * codec the video data is stored in (string)
  */
 #define MM_PLAYER_AUDIO_TRACK_NUM                      "content_audio_track_num"
 /**
+ * MM_PLAYER_TEXT_TRACK_NUM
+ *
+ * track number inside a collection (int)
+ */
+#define MM_PLAYER_TEXT_TRACK_NUM                       "content_text_track_num"
+/**
  * MM_PLAYER_TAG_ARTIST
  *
  * person(s) responsible for the recording (string)
 #define MM_PLAYER_PD_MODE                                              "pd_mode"
 
 /**
+ * MM_PLAYER_DRC_MODE
+ *
+ * dynamic resolution change mode (int)
+ */
+#define MM_PLAYER_DRC_MODE                                             "drc_mode"
+
+/**
+ * MM_PLAYER_GAPLESS_MODE
+ *
+ * gapless playback mode (int)
+ */
+#define MM_PLAYER_GAPLESS_MODE                                 "gapless_mode"
+
+/**
+ * MM_PLAYER_ENABLE_VIDEO_DECODED_CB
+ *
+ * enable video decoded callback (int)
+ */
+#define MM_PLAYER_ENABLE_VIDEO_DECODED_CB              "enable_video_decoded_cb"
+
+#define BUFFER_MAX_PLANE_NUM (4)
+
+typedef struct {
+       MMPixelFormatType format;                       /**< image format */
+       int width;                                              /**< width of video buffer */
+       int height;                                             /**< height of video buffer */
+       unsigned int timestamp;                         /**< timestamp of stream buffer (msec)*/
+       unsigned int length_total;                      /**< total length of stream buffer (in byte)*/
+       void *data[BUFFER_MAX_PLANE_NUM];
+       void *bo[BUFFER_MAX_PLANE_NUM];  /**< TBM buffer object */
+       void *internal_buffer;                          /**< Internal buffer pointer */
+       int stride[BUFFER_MAX_PLANE_NUM];               /**< stride of plane */
+       int elevation[BUFFER_MAX_PLANE_NUM];    /**< elevation of plane */
+}MMPlayerVideoStreamDataType;
+
+/**
  * Enumerations of player state.
  */
 typedef enum {
@@ -704,6 +758,72 @@ typedef enum {
 }MMPlayerPDMode;
 
 /**
+ * Enumeration of track types
+ */
+typedef enum {
+       MM_PLAYER_TRACK_TYPE_AUDIO = 0,
+       MM_PLAYER_TRACK_TYPE_VIDEO,
+       MM_PLAYER_TRACK_TYPE_TEXT,
+       MM_PLAYER_TRACK_TYPE_MAX
+}MMPlayerTrackType;
+
+/**
+ * Enumeration of runtime buffering mode
+ */
+typedef enum {
+       MM_PLAYER_BUFFERING_MODE_ADAPTIVE = 0,  /**< default, If buffering is occurred, player will consider the bandwidth to adjust buffer setting. */
+       MM_PLAYER_BUFFERING_MODE_FIXED,                 /**< player will set buffer size with this fixed size value. */
+       MM_PLAYER_BUFFERING_MODE_SLINK,                 /**< If buffering is occurred, player will adjust buffer setting and no more buffering will be occurred again. */
+       MM_PLAYER_BUFFERING_MODE_MAX = MM_PLAYER_BUFFERING_MODE_SLINK,
+}MMPlayerBufferingMode;
+
+typedef enum
+{
+       MM_PLAYER_FOCUS_CHANGED_COMPLETED = 0,
+       MM_PLAYER_FOCUS_CHANGED_BY_MEDIA,
+       MM_PLAYER_FOCUS_CHANGED_BY_CALL,
+       MM_PLAYER_FOCUS_CHANGED_BY_EARJACK_UNPLUG,
+       MM_PLAYER_FOCUS_CHANGED_BY_RESOURCE_CONFLICT,
+       MM_PLAYER_FOCUS_CHANGED_BY_ALARM,
+       MM_PLAYER_FOCUS_CHANGED_BY_EMERGENCY,
+       MM_PLAYER_FOCUS_CHANGED_BY_NOTIFICATION,
+       MM_PLAYER_FOCUS_CHANGED_BY_UNKNOWN,
+} MMPlayerFocusChangedMsg;
+
+
+/**
+ * Edge Properties of the text.
+ */
+typedef enum {
+       MM_PLAYER_EDGE_NO,
+       MM_PLAYER_EDGE_RAISED,
+       MM_PLAYER_EDGE_DEPRESSED,
+       MM_PLAYER_EDGE_UNIFORM,
+       MM_PLAYER_EDGE_DROPSHADOW
+} MMPlayerSubtitleEdge;
+
+/**
+ * Enumeration of media stream buffer status
+ */
+typedef enum
+{
+       MM_PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN,
+       MM_PLAYER_MEDIA_STREAM_BUFFER_OVERFLOW,
+} MMPlayerMediaStreamBufferStatus;
+
+/**
+ * Enumeration for stream type.
+ */
+typedef enum
+{
+       MM_PLAYER_STREAM_TYPE_DEFAULT,  /**< Container type */
+       MM_PLAYER_STREAM_TYPE_AUDIO,    /**< Audio element stream type */
+       MM_PLAYER_STREAM_TYPE_VIDEO,    /**< Video element stream type */
+       MM_PLAYER_STREAM_TYPE_TEXT,     /**< Text type */
+       MM_PLAYER_STREAM_TYPE_MAX,
+} MMPlayerStreamType;
+
+/**
  * Attribute validity structure
  */
 typedef struct {
@@ -761,6 +881,54 @@ typedef struct {
 } MMPlayerVolumeType;
 
 /**
+ * Video stream info in external demux case
+ *
+**/
+typedef struct _VideoStreamInfo
+{
+       const char *mime;
+       unsigned int framerate_num;
+       unsigned int framerate_den;
+       unsigned int width;
+       unsigned int height;
+       unsigned char *codec_extradata;
+       unsigned int extradata_size;
+       unsigned int version;
+}MMPlayerVideoStreamInfo;
+
+/**
+ * Audio stream info in external demux case
+ *
+**/
+typedef struct _AudioStreamInfo
+{
+       const char *mime;
+       unsigned int channels;
+       unsigned int sample_rate;
+       unsigned char *codec_extradata;
+       unsigned int extradata_size;
+       unsigned int version;
+       unsigned int user_info;
+
+       /* for pcm */
+//     unsigned int width;
+//     unsigned int depth;
+//     unsigned int endianness;
+//     bool signedness;
+}MMPlayerAudioStreamInfo;
+
+/**
+ * Subtitle stream info in external demux case
+ *
+**/
+typedef struct _SubtitleStreamInfo
+{
+       const char *mime;
+       unsigned int codec_tag;
+       void *context;  //for smpte text
+}MMPlayerSubtitleStreamInfo;
+
+/**
  * Audio stream callback function type.
  *
  * @param      stream          [in]    Reference pointer to audio frame data
@@ -773,6 +941,49 @@ typedef struct {
 typedef bool   (*mm_player_audio_stream_callback) (void *stream, int stream_size, void *user_param);
 
 
+/**
+ * selected subtitle track number callback function type.
+ *
+ * @param      track_num       [in]    Track number of subtitle
+ * @param      user_param      [in]    User defined parameter
+ *
+ *
+ * @return     This callback function have to return MM_ERROR_NONE.
+ */
+typedef bool           (*mm_player_track_selected_subtitle_language_callback)(int track_num, void *user_param);
+
+/**
+ * Buffer underrun / overflow data callback function type.
+ *
+ * @param      status     [in] buffer status
+ * @param      user_param [in] User defined parameter which is passed when set
+ *                             to enough data callback or need data callback
+ *
+ * @return     This callback function have to return MM_ERROR_NONE.
+ */
+typedef bool   (*mm_player_media_stream_buffer_status_callback) (MMPlayerStreamType type, MMPlayerMediaStreamBufferStatus status, unsigned long long bytes, void *user_param);
+
+/**
+ * Buffer seek data callback function type.
+ *
+ * @param      offset     [in] offset for the buffer playback
+ * @param      user_param [in] User defined parameter which is passed when set
+ *                             to seek data callback
+ *
+ * @return     This callback function have to return MM_ERROR_NONE.
+ */
+typedef bool   (*mm_player_media_stream_seek_data_callback) (MMPlayerStreamType type, unsigned long long offset, void *user_param);
+
+/**
+ * Called to notify the stream changed.
+ *
+ * @param user_data [in] The user data passed from the callback registration function
+ *
+ * @return     This callback function have to return MM_ERROR_NONE.
+ */
+typedef bool   (*mm_player_stream_changed_callback) (void *user_param);
+
+
 /*===========================================================================================
 |                                                                                           |
 |  GLOBAL FUNCTION PROTOTYPES                                        |
@@ -790,28 +1001,28 @@ typedef bool     (*mm_player_audio_stream_callback) (void *stream, int stream_size,
  * @return     This function returns zero on success, or negative value with error code. \n
  *                     Please refer 'mm_error.h' to know it in detail.
  * @pre                None
- * @post       MM_PLAYER_STATE_NULL 
+ * @post       MM_PLAYER_STATE_NULL
  * @see                mm_player_destroy
  * @remark     You can create multiple handles on a context at the same time. \n
  *                     However, player cannot guarantee proper operation because of limitation of resources, \n
- *                     such as audio device or display device.  
+ *                     such as audio device or display device.
  *
  * @par Example
  * @code
 char *g_err_attr_name = NULL;
 
-if (mm_player_create(&g_player) != MM_ERROR_NONE) 
+if (mm_player_create(&g_player) != MM_ERROR_NONE)
 {
-       printf("failed to create player\n");
+       LOGE("failed to create player\n");
 }
 
 if (mm_player_set_attribute(g_player,
                                                &g_err_attr_name,
                                                "profile_uri", filename, strlen(filename),
                                                "display_overlay", (void*)&g_win.xid, sizeof(g_win.xid),
-                                               NULL) != MM_ERROR_NONE) 
+                                               NULL) != MM_ERROR_NONE)
 {
-       printf("failed to set %s attribute\n", g_err_attr_name);
+       LOGE("failed to set %s attribute\n", g_err_attr_name);
        free(g_err_attr_name);
 }
 
@@ -822,29 +1033,57 @@ int mm_player_create(MMHandleType *player);
 
 /**
  * This function releases player object and all resources which were created by mm_player_create(). \n
- * And, player handle will also be destroyed. 
+ * And, player handle will also be destroyed.
  *
  * @param      player          [in]    Handle of player
  *
  * @return     This function returns zero on success, or negative value with error code.
  * @pre                Player state may be MM_PLAYER_STATE_NULL. \n
- *                     But, it can be called in any state. 
+ *                     But, it can be called in any state.
  * @post               Because handle is released, there is no any state.
  * @see                mm_player_create
  * @remark     This method can be called with a valid player handle from any state to \n
  *                     completely shutdown the player operation.
- * 
+ *
  * @par Example
  * @code
-if (mm_player_destroy(g_player) != MM_ERROR_NONE) 
+if (mm_player_destroy(g_player) != MM_ERROR_NONE)
 {
-       printf("failed to destroy player\n");
+       LOGE("failed to destroy player\n");
 }
- * @endcode 
+ * @endcode
  */
 int mm_player_destroy(MMHandleType player);
 
 /**
+ * This function register the sound focus using application PID \n
+ * So, application PID should be set before realizing with mm_player_set_attribute(). \n
+ *
+ * @param      player          [in]    Handle of player
+ * @param      pid                     [in]    application PID
+ *
+ * @return     This function returns zero on success, or negative value with error code.
+ *
+ * @pre                Player state should be MM_PLAYER_STATE_NULL.
+ * @remark     None
+ */
+int mm_player_sound_register(MMHandleType player, int pid);
+
+/**
+ * This function get the application PID that is registered \n
+ * So, application PID should be set before realizing with mm_player_set_attribute(). \n
+ *
+ * @param      player          [in]    Handle of player
+ * @param      pid                     [out]   application PID
+ *
+ * @return     This function returns zero on success, or negative value with error code.
+ *
+ * @pre                Player state should be MM_PLAYER_STATE_NULL.
+ * @remark     None
+ */
+int mm_player_get_client_pid (MMHandleType player, int* pid);
+
+/**
  * This function parses uri and makes gstreamer pipeline by uri scheme. \n
  * So, uri should be set before realizing with mm_player_set_attribute(). \n
  *
@@ -853,14 +1092,14 @@ int mm_player_destroy(MMHandleType player);
  * @return     This function returns zero on success, or negative value with error code.
  *
  * @pre                Player state should be MM_PLAYER_STATE_NULL.
- * @post               Player state will be MM_PLAYER_STATE_READY. 
+ * @post               Player state will be MM_PLAYER_STATE_READY.
  * @see                mm_player_unrealize
  * @remark     None
  * @par Example
  * @code
-if (mm_player_realize(g_player) != MM_ERROR_NONE) 
+if (mm_player_realize(g_player) != MM_ERROR_NONE)
 {
-       printf("failed to realize player\n");
+       LOGE("failed to realize player\n");
 }
  * @endcode
  */
@@ -869,30 +1108,30 @@ int mm_player_realize(MMHandleType player) ;
 /**
  * This function uninitializes player object. So, resources and allocated memory \n
  * will be freed. And, gstreamer pipeline is also destroyed. So, if you want to play \n
- * other contents, player should be created again after destruction or realized with new uri. 
+ * other contents, player should be created again after destruction or realized with new uri.
  *
  * @param      player          [in]    Handle of player
  *
  * @return     This function returns zero on success, or negative value with error code.
  * @pre                Player state may be MM_PLAYER_STATE_READY to unrealize. \n
- *                     But, it can be called in any state.  
+ *                     But, it can be called in any state.
  * @post               Player state will be MM_PLAYER_STATE_NULL.
  * @see                mm_player_realize
  * @remark     This method can be called with a valid player handle from any state.
- * 
+ *
  * @par Example
  * @code
-if (mm_player_unrealize(g_player) != MM_ERROR_NONE) 
+if (mm_player_unrealize(g_player) != MM_ERROR_NONE)
 {
-       printf("failed to unrealize player\n");
+       LOGE("failed to unrealize player\n");
 }
- * @endcode 
+ * @endcode
  */
 int mm_player_unrealize(MMHandleType player);
 
 /**
  * This function is to get current state of player. \n
- * Application have to check current state before doing some action. 
+ * Application have to check current state before doing some action.
  *
  * @param      player          [in]    Handle of player
  * @param      state       [out] current state of player on success
@@ -903,25 +1142,25 @@ int mm_player_unrealize(MMHandleType player);
  * @remark     None
  * @par Example
  * @code
-if (mm_player_get_state(g_player, &state) != MM_ERROR_NONE) 
+if (mm_player_get_state(g_player, &state) != MM_ERROR_NONE)
 {
-       printf("failed to get state\n");
-} 
- * @endcode 
+       LOGE("failed to get state\n");
+}
+ * @endcode
  */
 int mm_player_get_state(MMHandleType player, MMPlayerStateType *state);
 
 /**
  * This function is to set relative volume of player. \n
  * So, It controls logical volume value. \n
- * But, if developer want to change system volume, mm sound api should be used. 
+ * But, if developer want to change system volume, mm sound api should be used.
  *
  * @param      player          [in]    Handle of player
  * @param      volume          [in]    Volume factor of each channel
  *
  * @return     This function returns zero on success, or negative value with error code.
  * @see                MMPlayerVolumeType, mm_player_get_volume
- * @remark     The range of factor range is from 0 to 1.0. (1.0 = 100%) And, default value is 1.0. 
+ * @remark     The range of factor range is from 0 to 1.0. (1.0 = 100%) And, default value is 1.0.
  * @par Example
  * @code
 MMPlayerVolumeType volume;
@@ -932,9 +1171,9 @@ for (i = 0; i < MM_VOLUME_CHANNEL_NUM; i++)
 
 if (mm_player_set_volume(g_player, &volume) != MM_ERROR_NONE)
 {
-    printf("failed to set volume\n");
+    LOGE("failed to set volume\n");
 }
- * @endcode 
+ * @endcode
  */
 int mm_player_set_volume(MMHandleType player, MMPlayerVolumeType *volume);
 
@@ -945,7 +1184,7 @@ int mm_player_set_volume(MMHandleType player, MMPlayerVolumeType *volume);
  * @param      volume          [out]   Volume factor of each channel.
  *
  * @return     This function returns zero on success, or negative value with error code.
- * 
+ *
  * @see                MMPlayerVolumeType, mm_player_set_volume
  * @remark     None
  * @par Example
@@ -955,12 +1194,12 @@ int i;
 
 if (mm_player_get_volume(g_player, &volume) != MM_ERROR_NONE)
 {
-        printf("failed to get volume\n");
+        LOGW("failed to get volume\n");
 }
 
 for (i = 0; i < MM_VOLUME_CHANNEL_NUM; i++)
-       printf("channel[%d] = %d \n", i, volume.level[i]);
- * @endcode 
+       LOGD("channel[%d] = %d \n", i, volume.level[i]);
+ * @endcode
  */
 int mm_player_get_volume(MMHandleType player, MMPlayerVolumeType *volume);
 
@@ -975,23 +1214,23 @@ int mm_player_get_volume(MMHandleType player, MMPlayerVolumeType *volume);
  * @remark
  *
  * @pre                Player state may be MM_PLAYER_STATE_READY.
- * @post               Player state will be MM_PLAYER_STATE_PLAYING. 
- * @see                mm_player_stop 
+ * @post               Player state will be MM_PLAYER_STATE_PLAYING.
+ * @see                mm_player_stop
  * @remark     None
- * @par Example 
- * @code       
-if (mm_player_start(g_player) != MM_ERROR_NONE) 
+ * @par Example
+ * @code
+if (mm_player_start(g_player) != MM_ERROR_NONE)
 {
-       printf("failed to start player\n");
+       LOGE("failed to start player\n");
 }
- * @endcode 
+ * @endcode
  */
 int mm_player_start(MMHandleType player);
 
 /**
  * This function is to stop playing media contents and it's different with pause. \n
  * If mm_player_start() is called after this, content will be started again from the beginning. \n
- * So, it can be used to close current playback.  
+ * So, it can be used to close current playback.
  *
  * @param      player          [in]    Handle of player
  *
@@ -999,15 +1238,15 @@ int mm_player_start(MMHandleType player);
  *
  * @pre                Player state may be MM_PLAYER_STATE_PLAYING.
  * @post               Player state will be MM_PLAYER_STATE_READY.
- * @see                mm_player_start 
+ * @see                mm_player_start
  * @remark     None
- * @par Example 
+ * @par Example
  * @code
-if (mm_player_stop(g_player) != MM_ERROR_NONE) 
+if (mm_player_stop(g_player) != MM_ERROR_NONE)
 {
-       printf("failed to stop player\n");
+       LOGE("failed to stop player\n");
 }
- * @endcode 
+ * @endcode
  */
 int mm_player_stop(MMHandleType player);
 
@@ -1016,19 +1255,19 @@ int mm_player_stop(MMHandleType player);
  *
  * @param      player          [in]    Handle of player.
  *
- * @return     This function returns zero on success, or negative value with error code. 
+ * @return     This function returns zero on success, or negative value with error code.
  *
  * @pre                Player state may be MM_PLAYER_STATE_PLAYING.
  * @post               Player state will be MM_PLAYER_STATE_PAUSED.
- * @see                mm_player_resume 
+ * @see                mm_player_resume
  * @remark     None
- * @par Example 
+ * @par Example
  * @code
-if (mm_player_pause(g_player) != MM_ERROR_NONE) 
+if (mm_player_pause(g_player) != MM_ERROR_NONE)
 {
-       printf("failed to pause player\n");
+       LOGE("failed to pause player\n");
 }
- * @endcode 
+ * @endcode
  */
 int mm_player_pause(MMHandleType player);
 
@@ -1041,38 +1280,38 @@ int mm_player_pause(MMHandleType player);
  *
  * @pre                Player state may be MM_PLAYER_STATE_PAUSED.
  * @post               Player state will be MM_PLAYER_STATE_PLAYING.
- * @see                mm_player_pause 
- * @remark     None 
- * @par Example 
+ * @see                mm_player_pause
+ * @remark     None
+ * @par Example
  * @code
-if (mm_player_resume(g_player) != MM_ERROR_NONE) 
+if (mm_player_resume(g_player) != MM_ERROR_NONE)
 {
-       printf("failed to resume player\n");
+       LOGE("failed to resume player\n");
 }
- * @endcode 
+ * @endcode
  */
 int mm_player_resume(MMHandleType player);
 
 /**
  * This function is to set the position for playback. \n
  * So, it can be seeked to requested position. \n
- * 
+ *
  * @param      player          [in]    Handle of player
  * @param      format          [in]    Format of position.
  * @param      pos                     [in]    Position for playback
  *
  * @return     This function returns zero on success, or negative value with error code.
  * @see                MMPlayerPosFormatType, mm_player_get_position
- * @remark  the unit of time-based format is millisecond and other case is percent.  
- * @par Example 
+ * @remark  the unit of time-based format is millisecond and other case is percent.
+ * @par Example
  * @code
 int position = 1000; //1sec
 
 if (mm_player_set_position(g_player, MM_PLAYER_POS_FORMAT_TIME, position) != MM_ERROR_NONE)
 {
-       g_print("failed to set position\n");
-} 
- * @endcode 
+       LOGE("failed to set position\n");
+}
+ * @endcode
  */
 int mm_player_set_position(MMHandleType player, MMPlayerPosFormatType format, int pos);
 
@@ -1085,8 +1324,8 @@ int mm_player_set_position(MMHandleType player, MMPlayerPosFormatType format, in
  *
  * @return     This function returns zero on success, or negative value with errors
  * @see                MMPlayerPosFormatType, mm_player_set_position
- * @remark     the unit of time-based format is millisecond and other case is percent.  
- * @par Example 
+ * @remark     the unit of time-based format is millisecond and other case is percent.
+ * @par Example
  * @code
 int position = 0;
 int duration = 0;
@@ -1095,10 +1334,10 @@ mm_player_get_position(g_player, MM_PLAYER_POS_FORMAT_TIME, &position);
 
 mm_player_get_attribute(g_player, &g_err_name, "content_duration", &duration, NULL);
 
-printf("pos: [%d/%d] msec\n", position, duration);
- * @endcode 
+LOGD("pos: [%d/%d] msec\n", position, duration);
+ * @endcode
  */
-int mm_player_get_position(MMHandleType player, MMPlayerPosFormatType format, int *pos);
+int mm_player_get_position(MMHandleType player, MMPlayerPosFormatType format, unsigned long *pos);
 
 /**
  * This function is to get current buffer position of playback content.
@@ -1110,17 +1349,17 @@ int mm_player_get_position(MMHandleType player, MMPlayerPosFormatType format, in
  *
  * @return     This function returns zero on success, or negative value with errors
  * @see                MMPlayerPosFormatType, mm_player_set_position
- * @remark     the unit of time-based format is millisecond and other case is percent.  
- * @par Example 
+ * @remark     the unit of time-based format is millisecond and other case is percent.
+ * @par Example
  * @code
 int start_pos = 0, stop_pos = 0;
 
 mm_player_get_buffer_position(g_player, MM_PLAYER_POS_FORMAT_PERCENT, &start_pos, &stop_pos );
 
-printf("buffer position: [%d] ~ [%d] \%\n", start_pos, stop_pos );
- * @endcode 
+LOGD("buffer position: [%d] ~ [%d] \%\n", start_pos, stop_pos );
+ * @endcode
  */
-int mm_player_get_buffer_position(MMHandleType player, MMPlayerPosFormatType format, int *start_pos, int *stop_pos);
+int mm_player_get_buffer_position(MMHandleType player, MMPlayerPosFormatType format, unsigned long *start_pos, unsigned long *stop_pos);
 
 /**
  * This function is to activate the section repeat. If it's set, selected section will be played \n
@@ -1134,7 +1373,7 @@ int mm_player_get_buffer_position(MMHandleType player, MMPlayerPosFormatType for
  * @return     This function returns zero on success, or negative value with error code.
  * @see                mm_player_deactivate_section_repeat
  * @remark     None
- * @par Example 
+ * @par Example
  * @code
 int position;
 int endtime = 4000; //msec
@@ -1142,7 +1381,7 @@ int endtime = 4000; //msec
 mm_player_get_position(g_player, MM_PLAYER_POS_FORMAT_TIME, &position);
 
 mm_player_activate_section_repeat(g_player, position, position+endtime);
- * @endcode 
+ * @endcode
  */
 int mm_player_activate_section_repeat(MMHandleType player, int start_pos, int end_pos);
 
@@ -1153,20 +1392,20 @@ int mm_player_activate_section_repeat(MMHandleType player, int start_pos, int en
  *
  * @return     This function returns zero on success, or negative value with error code.
  * @see                mm_player_activate_section_repeat
- * @remark     None 
- * @par Example 
+ * @remark     None
+ * @par Example
  * @code
 if ( mm_player_deactivate_section_repeat(g_player) != MM_ERROR_NONE)
 {
-       printf("failed to deactivate section repeat\n");
-} 
- * @endcode 
+       LOGW("failed to deactivate section repeat\n");
+}
+ * @endcode
  */
 int mm_player_deactivate_section_repeat(MMHandleType player);
 
 /**
  * This function sets callback function for receiving messages from player.
- * So, player can notify warning, error and normal cases to application. 
+ * So, player can notify warning, error and normal cases to application.
  *
  * @param      player          [in]    Handle of player.
  * @param      callback        [in]    Message callback function.
@@ -1174,29 +1413,29 @@ int mm_player_deactivate_section_repeat(MMHandleType player);
  *
  * @return     This function returns zero on success, or negative value with error code.
  * @see                MMMessageCallback
- * @remark     None 
- * @par Example 
+ * @remark     None
+ * @par Example
  * @code
-int msg_callback(int message, MMMessageParamType *param, void *user_param) 
+int msg_callback(int message, MMMessageParamType *param, void *user_param)
 {
        switch (message)
        {
                case MM_MESSAGE_ERROR:
                        //do something
                        break;
-               
+
                case MM_MESSAGE_END_OF_STREAM:
                        //do something
                        break;
-             
+
                case MM_MESSAGE_STATE_CHANGED:
                        //do something
                        break;
-               
+
                case MM_MESSAGE_BEGIN_OF_STREAM:
                        //do something
                        break;
-               
+
                default:
                        break;
        }
@@ -1204,7 +1443,7 @@ int msg_callback(int message, MMMessageParamType *param, void *user_param)
 }
 
 mm_player_set_message_callback(g_player, msg_callback, (void*)g_player);
- * @endcode 
+ * @endcode
  */
 int mm_player_set_message_callback(MMHandleType player, MMMessageCallback callback, void *user_param);
 
@@ -1222,16 +1461,16 @@ int mm_player_set_message_callback(MMHandleType player, MMMessageCallback callba
  * @return     This function returns zero on success, or negative value with error
  *                     code.
  * @see                mm_player_audio_stream_callback
- * @remark     It can be used for audio playback only.  
- * @par Example 
+ * @remark     It can be used for audio playback only.
+ * @par Example
  * @code
 bool audio_callback(void *stream, int stream_size, void *user_param)
 {
-       printf("audio stream callback\n");
+       LOGD("audio stream callback\n");
        return TRUE;
 }
 mm_player_set_audio_stream_callback(g_player, audio_callback, NULL);
- * @endcode 
+ * @endcode
  */
  int mm_player_set_audio_stream_callback(MMHandleType player, mm_player_audio_stream_callback callback, void *user_param);
 
@@ -1244,13 +1483,13 @@ mm_player_set_audio_stream_callback(g_player, audio_callback, NULL);
  * @return     This function returns zero on success, or negative value with error code
  * @see                mm_player_get_mute
  * @remark     None
- * @par Example 
+ * @par Example
  * @code
 if (mm_player_set_mute(g_player, TRUE) != MM_ERROR_NONE)
 {
-       printf("failed to set mute\n");
-} 
- * @endcode 
+       LOGW("failed to set mute\n");
+}
+ * @endcode
  */
 int mm_player_set_mute(MMHandleType player, int mute);
 
@@ -1263,17 +1502,17 @@ int mm_player_set_mute(MMHandleType player, int mute);
  * @return     This function returns zero on success, or negative value with error code
  * @see                mm_player_set_mute
  * @remark     None
- * @par Example 
+ * @par Example
  * @code
 int mute;
+
 if (mm_player_get_mute(g_player, &mute) != MM_ERROR_NONE)
 {
-       printf("failed to get mute\n");
+       LOGW("failed to get mute\n");
 }
 
-printf("mute status:%d\n", mute);
- * @endcode 
+LOGD("mute status:%d\n", mute);
+ * @endcode
  */
 int mm_player_get_mute(MMHandleType player, int *mute);
 
@@ -1295,7 +1534,7 @@ int pos;
 pos = 5000;
 if (mm_player_adjust_subtitle_position(g_player, MM_PLAYER_POS_FORMAT_TIME, pos) != MM_ERROR_NONE)
 {
-       printf("failed to adjust subtitle postion.\n");
+       LOGW("failed to adjust subtitle postion.\n");
 }
  * @endcode
  */
@@ -1303,6 +1542,14 @@ if (mm_player_adjust_subtitle_position(g_player, MM_PLAYER_POS_FORMAT_TIME, pos)
 int mm_player_adjust_subtitle_position(MMHandleType player, MMPlayerPosFormatType format, int pos);
 
 /**
+ * This function is to set the offset in timestamps of video so as to bring the a/v sync
+ * @param      player          Handle of player
+ * @param      offset          offset to be set in milliseconds(can be positive or negative both)
+ * postive offset to make video lag
+ * negative offset to make video lead
+ */
+int mm_player_adjust_video_position(MMHandleType player,int offset);
+/**
  * This function is to set subtitle silent status. So, subtitle can show or hide during playback \n
  * by this value. But, one subtitle file should be set with "subtitle_uri" attribute before calling mm_player_realize(); \n
  * Player FW parses subtitle file and send text data including timestamp to application \n
@@ -1314,22 +1561,22 @@ int mm_player_adjust_subtitle_position(MMHandleType player, MMPlayerPosFormatTyp
  * @param      silent  [in]    silent(integer value except 0) or not silent(0)
  *
  * @return     This function returns zero on success, or negative value with error
- *                     code 
+ *                     code
  * @see                mm_player_get_subtitle_silent, MM_MESSAGE_UPDATE_SUBTITLE
- * @remark     None 
- * @par Example 
+ * @remark     None
+ * @par Example
  * @code
 mm_player_set_attribute(g_player,
                                        &g_err_name,
                                        "subtitle_uri", g_subtitle_uri, strlen(g_subtitle_uri),
                                        NULL
                                        );
-                                                       
+
 if (mm_player_set_subtitle_silent(g_player, TRUE) != MM_ERROR_NONE)
 {
-       printf("failed to set subtitle silent\n");
-} 
- * @endcode 
+       LOGW("failed to set subtitle silent\n");
+}
+ * @endcode
  */
 int mm_player_set_subtitle_silent(MMHandleType player, int silent);
 
@@ -1340,18 +1587,18 @@ int mm_player_set_subtitle_silent(MMHandleType player, int silent);
  * @param      silent  [out]   subtitle silent property
  *
  * @return     This function returns zero on success, or negative value with error
- *                     code 
+ *                     code
  * @see                mm_player_set_subtitle_silent, MM_MESSAGE_UPDATE_SUBTITLE
- * @remark     None 
- * @par Example 
+ * @remark     None
+ * @par Example
  * @code
 int silent = FALSE;
+
 if (mm_player_get_subtitle_silent(g_player, &silent) != MM_ERROR_NONE)
 {
-       printf("failed to set subtitle silent\n");
+       LOGW("failed to set subtitle silent\n");
 }
- * @endcode 
+ * @endcode
  */
 int mm_player_get_subtitle_silent(MMHandleType player, int *silent);
 
@@ -1369,22 +1616,22 @@ int mm_player_get_subtitle_silent(MMHandleType player, int *silent);
  *
  * @see                mm_player_get_attribute
  * @remark     This function must be terminated by NULL argument.
- *                     And, if this function is failed, err_attr_name param must be free. 
- * @par Example 
+ *                     And, if this function is failed, err_attr_name param must be free.
+ * @par Example
  * @code
 char *g_err_attr_name = NULL;
 
-if (mm_player_set_attribute(g_player, 
-                                               &g_err_attr_name, 
+if (mm_player_set_attribute(g_player,
+                                               &g_err_attr_name,
                                                "profile_uri", filename, strlen(filename),
                                                "profile_play_count", count,
                                                NULL) != MM_ERROR_NONE)
 {
-       printf("failed to set %s attribute\n", g_err_attr_name);
+       LOGW("failed to set %s attribute\n", g_err_attr_name);
        free(g_err_attr_name);
 }
 
- * @endcode 
+ * @endcode
  */
 int mm_player_set_attribute(MMHandleType player,  char **err_attr_name, const char *first_attribute_name, ...)G_GNUC_NULL_TERMINATED;
 
@@ -1401,17 +1648,17 @@ int mm_player_set_attribute(MMHandleType player,  char **err_attr_name, const ch
  *                     code.
  * @see                mm_player_set_attribute
  * @remark     This function must be terminated by NULL argument.
- *                     And, if this function is failed, err_attr_name param must be free. 
- * @par Example 
+ *                     And, if this function is failed, err_attr_name param must be free.
+ * @par Example
  * @code
 char *g_err_attr_name = NULL;
 
 if (mm_player_get_attribute(g_player, &g_err_attr_name, "content_duration", &duration, NULL) != MM_ERROR_NONE)
 {
-       printf("failed to set %s attribute\n", g_err_attr_name);
+       LOGW("failed to set %s attribute\n", g_err_attr_name);
        free(g_err_attr_name);
 }
- * @endcode 
+ * @endcode
  */
 int mm_player_get_attribute(MMHandleType player,  char **err_attr_name, const char *first_attribute_name, ...)G_GNUC_NULL_TERMINATED;
 
@@ -1427,25 +1674,26 @@ int mm_player_get_attribute(MMHandleType player,  char **err_attr_name, const ch
  *
  * @see                mm_player_set_attribute, mm_player_get_attribute
  * @remark     None
- * @par Example 
+ * @par Example
  * @code
 if (mm_player_get_attribute_info (g_player, "display_method", &method_info) != MM_ERROR_NONE)
 {
-       printf("failed to get info\n");
+       LOGW("failed to get info\n");
 }
 
-printf("type:%d \n", method_info.type); //int, double..
-printf("flag:%d \n", method_info.flag); //readable, writable..
-printf("validity type:%d \n", method_info.validity_type); //range, array..
+LOGD("type:%d \n", method_info.type); //int, double..
+LOGD("flag:%d \n", method_info.flag); //readable, writable..
+LOGD("validity type:%d \n", method_info.validity_type); //range, array..
 
 if (method_info. validity_type == MM_PLAYER_ATTRS_VALID_TYPE_INT_RANGE)
 {
-       printf("range min:%d\n", method_info.int_range.min);
-       printf("range max:%d\n", method_info.int_range.max);
+       LOGD("range min:%d\n", method_info.int_range.min);
+       LOGD("range max:%d\n", method_info.int_range.max);
 }
- * @endcode 
+ * @endcode
  */
 int mm_player_get_attribute_info(MMHandleType player,  const char *attribute_name, MMPlayerAttrsInfo *info);
+
 /**
  * This function is to get download position and total size of progressive download
  *
@@ -1464,7 +1712,7 @@ guint64 total_size = 0LLU;
 
 if (mm_player_get_pd_status(g_player, &current_pos, &total_size, NULL) != MM_ERROR_NONE)
 {
-       printf("current download pos = %llu, total size = %llu\n", current_pos, total_size);
+       LOGD("current download pos = %llu, total size = %llu\n", current_pos, total_size);
 }
  * @endcode
  */
@@ -1487,10 +1735,10 @@ int msg_callback(int message, MMMessageParamType *param, void *user_param)
        switch (message)
        {
                case MM_MESSAGE_PD_DOWNLOADER_START:
-                       printf("Progressive download is started...\n");
+                       LOGD("Progressive download is started...\n");
                        break;
                case MM_MESSAGE_PD_DOWNLOADER_END:
-                       printf("Progressive download is ended...\n");
+                       LOGD("Progressive download is ended...\n");
                        break;
                default:
                        break;
@@ -1504,6 +1752,589 @@ mm_player_set_pd_message_callback(g_player, msg_callback, NULL);
 int mm_player_set_pd_message_callback(MMHandleType player, MMMessageCallback callback, void *user_param);
 
 /**
+ * This function is to get the track count
+ *
+ * @param      player          [in]    handle of player.
+ * @param      track                   [in]    type of the track type
+ * @param      info                    [out]   the count of the track
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ *
+ * @see
+ * @remark     None
+ * @par Example
+ * @code
+gint audio_count = 0;
+
+if (mm_player_get_track_count (g_player, MM_PLAYER_TRACK_TYPE_AUDIO, &audio_count) != MM_ERROR_NONE)
+{
+       LOGW("failed to get audio track count\n");
+}
+
+LOGD("audio track count : %d \n", audio_count);
+ * @endcode
+ */
+int mm_player_get_track_count(MMHandleType player,  MMPlayerTrackType type, int *count);
+
+/**
+ * This function is to select the track
+ *
+ * @param      player          [in]    handle of player.
+ * @param      type                    [in]    type of the track type
+ * @param      index           [in]    the index of the track
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ *
+ * @see
+ * @remark     None
+ */
+int mm_player_select_track(MMHandleType player, MMPlayerTrackType type, int index);
+#ifdef _MULTI_TRACK
+/**
+ * This function is to add the track when user want multi subtitle
+ *
+ * @param      player          [in]    handle of player.
+ * @param      index           [in]    the index of the track
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ *
+ * @see
+ * @remark     None
+ */
+int mm_player_track_add_subtitle_language(MMHandleType player, int index);
+
+/**
+ * This function is to remove the track when user want multi subtitle
+ *
+ * @param      player          [in]    handle of player.
+ * @param      index           [in]    the index of the track
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ *
+ * @see
+ * @remark     None
+ */
+int mm_player_track_remove_subtitle_language(MMHandleType player, int index);
+
+/**
+ * This function is to notify which sutitle track is in use
+ *
+ * @param      player          [in]    handle of player.
+ * @param      callback                        [in]    callback function to register
+ * @param      user_data       [in]    user data to be passed to the callback function
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ *
+ * @see
+ * @remark     None
+ */
+int mm_player_track_foreach_selected_subtitle_language(MMHandleType player, mm_player_track_selected_subtitle_language_callback callback, void *user_param);
+#endif
+/**
+ * This function is to get the track language
+ *
+ * @param      player          [in]    handle of player.
+ * @param      type                    [in]    type of the track type
+ * @param      index           [in]    the index of the track
+ * @param      code                    [out] language code in ISO 639-1(string)
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ *
+ * @see
+ * @remark     None
+ */
+int mm_player_get_track_language_code(MMHandleType player,  MMPlayerTrackType type, int index, char **code);
+
+/**
+ * This function is to get the current running track
+ *
+ * @param       player          [in]    handle of player.
+ * @param       type                    [in]    type of the track type
+ * @param       index           [out]    the index of the track
+ *
+ * @return      This function returns zero on success, or negative value with error
+ *                      code.
+ *
+ * @see
+ * @remark      None
+ */
+
+int mm_player_get_current_track(MMHandleType hplayer, MMPlayerTrackType type, int *index);
+
+/**
+ * This function is to set the buffer size for streaming playback. \n
+ *
+ * @param      player          [in]    Handle of player
+ * @param      second          [in]    Size of initial buffer
+ *
+ * @return     This function returns zero on success, or negative value with error code.
+ * @remark  None
+ * @par Example
+ * @code
+gint second = 10; //10sec
+
+if (mm_player_set_prepare_buffering_time(g_player, second) != MM_ERROR_NONE)
+{
+       LOGE("failed to set buffer size\n");
+}
+ * @endcode
+ */
+
+int mm_player_set_prepare_buffering_time(MMHandleType player, int second);
+
+/**
+ * This function is to set the runtime buffering mode for streaming playback. \n
+ *
+ * @param      player          [in]    Handle of player
+ * @param      mode            [in]    mode of runtime buffering
+ * @param      second          [in]    max size of buffering
+ *
+ * @return     This function returns zero on success, or negative value with error code.
+ * @remark  None
+ * @par Example
+ * @code
+
+if (mm_player_set_runtime_buffering_mode(g_player, MM_PLAYER_BUFFERING_MODE_ADAPTIVE, 10) != MM_ERROR_NONE)
+{
+       LOGE("failed to set buffering mode\n");
+}
+ * @endcode
+ */
+
+int mm_player_set_runtime_buffering_mode(MMHandleType player, MMPlayerBufferingMode mode, int second);
+
+/**
+ * This function is to set the start position of zoom
+ *
+ * @param       player          [in]    handle of player
+ * @param       level           [in]    level of zoom
+ * @param       x              [in]    start x position
+ * @param       y              [in]    start y position
+ *
+ * @return      This function returns zero on success, or negative value with error
+ *                      code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_set_display_zoom(MMHandleType player, float level, int x, int y);
+
+/**
+ * This function is to get the start position of zoom
+ *
+ * @param       player           [in]    handle of player
+ * @param       type            [out]    current level of zoom
+ * @param       x              [out]    start x position
+ * @param       y              [out]    start y position
+ *
+ * @return      This function returns zero on success, or negative value with error
+ *                      code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_get_display_zoom(MMHandleType player, float *level, int *x, int *y);
+
+/**
+ * This function is to set the subtitle path
+ *
+ * @param       player  [in]    handle of player
+ * @param       path    [in]    subtitle path
+ *
+ * @return      This function returns zero on success, or negative value with error code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_set_external_subtitle_path(MMHandleType player, const char* path);
+
+/**
+ * This function is to set the clock which is from master player
+ *
+ * @param       player  [in]    handle of player
+ * @param       clock  [in]    clock of master player
+ * @param       clock_delta [in]       clock difference between master and slave
+ * @param       video_time     [in]    current playing position
+ * @param       media_clock    [in]    media clock information
+ * @param       audio_time     [in]    audio timestamp information
+ * @return      This function returns zero on success, or negative value with error code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_set_video_share_master_clock(MMHandleType player, long long clock, long long clock_delta, long long video_time, long long media_clock, long long audio_time);
+/**
+ * This function is to get the master clock
+ *
+ * @param       player         [in]    handle of player
+ * @param       video_time     [out]   current playing position
+ * @param       media_clock    [out]   media clock information
+ * @param       audio_time     [out]   audio timestamp information
+ * @return      This function returns zero on success, or negative value with error code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_get_video_share_master_clock(MMHandleType player, long long *video_time, long long *media_clock, long long *audio_time);
+
+/**
+ * This function is to get the content angle
+ *
+ * @param       player         [in]    handle of player
+ * @param       angle          [out]   orignal angle from content
+ * @return      This function returns zero on success, or negative value with error code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_get_video_rotate_angle(MMHandleType player, int *angle);
+
+/**
+ * This function is to set download mode of video hub
+ *
+ * @param       player         [in]    handle of player
+ * @param       mode           [in]    download mode
+ * @return      This function returns zero on success, or negative value with error code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_set_video_hub_download_mode(MMHandleType player, bool mode);
+
+/**
+ * This function is to set using sync handler.
+ *
+ * @param       player         [in]    handle of player
+ * @param       enable         [in]    enable/disable
+ * @return      This function returns zero on success, or negative value with error code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_enable_sync_handler(MMHandleType player, bool enable);
+
+/**
+ * This function is to set uri.
+ *
+ * @param       player         [in]    handle of player
+ * @param       uri            [in]    uri
+ * @return      This function returns zero on success, or negative value with error code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_set_uri(MMHandleType player, const char *uri);
+
+/**
+ * This function is to set next uri.
+ *
+ * @param       player         [in]    handle of player
+ * @param       uri            [in]    uri
+ * @return      This function returns zero on success, or negative value with error code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_set_next_uri(MMHandleType player, const char *uri);
+
+/**
+ * This function is to get next uri.
+ *
+ * @param       player         [in]    handle of player
+ * @param       uri            [out]   uri
+ * @return      This function returns zero on success, or negative value with error code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_get_next_uri(MMHandleType player, char **uri);
+
+/**
+ * This function is to increase reference count of internal buffer.
+ *
+ * @param       buffer                 [in]   video callback internal buffer
+ * @return      This function returns buffer point;
+ *
+ * @see
+ * @remark      None
+ */
+void * mm_player_media_packet_video_stream_internal_buffer_ref(void *buffer);
+
+/**
+ * This function is to decrease reference count of internal buffer.
+ *
+ * @param       buffer                 [in]   video callback internal buffer
+ * @return      None;
+ *
+ * @see
+ * @remark      None
+ */
+void mm_player_media_packet_video_stream_internal_buffer_unref(void *buffer);
+
+/**mm_player_submit_packet
+ * This function is to submit buffer to appsrc.  \n
+ * @param      player                  [in]    Handle of player.
+ * @param      buf             [in]    buffer to be submit in appsrc in external feeder case.
+ * @param      len                             [in]    length of buffer.
+ * @param      pts                             [in]    timestamp of buffer.
+ * @param      streamtype              [in]    stream type of buffer.
+ * @return      This function returns zero on success, or negative value with error code.
+ * @par Example
+ *
+ * @endcode
+ */
+int mm_player_submit_packet(MMHandleType player, media_packet_h packet);
+
+/**mm_player_set_video_info
+ * This function is to set caps of src pad of video appsrc in external feeder case.  \n
+ * @param       player                          [in]    Handle of player.
+ * @param       media_format_h                 [in]    Video stream info.
+ * @return      This function returns zero on success, or negative value with error code.
+ * @par Example
+ *
+ * @endcode
+ */
+int mm_player_set_video_info (MMHandleType player, media_format_h format);
+
+/**mm_player_set_audio_info
+ * This function is to set caps of src pad of Audio appsrc in external feeder case.  \n
+ * @param       player                       [in]    Handle of player.
+ * @param       media_format_h               [in]    Audio stream info.
+ * @return      This function returns zero on success, or negative value with error code.
+ * @par Example
+ *
+ * @endcode
+ */
+int mm_player_set_audio_info (MMHandleType player, media_format_h format);
+
+/**mm_player_set_subtitle_info
+ * This function is to set caps of src pad of subtitle appsrc in external feeder case.  \n
+ * @param       player                          [in]    Handle of player.
+ * @param       subtitle_stream_info               [in]    Subtitle stream info.
+ * @return      This function returns zero on success, or negative value with error code.
+ * @par Example
+ *
+ * @endcode
+ */
+int mm_player_set_subtitle_info (MMHandleType player, MMPlayerSubtitleStreamInfo *info);
+
+/**
+ * This function set callback function for receiving need or enough data message from player.
+ *
+ * @param       player          [in]    Handle of player.
+ * @param       type            [in]    stream type
+ * @param       callback        [in]    data callback function for stream type.
+ * @param       user_param      [in]    User parameter.
+ *
+ * @return      This function returns zero on success, or negative value with error
+ *                      code.
+ * @remark
+ * @see
+ * @since
+ */
+int mm_player_set_media_stream_buffer_status_callback(MMHandleType player, MMPlayerStreamType type, mm_player_media_stream_buffer_status_callback callback, void * user_param);
+
+/**
+ * This function set callback function for receiving seek data message from player.
+ *
+ * @param       player          [in]    Handle of player.
+ * @param       type            [in]    stream type
+ * @param       callback        [in]    Seek data callback function for stream type.
+ * @param       user_param      [in]    User parameter.
+ *
+ * @return      This function returns zero on success, or negative value with error
+ *                      code.
+ * @remark
+ * @see
+ * @since
+ */
+int mm_player_set_media_stream_seek_data_callback(MMHandleType player, MMPlayerStreamType type, mm_player_media_stream_seek_data_callback callback, void * user_param);
+
+/**
+ * This function is to set max size of buffer(appsrc).
+ *
+ * @param       player          [in]    Handle of player.
+ * @param       type            [in]    stream type
+ * @param       max_size        [in]    max bytes of buffer.
+ *
+ * @return      This function returns zero on success, or negative value with error
+ *                      code.
+ * @remark
+ * @see
+ * @since
+ */
+int mm_player_set_media_stream_buffer_max_size(MMHandleType player, MMPlayerStreamType type, unsigned long long max_size);
+
+/**
+ * This function is to get max size of buffer(appsrc).
+ *
+ * @param       player          [in]    Handle of player.
+ * @param       type            [in]    stream type
+ * @param       max_size        [out]   max bytes of buffer.
+ *
+ * @return      This function returns zero on success, or negative value with error
+ *                      code.
+ * @remark
+ * @see
+ * @since
+ */
+int mm_player_get_media_stream_buffer_max_size(MMHandleType player, MMPlayerStreamType type, unsigned long long *max_size);
+
+/**
+ * This function is to set min percent of buffer(appsrc).
+ *
+ * @param       player          [in]    Handle of player.
+ * @param       type            [in]    stream type
+ * @param       min_percent     [in]    min percent of buffer.
+ *
+ * @return      This function returns zero on success, or negative value with error
+ *                      code.
+ * @remark
+ * @see
+ * @since
+ */
+int mm_player_set_media_stream_buffer_min_percent(MMHandleType player, MMPlayerStreamType type, unsigned min_percent);
+
+/**
+ * This function is to get min percent of buffer(appsrc).
+ *
+ * @param       player          [in]    Handle of player.
+ * @param       type            [in]    stream type
+ * @param       min_percent     [out]   min percent of buffer.
+ *
+ * @return      This function returns zero on success, or negative value with error
+ *                      code.
+ * @remark
+ * @see
+ * @since
+ */
+int mm_player_get_media_stream_buffer_min_percent(MMHandleType player, MMPlayerStreamType type, unsigned int *min_percent);
+
+/**
+ * This function set callback function for changing audio stream from player. \n
+ * It's only supported when audio stream is included in file. \n
+ *
+ * @param      player   [in] Handle of player.
+ * @param      callback [in] Audio stream changed callback function.
+ * @param      user_param [in] User parameter.
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ * @see                mm_player_stream_changed_callback
+ * @since
+ */
+int mm_player_set_audio_stream_changed_callback(MMHandleType player, mm_player_stream_changed_callback callback, void *user_param);
+
+/**
+ * This function set callback function for changing video stream from player. \n
+ * It's only supported when video stream is included in file. \n
+ *
+ * @param      player   [in] Handle of player.
+ * @param      callback [in] Video stream changed callback function.
+ * @param      user_param [in] User parameter.
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ * @see                mm_player_stream_changed_callback
+ * @since
+ */
+int mm_player_set_video_stream_changed_callback(MMHandleType player, mm_player_stream_changed_callback callback, void *user_param);
+
+/**
+ * This function is to get timeout value according to the content type for muse. \n
+ * It's only supported when video stream is included in file. \n
+ *
+ * @param      player  [in] Handle of player.
+ * @param      timeout [out] timeout value (sec).
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ * @since 3.0
+ */
+int mm_player_get_timeout(MMHandleType player, int *timeout);
+
+/**
+ * This function is to get the number of video output buffers. \n
+ * It's only supported when video stream is included in file. \n
+ *
+ * @param      player  [in] Handle of player.
+ * @param      num     [out] num of buffers.
+ * @param      extra_num [out] extra num of buffers.
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ * @since 3.0
+ */
+int mm_player_get_num_of_video_out_buffers(MMHandleType player, int *num, int *extra_num);
+
+/**
+ * This function is to set the dynamic resolution information. \n
+ * It's only supported when video stream is included in file. \n
+ *
+ * @param      player  [in] Handle of player.
+ * @param      drc     [in] dynamic resolution info of media stream data
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ * @since 3.0
+ */
+int mm_player_set_media_stream_dynamic_resolution(MMHandleType player, bool drc);
+
+/**
+ * This function is to release the video stream bo to reuse. \n
+ * It's only supported when sw codec is used to decode video stream. \n
+ *
+ * @param      player  [in] Handle of player.
+ * @param      bo     [in] bo address to be released
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ * @since 3.0
+ */
+int mm_player_release_video_stream_bo(MMHandleType player, void* bo);
+
+/**
+ * This function is to set http file buffering path
+ *
+ * @param       player         [in]    handle of player
+ * @param       file_path      [in]    file path
+ * @return      This function returns zero on success, or negative value with error code.
+ *
+ * @see
+ * @remark      None
+ */
+int mm_player_set_file_buffering_path(MMHandleType player, const char *file_path);
+
+/**
+ * This function is to set sound stream info
+ */
+int mm_player_set_sound_stream_info(MMHandleType player, char *stream_type, int stream_index);
+
+/**
+ * This function is to manage the playback according to the external storage state
+ */
+int mm_player_manage_external_storage_state(MMHandleType player, int state);
+
+/**
+ * These functions are to set/get the max variant of HAS
+ */
+int mm_player_get_adaptive_variant_info(MMHandleType player, int *num, char **var_info);
+int mm_player_set_max_adaptive_variant_limit(MMHandleType player, int bandwidth, int width, int height);
+int mm_player_get_max_adaptive_variant_limit(MMHandleType player, int *bandwidth, int *width, int *height);
+
+/**
+ * These functions are to set/get the audio only mode
+ */
+int mm_player_set_audio_only(MMHandleType player, bool audio_only);
+int mm_player_get_audio_only(MMHandleType player, bool *audio_only);
+
+/**
        @}
  */