rtpvp8depay: If configured to wait for keyframes after packet loss, also do that...
authorSebastian Dröge <sebastian@centricular.com>
Fri, 26 Aug 2022 15:42:44 +0000 (18:42 +0300)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 31 Aug 2022 08:58:03 +0000 (08:58 +0000)
This can happen if the data inside the packets is incomplete without the
seqnums being discontinuous because of ULPFEC being used.

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

subprojects/gst-plugins-good/gst/rtp/gstrtpvp8depay.c

index 99d7554..3428f43 100644 (file)
@@ -354,6 +354,13 @@ gst_rtp_vp8_depay_process (GstRTPBaseDepayload * depay, GstRTPBuffer * rtp)
       gst_adapter_clear (self->adapter);
       self->started = FALSE;
 
+      if (self->wait_for_keyframe)
+        self->waiting_for_keyframe = TRUE;
+      if (self->request_keyframe)
+        gst_pad_push_event (GST_RTP_BASE_DEPAYLOAD_SINKPAD (depay),
+            gst_video_event_new_upstream_force_key_unit (GST_CLOCK_TIME_NONE,
+                TRUE, 0));
+
       send_new_lost_event (self, GST_BUFFER_PTS (rtp->buffer), picture_id,
           "Incomplete frame detected");
       sent_lost_event = TRUE;
@@ -368,6 +375,14 @@ gst_rtp_vp8_depay_process (GstRTPBaseDepayload * depay, GstRTPBuffer * rtp)
         send_last_lost_event (self);
         self->stop_lost_events = FALSE;
       }
+
+      if (self->wait_for_keyframe)
+        self->waiting_for_keyframe = TRUE;
+      if (self->request_keyframe)
+        gst_pad_push_event (GST_RTP_BASE_DEPAYLOAD_SINKPAD (depay),
+            gst_video_event_new_upstream_force_key_unit (GST_CLOCK_TIME_NONE,
+                TRUE, 0));
+
       goto done;
     }