*/
#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 {
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,
*
* @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.
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,
"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);
}
* @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
*
* @code
if (mm_player_realize(g_player) != MM_ERROR_NONE)
{
- debug_error("failed to realize player\n");
+ LOGE("failed to realize player\n");
}
* @endcode
*/
* @code
if (mm_player_unrealize(g_player) != MM_ERROR_NONE)
{
- debug_error("failed to unrealize player\n");
+ LOGE("failed to unrealize player\n");
}
* @endcode
*/
* @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
*/
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
*/
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);
* @code
if (mm_player_start(g_player) != MM_ERROR_NONE)
{
- debug_error("failed to start player\n");
+ LOGE("failed to start player\n");
}
* @endcode
*/
* @code
if (mm_player_stop(g_player) != MM_ERROR_NONE)
{
- debug_error("failed to stop player\n");
+ LOGE("failed to stop player\n");
}
* @endcode
*/
* @code
if (mm_player_pause(g_player) != MM_ERROR_NONE)
{
- debug_error("failed to pause player\n");
+ LOGE("failed to pause player\n");
}
* @endcode
*/
* @code
if (mm_player_resume(g_player) != MM_ERROR_NONE)
{
- debug_error("failed to resume player\n");
+ LOGE("failed to resume player\n");
}
* @endcode
*/
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
*/
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.
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
* @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
*/
* @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);
* @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
*/
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);
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
*/
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
*/
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
*/
"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);
}
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
* @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
*/
if (mm_player_get_pd_status(g_player, ¤t_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
*/
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;
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);
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
*/
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
*/
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
* @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
*/
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.
*
*
* @endcode
*/
-
int mm_player_set_video_info (MMHandleType player, media_format_h format);
/**mm_player_set_audio_info
*
* @endcode
*/
-
int mm_player_set_audio_info (MMHandleType player, media_format_h format);
/**mm_player_set_subtitle_info
*
* @endcode
*/
-
int mm_player_set_subtitle_info (MMHandleType player, MMPlayerSubtitleStreamInfo *info);
/**
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);
+
+/**
@}
*/