summaryrefslogtreecommitdiff
path: root/src/mm_player_priv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm_player_priv.c')
-rw-r--r--src/mm_player_priv.c30
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");