From 0524e6f8cdaec04843ea62f0974fa342fd62a3e6 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Tue, 18 Dec 2018 12:53:15 -0500 Subject: [PATCH] rtph265depay: Drain on EOS event --- gst/rtp/gstrtph265depay.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gst/rtp/gstrtph265depay.c b/gst/rtp/gstrtph265depay.c index 812b847ca5..f344a06954 100644 --- a/gst/rtp/gstrtph265depay.c +++ b/gst/rtp/gstrtph265depay.c @@ -109,6 +109,12 @@ static gboolean gst_rtp_h265_depay_setcaps (GstRTPBaseDepayload * filter, GstCaps * caps); static gboolean gst_rtp_h265_depay_handle_event (GstRTPBaseDepayload * depay, GstEvent * event); +static GstBuffer *gst_rtp_h265_complete_au (GstRtpH265Depay * rtph265depay, + GstClockTime * out_timestamp, gboolean * out_keyframe); +static void gst_rtp_h265_depay_push (GstRtpH265Depay * rtph265depay, + GstBuffer * outbuf, gboolean keyframe, GstClockTime timestamp, + gboolean marker); + static void gst_rtp_h265_depay_class_init (GstRtpH265DepayClass * klass) @@ -181,6 +187,21 @@ gst_rtp_h265_depay_reset (GstRtpH265Depay * rtph265depay, gboolean hard) } } +static void +gst_rtp_h265_depay_drain (GstRtpH265Depay * rtph265depay) +{ + GstClockTime timestamp; + gboolean keyframe; + GstBuffer *outbuf; + + if (!rtph265depay->picture_start) + return; + + outbuf = gst_rtp_h265_complete_au (rtph265depay, ×tamp, &keyframe); + if (outbuf) + gst_rtp_h265_depay_push (rtph265depay, outbuf, keyframe, timestamp, FALSE); +} + static void gst_rtp_h265_depay_finalize (GObject * object) { @@ -1573,6 +1594,9 @@ gst_rtp_h265_depay_handle_event (GstRTPBaseDepayload * depay, GstEvent * event) case GST_EVENT_FLUSH_STOP: gst_rtp_h265_depay_reset (rtph265depay, FALSE); break; + case GST_EVENT_EOS: + gst_rtp_h265_depay_drain (rtph265depay); + break; default: break; }