rtppassthroughpay: Fix reading clock-rate and payload type from caps
authorPiotr Brzeziński <piotr@centricular.com>
Wed, 18 Sep 2024 10:34:39 +0000 (12:34 +0200)
committerBackport Bot <gitlab-backport-bot@gstreamer-foundation.org>
Thu, 19 Sep 2024 18:13:08 +0000 (20:13 +0200)
They were using wrong types - while uint is correct technically, for compatibility reasons caps have them as signed int.
Values are now correctly read + added simple guards just to be sure.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7552>

subprojects/gst-plugins-good/docs/gst_plugins_cache.json
subprojects/gst-plugins-good/gst/rtp/gstrtppassthroughpay.c
subprojects/gst-plugins-good/gst/rtp/gstrtppassthroughpay.h

index 03a0476aff100f60b97aaa0572223171c330ee3e..21b6341b8a29f57fb696df0f7c9bd99a95c2333d 100644 (file)
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "application/x-rtp-payload-stats, clock-rate=(uint)0, running-time=(guint64)0, seqnum=(uint)0, timestamp=(uint)0, ssrc=(uint)0, pt=(uint)128, seqnum-offset=(uint)0, timestamp-offset=(uint)0;",
+                        "default": "application/x-rtp-payload-stats, clock-rate=(int)0, running-time=(guint64)0, seqnum=(uint)0, timestamp=(uint)0, ssrc=(uint)0, pt=(int)128, seqnum-offset=(uint)0, timestamp-offset=(uint)0;",
                         "mutable": "null",
                         "readable": true,
                         "type": "GstStructure",
index 2a76c0fdd2dd8f6a1121b2b4640351d7265ab22e..8fdee0901823306620216f7b07214bcec4b33cb1 100644 (file)
@@ -411,8 +411,12 @@ gst_rtp_passthrough_pay_sink_event (GstPad * pad,
 
       s = gst_caps_get_structure (caps, 0);
 
-      gst_structure_get_uint (s, "payload", &self->pt);
-      gst_structure_get_uint (s, "clock-rate", &self->clock_rate);
+      if (!self->pt_override
+          && !gst_structure_get_int (s, "payload", &self->pt)) {
+        GST_WARNING_OBJECT (self, "Caps are missing payload type!");
+      }
+      if (!gst_structure_get_int (s, "clock-rate", &self->clock_rate))
+        GST_WARNING_OBJECT (self, "Caps are missing clock-rate!");
       if (gst_structure_get_uint (s, "ssrc", &self->ssrc))
         self->ssrc_set = TRUE;
       if (gst_structure_get_uint (s, "clock-base", &self->timestamp_offset))
@@ -460,10 +464,10 @@ gst_rtp_passthrough_pay_create_stats (GstRtpPassthroughPay * self)
   }
 
   return gst_structure_new ("application/x-rtp-payload-stats", "clock-rate",
-      G_TYPE_UINT, (guint) self->clock_rate, "running-time", G_TYPE_UINT64,
+      G_TYPE_INT, self->clock_rate, "running-time", G_TYPE_UINT64,
       running_time, "seqnum", G_TYPE_UINT, (guint) self->seqnum, "timestamp",
       G_TYPE_UINT, (guint) self->timestamp, "ssrc", G_TYPE_UINT, self->ssrc,
-      "pt", G_TYPE_UINT, self->pt, "seqnum-offset", G_TYPE_UINT,
+      "pt", G_TYPE_INT, self->pt, "seqnum-offset", G_TYPE_UINT,
       (guint) self->seqnum_offset, "timestamp-offset", G_TYPE_UINT,
       (guint) self->timestamp_offset, NULL);
 
index 9191e35b8999b502e607607ebf1c88febe71b4df..68536821d7e4fab514c5902027461689b6ad8af5 100644 (file)
@@ -53,8 +53,8 @@ struct _GstRtpPassthroughPay
   GstCaps *caps;
   GstSegment segment;
 
-  guint clock_rate;
-  guint pt;
+  gint clock_rate;
+  gint pt;
   gboolean pt_override;
   guint ssrc;
   gboolean ssrc_set;