}
/* 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");
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),
__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;
}
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
/* 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");