gst/rtpmanager/rtpsource.*: When no payload was specified on the caps but there was...
authorWim Taymans <wim.taymans@gmail.com>
Mon, 29 Dec 2008 14:21:47 +0000 (14:21 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 11 Aug 2009 01:30:40 +0000 (02:30 +0100)
Original commit message from CVS:
* gst/rtpmanager/rtpsource.c: (rtp_source_init),
(rtp_source_update_caps), (get_clock_rate):
* gst/rtpmanager/rtpsource.h:
When no payload was specified on the caps but there was a clock-rate,
assume the clock-rate corresponds to the first payload type found in the
RTP packets. Fixes #565509.

gst/rtpmanager/rtpsource.c
gst/rtpmanager/rtpsource.h

index 5aff00540418c24add932971379892acc52fde84..4fae901ec6dc84c7310e4f0f118b65be30a33ac4 100644 (file)
@@ -156,7 +156,7 @@ rtp_source_init (RTPSource * src)
   src->internal = FALSE;
   src->probation = RTP_DEFAULT_PROBATION;
 
-  src->payload = 0;
+  src->payload = -1;
   src->clock_rate = -1;
   src->packets = g_queue_new ();
   src->seqnum_base = -1;
@@ -575,13 +575,22 @@ rtp_source_update_caps (RTPSource * src, GstCaps * caps)
 
   if (gst_structure_get_int (s, "payload", &ival))
     src->payload = ival;
+  else
+    src->payload = -1;
   GST_DEBUG ("got payload %d", src->payload);
 
-  gst_structure_get_int (s, "clock-rate", &src->clock_rate);
+  if (gst_structure_get_int (s, "clock-rate", &ival))
+    src->clock_rate = ival;
+  else
+    src->clock_rate = -1;
+
   GST_DEBUG ("got clock-rate %d", src->clock_rate);
 
   if (gst_structure_get_uint (s, "seqnum-base", &val))
     src->seqnum_base = val;
+  else
+    src->seqnum_base = -1;
+
   GST_DEBUG ("got seqnum-base %" G_GINT32_FORMAT, src->seqnum_base);
 
   gst_caps_replace (&src->caps, caps);
@@ -776,7 +785,12 @@ push_packet (RTPSource * src, GstBuffer * buffer)
 static gint
 get_clock_rate (RTPSource * src, guint8 payload)
 {
-  if (payload != src->payload) {
+  if (src->payload == -1) {
+    /* first payload received, nothing was in the caps, lock on to this payload */
+    src->payload = payload;
+    GST_DEBUG ("first payload %d", payload);
+  } else if (payload != src->payload) {
+    /* we have a different payload than before, reset the clock-rate */
     GST_DEBUG ("new payload %d", payload);
     src->payload = payload;
     src->clock_rate = -1;
index 0353a58b3ef01ef503361c39afc7dc84b2094927..a44ac1cdbc1b2c3ac6a57813e89ee786d9d4f846 100644 (file)
@@ -128,7 +128,7 @@ struct _RTPSource {
   gboolean      have_rtcp_from;
   GstNetAddress rtcp_from;
 
-  guint8        payload;
+  gint          payload;
   GstCaps      *caps;
   gint          clock_rate;
   gint32        seqnum_base;