[0.6.227] Inserts a video sink in the first of the sink element list
[platform/core/multimedia/libmm-player.git] / src / mm_player_priv.c
index 1f13b38..7b555c1 100644 (file)
@@ -157,7 +157,7 @@ static int __mmplayer_change_selector_pad(mmplayer_t *player, mmplayer_track_typ
 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);
@@ -1111,7 +1111,7 @@ __mmplayer_gst_make_fakesink(mmplayer_t *player, GstPad *pad, const gchar *name)
        }
 
        /* 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);
 
@@ -2529,7 +2529,7 @@ __mmplayer_gst_audio_deinterleave_pad_added(GstElement *elem, GstPad *pad, gpoin
                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");
@@ -2833,7 +2833,7 @@ __mmplayer_gst_make_audio_playback_sink(mmplayer_t *player, GList **bucket)
                                "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;
@@ -2989,7 +2989,7 @@ __mmplayer_gst_make_audio_extract_sink(mmplayer_t *player, GList **bucket)
                        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();
@@ -3020,7 +3020,7 @@ __mmplayer_gst_make_audio_bin_element(mmplayer_t *player, GList **bucket)
                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;
        }
 
@@ -3652,7 +3652,7 @@ __mmplayer_gst_create_video_sink_bin(mmplayer_t *player, GstCaps *caps, MMDispla
        }
 
        /* 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)) {
@@ -3736,7 +3736,7 @@ __mmplayer_gst_create_plain_text_elements(mmplayer_t *player)
 
        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 */
@@ -7879,14 +7879,17 @@ _mmplayer_cancel_eos_timer(mmplayer_t *player)
 }
 
 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();
 }