rpms/gstreamer-plugins-base/devel gstpb-fix-missing-plugins.patch, NONE, 1.1 gstpb-no-subtitle-errors.patch, NONE, 1.1 gstreamer-plugins-base.spec, 1.92, 1.93

Bastien Nocera hadess at fedoraproject.org
Tue Oct 13 15:32:49 UTC 2009


Author: hadess

Update of /cvs/pkgs/rpms/gstreamer-plugins-base/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv3303

Modified Files:
	gstreamer-plugins-base.spec 
Added Files:
	gstpb-fix-missing-plugins.patch gstpb-no-subtitle-errors.patch 
Log Message:
* Tue Oct 13 2009 Bastien Nocera <bnocera at redhat.com> 0.10.25-2
- Add patches to fix some playbin2 bugs (#518880)


gstpb-fix-missing-plugins.patch:
 b/gst/playback/gstdecodebin2.c   |   13 
 b/gst/playback/gstfactorylists.c |   10 
 b/gst/playback/gsturidecodebin.c |    7 
 gst/playback/gstdecodebin2.c     | 1851 ++++++++++++++++++++-------------------
 4 files changed, 997 insertions(+), 884 deletions(-)

--- NEW FILE gstpb-fix-missing-plugins.patch ---
>From 881e4aa606ac184e4da485a88066ff30e88fc5cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian.droege at collabora.co.uk>
Date: Sat, 26 Sep 2009 12:04:55 +0200
Subject: [PATCH 1/7] decodebin2: Only use the object lock for protecting the subtitle elements

Using the decodebin lock will result in deadlocks if the subtitle encoding
is accessed from a pad-added handler.
---
 gst/playback/gstdecodebin2.c |   12 +++++-------
 1 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c
index 3b60ae9..1ad7968 100644
--- a/gst/playback/gstdecodebin2.c
+++ b/gst/playback/gstdecodebin2.c
@@ -857,18 +857,16 @@ gst_decode_bin_set_subs_encoding (GstDecodeBin * dbin, const gchar * encoding)
 
   GST_DEBUG_OBJECT (dbin, "Setting new encoding: %s", GST_STR_NULL (encoding));
 
-  DECODE_BIN_LOCK (dbin);
   GST_OBJECT_LOCK (dbin);
   g_free (dbin->encoding);
   dbin->encoding = g_strdup (encoding);
-  GST_OBJECT_UNLOCK (dbin);
 
   /* set the subtitle encoding on all added elements */
   for (walk = dbin->subtitles; walk; walk = g_list_next (walk)) {
     g_object_set (G_OBJECT (walk->data), "subtitle-encoding", dbin->encoding,
         NULL);
   }
-  DECODE_BIN_UNLOCK (dbin);
+  GST_OBJECT_UNLOCK (dbin);
 }
 
 static gchar *
@@ -1319,11 +1317,11 @@ connect_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad,
       continue;
     }
     if (subtitle) {
-      DECODE_BIN_LOCK (dbin);
+      GST_OBJECT_LOCK (dbin);
       /* we added the element now, add it to the list of subtitle-encoding
        * elements when we can set the property */
       dbin->subtitles = g_list_prepend (dbin->subtitles, element);
-      DECODE_BIN_UNLOCK (dbin);
+      GST_OBJECT_UNLOCK (dbin);
     }
 
     res = TRUE;
@@ -2364,10 +2362,10 @@ restart:
 
 done:
   gst_element_set_state (element, GST_STATE_NULL);
-  DECODE_BIN_LOCK (dbin);
+  GST_OBJECT_LOCK (dbin);
   /* remove possible subtitle element */
   dbin->subtitles = g_list_remove (dbin->subtitles, element);
-  DECODE_BIN_UNLOCK (dbin);
+  GST_OBJECT_UNLOCK (dbin);
   gst_bin_remove (GST_BIN (dbin), element);
 
 beach:
-- 
1.6.4.3

>From a7fe6e683ae91caa9445d899964553a2610fba17 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian.droege at collabora.co.uk>
Date: Sat, 26 Sep 2009 12:10:21 +0200
Subject: [PATCH 2/7] decodebin2: Don't set the external ghostpads blocked but only their targets

