mxfdemux: Don't include any KLV packets between header metadata and index table segme...
authorSebastian Dröge <sebastian@centricular.com>
Tue, 4 Jul 2017 21:48:36 +0000 (00:48 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 4 Jul 2017 21:50:32 +0000 (00:50 +0300)
Minor fixup of last commit.

gst/mxf/mxfdemux.c

index 5716f94..d796e80 100644 (file)
@@ -2016,23 +2016,34 @@ read_partition_header (GstMXFDemux * demux)
       return;
   }
 
-  while (demux->offset <
-      demux->run_in +
-      demux->current_partition->partition.this_partition +
-      demux->current_partition->partition.header_byte_count +
-      demux->current_partition->partition.index_byte_count) {
-    if (mxf_is_index_table_segment (&key)) {
-      gst_mxf_demux_handle_index_table_segment (demux, &key, buf,
-          demux->offset);
-    }
+  while (mxf_is_fill (&key)) {
     demux->offset += read;
-
     gst_buffer_unref (buf);
     if (gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buf, &read)
         != GST_FLOW_OK)
       return;
   }
 
+  if (demux->current_partition->partition.index_byte_count
+      && mxf_is_index_table_segment (&key)) {
+    guint64 index_end_offset =
+        demux->offset + demux->current_partition->partition.index_byte_count;
+
+    while (demux->offset < index_end_offset) {
+      if (mxf_is_index_table_segment (&key)) {
+        gst_mxf_demux_handle_index_table_segment (demux, &key, buf,
+            demux->offset);
+      }
+      demux->offset += read;
+
+      gst_buffer_unref (buf);
+      if (gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buf,
+              &read)
+          != GST_FLOW_OK)
+        return;
+    }
+  }
+
   while (mxf_is_fill (&key)) {
     demux->offset += read;
     gst_buffer_unref (buf);