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
index 1c326e3..29f9cdd 100644 (file)
  */
 #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 {
@@ -756,24 +777,6 @@ typedef enum {
        MM_PLAYER_BUFFERING_MODE_MAX = MM_PLAYER_BUFFERING_MODE_SLINK,
 }MMPlayerBufferingMode;
 
-/**
- * Enumeration of audio channel for video share
- */
-typedef enum
-{
-       MM_PLAYER_AUDIO_CH_MONO_LEFT = 0,
-       MM_PLAYER_AUDIO_CH_MONO_RIGHT,
-       MM_PLAYER_AUDIO_CH_STEREO,
-} MMPlayerAudioChannel;
-
-typedef enum
-{
-       MM_PLAYER_SOUND_RESOURCE_PRELISTENING_RINGTONE = 0,
-       MM_PLAYER_SOUND_RESOURCE_PRELISTENING_NOTIFICATION,
-       MM_PLAYER_SOUND_RESOURCE_PRELISTENING_ALARM,
-       MM_PLAYER_SOUND_RESOURCE_PRELISTENING_MEDIA,
-} MMPlayerSoundResource;
-
 typedef enum
 {
        MM_PLAYER_FOCUS_CHANGED_COMPLETED = 0,
@@ -958,7 +961,7 @@ typedef bool                (*mm_player_track_selected_subtitle_language_callback)(int track_n
  *
  * @return     This callback function have to return MM_ERROR_NONE.
  */
-typedef bool   (*mm_player_media_stream_buffer_status_callback) (MMPlayerStreamType type, MMPlayerMediaStreamBufferStatus status, void *user_param);
+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.
@@ -1010,7 +1013,7 @@ char *g_err_attr_name = NULL;
 
 if (mm_player_create(&g_player) != MM_ERROR_NONE)
 {
-       debug_error("failed to create player\n");
+       LOGE("failed to create player\n");
 }
 
 if (mm_player_set_attribute(g_player,
@@ -1019,7 +1022,7 @@ if (mm_player_set_attribute(g_player,
                                                "display_overlay", (void*)&g_win.xid, sizeof(g_win.xid),
                                                NULL) != MM_ERROR_NONE)
 {
-       debug_error("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);
 }
 
@@ -1046,13 +1049,41 @@ int mm_player_create(MMHandleType *player);
  * @code
 if (mm_player_destroy(g_player) != MM_ERROR_NONE)
 {
-       debug_error("failed to destroy player\n");
+       LOGE("failed to destroy player\n");
 }
  * @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
  *
@@ -1068,7 +1099,7 @@ int mm_player_destroy(MMHandleType player);
  * @code
 if (mm_player_realize(g_player) != MM_ERROR_NONE)
 {
-       debug_error("failed to realize player\n");
+       LOGE("failed to realize player\n");
 }
  * @endcode
  */
@@ -1092,7 +1123,7 @@ int mm_player_realize(MMHandleType player) ;
  * @code
 if (mm_player_unrealize(g_player) != MM_ERROR_NONE)
 {
-       debug_error("failed to unrealize player\n");
+       LOGE("failed to unrealize player\n");
 }
  * @endcode
  */
@@ -1113,7 +1144,7 @@ int mm_player_unrealize(MMHandleType player);
  * @code
 if (mm_player_get_state(g_player, &state) != MM_ERROR_NONE)
 {
-       debug_error("failed to get state\n");
+       LOGE("failed to get state\n");
 }
  * @endcode
  */
@@ -1140,7 +1171,7 @@ for (i = 0; i < MM_VOLUME_CHANNEL_NUM; i++)
 
 if (mm_player_set_volume(g_player, &volume) != MM_ERROR_NONE)
 {
-    debug_error("failed to set volume\n");
+    LOGE("failed to set volume\n");
 }
  * @endcode
  */
@@ -1163,11 +1194,11 @@ int i;
 
 if (mm_player_get_volume(g_player, &volume) != MM_ERROR_NONE)
 {
-        debug_warning("failed to get volume\n");
+        LOGW("failed to get volume\n");
 }
 
 for (i = 0; i < MM_VOLUME_CHANNEL_NUM; i++)
-       debug_log("channel[%d] = %d \n", i, volume.level[i]);
+       LOGD("channel[%d] = %d \n", i, volume.level[i]);
  * @endcode
  */
 int mm_player_get_volume(MMHandleType player, MMPlayerVolumeType *volume);
@@ -1190,7 +1221,7 @@ int mm_player_get_volume(MMHandleType player, MMPlayerVolumeType *volume);
  * @code
 if (mm_player_start(g_player) != MM_ERROR_NONE)
 {
-       debug_error("failed to start player\n");
+       LOGE("failed to start player\n");
 }
  * @endcode
  */
@@ -1213,7 +1244,7 @@ int mm_player_start(MMHandleType player);
  * @code
 if (mm_player_stop(g_player) != MM_ERROR_NONE)
 {
-       debug_error("failed to stop player\n");
+       LOGE("failed to stop player\n");
 }
  * @endcode
  */
@@ -1234,7 +1265,7 @@ int mm_player_stop(MMHandleType player);
  * @code
 if (mm_player_pause(g_player) != MM_ERROR_NONE)
 {
-       debug_error("failed to pause player\n");
+       LOGE("failed to pause player\n");
 }
  * @endcode
  */
@@ -1255,7 +1286,7 @@ int mm_player_pause(MMHandleType player);
  * @code
 if (mm_player_resume(g_player) != MM_ERROR_NONE)
 {
-       debug_error("failed to resume player\n");
+       LOGE("failed to resume player\n");
 }
  * @endcode
  */
@@ -1278,7 +1309,7 @@ int position = 1000; //1sec
 
 if (mm_player_set_position(g_player, MM_PLAYER_POS_FORMAT_TIME, position) != MM_ERROR_NONE)
 {
-       debug_error("failed to set position\n");
+       LOGE("failed to set position\n");
 }
  * @endcode
  */
@@ -1303,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);
 
-debug_log("pos: [%d/%d] msec\n", position, duration);
+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.
@@ -1325,10 +1356,10 @@ int start_pos = 0, stop_pos = 0;
 
 mm_player_get_buffer_position(g_player, MM_PLAYER_POS_FORMAT_PERCENT, &start_pos, &stop_pos );
 
-debug_log("buffer position: [%d] ~ [%d] \%\n", start_pos, stop_pos );
+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
@@ -1366,7 +1397,7 @@ int mm_player_activate_section_repeat(MMHandleType player, int start_pos, int en
  * @code
 if ( mm_player_deactivate_section_repeat(g_player) != MM_ERROR_NONE)
 {
-       debug_warning("failed to deactivate section repeat\n");
+       LOGW("failed to deactivate section repeat\n");
 }
  * @endcode
  */
@@ -1435,7 +1466,7 @@ int mm_player_set_message_callback(MMHandleType player, MMMessageCallback callba
  * @code
 bool audio_callback(void *stream, int stream_size, void *user_param)
 {
-       debug_log("audio stream callback\n");
+       LOGD("audio stream callback\n");
        return TRUE;
 }
 mm_player_set_audio_stream_callback(g_player, audio_callback, NULL);
@@ -1456,7 +1487,7 @@ mm_player_set_audio_stream_callback(g_player, audio_callback, NULL);
  * @code
 if (mm_player_set_mute(g_player, TRUE) != MM_ERROR_NONE)
 {
-       debug_warning("failed to set mute\n");
+       LOGW("failed to set mute\n");
 }
  * @endcode
  */
@@ -1477,10 +1508,10 @@ int mute;
 
 if (mm_player_get_mute(g_player, &mute) != MM_ERROR_NONE)
 {
-       debug_warning("failed to get mute\n");
+       LOGW("failed to get mute\n");
 }
 
-debug_log("mute status:%d\n", mute);
+LOGD("mute status:%d\n", mute);
  * @endcode
  */
 int mm_player_get_mute(MMHandleType player, int *mute);
@@ -1503,7 +1534,7 @@ int pos;
 pos = 5000;
 if (mm_player_adjust_subtitle_position(g_player, MM_PLAYER_POS_FORMAT_TIME, pos) != MM_ERROR_NONE)
 {
-       debug_warning("failed to adjust subtitle postion.\n");
+       LOGW("failed to adjust subtitle postion.\n");
 }
  * @endcode
  */
@@ -1543,7 +1574,7 @@ mm_player_set_attribute(g_player,
 
 if (mm_player_set_subtitle_silent(g_player, TRUE) != MM_ERROR_NONE)
 {
-       debug_warning("failed to set subtitle silent\n");
+       LOGW("failed to set subtitle silent\n");
 }
  * @endcode
  */
@@ -1565,7 +1596,7 @@ int silent = FALSE;
 
 if (mm_player_get_subtitle_silent(g_player, &silent) != MM_ERROR_NONE)
 {
-       debug_warning("failed to set subtitle silent\n");
+       LOGW("failed to set subtitle silent\n");
 }
  * @endcode
  */
@@ -1596,7 +1627,7 @@ if (mm_player_set_attribute(g_player,
                                                "profile_play_count", count,
                                                NULL) != MM_ERROR_NONE)
 {
-       debug_warning("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);
 }
 
@@ -1624,7 +1655,7 @@ char *g_err_attr_name = NULL;
 
 if (mm_player_get_attribute(g_player, &g_err_attr_name, "content_duration", &duration, NULL) != MM_ERROR_NONE)
 {
-       debug_warning("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
@@ -1647,17 +1678,17 @@ int mm_player_get_attribute(MMHandleType player,  char **err_attr_name, const ch
  * @code
 if (mm_player_get_attribute_info (g_player, "display_method", &method_info) != MM_ERROR_NONE)
 {
-       debug_warning("failed to get info\n");
+       LOGW("failed to get info\n");
 }
 
-debug_log("type:%d \n", method_info.type); //int, double..
-debug_log("flag:%d \n", method_info.flag); //readable, writable..
-debug_log("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)
 {
-       debug_log("range min:%d\n", method_info.int_range.min);
-       debug_log("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
  */
@@ -1681,7 +1712,7 @@ guint64 total_size = 0LLU;
 
 if (mm_player_get_pd_status(g_player, &current_pos, &total_size, NULL) != MM_ERROR_NONE)
 {
-       debug_log("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
  */
@@ -1704,10 +1735,10 @@ int msg_callback(int message, MMMessageParamType *param, void *user_param)
        switch (message)
        {
                case MM_MESSAGE_PD_DOWNLOADER_START:
-                       debug_log("Progressive download is started...\n");
+                       LOGD("Progressive download is started...\n");
                        break;
                case MM_MESSAGE_PD_DOWNLOADER_END:
-                       debug_log("Progressive download is ended...\n");
+                       LOGD("Progressive download is ended...\n");
                        break;
                default:
                        break;
@@ -1738,10 +1769,10 @@ gint audio_count = 0;
 
 if (mm_player_get_track_count (g_player, MM_PLAYER_TRACK_TYPE_AUDIO, &audio_count) != MM_ERROR_NONE)
 {
-       debug_warning("failed to get audio track count\n");
+       LOGW("failed to get audio track count\n");
 }
 
-debug_log("audio track count : %d \n", audio_count);
+LOGD("audio track count : %d \n", audio_count);
  * @endcode
  */
 int mm_player_get_track_count(MMHandleType player,  MMPlayerTrackType type, int *count);
@@ -1850,7 +1881,7 @@ gint second = 10; //10sec
 
 if (mm_player_set_prepare_buffering_time(g_player, second) != MM_ERROR_NONE)
 {
-       debug_error("failed to set buffer size\n");
+       LOGE("failed to set buffer size\n");
 }
  * @endcode
  */
@@ -1871,7 +1902,7 @@ int mm_player_set_prepare_buffering_time(MMHandleType player, int second);
 
 if (mm_player_set_runtime_buffering_mode(g_player, MM_PLAYER_BUFFERING_MODE_ADAPTIVE, 10) != MM_ERROR_NONE)
 {
-       debug_error("failed to set buffering mode\n");
+       LOGE("failed to set buffering mode\n");
 }
  * @endcode
  */
@@ -1924,17 +1955,6 @@ int mm_player_get_display_zoom(MMHandleType player, float *level, int *x, int *y
 int mm_player_set_external_subtitle_path(MMHandleType player, const char* path);
 
 /**
- * This function is to change clock provider to system clock
- *
- * @param       player  [in]    handle of player
- * @return      This function returns zero on success, or negative value with error code.
- *
- * @see
- * @remark      None
- */
-int mm_player_use_system_clock(MMHandleType player);
-
-/**
  * This function is to set the clock which is from master player
  *
  * @param       player  [in]    handle of player
@@ -1962,17 +1982,6 @@ int mm_player_set_video_share_master_clock(MMHandleType player, long long clock,
  * @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 set audio channel
- *
- * @param       player         [in]    handle of player
- * @param       ch                     [in]    audio channel
- * @return      This function returns zero on success, or negative value with error code.
- *
- * @see
- * @remark      None
- */
-int mm_player_gst_set_audio_channel(MMHandleType player, MMPlayerAudioChannel ch);
 
 /**
  * This function is to get the content angle
@@ -2046,8 +2055,6 @@ int mm_player_set_next_uri(MMHandleType player, const char *uri);
  */
 int mm_player_get_next_uri(MMHandleType player, char **uri);
 
-int mm_player_enable_media_packet_video_stream(MMHandleType player, bool enable);
-
 /**
  * This function is to increase reference count of internal buffer.
  *
@@ -2093,7 +2100,6 @@ int mm_player_submit_packet(MMHandleType player, media_packet_h packet);
  *
  * @endcode
  */
-
 int mm_player_set_video_info (MMHandleType player, media_format_h format);
 
 /**mm_player_set_audio_info
@@ -2105,7 +2111,6 @@ int mm_player_set_video_info (MMHandleType player, media_format_h format);
  *
  * @endcode
  */
-
 int mm_player_set_audio_info (MMHandleType player, media_format_h format);
 
 /**mm_player_set_subtitle_info
@@ -2117,7 +2122,6 @@ int mm_player_set_audio_info (MMHandleType player, media_format_h format);
  *
  * @endcode
  */
-
 int mm_player_set_subtitle_info (MMHandleType player, MMPlayerSubtitleStreamInfo *info);
 
 /**
@@ -2243,6 +2247,94 @@ int mm_player_set_audio_stream_changed_callback(MMHandleType player, mm_player_s
 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);
+
+/**
        @}
  */