Pad blocks should never be done on external pads as outside elements
might want to use their own pad blocks on them and this will lead to
conflicts and deadlocks.
---
 gst/playback/gstdecodebin2.c |   23 ++++++++++++++++++-----
 1 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c
index 1ad7968..24e251b 100644
--- a/gst/playback/gstdecodebin2.c
+++ b/gst/playback/gstdecodebin2.c
@@ -2484,7 +2484,7 @@ gst_decode_pad_init (GstDecodePad * pad)
 }
 
 static void
-source_pad_blocked_cb (GstDecodePad * dpad, gboolean blocked, gpointer unused)
+source_pad_blocked_cb (GstPad * opad, gboolean blocked, GstDecodePad * dpad)
 {
   GstDecodeGroup *group;
   GstDecodeBin *dbin;
@@ -2531,10 +2531,16 @@ static void
 gst_decode_pad_set_blocked (GstDecodePad * dpad, gboolean blocked)
 {
   GstDecodeBin *dbin = dpad->dbin;
+  GstPad *opad;
 
   DECODE_BIN_DYN_LOCK (dbin);
-  gst_pad_set_blocked_async (GST_PAD (dpad), blocked,
-      (GstPadBlockCallback) source_pad_blocked_cb, NULL);
+  opad = gst_ghost_pad_get_target (GST_GHOST_PAD_CAST (dpad));
+  if (!opad)
+    goto out;
+
+  gst_pad_set_blocked_async_full (opad, blocked,
+      (GstPadBlockCallback) source_pad_blocked_cb, gst_object_ref (dpad),
+      (GDestroyNotify) gst_object_unref);
   if (blocked) {
     if (dbin->shutdown) {
       /* deactivate to force flushing state to prevent NOT_LINKED errors */
@@ -2548,6 +2554,8 @@ gst_decode_pad_set_blocked (GstDecodePad * dpad, gboolean blocked)
       gst_object_unref (dpad);
     dbin->blocked_pads = g_list_remove (dbin->blocked_pads, dpad);
   }
+  gst_object_unref (opad);
+out:
   DECODE_BIN_DYN_UNLOCK (dbin);
 }
 
@@ -2659,15 +2667,20 @@ unblock_pads (GstDecodeBin * dbin)
 
   for (tmp = dbin->blocked_pads; tmp; tmp = next) {
     GstDecodePad *dpad = (GstDecodePad *) tmp->data;
+    GstPad *opad = gst_ghost_pad_get_target (GST_GHOST_PAD_CAST (dpad));
 
     next = g_list_next (tmp);
+    if (!opad)
+      continue;
 
     GST_DEBUG_OBJECT (dpad, "unblocking");
-    gst_pad_set_blocked_async (GST_PAD (dpad), FALSE,
-        (GstPadBlockCallback) source_pad_blocked_cb, NULL);
+    gst_pad_set_blocked_async_full (opad, FALSE,
+        (GstPadBlockCallback) source_pad_blocked_cb, gst_object_ref (dpad),
+        (GDestroyNotify) gst_object_unref);
     /* make flushing, prevent NOT_LINKED */
     GST_PAD_SET_FLUSHING (GST_PAD (dpad));
     gst_object_unref (dpad);
+    gst_object_unref (opad);
     GST_DEBUG_OBJECT (dpad, "unblocked");
   }
 
-- 
1.6.4.3

>From 10cb19bcda3082435d57518666076a69e51a1bba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian.droege at collabora.co.uk>
Date: Thu, 24 Sep 2009 16:05:58 +0200
Subject: [PATCH 3/7] factorylist: Use gst_caps_can_intersect() instead of _intersect()

This is faster and results in less allocations.
---
 gst/playback/gstfactorylists.c |    9 +++------
 1 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/gst/playback/gstfactorylists.c b/gst/playback/gstfactorylists.c
index 7099927..df1916f 100644
--- a/gst/playback/gstfactorylists.c
+++ b/gst/playback/gstfactorylists.c
@@ -240,7 +240,6 @@ gst_factory_list_filter (GValueArray * array, const GstCaps * caps)
 
       /* we only care about the sink templates */
       if (templ->direction == GST_PAD_SINK) {
-        GstCaps *intersect;
         GstCaps *tmpl_caps;
 
         /* try to intersect the caps with the caps of the template */
@@ -248,21 +247,19 @@ gst_factory_list_filter (GValueArray * array, const GstCaps * caps)
 
         /* FIXME, intersect is not the right method, we ideally want to check
          * for a subset here */
-        intersect = gst_caps_intersect (caps, tmpl_caps);
-        gst_caps_unref (tmpl_caps);
 
         /* check if the intersection is empty */
-        if (!gst_caps_is_empty (intersect)) {
+        if (gst_caps_can_intersect (caps, tmpl_caps)) {
           /* non empty intersection, we can use this element */
           GValue resval = { 0, };
           g_value_init (&resval, G_TYPE_OBJECT);
           g_value_set_object (&resval, factory);
           g_value_array_append (result, &resval);
           g_value_unset (&resval);
-          gst_caps_unref (intersect);
+          gst_caps_unref (tmpl_caps);
           break;
         }
-        gst_caps_unref (intersect);
+        gst_caps_unref (tmpl_caps);
       }
     }
   }
-- 
1.6.4.3

>From 39bc12ee20437b352a13361ba48dcc886fce35a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian.droege at collabora.co.uk>
Date: Sat, 26 Sep 2009 12:17:49 +0200
Subject: [PATCH 4/7] decodebin2: Rewrite autoplugging and how groups of pads are exposed

[...2454 lines suppressed...]
+      DYN_UNLOCK (dbin);
       dbin->have_type = FALSE;
       ret = GST_STATE_CHANGE_ASYNC;
       do_async_start (dbin);
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
-      DECODE_BIN_DYN_LOCK (dbin);
+      DYN_LOCK (dbin);
       GST_LOG_OBJECT (dbin, "setting shutdown flag");
       dbin->shutdown = TRUE;
       unblock_pads (dbin);
-      DECODE_BIN_DYN_UNLOCK (dbin);
+      DYN_UNLOCK (dbin);
     default:
       break;
   }
