From: Eunhye Choi Date: Thu, 29 Oct 2020 07:23:50 +0000 (+0900) Subject: [0.6.247] resolve deadlock during abort_pause X-Git-Tag: submit/tizen/20201104.065942^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4b3e701679e27ed132e64cd815d23f9ee28ced8d;p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git [0.6.247] resolve deadlock during abort_pause - set the sinkbin state manually to avoid deadlock - deadlock could be occurred when player set ready state to pipeline just before linking sinkbin Change-Id: I17eb142ea70e85c40da7454b2f2d20f910ee4151 --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index b98dc12..306e541 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.246 +Version: 0.6.247 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index b3fadf0..395e0f5 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -3013,7 +3013,7 @@ __mmplayer_gst_make_audio_extract_sink(mmplayer_t *player, GList **bucket) MM_PLAYER_SIGNAL_TYPE_AUTOPLUG, "no-more-pads", G_CALLBACK(__mmplayer_gst_audio_deinterleave_no_more_pads), (gpointer)player); player->no_more_pad = FALSE; } else { - /* 4-2. create fakesink to extract interlevaed pcm */ + /* 4-2. create fakesink to extract interleaved pcm */ LOGD("add audio fakesink for interleaved audio"); MMPLAYER_CREATE_ELEMENT(audiobin, extract_sink_id, "fakesink", "fakeaudiosink", *bucket, player); if (!(player->audio_extract_opt & MM_PLAYER_AUDIO_EXTRACT_NO_SYNC_WITH_CLOCK)) @@ -5674,11 +5674,24 @@ _mmplayer_abort_pause(MMHandleType hplayer) player->pipeline->mainbin, MM_ERROR_PLAYER_NOT_INITIALIZED); - LOGD("set the pipeline state to READY"); + if (player->pipeline->videobin && player->pipeline->videobin[MMPLAYER_V_BIN].gst) { + LOGD("set the videobin state to READY"); + ret = _mmplayer_gst_set_state(player, player->pipeline->videobin[MMPLAYER_V_BIN].gst, + GST_STATE_READY, TRUE, MMPLAYER_STATE_CHANGE_TIMEOUT(player)); + + } + + if (player->pipeline->audiobin && player->pipeline->audiobin[MMPLAYER_A_BIN].gst) { + LOGD("set the audiobin state to READY"); + ret = _mmplayer_gst_set_state(player, player->pipeline->audiobin[MMPLAYER_A_BIN].gst, + GST_STATE_READY, TRUE, MMPLAYER_STATE_CHANGE_TIMEOUT(player)); - /* set state to READY */ + } + + LOGD("set the pipeline state to READY"); ret = _mmplayer_gst_set_state(player, player->pipeline->mainbin[MMPLAYER_M_PIPE].gst, GST_STATE_READY, FALSE, MMPLAYER_STATE_CHANGE_TIMEOUT(player)); + if (ret != MM_ERROR_NONE) { LOGE("fail to change state to READY"); return MM_ERROR_PLAYER_INTERNAL;