From 4f8f5918be3a72ed627dd37939aa1fa26735fd73 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 18 Jan 2014 13:31:06 +0100 Subject: [PATCH] playbin: Insert decoders without GstAVElement information between the other decoders Otherwise they would be preferred over all decoders independent of their ranks. https://bugzilla.gnome.org/show_bug.cgi?id=722316 --- gst/playback/gstplaybin2.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c index 9233a4a..e4fe497 100644 --- a/gst/playback/gstplaybin2.c +++ b/gst/playback/gstplaybin2.c @@ -3824,6 +3824,7 @@ create_decoders_list (GList * factory_list, GSequence * avelements) { GList *dec_list = NULL, *tmp; GList *ave_list = NULL; + GList *ave_free_list = NULL; GstAVElement *ave, *best_ave; g_return_val_if_fail (factory_list != NULL, NULL); @@ -3852,7 +3853,10 @@ create_decoders_list (GList * factory_list, GSequence * avelements) /* There's at least raw */ ave->n_comm_cf = 1; - dec_list = g_list_prepend (dec_list, factory); + ave_list = g_list_prepend (ave_list, ave); + + /* We need to free these later */ + ave_free_list = g_list_prepend (ave_free_list, ave); continue; } @@ -3890,6 +3894,10 @@ create_decoders_list (GList * factory_list, GSequence * avelements) } g_list_free (ave_list); + for (tmp = ave_free_list; tmp; tmp = tmp->next) + g_slice_free (GstAVElement, tmp->data); + g_list_free (ave_free_list); + dec_list = g_list_reverse (dec_list); return dec_list; -- 2.7.4