@@ -2733,11 +2842,12 @@ gst_decode_bin_change_state (GstElement * element, GstStateChange transition)
   switch (transition) {
     case GST_STATE_CHANGE_PAUSED_TO_READY:
       do_async_done (dbin);
-      gst_decode_bin_remove_groups (dbin);
+      if (dbin->decode_chain) {
+        gst_decode_chain_free (dbin->decode_chain);
+        dbin->decode_chain = NULL;
+      }
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_decode_bin_remove_groups (dbin);
-      break;
     default:
       break;
   }
-- 
1.6.4.3

>From 5ee4ee1682cff7ca44897fec0dcee6374cd6636d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian.droege at collabora.co.uk>
Date: Thu, 24 Sep 2009 14:56:48 +0200
Subject: [PATCH 5/7] uridecodebin: Don't post missing plugin messages twice

decodebin2 already posts them after emitting the unknown-type signal,
there's no need to post another one.
---
 gst/playback/gsturidecodebin.c |    6 ------
 1 files changed, 0 insertions(+), 6 deletions(-)

diff --git a/gst/playback/gsturidecodebin.c b/gst/playback/gsturidecodebin.c
index 0e0bb74..6420414 100644
--- a/gst/playback/gsturidecodebin.c
+++ b/gst/playback/gsturidecodebin.c
@@ -33,8 +33,6 @@
 #include <gst/gst.h>
 #include <gst/gst-i18n-plugin.h>
 
-#include <gst/pbutils/missing-plugins.h>
-
 #include "gstfactorylists.h"
 #include "gstplay-marshal.h"
 #include "gstplay-enum.h"
