qtdemux: don't push encrypted buffer without cenc metadata
authorPhilippe Normand <philn@igalia.com>
Wed, 24 Feb 2016 08:12:03 +0000 (09:12 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 25 Feb 2016 10:46:27 +0000 (12:46 +0200)
When the cenc metadata is stored outside of the moof box and the
stream is exposed it is possible that the cenc metadata hasn't been
processed yet while the first buffer is being pushed. When this
happens the buffer can't possibly be decrypted downstream so don't
push it.

https://bugzilla.gnome.org/show_bug.cgi?id=762516

gst/isomp4/qtdemux.c

index 20618a6..a7e188d 100644 (file)
@@ -4971,6 +4971,12 @@ gst_qtdemux_decorate_and_push_buffer (GstQTDemux * qtdemux,
       gst_pad_push_event (stream->pad, event);
     }
 
+    if (qtdemux->cenc_aux_info_offset > 0 && info->crypto_info == NULL) {
+      GST_DEBUG_OBJECT (qtdemux, "cenc metadata hasn't been parsed yet");
+      gst_buffer_unref (buf);
+      goto exit;
+    }
+
     index = stream->sample_index - (stream->n_samples - info->crypto_info->len);
     if (G_LIKELY (index >= 0 && index < info->crypto_info->len)) {
       /* steal structure from array */