From 3e064477cf6aef0a38c23d67bf8628869f3cf7f9 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 18 Aug 2005 20:14:46 +0000 Subject: [PATCH] gst/rtp/gstrtpamrdec.c: Fix up amr depayloader a bit. Original commit message from CVS: * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init), (gst_rtpamrdec_chain): Fix up amr depayloader a bit. * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open), (gst_rtspsrc_close), (gst_rtspsrc_play): Look for options result in Public and Allow header fields.. spec says Allow but some servers return Public... --- ChangeLog | 11 +++++++++++ gst/rtp/gstrtpamrdec.c | 18 ++++++++++++------ gst/rtp/gstrtpamrdepay.c | 18 ++++++++++++------ gst/rtsp/gstrtspsrc.c | 12 +++++++++--- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index fc1d2be..96edad2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2005-08-18 Wim Taymans + * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init), + (gst_rtpamrdec_chain): + Fix up amr depayloader a bit. + + * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open), + (gst_rtspsrc_close), (gst_rtspsrc_play): + Look for options result in Public and Allow header fields.. + spec says Allow but some servers return Public... + +2005-08-18 Wim Taymans + * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init), (gst_rtpamrenc_init), (gst_rtpamrenc_chain), (gst_rtpamrenc_set_property), (gst_rtpamrenc_get_property): diff --git a/gst/rtp/gstrtpamrdec.c b/gst/rtp/gstrtpamrdec.c index 61827cb..25dff88 100644 --- a/gst/rtp/gstrtpamrdec.c +++ b/gst/rtp/gstrtpamrdec.c @@ -46,7 +46,7 @@ static GstStaticPadTemplate gst_rtpamrdec_src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/mpeg") + GST_STATIC_CAPS ("audio/x-amr-nb") ); static GstStaticPadTemplate gst_rtpamrdec_sink_template = @@ -130,11 +130,18 @@ gst_rtpamrdec_class_init (GstRtpAMRDecClass * klass) static void gst_rtpamrdec_init (GstRtpAMRDec * rtpamrdec) { + GstCaps *caps; + rtpamrdec->srcpad = gst_pad_new_from_template (gst_static_pad_template_get (&gst_rtpamrdec_src_template), "src"); gst_element_add_pad (GST_ELEMENT (rtpamrdec), rtpamrdec->srcpad); + caps = gst_caps_new_simple ("audio/x-amr-nb", + "channels", G_TYPE_INT, 1, "rate", G_TYPE_INT, 8000, NULL); + + gst_pad_set_caps (rtpamrdec->srcpad, caps); + rtpamrdec->sinkpad = gst_pad_new_from_template (gst_static_pad_template_get (&gst_rtpamrdec_sink_template), "sink"); @@ -157,17 +164,14 @@ gst_rtpamrdec_chain (GstPad * pad, GstBuffer * buf) { gint payload_len; guint8 *payload; - guint16 frag_offset; guint32 timestamp; payload_len = gst_rtpbuffer_get_payload_len (buf); payload = gst_rtpbuffer_get_payload (buf); - frag_offset = (payload[2] << 8) | payload[3]; - /* strip off header */ - payload_len -= 4; - payload += 4; + payload_len -= 2; + payload += 2; timestamp = gst_rtpbuffer_get_timestamp (buf); @@ -177,6 +181,8 @@ gst_rtpamrdec_chain (GstPad * pad, GstBuffer * buf) memcpy (GST_BUFFER_DATA (outbuf), payload, payload_len); + gst_buffer_set_caps (outbuf, GST_PAD_CAPS (rtpamrdec->srcpad)); + GST_DEBUG ("gst_rtpamrdec_chain: pushing buffer of size %d", GST_BUFFER_SIZE (outbuf)); diff --git a/gst/rtp/gstrtpamrdepay.c b/gst/rtp/gstrtpamrdepay.c index 61827cb..25dff88 100644 --- a/gst/rtp/gstrtpamrdepay.c +++ b/gst/rtp/gstrtpamrdepay.c @@ -46,7 +46,7 @@ static GstStaticPadTemplate gst_rtpamrdec_src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/mpeg") + GST_STATIC_CAPS ("audio/x-amr-nb") ); static GstStaticPadTemplate gst_rtpamrdec_sink_template = @@ -130,11 +130,18 @@ gst_rtpamrdec_class_init (GstRtpAMRDecClass * klass) static void gst_rtpamrdec_init (GstRtpAMRDec * rtpamrdec) { + GstCaps *caps; + rtpamrdec->srcpad = gst_pad_new_from_template (gst_static_pad_template_get (&gst_rtpamrdec_src_template), "src"); gst_element_add_pad (GST_ELEMENT (rtpamrdec), rtpamrdec->srcpad); + caps = gst_caps_new_simple ("audio/x-amr-nb", + "channels", G_TYPE_INT, 1, "rate", G_TYPE_INT, 8000, NULL); + + gst_pad_set_caps (rtpamrdec->srcpad, caps); + rtpamrdec->sinkpad = gst_pad_new_from_template (gst_static_pad_template_get (&gst_rtpamrdec_sink_template), "sink"); @@ -157,17 +164,14 @@ gst_rtpamrdec_chain (GstPad * pad, GstBuffer * buf) { gint payload_len; guint8 *payload; - guint16 frag_offset; guint32 timestamp; payload_len = gst_rtpbuffer_get_payload_len (buf); payload = gst_rtpbuffer_get_payload (buf); - frag_offset = (payload[2] << 8) | payload[3]; - /* strip off header */ - payload_len -= 4; - payload += 4; + payload_len -= 2; + payload += 2; timestamp = gst_rtpbuffer_get_timestamp (buf); @@ -177,6 +181,8 @@ gst_rtpamrdec_chain (GstPad * pad, GstBuffer * buf) memcpy (GST_BUFFER_DATA (outbuf), payload, payload_len); + gst_buffer_set_caps (outbuf, GST_PAD_CAPS (rtpamrdec->srcpad)); + GST_DEBUG ("gst_rtpamrdec_chain: pushing buffer of size %d", GST_BUFFER_SIZE (outbuf)); diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c index 1e04ef7..5ac136a 100644 --- a/gst/rtsp/gstrtspsrc.c +++ b/gst/rtsp/gstrtspsrc.c @@ -581,9 +581,15 @@ gst_rtspsrc_open (GstRTSPSrc * src) gchar **options; gint i; - rtsp_message_get_header (&response, RTSP_HDR_PUBLIC, &respoptions); - if (!respoptions) - goto no_options; + /* Try Allow Header first */ + rtsp_message_get_header (&response, RTSP_HDR_ALLOW, &respoptions); + if (!respoptions) { + /* Then maybe Public Header... */ + rtsp_message_get_header (&response, RTSP_HDR_PUBLIC, &respoptions); + if (!respoptions) { + goto no_options; + } + } /* parse options */ options = g_strsplit (respoptions, ",", 0); -- 2.7.4