@@ -622,12 +620,8 @@ static void
 unknown_type_cb (GstElement * element, GstPad * pad, GstCaps * caps,
     GstURIDecodeBin * decoder)
 {
-  GstMessage *msg;
   gchar *capsstr;
 
-  msg = gst_missing_decoder_message_new (GST_ELEMENT_CAST (decoder), caps);
-  gst_element_post_message (GST_ELEMENT_CAST (decoder), msg);
-
   capsstr = gst_caps_to_string (caps);
   GST_ELEMENT_WARNING (decoder, CORE, MISSING_PLUGIN,
       (_("No decoder available for type \'%s\'."), capsstr), (NULL));
-- 
1.6.4.3

>From 4a7f2e6c102eeefa7da8e7c9c2eec3c0019bba01 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian.droege at collabora.co.uk>
Date: Sat, 26 Sep 2009 12:47:53 +0200
Subject: [PATCH 6/7] decodebin2: Use the iterate internal links function instead of string magic to get multiqueue srcpads

---
 gst/playback/gstdecodebin2.c |   31 +++++++++++++++++--------------
 1 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c
index 1d6c9d2..4fe62b4 100644
--- a/gst/playback/gstdecodebin2.c
+++ b/gst/playback/gstdecodebin2.c
@@ -2108,7 +2108,7 @@ gst_decode_group_control_demuxer_pad (GstDecodeGroup * group, GstPad * pad)
 {
   GstDecodeBin *dbin;
   GstPad *srcpad, *sinkpad;
-  gchar *nb, *sinkname, *srcname;
+  GstIterator *it = NULL;
 
   dbin = group->dbin;
 
@@ -2126,29 +2126,32 @@ gst_decode_group_control_demuxer_pad (GstDecodeGroup * group, GstPad * pad)
 
   if ((gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK)) {
     GST_ERROR_OBJECT (dbin, "Couldn't link demuxer and multiqueue");
-    goto beach;
+    goto error;
   }
 
-  CHAIN_MUTEX_LOCK (group->parent);
-  group->reqpads = g_list_prepend (group->reqpads, gst_object_ref (sinkpad));
-
-  sinkname = gst_pad_get_name (sinkpad);
-  nb = sinkname + 4;
-  srcname = g_strdup_printf ("src%s", nb);
-  g_free (sinkname);
+  it = gst_pad_iterate_internal_links (sinkpad);
 
-  if (!(srcpad = gst_element_get_static_pad (group->multiqueue, srcname))) {
-    GST_ERROR_OBJECT (dbin, "Couldn't get srcpad %s from multiqueue", srcname);
-    goto chiringuito;
+  if (!it || (gst_iterator_next (it, (gpointer *) & srcpad)) != GST_ITERATOR_OK
+      || srcpad == NULL) {
+    GST_ERROR_OBJECT (dbin,
+        "Couldn't get srcpad from multiqueue for sinkpad %" GST_PTR_FORMAT,
+        sinkpad);
+    goto error;
   }
 
-chiringuito:
-  g_free (srcname);
+  CHAIN_MUTEX_LOCK (group->parent);
+  group->reqpads = g_list_prepend (group->reqpads, gst_object_ref (sinkpad));
   CHAIN_MUTEX_UNLOCK (group->parent);
 
 beach:
+  if (it)
+    gst_iterator_free (it);
   gst_object_unref (sinkpad);
   return srcpad;
+
+error:
+  gst_element_release_request_pad (group->multiqueue, sinkpad);
+  goto beach;
 }
 
 /* gst_decode_group_is_complete:
-- 
1.6.4.3

>From 68cef57e9260265229d194f1309cdffd654c95b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian.droege at collabora.co.uk>
Date: Sat, 26 Sep 2009 12:56:36 +0200
Subject: [PATCH 7/7] decodebin2: Chains with an exposed endpad are complete too

This allows partial group changes, i.e. demuxer2 in the example below
goes EOS but has a next group and audio2 stays the same.

          /-- >demuxer2---->video
demuxer---             \--->audio1
          \--->audio2
---
 gst/playback/gstdecodebin2.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c
index 4fe62b4..60dbf57 100644
--- a/gst/playback/gstdecodebin2.c
+++ b/gst/playback/gstdecodebin2.c
@@ -2191,7 +2191,7 @@ out:
  *
  * Returns TRUE if the chain is complete, this means either
  * a) This chain is a dead end, i.e. we have no suitable plugins
- * b) This chain ends in an endpad and this is blocked
+ * b) This chain ends in an endpad and this is blocked or exposed
  *
  * Not MT-safe, always call with decodebin expose lock
  */
@@ -2200,7 +2200,12 @@ gst_decode_chain_is_complete (GstDecodeChain * chain)
 {
   gboolean complete = FALSE;
 
-  if (chain->deadend || (chain->endpad && chain->endpad->blocked)) {
+  if (chain->deadend) {
+    complete = TRUE;
+    goto out;
+  }
+
+  if (chain->endpad && (chain->endpad->blocked || chain->endpad->exposed)) {
     complete = TRUE;
     goto out;
   }
@@ -2543,7 +2548,7 @@ gst_decode_chain_expose (GstDecodeChain * chain, GList ** endpads)
     return TRUE;
 
   if (chain->endpad) {
-    if (!chain->endpad->blocked)
+    if (!chain->endpad->blocked && !chain->endpad->exposed)
       return FALSE;
     *endpads = g_list_prepend (*endpads, gst_object_ref (chain->endpad));
     return TRUE;
-- 
1.6.4.3


gstpb-no-subtitle-errors.patch:
 gstplaybin2.c |  112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 106 insertions(+), 6 deletions(-)

--- NEW FILE gstpb-no-subtitle-errors.patch ---
commit a4bc39ef4836abcf16bd9d451ed89979ff090c0d
Author: Sebastian Dröge <sebastian.droege at collabora.co.uk>
Date:   Thu Oct 8 19:55:42 2009 +0200

    playbin2: Don't stop completely on initialization errors from subtitle elements
    
    Instead disable the subtitles and play the other parts of the stream.
    
    Fixes bug #587704.

diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c
index b2f41a6..c134036 100644
--- a/gst/playback/gstplaybin2.c
+++ b/gst/playback/gstplaybin2.c
@@ -522,6 +522,10 @@ static GstPad *gst_play_bin_get_text_pad (GstPlayBin * playbin, gint stream);
 
 static gboolean setup_next_source (GstPlayBin * playbin, GstState target);
 
+static void no_more_pads_cb (GstElement * decodebin, GstSourceGroup * group);
+static void pad_removed_cb (GstElement * decodebin, GstPad * pad,
+    GstSourceGroup * group);
+
 static GstElementClass *parent_class;
 
 static guint gst_play_bin_signals[LAST_SIGNAL] = { 0 };
@@ -532,6 +536,12 @@ GST_ELEMENT_DETAILS ("Player Bin 2",
     "Autoplug and play media from an uri",
     "Wim Taymans <wim.taymans at gmail.com>");
 
+#define REMOVE_SIGNAL(obj,id)            \
+if (id) {                                \
+  g_signal_handler_disconnect (obj, id); \
+  id = 0;                                \
+}
+
 static void
 gst_play_marshal_BUFFER__BOXED (GClosure * closure,
     GValue * return_value G_GNUC_UNUSED,
@@ -1800,9 +1810,38 @@ static const gchar *blacklisted_mimes[] = {
   "video/x-dvd-subpicture", "subpicture/x-pgs", NULL
 };
 
+
+/* Returns TRUE if child is object or any parent (transitive)
+ * of child is object */
+static gboolean
+_gst_object_contains_object (GstObject * object, GstObject * child)
+{
+  GstObject *parent, *tmp;
+
+  if (!object || !child)
+    return FALSE;
+
+  parent = gst_object_ref (child);
+  do {
+    if (parent == object) {
+      gst_object_unref (parent);
+      return TRUE;
+    }
+
+    tmp = gst_object_get_parent (parent);
+    gst_object_unref (parent);
+    parent = tmp;
+  } while (parent);
+
+  return FALSE;
+}
+
 static void
 gst_play_bin_handle_message (GstBin * bin, GstMessage * msg)
 {
+  GstPlayBin *playbin = GST_PLAY_BIN (bin);
+  GstSourceGroup *group;
+
   if (gst_is_missing_plugin_message (msg)) {
     gchar *detail;
     guint i;
@@ -1818,6 +1857,73 @@ gst_play_bin_handle_message (GstBin * bin, GstMessage * msg)
     }
     g_free (detail);
   }
+
+  group = playbin->curr_group;
+  /* If we get an error of the subtitle uridecodebin transform
+   * them into warnings and disable the subtitles */
+  if (group && group->pending && group->suburidecodebin) {
+    GstObject *srcparent = gst_object_get_parent (GST_OBJECT_CAST (msg->src));
+
+    if (G_UNLIKELY (_gst_object_contains_object (GST_OBJECT_CAST
+                (group->suburidecodebin), msg->src)
+            && GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR)) {
+      GError *err;
+      gchar *debug = NULL;
+      GstMessage *new_msg;
+      GstIterator *it;
+      gboolean done = FALSE;
+
+      gst_message_parse_error (msg, &err, &debug);
+      new_msg = gst_message_new_warning (msg->src, err, debug);
+
+      gst_message_unref (msg);
+      msg = new_msg;
+
+      REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_added_id);
+      REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_removed_id);
+      REMOVE_SIGNAL (group->suburidecodebin, group->sub_no_more_pads_id);
+
+      it = gst_element_iterate_src_pads (group->suburidecodebin);
+      while (it && !done) {
+        GstPad *p = NULL;
+        GstIteratorResult res;
+
+        res = gst_iterator_next (it, (gpointer) & p);
+
+        switch (res) {
+          case GST_ITERATOR_DONE:
+            done = TRUE;
+            break;
+          case GST_ITERATOR_OK:
+            pad_removed_cb (NULL, p, group);
+            gst_object_unref (p);
+            break;
+
+          case GST_ITERATOR_RESYNC:
+            gst_iterator_resync (it);
+            break;
+          case GST_ITERATOR_ERROR:
+            done = TRUE;
+            break;
+        }
+      }
+      if (it)
+        gst_iterator_free (it);
+
+      gst_object_ref (group->suburidecodebin);
+      gst_bin_remove (bin, group->suburidecodebin);
+      gst_element_set_locked_state (group->suburidecodebin, FALSE);
+      gst_element_set_state (group->suburidecodebin, GST_STATE_NULL);
+      gst_object_unref (group->suburidecodebin);
+      group->suburidecodebin = NULL;
+
+      no_more_pads_cb (NULL, group);
+    }
+
+    if (srcparent)
+      gst_object_unref (srcparent);
+  }
+
   GST_BIN_CLASS (parent_class)->handle_message (bin, msg);
 }
 
@@ -2516,12 +2622,6 @@ group_set_locked_state_unlocked (GstPlayBin * playbin, GstSourceGroup * group,
   return TRUE;
 }
 
-#define REMOVE_SIGNAL(obj,id)            \
-if (id) {                                \
-  g_signal_handler_disconnect (obj, id); \
-  id = 0;                                \
-}
-
 /* must be called with PLAY_BIN_LOCK */
 static gboolean
 activate_group (GstPlayBin * playbin, GstSourceGroup * group, GstState target)


Index: gstreamer-plugins-base.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gstreamer-plugins-base/devel/gstreamer-plugins-base.spec,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -p -r1.92 -r1.93
--- gstreamer-plugins-base.spec	5 Oct 2009 16:24:58 -0000	1.92
+++ gstreamer-plugins-base.spec	13 Oct 2009 15:32:49 -0000	1.93
@@ -3,7 +3,7 @@
 
 Name: 		%{gstreamer}-plugins-base
 Version: 	0.10.25
-Release:  	1%{?dist}
+Release:  	2%{?dist}
 Summary: 	GStreamer streaming media framework base plug-ins
 
 Group: 		Applications/Multimedia
@@ -33,6 +33,11 @@ BuildRequires:  gtk2-devel
 BuildRequires:  pkgconfig
 Obsoletes:	gstreamer-plugins
 
+# https://bugzilla.gnome.org/show_bug.cgi?id=587704
+Patch0:		gstpb-no-subtitle-errors.patch
+# https://bugzilla.gnome.org/show_bug.cgi?id=591677
+Patch1:		gstpb-fix-missing-plugins.patch
+
 # documentation
 BuildRequires:  gtk-doc >= 1.3
 BuildRequires:  PyXML
@@ -49,6 +54,8 @@ This package contains a set of well-main
 
 %prep
 %setup -q -n gst-plugins-base-%{version}
+%patch0 -p1 -b .subtitle-errors
+%patch1 -p1 -b .missing-plugins
 
 %build
 %configure \
@@ -244,6 +251,9 @@ GStreamer Base Plugins library developme
 %doc %{_datadir}/gtk-doc/html/gst-plugins-base-plugins-%{majorminor}
 
 %changelog
+* Tue Oct 13 2009 Bastien Nocera <bnocera at redhat.com> 0.10.25-2
+- Add patches to fix some playbin2 bugs (#518880)
+
 * Mon Oct 05 2009 Bastien Nocera <bnocera at redhat.com> 0.10.25-1
 - Update to 0.10.25
 - Require a gstreamer of the same version as us (#503707)




More information about the fedora-extras-commits mailing list