summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEunhae Choi <eunhae1.choi@samsung.com>2016-01-07 15:17:48 +0900
committerEunhae Choi <eunhae1.choi@samsung.com>2016-01-07 15:17:52 +0900
commit4009e3e2087bc51649bb7d5247dad6bb20f6609d (patch)
tree54490f9f260b668e1db1f87f80b6ca181ea0606f
parentfd2ee9750d05f29b51087dd08bc5c27206ec964d (diff)
downloadlibmm-player-4009e3e2087bc51649bb7d5247dad6bb20f6609d.tar.gz
libmm-player-4009e3e2087bc51649bb7d5247dad6bb20f6609d.tar.bz2
libmm-player-4009e3e2087bc51649bb7d5247dad6bb20f6609d.zip
add current level byte info when invoke the buffer status cb
which is related to the 'need-data', 'enough-data' signal of appsrc element. Change-Id: I14ef23007c2d713c44bd41e6410e9b040179b4da
-rw-r--r--src/include/mm_player.h2
-rw-r--r--src/server/mm_player_priv.c42
2 files changed, 33 insertions, 11 deletions
diff --git a/src/include/mm_player.h b/src/include/mm_player.h
index b799767..63f5ba7 100644
--- a/src/include/mm_player.h
+++ b/src/include/mm_player.h
@@ -961,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.
diff --git a/src/server/mm_player_priv.c b/src/server/mm_player_priv.c
index 8dc5e2d..a72c36d 100644
--- a/src/server/mm_player_priv.c
+++ b/src/server/mm_player_priv.c
@@ -6392,13 +6392,14 @@ __gst_appsrc_feed_data(GstElement *element, guint size, gpointer user_data) // @
{
mm_player_t *player = (mm_player_t*)user_data;
MMPlayerStreamType type = MM_PLAYER_STREAM_TYPE_DEFAULT;
-
+ guint64 current_level_bytes=0;
MMPLAYER_RETURN_IF_FAIL ( player );
LOGI("app-src: feed data\n");
+ g_object_get(G_OBJECT(element), "current-level-bytes", &current_level_bytes, NULL);
if (player->media_stream_buffer_status_cb[type])
- player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN, player->buffer_cb_user_param);
+ player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN, current_level_bytes, player->buffer_cb_user_param);
}
static gboolean
@@ -6423,13 +6424,16 @@ __gst_appsrc_enough_data(GstElement *element, gpointer user_data) // @
{
mm_player_t *player = (mm_player_t*)user_data;
MMPlayerStreamType type = MM_PLAYER_STREAM_TYPE_DEFAULT;
+ guint64 current_level_bytes=0;
MMPLAYER_RETURN_VAL_IF_FAIL ( player, FALSE );
LOGI("app-src: enough data:%p\n", player->media_stream_buffer_status_cb[type]);
+ g_object_get(G_OBJECT(element), "current-level-bytes", &current_level_bytes, NULL);
+
if (player->media_stream_buffer_status_cb[type])
- player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_OVERFLOW, player->buffer_cb_user_param);
+ player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_OVERFLOW, current_level_bytes, player->buffer_cb_user_param);
return TRUE;
}
@@ -7184,6 +7188,7 @@ __mmplayer_gst_create_pipeline(mm_player_t* player) // @
LOGE ("create es_video_queue for es player failed\n");
goto INIT_ERROR;
}
+ g_object_set(G_OBJECT(es_video_queue), "max-size-buffers", 2, NULL);
mainbin[MMPLAYER_M_V_BUFFER].id = MMPLAYER_M_V_BUFFER;
mainbin[MMPLAYER_M_V_BUFFER].gst = es_video_queue;
element_bucket = g_list_append(element_bucket, &mainbin[MMPLAYER_M_V_BUFFER]);
@@ -7201,6 +7206,8 @@ __mmplayer_gst_create_pipeline(mm_player_t* player) // @
LOGE ("create es_audio_queue for es player failed\n");
goto INIT_ERROR;
}
+ g_object_set(G_OBJECT(es_audio_queue), "max-size-buffers", 2, NULL);
+
mainbin[MMPLAYER_M_A_BUFFER].id = MMPLAYER_M_A_BUFFER;
mainbin[MMPLAYER_M_A_BUFFER].gst = es_audio_queue;
element_bucket = g_list_append(element_bucket, &mainbin[MMPLAYER_M_A_BUFFER]);
@@ -16352,14 +16359,17 @@ __gst_appsrc_feed_audio_data(GstElement *element, guint size, gpointer user_data
{
mm_player_t *player = (mm_player_t*)user_data;
MMPlayerStreamType type = MM_PLAYER_STREAM_TYPE_AUDIO;
+ guint64 current_level_bytes=0;
MMPLAYER_RETURN_IF_FAIL ( player );
- LOGI("app-src: feed audio\n");
+ g_object_get(G_OBJECT(element), "current-level-bytes", &current_level_bytes, NULL);
+
+ LOGI("app-src: feed audio (%llu)\n", current_level_bytes);
if (player->media_stream_buffer_status_cb[type])
{
- player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN, player->buffer_cb_user_param);
+ player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN, current_level_bytes, player->buffer_cb_user_param);
}
}
@@ -16368,14 +16378,17 @@ __gst_appsrc_feed_video_data(GstElement *element, guint size, gpointer user_data
{
mm_player_t *player = (mm_player_t*)user_data;
MMPlayerStreamType type = MM_PLAYER_STREAM_TYPE_VIDEO;
+ guint64 current_level_bytes=0;
MMPLAYER_RETURN_IF_FAIL ( player );
- LOGI("app-src: feed video\n");
+ g_object_get(G_OBJECT(element), "current-level-bytes", &current_level_bytes, NULL);
+
+ LOGI("app-src: feed video (%llu)\n", current_level_bytes);
if (player->media_stream_buffer_status_cb[type])
{
- player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN, player->buffer_cb_user_param);
+ player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN, current_level_bytes, player->buffer_cb_user_param);
}
}
@@ -16384,14 +16397,17 @@ __gst_appsrc_feed_subtitle_data(GstElement *element, guint size, gpointer user_d
{
mm_player_t *player = (mm_player_t*)user_data;
MMPlayerStreamType type = MM_PLAYER_STREAM_TYPE_TEXT;
+ guint64 current_level_bytes=0;
MMPLAYER_RETURN_IF_FAIL ( player );
LOGI("app-src: feed subtitle\n");
+ g_object_get(G_OBJECT(element), "current-level-bytes", &current_level_bytes, NULL);
+
if (player->media_stream_buffer_status_cb[type])
{
- player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN, player->buffer_cb_user_param);
+ player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN, current_level_bytes, player->buffer_cb_user_param);
}
}
@@ -16400,14 +16416,17 @@ __gst_appsrc_enough_audio_data(GstElement *element, gpointer user_data)
{
mm_player_t *player = (mm_player_t*)user_data;
MMPlayerStreamType type = MM_PLAYER_STREAM_TYPE_AUDIO;
+ guint64 current_level_bytes=0;
MMPLAYER_RETURN_IF_FAIL ( player );
LOGI("app-src: audio buffer is full.\n");
+ g_object_get(G_OBJECT(element), "current-level-bytes", &current_level_bytes, NULL);
+
if (player->media_stream_buffer_status_cb[type])
{
- player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_OVERFLOW, player->buffer_cb_user_param);
+ player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_OVERFLOW, current_level_bytes, player->buffer_cb_user_param);
}
}
@@ -16416,14 +16435,17 @@ __gst_appsrc_enough_video_data(GstElement *element, gpointer user_data)
{
mm_player_t *player = (mm_player_t*)user_data;
MMPlayerStreamType type = MM_PLAYER_STREAM_TYPE_VIDEO;
+ guint64 current_level_bytes=0;
MMPLAYER_RETURN_IF_FAIL ( player );
LOGI("app-src: video buffer is full.\n");
+ g_object_get(G_OBJECT(element), "current-level-bytes", &current_level_bytes, NULL);
+
if (player->media_stream_buffer_status_cb[type])
{
- player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_OVERFLOW, player->buffer_cb_user_param);
+ player->media_stream_buffer_status_cb[type](type, MM_PLAYER_MEDIA_STREAM_BUFFER_OVERFLOW, current_level_bytes, player->buffer_cb_user_param);
}
}