rpms/gstreamer-plugins-good/devel gst-plugins-good-0.10.8-speex-nego.patch, NONE, 1.1 gstreamer-plugins-good.spec, 1.59, 1.60
Adam Jackson (ajax)
fedora-extras-commits at redhat.com
Thu Jun 19 17:49:51 UTC 2008
Author: ajax
Update of /cvs/pkgs/rpms/gstreamer-plugins-good/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv26797
Modified Files:
gstreamer-plugins-good.spec
Added Files:
gst-plugins-good-0.10.8-speex-nego.patch
Log Message:
* Thu Jun 19 2008 Adam Jackson <ajax at redhat.com> 0.10.8-7
- gst-plugins-good-0.10.8-speex-nego.patch: Backport speex channel and
rate negotiation from 0.10.9. (#451391)
gst-plugins-good-0.10.8-speex-nego.patch:
--- NEW FILE gst-plugins-good-0.10.8-speex-nego.patch ---
diff -urp gst-plugins-good-0.10.8.OLD/ext/speex/gstspeexenc.c gst-plugins-good-0.10.8/ext/speex/gstspeexenc.c
--- gst-plugins-good-0.10.8.OLD/ext/speex/gstspeexenc.c 2008-06-13 15:45:41.000000000 -0400
+++ gst-plugins-good-0.10.8/ext/speex/gstspeexenc.c 2008-06-13 15:53:03.000000000 -0400
@@ -48,7 +48,9 @@ static GstStaticPadTemplate sink_factory
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-speex")
+ GST_STATIC_CAPS ("audio/x-speex, "
+ "rate = (int) [ 6000, 48000 ], "
+ "channels = (int) [ 1, 2]")
);
static const GstElementDetails speexenc_details =
@@ -220,6 +222,37 @@ gst_speex_enc_sink_setcaps (GstPad * pad
return enc->setup;
}
+static GstCaps *
+gst_speex_enc_sink_getcaps (GstPad *pad)
+{
+ GstCaps * caps = gst_caps_copy (gst_pad_get_pad_template_caps (pad));
+ GstCaps * peercaps = NULL;
+ GstSpeexEnc *enc = GST_SPEEX_ENC (gst_pad_get_parent_element (pad));
+
+ peercaps = gst_pad_peer_get_caps (enc->srcpad);
+
+ if (peercaps) {
+ if (!gst_caps_is_empty (peercaps) && !gst_caps_is_any (peercaps)) {
+ GstStructure * ps = gst_caps_get_structure (peercaps, 0);
+ GstStructure * s = gst_caps_get_structure (caps, 0);;
+ gint rate, channels;
+
+ if (gst_structure_get_int (ps, "rate", &rate)) {
+ gst_structure_fixate_field_nearest_int (s, "rate", rate);
+ }
+
+ if (gst_structure_get_int (ps, "channels", &channels)) {
+ gst_structure_fixate_field_nearest_int (s, "channels", channels);
+ }
+ }
+ gst_caps_unref (peercaps);
+ }
+
+ gst_object_unref (enc);
+
+ return caps;
+}
+
static gboolean
gst_speex_enc_convert_src (GstPad * pad, GstFormat src_format, gint64 src_value,
GstFormat * dest_format, gint64 * dest_value)
@@ -458,6 +491,8 @@ gst_speex_enc_init (GstSpeexEnc * enc, G
GST_DEBUG_FUNCPTR (gst_speex_enc_chain));
gst_pad_set_setcaps_function (enc->sinkpad,
GST_DEBUG_FUNCPTR (gst_speex_enc_sink_setcaps));
+ gst_pad_set_getcaps_function (enc->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_speex_enc_sink_getcaps));
gst_pad_set_query_function (enc->sinkpad,
GST_DEBUG_FUNCPTR (gst_speex_enc_sink_query));
@@ -781,6 +816,10 @@ gst_speex_enc_chain (GstPad * pad, GstBu
caps = gst_pad_get_caps (enc->srcpad);
caps = gst_speex_enc_set_header_on_caps (caps, buf1, buf2);
+ gst_caps_set_simple (caps,
+ "rate", G_TYPE_INT, enc->rate,
+ "channels", G_TYPE_INT, enc->channels, NULL);
+
/* negotiate with these caps */
GST_DEBUG ("here are the caps: %" GST_PTR_FORMAT, caps);
gst_pad_set_caps (enc->srcpad, caps);
diff -urp gst-plugins-good-0.10.8.OLD/gst/rtp/gstrtpspeexpay.c gst-plugins-good-0.10.8/gst/rtp/gstrtpspeexpay.c
--- gst-plugins-good-0.10.8.OLD/gst/rtp/gstrtpspeexpay.c 2008-06-13 15:45:41.000000000 -0400
+++ gst-plugins-good-0.10.8/gst/rtp/gstrtpspeexpay.c 2008-06-13 15:57:25.000000000 -0400
@@ -41,7 +41,9 @@ static GstStaticPadTemplate gst_rtp_spee
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-speex")
+ GST_STATIC_CAPS ("audio/x-speex, "
+ "rate = (int) [ 6000, 48000 ], "
+ "channels = (int) 1")
);
static GstStaticPadTemplate gst_rtp_speex_pay_src_template =
@@ -61,6 +63,8 @@ static GstStateChangeReturn gst_rtp_spee
static gboolean gst_rtp_speex_pay_setcaps (GstBaseRTPPayload * payload,
GstCaps * caps);
+static GstCaps * gst_rtp_speex_pay_getcaps (GstBaseRTPPayload * payload,
+ GstPad * pad);
static GstFlowReturn gst_rtp_speex_pay_handle_buffer (GstBaseRTPPayload *
payload, GstBuffer * buffer);
@@ -96,6 +100,7 @@ gst_rtp_speex_pay_class_init (GstRtpSPEE
gstelement_class->change_state = gst_rtp_speex_pay_change_state;
gstbasertppayload_class->set_caps = gst_rtp_speex_pay_setcaps;
+ gstbasertppayload_class->get_caps = gst_rtp_speex_pay_getcaps;
gstbasertppayload_class->handle_buffer = gst_rtp_speex_pay_handle_buffer;
}
@@ -114,6 +119,32 @@ gst_rtp_speex_pay_setcaps (GstBaseRTPPay
return TRUE;
}
+static GstCaps *
+gst_rtp_speex_pay_getcaps (GstBaseRTPPayload * payload, GstPad * pad)
+{
+ GstCaps * otherpadcaps;
+ GstCaps * caps;
+
+ otherpadcaps = gst_pad_get_allowed_caps(payload->srcpad);
+ caps = gst_caps_copy (gst_pad_get_pad_template_caps (pad));
+
+ if (otherpadcaps) {
+ if (!gst_caps_is_empty (otherpadcaps)) {
+ GstStructure * ps = gst_caps_get_structure (otherpadcaps, 0);
+ GstStructure * s = gst_caps_get_structure (caps, 0);
+ gint clock_rate;
+
+ if (gst_structure_get_int (ps, "clock-rate", &clock_rate)) {
+ gst_structure_fixate_field_nearest_int (s, "rate", clock_rate);
+ }
+ }
+
+ gst_caps_unref (otherpadcaps);
+ }
+
+ return caps;
+}
+
static gboolean
gst_rtp_speex_pay_parse_ident (GstRtpSPEEXPay * rtpspeexpay,
const guint8 * data, guint size)
Index: gstreamer-plugins-good.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gstreamer-plugins-good/devel/gstreamer-plugins-good.spec,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- gstreamer-plugins-good.spec 17 Jun 2008 17:37:53 -0000 1.59
+++ gstreamer-plugins-good.spec 19 Jun 2008 17:48:59 -0000 1.60
@@ -6,7 +6,7 @@
Name: %{gstreamer}-plugins-good
Version: 0.10.8
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: GStreamer plug-ins with good code and licensing
Group: Applications/Multimedia
@@ -16,6 +16,8 @@
Patch0: gst-plugins-good-0.10.8-docs.patch
# http://bugzilla.gnome.org/show_bug.cgi?id=536317
Patch1: gst-plugins-good-v4l2-new-kernel.patch
+# bug #451391
+Patch2: gst-plugins-good-0.10.8-speex-nego.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: %{gstreamer} >= %{_gst}
@@ -99,6 +101,7 @@
pushd sys/v4l2
%patch1 -p0 -b .new-kernel
popd
+%patch2 -p1 -b .speex-nego
%build
@@ -240,6 +243,10 @@
gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/gstreamer-%{majorminor}.schemas > /dev/null || :
%changelog
+* Thu Jun 19 2008 Adam Jackson <ajax at redhat.com> 0.10.8-7
+- gst-plugins-good-0.10.8-speex-nego.patch: Backport speex channel and
+ rate negotiation from 0.10.9. (#451391)
+
* Tue Jun 17 2008 - Bastien Nocera <bnocera at redhat.com> - 0.10.8-6
- Really fix the default audio output not being correct
More information about the scm-commits
mailing list