diff options
author | Eunhye Choi <eunhae1.choi@samsung.com> | 2019-07-08 20:20:16 +0900 |
---|---|---|
committer | Eunhye Choi <eunhae1.choi@samsung.com> | 2019-07-08 20:20:16 +0900 |
commit | cc16a2341a41f2501816181b051e825e29e71a25 (patch) | |
tree | 9bbcff8588f11cf8d692ebbcfe66f67681b43b0f | |
parent | ff53f76df65f38bf53e3b3cd8929d6a7e5a94210 (diff) | |
download | libmm-player-cc16a2341a41f2501816181b051e825e29e71a25.tar.gz libmm-player-cc16a2341a41f2501816181b051e825e29e71a25.tar.bz2 libmm-player-cc16a2341a41f2501816181b051e825e29e71a25.zip |
[0.6.198] Add state-holder in case of using deinterleave
Change-Id: I29f7da2084a93cfc03f1c3008b5628ee598a84e5
-rw-r--r-- | packaging/libmm-player.spec | 2 | ||||
-rw-r--r-- | src/mm_player_gst.c | 3 | ||||
-rw-r--r-- | src/mm_player_priv.c | 30 |
3 files changed, 31 insertions, 4 deletions
diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 82c0f92..bc0cc88 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.197 +Version: 0.6.198 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player_gst.c b/src/mm_player_gst.c index 205c1cf..03411a7 100644 --- a/src/mm_player_gst.c +++ b/src/mm_player_gst.c @@ -3897,7 +3897,8 @@ _mmplayer_gst_build_pipeline(mmplayer_t *player) } /* FIXME: need to check whether this is required or not. */ - if (MMPLAYER_IS_HTTP_STREAMING(player) || MMPLAYER_IS_RTSP_STREAMING(player)) { + if (MMPLAYER_IS_HTTP_STREAMING(player) || MMPLAYER_IS_RTSP_STREAMING(player) || + (player->audio_extract_opt & MM_PLAYER_AUDIO_EXTRACT_DEINTERLEAVE)) { /* create fakesink element for keeping the pipeline state PAUSED. if needed */ mainbin[MMPLAYER_M_SRC_FAKESINK].id = MMPLAYER_M_SRC_FAKESINK; mainbin[MMPLAYER_M_SRC_FAKESINK].gst = gst_element_factory_make("fakesink", "state-holder"); diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index bee6733..bc00417 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -2523,8 +2523,6 @@ __mmplayer_gst_audio_deinterleave_pad_added(GstElement *elem, GstPad *pad, gpoin audiobin[MMPLAYER_A_SINK].gst = sink; } - gst_element_set_state(sink, GST_STATE_PAUSED); - gst_element_set_state(queue, GST_STATE_PAUSED); _mmplayer_add_signal_connection(player, G_OBJECT(sink), @@ -2535,6 +2533,16 @@ __mmplayer_gst_audio_deinterleave_pad_added(GstElement *elem, GstPad *pad, gpoin __mmplayer_add_sink(player, sink); + if (gst_element_sync_state_with_parent(queue) == GST_STATE_CHANGE_FAILURE) { + LOGE("failed to sync state"); + goto ERROR; + } + + if (gst_element_sync_state_with_parent(sink) == GST_STATE_CHANGE_FAILURE) { + LOGE("failed to sync state"); + goto ERROR; + } + MMPLAYER_FLEAVE(); return; @@ -2557,6 +2565,21 @@ ERROR: } void +__mmplayer_gst_audio_deinterleave_no_more_pads(GstElement* object, gpointer data) +{ + mmplayer_t *player = (mmplayer_t *)data; + + MMPLAYER_FENTER(); + MMPLAYER_RETURN_IF_FAIL(player && player->pipeline && player->pipeline->mainbin); + + player->no_more_pad = TRUE; + __mmplayer_pipeline_complete(NULL, player); + + MMPLAYER_FLEAVE(); + return; +} + +void __mmplayer_gst_set_pulsesink_property(mmplayer_t *player) { #define MAX_PROPS_LEN 128 @@ -2937,6 +2960,9 @@ __mmplayer_gst_make_audio_extract_sink(mmplayer_t *player, GList **bucket) /* audiosink will be added after getting signal for each channel */ _mmplayer_add_signal_connection(player, G_OBJECT(audiobin[MMPLAYER_A_EXTRACT_DEINTERLEAVE].gst), MM_PLAYER_SIGNAL_TYPE_AUTOPLUG, "pad-added", G_CALLBACK(__mmplayer_gst_audio_deinterleave_pad_added), (gpointer)player); + _mmplayer_add_signal_connection(player, G_OBJECT(audiobin[MMPLAYER_A_EXTRACT_DEINTERLEAVE].gst), + 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 */ LOGD("add audio fakesink for interleaved audio"); |