summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEunhae Choi <eunhae1.choi@samsung.com>2017-11-23 10:30:23 +0900
committerEunhae Choi <eunhae1.choi@samsung.com>2017-11-23 10:30:23 +0900
commit0d16606a02d304db23fb0cc2385eb4ba4a2e33a6 (patch)
treedac844383d5b2f17ba9234018571c96f5eeaa1de
parentc44aed4b9a6daa66a985c9d1c8fc545040a4d671 (diff)
downloadlibmm-player-0d16606a02d304db23fb0cc2385eb4ba4a2e33a6.tar.gz
libmm-player-0d16606a02d304db23fb0cc2385eb4ba4a2e33a6.tar.bz2
libmm-player-0d16606a02d304db23fb0cc2385eb4ba4a2e33a6.zip
Change-Id: Id03363569c9aebe4585bc7a5d12d0cdf564d7d65
-rw-r--r--packaging/libmm-player.spec2
-rw-r--r--src/mm_player.c5
-rw-r--r--src/mm_player_priv.c37
3 files changed, 30 insertions, 14 deletions
diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec
index 6bbd957..eaa2844 100644
--- a/packaging/libmm-player.spec
+++ b/packaging/libmm-player.spec
@@ -1,6 +1,6 @@
Name: libmm-player
Summary: Multimedia Framework Player Library
-Version: 0.6.62
+Version: 0.6.63
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0
diff --git a/src/mm_player.c b/src/mm_player.c
index dcac88c..b420446 100644
--- a/src/mm_player.c
+++ b/src/mm_player.c
@@ -112,6 +112,11 @@ int mm_player_destroy(MMHandleType player)
result = _mmplayer_destroy(player);
+ MMPLAYER_CMD_UNLOCK(player);
+
+ /* to make sure unlocked.
+ @see __mmplayer_gst_callback, GST_MESSAGE_BUFFERING handling */
+ MMPLAYER_CMD_LOCK(player);
MMPLAYER_CMD_UNLOCK( player );
g_mutex_clear(&((mm_player_t*)player)->cmd_lock);
diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c
index bc1db16..fc52174 100644
--- a/src/mm_player_priv.c
+++ b/src/mm_player_priv.c
@@ -1282,22 +1282,13 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) // @
MMMessageParamType msg_param = {0, };
int bRet = MM_ERROR_NONE;
- if (!MMPLAYER_IS_STREAMING(player))
+ if (!(player->pipeline && player->pipeline->mainbin)) {
+ LOGE("player pipeline handle is null");
break;
+ }
- /* ignore the prev buffering message */
- if ((player->streamer) && (player->streamer->is_buffering == FALSE) && (player->streamer->is_buffering_done == TRUE)) {
- gint buffer_percent = 0;
-
- gst_message_parse_buffering(msg, &buffer_percent);
-
- if (buffer_percent == MAX_BUFFER_PERCENT) {
- LOGD("Ignored all the previous buffering msg!(got %d%%)\n", buffer_percent);
- player->streamer->is_buffering_done = FALSE;
- }
-
+ if (!MMPLAYER_IS_STREAMING(player))
break;
- }
if (player->pd_mode == MM_PLAYER_PD_MODE_URI) {
if (!MMPLAYER_CMD_TRYLOCK(player)) {
@@ -1314,6 +1305,26 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) // @
}
} else {
MMPLAYER_CMD_LOCK(player);
+ if (!player->pipeline) { /* during destroy, msg can be delivered. */
+ LOGE("pipeline is destroyed.");
+ MMPLAYER_CMD_UNLOCK(player);
+ break;
+ }
+ }
+
+ /* ignore the prev buffering message */
+ if ((player->streamer) && (player->streamer->is_buffering == FALSE)
+ && (player->streamer->is_buffering_done == TRUE)) {
+ gint buffer_percent = 0;
+
+ gst_message_parse_buffering(msg, &buffer_percent);
+
+ if (buffer_percent == MAX_BUFFER_PERCENT) {
+ LOGD("Ignored all the previous buffering msg!(got %d%%)\n", buffer_percent);
+ player->streamer->is_buffering_done = FALSE;
+ }
+ MMPLAYER_CMD_UNLOCK(player);
+ break;
}
__mmplayer_update_buffer_setting(player, msg);