summaryrefslogtreecommitdiff
path: root/gst/rtp/gstrtpjpegdepay.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/rtp/gstrtpjpegdepay.c')
-rw-r--r--gst/rtp/gstrtpjpegdepay.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gst/rtp/gstrtpjpegdepay.c b/gst/rtp/gstrtpjpegdepay.c
index c804aea9d..d9687812b 100644
--- a/gst/rtp/gstrtpjpegdepay.c
+++ b/gst/rtp/gstrtpjpegdepay.c
@@ -531,6 +531,13 @@ gst_rtp_jpeg_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer * rtp)
width = payload[6] * 8;
height = payload[7] * 8;
+ /* saw a packet with fragment offset > 0 and we don't already have data queued
+ * up (most importantly, we don't have a header for this data) -- drop it
+ * XXX: maybe we can check if the jpeg is progressive and salvage the data?
+ * XXX: not implemented yet because jpegenc can't create progressive jpegs */
+ if (frag_offset > 0 && gst_adapter_available (rtpjpegdepay->adapter) == 0)
+ goto no_header_packet;
+
/* allow frame dimensions > 2040, passed in SDP session or media attributes
* from gstrtspsrc.c (gst_rtspsrc_sdp_attributes_to_caps), or in caps */
if (!width)
@@ -747,6 +754,12 @@ invalid_packet:
gst_adapter_available (rtpjpegdepay->adapter));
return NULL;
}
+no_header_packet:
+ {
+ GST_WARNING_OBJECT (rtpjpegdepay,
+ "discarding data packets received when we have no header");
+ return NULL;
+ }
}