diff options
Diffstat (limited to 'abs/extra-testing/community/gstreamer0.10')
-rw-r--r-- | abs/extra-testing/community/gstreamer0.10/PKGBUILD | 33 | ||||
-rw-r--r-- | abs/extra-testing/community/gstreamer0.10/bgo555631.patch | 88 |
2 files changed, 121 insertions, 0 deletions
diff --git a/abs/extra-testing/community/gstreamer0.10/PKGBUILD b/abs/extra-testing/community/gstreamer0.10/PKGBUILD new file mode 100644 index 0000000..52934e2 --- /dev/null +++ b/abs/extra-testing/community/gstreamer0.10/PKGBUILD @@ -0,0 +1,33 @@ +# $Id: PKGBUILD 18833 2008-11-09 14:51:01Z jgc $ +# Maintainer: Jan de Groot <jgc@archlinux.org> + +pkgname=gstreamer0.10 +pkgver=0.10.21 +pkgrel=2 +pkgdesc="GStreamer Multimedia Framework" +arch=(i686 x86_64) +license=('LGPL') +url="http://gstreamer.freedesktop.org/" +depends=('libxml2>=2.6.32' 'glib2>=2.18.1') +makedepends=('perlxml' 'pkgconfig' 'gtk-doc') +options=('!libtool') +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 + make || return 1 + make DESTDIR="${pkgdir}" install || return 1 + cd "${pkgdir}/usr/bin" + + #Remove unversioned gst-* binaries to get rid of conflicts + for bins in `ls *-0.10`; do + rm -f ${bins/-0.10/} + done +} diff --git a/abs/extra-testing/community/gstreamer0.10/bgo555631.patch b/abs/extra-testing/community/gstreamer0.10/bgo555631.patch new file mode 100644 index 0000000..b9a18f4 --- /dev/null +++ b/abs/extra-testing/community/gstreamer0.10/bgo555631.patch @@ -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); + } |