rtpvp8depay: If configured to wait for keyframes after packet loss, also do that if incomplete frames are detected

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>
This commit is contained in:
Sebastian Dröge 2022-08-26 18:42:44 +03:00 committed by GStreamer Marge Bot
parent ad6ba10ae3
commit cbc6761199

View 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;
}