diff options
Diffstat (limited to 'src/mm_player_priv.c')
-rw-r--r-- | src/mm_player_priv.c | 30 |
1 files changed, 28 insertions, 2 deletions
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"); |