[arch-commits] Commit in gstreamer0.10/trunk (PKGBUILD bgo555631.patch)

Jan de Groot jgc at archlinux.org
Sun Nov 9 14:50:38 UTC 2008


    Date: Sunday, November 9, 2008 @ 09:50:37
  Author: jgc
Revision: 18832

upgpkg: gstreamer0.10 0.10.21-2
    Fix http://bugs.gnome.org/555631

Added:
  gstreamer0.10/trunk/bgo555631.patch
Modified:
  gstreamer0.10/trunk/PKGBUILD

-----------------+
 PKGBUILD        |    9 +++--
 bgo555631.patch |   88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 94 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2008-11-09 14:15:31 UTC (rev 18831)
+++ PKGBUILD	2008-11-09 14:50:37 UTC (rev 18832)
@@ -3,7 +3,7 @@
 
 pkgname=gstreamer0.10
 pkgver=0.10.21
-pkgrel=1
+pkgrel=2
 pkgdesc="GStreamer Multimedia Framework"
 arch=(i686 x86_64)
 license=('LGPL')
@@ -11,11 +11,14 @@
 depends=('libxml2>=2.6.32' 'glib2>=2.18.1')
 makedepends=('perlxml' 'pkgconfig' 'gtk-doc')
 options=('!libtool')
-source=(${url}/src/gstreamer/gstreamer-${pkgver}.tar.bz2)
-md5sums=('7bad90af3fd81a1535363cf85359125c')
+source=(${url}/src/gstreamer/gstreamer-${pkgver}.tar.bz2
+	bgo555631.patch)
+md5sums=('7bad90af3fd81a1535363cf85359125c'
+         '71eb301845184638e6556dacd1ca7d55')
 
 build() {
   cd "${srcdir}/gstreamer-${pkgver}"
+  patch -Np0 -i "${srcdir}/bgo555631.patch" || return 1
   ./configure --prefix=/usr \
 	--sysconfdir=/etc --localstatedir=/var \
 	--disable-docs-build || return 1

Added: bgo555631.patch
===================================================================
--- bgo555631.patch	                        (rev 0)
+++ bgo555631.patch	2008-11-09 14:50:37 UTC (rev 18832)
@@ -0,0 +1,88 @@
+--- libs/gst/base/gstbasetransform.c	2008/10/20 13:29:06	1.126
++++ libs/gst/base/gstbasetransform.c	2008/10/21 16:30:41	1.127
+@@ -251,7 +251,7 @@
+   /* upstream caps and size suggestions */
+   GstCaps *sink_suggest;
+   guint size_suggest;
+-  gint suggest_pending;
++  gboolean suggest_pending;
+ 
+   gboolean reconfigure;
+ };
+@@ -1224,7 +1224,7 @@
+             gst_caps_unref (priv->sink_suggest);
+           priv->sink_suggest = gst_caps_ref (othercaps);
+           priv->size_suggest = size_suggest;
+-          g_atomic_int_set (&trans->priv->suggest_pending, 1);
++          trans->priv->suggest_pending = TRUE;
+           GST_OBJECT_UNLOCK (trans->sinkpad);
+         }
+         gst_caps_unref (othercaps);
+@@ -1366,7 +1366,7 @@
+   GstBaseTransform *trans;
+   GstBaseTransformPrivate *priv;
+   GstFlowReturn res;
+-  gboolean proxy, suggest;
++  gboolean proxy, suggest, same_caps;
+   GstCaps *sink_suggest;
+   guint size_suggest;
+ 
+@@ -1384,8 +1384,12 @@
+ 
+   /* we remember our previous alloc request to quickly see if we can proxy or
+    * not. We skip this check if we have a pending suggestion. */
+-  if (g_atomic_int_get (&priv->suggest_pending) == 0 && caps &&
+-      gst_caps_is_equal (priv->sink_alloc, caps)) {
++  GST_OBJECT_LOCK (pad);
++  same_caps = !priv->suggest_pending && caps &&
++      gst_caps_is_equal (priv->sink_alloc, caps);
++  GST_OBJECT_UNLOCK (pad);
++
++  if (same_caps) {
+     /* we have seen this before, see below if we need to proxy */
+     GST_DEBUG_OBJECT (trans, "have old caps");
+     sink_suggest = caps;
+@@ -1414,7 +1418,7 @@
+       size_suggest = size;
+       suggest = FALSE;
+     }
+-    g_atomic_int_set (&priv->suggest_pending, 0);
++    priv->suggest_pending = FALSE;
+     GST_OBJECT_UNLOCK (pad);
+ 
+     /* check if we actually handle this format on the sinkpad */
+@@ -1462,7 +1466,10 @@
+     }
+   }
+   /* remember the new caps */
++  GST_OBJECT_LOCK (pad);
+   gst_caps_replace (&priv->sink_alloc, sink_suggest);
++  GST_OBJECT_UNLOCK (pad);
++
+   proxy = priv->proxy_alloc;
+   GST_DEBUG_OBJECT (trans, "doing default alloc, proxy %d", proxy);
+ 
+@@ -1487,11 +1494,13 @@
+     if (!gst_caps_is_equal (newcaps, caps)) {
+       GST_DEBUG_OBJECT (trans, "caps are new");
+       /* we have new caps, see if we can proxy downstream */
+-      if (gst_pad_peer_accept_caps (trans->sinkpad, newcaps)) {
++      if (gst_pad_peer_accept_caps (pad, newcaps)) {
+         /* peer accepts the caps, return a buffer in this format */
+         GST_DEBUG_OBJECT (trans, "peer accepted new caps");
+         /* remember the format */
++        GST_OBJECT_LOCK (pad);
+         gst_caps_replace (&priv->sink_alloc, newcaps);
++        GST_OBJECT_UNLOCK (pad);
+       } else {
+         GST_DEBUG_OBJECT (trans, "peer did not accept new caps");
+         /* peer does not accept the caps, free the buffer we received and
+@@ -2306,7 +2315,7 @@
+     caps = gst_caps_copy (caps);
+   trans->priv->sink_suggest = caps;
+   trans->priv->size_suggest = size;
+-  g_atomic_int_set (&trans->priv->suggest_pending, 1);
++  trans->priv->suggest_pending = TRUE;
+   GST_DEBUG_OBJECT (trans, "new suggest %" GST_PTR_FORMAT, caps);
+   GST_OBJECT_UNLOCK (trans->sinkpad);
+ }




More information about the arch-commits mailing list