commit c277d043ffaa3404f76707a7184fe1dd3bfd0ffd
Author: Bastien Nocera <hadess(a)fedoraproject.org>
Date: Tue Oct 27 10:31:43 2009 +0000
- Fix audio disappearing with newer pulsesink
gstreamer-plugins-base.spec | 11 +++-
pulsesink-disable-old-version-hack.patch | 94 ++++++++++++++++++++++++++++++++
2 files changed, 104 insertions(+), 1 deletion(-)
---
diff --git a/gstreamer-plugins-base.spec b/gstreamer-plugins-base.spec
index c18efde..3f137f3 100644
--- a/gstreamer-plugins-base.spec
+++ b/gstreamer-plugins-base.spec
@@ -3,7 +3,7 @@
Name: %{gstreamer}-plugins-base
Version: 0.10.25
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: GStreamer streaming media framework base plug-ins
Group: Applications/Multimedia
@@ -37,6 +37,11 @@ Obsoletes: gstreamer-plugins
Patch0: gstpb-no-subtitle-errors.patch
#
https://bugzilla.gnome.org/show_bug.cgi?id=591677
Patch1: gstpb-fix-missing-plugins.patch
+# Revert
http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=35cddfb...
+# We have a new enough pulsesink
+#
https://bugzilla.gnome.org/show_bug.cgi?id=599105
+Patch2: pulsesink-disable-old-version-hack.patch
+Conflicts: gstreamer-plugins-good < 0.10.16-3
# documentation
BuildRequires: gtk-doc >= 1.3
@@ -56,6 +61,7 @@ This package contains a set of well-maintained base plug-ins.
%setup -q -n gst-plugins-base-%{version}
%patch0 -p1 -b .subtitle-errors
%patch1 -p1 -b .missing-plugins
+%patch2 -p1 -R -b .old-pulsesink
%build
%configure \
@@ -251,6 +257,9 @@ GStreamer Base Plugins library development and header files.
%doc %{_datadir}/gtk-doc/html/gst-plugins-base-plugins-%{majorminor}
%changelog
+* Tue Oct 27 2009 Bastien Nocera <bnocera(a)redhat.com> 0.10.25-3
+- Fix audio disappearing with newer pulsesink
+
* Tue Oct 13 2009 Bastien Nocera <bnocera(a)redhat.com> 0.10.25-2
- Add patches to fix some playbin2 bugs (#518880)
diff --git a/pulsesink-disable-old-version-hack.patch
b/pulsesink-disable-old-version-hack.patch
new file mode 100644
index 0000000..b4d3a7f
--- /dev/null
+++ b/pulsesink-disable-old-version-hack.patch
@@ -0,0 +1,94 @@
+From 35cddfb1e3ddc6513c7daca093d72151a13e9342 Mon Sep 17 00:00:00 2001
+From: Wim Taymans <wim.taymans(a)collabora.co.uk>
+Date: Thu, 10 Sep 2009 10:38:16 +0000
+Subject: baseaudiosink: add ugly backward compat hack
+
+Check for pulsesink < 0.10.17 because it includes code that is now included in
+baseaudiosink. Disable that code in baseaudiosink to be compatible with the
+older version.
+---
+diff --git a/gst-libs/gst/audio/gstbaseaudiosink.c
b/gst-libs/gst/audio/gstbaseaudiosink.c
+index afa62c3..23fde25 100644
+--- a/gst-libs/gst/audio/gstbaseaudiosink.c
++++ b/gst-libs/gst/audio/gstbaseaudiosink.c
+@@ -56,6 +56,8 @@ struct _GstBaseAudioSinkPrivate
+ gboolean sync_latency;
+
+ GstClockTime eos_time;
++
++ gboolean do_time_offset;
+ };
+
+ /* BaseAudioSink signals and args */
+@@ -231,12 +233,15 @@ gst_base_audio_sink_class_init (GstBaseAudioSinkClass * klass)
+ * thread-safety in GObject */
+ g_type_class_ref (GST_TYPE_AUDIO_CLOCK);
+ g_type_class_ref (GST_TYPE_RING_BUFFER);
++
+ }
+
+ static void
+ gst_base_audio_sink_init (GstBaseAudioSink * baseaudiosink,
+ GstBaseAudioSinkClass * g_class)
+ {
++ GstPluginFeature *feature;
++
+ baseaudiosink->priv = GST_BASE_AUDIO_SINK_GET_PRIVATE (baseaudiosink);
+
+ baseaudiosink->buffer_time = DEFAULT_BUFFER_TIME;
+@@ -253,6 +258,24 @@ gst_base_audio_sink_init (GstBaseAudioSink * baseaudiosink,
+ /* install some custom pad_query functions */
+ gst_pad_set_query_function (GST_BASE_SINK_PAD (baseaudiosink),
+ GST_DEBUG_FUNCPTR (gst_base_audio_sink_query_pad));
++
++ baseaudiosink->priv->do_time_offset = TRUE;
++
++ /* check the factory, pulsesink < 0.10.17 does the timestamp offset itself so
++ * we should not do ourselves */
++ feature =
++ GST_PLUGIN_FEATURE_CAST (GST_ELEMENT_CLASS (g_class)->elementfactory);
++ GST_DEBUG ("created from factory %p", feature);
++
++ /* HACK for old pulsesink that did the time_offset themselves */
++ if (feature) {
++ if (strcmp (gst_plugin_feature_get_name (feature), "pulsesink") == 0) {
++ if (!gst_plugin_feature_check_version (feature, 0, 10, 17)) {
++ /* we're dealing with an old pulsesink, we need to disable time corection
*/
++ baseaudiosink->priv->do_time_offset = FALSE;
++ }
++ }
++ }
+ }
+
+ static void
+@@ -1409,16 +1432,18 @@ gst_base_audio_sink_render (GstBaseSink * bsink, GstBuffer *
buf)
+ }
+
+ /* bring to position in the ringbuffer */
+- time_offset =
+- GST_AUDIO_CLOCK_CAST (sink->provided_clock)->abidata.ABI.time_offset;
+- if (render_start > time_offset)
+- render_start -= time_offset;
+- else
+- render_start = 0;
+- if (render_stop > time_offset)
+- render_stop -= time_offset;
+- else
+- render_stop = 0;
++ if (sink->priv->do_time_offset) {
++ time_offset =
++ GST_AUDIO_CLOCK_CAST (sink->provided_clock)->abidata.ABI.time_offset;
++ if (render_start > time_offset)
++ render_start -= time_offset;
++ else
++ render_start = 0;
++ if (render_stop > time_offset)
++ render_stop -= time_offset;
++ else
++ render_stop = 0;
++ }
+
+ /* and bring the time to the rate corrected offset in the buffer */
+ render_start = gst_util_uint64_scale_int (render_start,
+--
+cgit v0.8.2