srtpdec: Make sure to send caps events downstream before any segment events
authorSebastian Dröge <sebastian@centricular.com>
Thu, 30 Apr 2015 19:32:29 +0000 (21:32 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 30 Apr 2015 19:34:54 +0000 (21:34 +0200)
Upstream might not give us a caps event (dtlssrtpdec) because it might be an
RTP/RTCP mixed stream, but we split the two streams anyway and should report
proper caps downstream if possible.

Fixes "sticky event misordering" warnings with dtlssrtpdec.

ext/srtp/gstsrtpdec.c

index ba3c3cc..4259cf9 100644 (file)
@@ -796,6 +796,14 @@ gst_srtp_dec_sink_event_rtp (GstPad * pad, GstObject * parent, GstEvent * event)
       gst_event_unref (event);
       return ret;
     case GST_EVENT_SEGMENT:
+      /* Make sure to send a caps event downstream before the segment event,
+       * even if upstream didn't */
+      if (!gst_pad_has_current_caps (pad)) {
+        GstCaps *caps = gst_caps_new_empty_simple ("application/x-rtp");
+
+        gst_pad_event_default (pad, parent, gst_event_new_caps (caps));
+        gst_caps_unref (caps);
+      }
       filter->rtp_has_segment = TRUE;
       break;
     case GST_EVENT_FLUSH_STOP:
@@ -823,6 +831,14 @@ gst_srtp_dec_sink_event_rtcp (GstPad * pad, GstObject * parent,
       gst_event_unref (event);
       return ret;
     case GST_EVENT_SEGMENT:
+      /* Make sure to send a caps event downstream before the segment event,
+       * even if upstream didn't */
+      if (!gst_pad_has_current_caps (pad)) {
+        GstCaps *caps = gst_caps_new_empty_simple ("application/x-rtcp");
+
+        gst_pad_event_default (pad, parent, gst_event_new_caps (caps));
+        gst_caps_unref (caps);
+      }
       filter->rtcp_has_segment = TRUE;
       break;
     case GST_EVENT_FLUSH_STOP: