static gboolean __mmplayer_check_subtitle(mmplayer_t *player);
static int __mmplayer_handle_missed_plugin(mmplayer_t *player);
static int __mmplayer_check_not_supported_codec(mmplayer_t *player, const gchar *factory_class, const gchar *mime);
-static void __mmplayer_add_sink(mmplayer_t *player, GstElement *sink);
+static void __mmplayer_add_sink(mmplayer_t *player, GstElement *sink, gboolean first);
static void __mmplayer_del_sink(mmplayer_t *player, GstElement *sink);
static void __mmplayer_release_signal_connection(mmplayer_t *player, mmplayer_signal_type_e type);
static gpointer __mmplayer_gapless_play_thread(gpointer data);
}
/* store it as it's sink element */
- __mmplayer_add_sink(player, fakesink);
+ __mmplayer_add_sink(player, fakesink, FALSE);
gst_bin_add(GST_BIN(pipeline), fakesink);
G_CALLBACK(__mmplayer_audio_stream_decoded_render_cb),
(gpointer)player);
- __mmplayer_add_sink(player, sink);
+ __mmplayer_add_sink(player, sink, FALSE);
if (gst_element_sync_state_with_parent(queue) == GST_STATE_CHANGE_FAILURE) {
LOGE("failed to sync state");
"notify::caps", G_CALLBACK(__mmplayer_gst_caps_notify_cb), (gpointer)player);
gst_object_unref(GST_OBJECT(sink_pad));
- __mmplayer_add_sink(player, audiobin[MMPLAYER_A_SINK].gst);
+ __mmplayer_add_sink(player, audiobin[MMPLAYER_A_SINK].gst, FALSE);
MMPLAYER_FLEAVE();
return MM_ERROR_NONE;
G_CALLBACK(__mmplayer_audio_stream_decoded_render_cb),
(gpointer)player);
- __mmplayer_add_sink(player, audiobin[extract_sink_id].gst);
+ __mmplayer_add_sink(player, audiobin[extract_sink_id].gst, FALSE);
}
MMPLAYER_FLEAVE();
g_object_set(G_OBJECT(audiobin[MMPLAYER_A_SINK].gst), "sync", TRUE,
"volume", player->sound.volume, "mute", player->sound.mute, NULL);
- __mmplayer_add_sink(player, audiobin[MMPLAYER_A_SINK].gst);
+ __mmplayer_add_sink(player, audiobin[MMPLAYER_A_SINK].gst, FALSE);
goto DONE;
}
}
/* store it as it's sink element */
- __mmplayer_add_sink(player, videobin[MMPLAYER_V_SINK].gst);
+ __mmplayer_add_sink(player, videobin[MMPLAYER_V_SINK].gst, TRUE);
/* adding created elements to bin */
if (!_mmplayer_gst_element_add_bucket_to_bin(GST_BIN(videobin[MMPLAYER_V_BIN].gst), element_bucket)) {
if (!player->play_subtitle) {
LOGD("add textbin sink as sink element of whole pipeline.");
- __mmplayer_add_sink(player, GST_ELEMENT(textbin[MMPLAYER_T_FAKE_SINK].gst));
+ __mmplayer_add_sink(player, GST_ELEMENT(textbin[MMPLAYER_T_FAKE_SINK].gst), FALSE);
}
/* adding created elements to bin */
}
static void
-__mmplayer_add_sink(mmplayer_t *player, GstElement *sink)
+__mmplayer_add_sink(mmplayer_t *player, GstElement *sink, gboolean first)
{
MMPLAYER_FENTER();
MMPLAYER_RETURN_IF_FAIL(player);
MMPLAYER_RETURN_IF_FAIL(sink);
- player->sink_elements = g_list_append(player->sink_elements, sink);
+ if (first)
+ player->sink_elements = g_list_prepend(player->sink_elements, sink);
+ else
+ player->sink_elements = g_list_append(player->sink_elements, sink);
MMPLAYER_FLEAVE();
}