Allow index table segments without primer pack
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 26 Jan 2009 15:23:38 +0000 (16:23 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Sat, 31 Jan 2009 10:02:24 +0000 (11:02 +0100)
When parsing an index table segment without a valid
primer pack in this partition only parse the static
local tags and ignore all dynamic ones.

This allows us to use index table segments in some
broken files.

gst/mxf/mxfdemux.c
gst/mxf/mxfparse.c

index 246c6c1..0473b69 100644 (file)
@@ -586,11 +586,11 @@ gst_mxf_demux_choose_package (GstMXFDemux * demux)
 
   for (i = 0; i < demux->preface->content_storage->n_packages; i++) {
     if (demux->preface->content_storage->packages[i] &&
-        MXF_IS_METADATA_MATERIAL_PACKAGE (demux->preface->
-            content_storage->packages[i])) {
+        MXF_IS_METADATA_MATERIAL_PACKAGE (demux->preface->content_storage->
+            packages[i])) {
       ret =
-          MXF_METADATA_GENERIC_PACKAGE (demux->preface->
-          content_storage->packages[i]);
+          MXF_METADATA_GENERIC_PACKAGE (demux->preface->content_storage->
+          packages[i]);
       break;
     }
   }
@@ -1237,8 +1237,8 @@ gst_mxf_demux_pad_next_component (GstMXFDemux * demux, GstMXFDemuxPad * pad)
       pad->current_component_index);
 
   pad->current_component =
-      MXF_METADATA_SOURCE_CLIP (sequence->
-      structural_components[pad->current_component_index]);
+      MXF_METADATA_SOURCE_CLIP (sequence->structural_components[pad->
+          current_component_index]);
   if (pad->current_component == NULL) {
     GST_ERROR_OBJECT (demux, "No such structural component");
     return GST_FLOW_ERROR;
@@ -1246,8 +1246,8 @@ gst_mxf_demux_pad_next_component (GstMXFDemux * demux, GstMXFDemuxPad * pad)
 
   if (!pad->current_component->source_package
       || !pad->current_component->source_package->top_level
-      || !MXF_METADATA_GENERIC_PACKAGE (pad->
-          current_component->source_package)->tracks) {
+      || !MXF_METADATA_GENERIC_PACKAGE (pad->current_component->
+          source_package)->tracks) {
     GST_ERROR_OBJECT (demux, "Invalid component");
     return GST_FLOW_ERROR;
   }
@@ -1582,7 +1582,6 @@ gst_mxf_demux_handle_index_table_segment (GstMXFDemux * demux,
 
   if (!demux->current_partition->primer.mappings) {
     GST_WARNING_OBJECT (demux, "Invalid primer pack");
-    return GST_FLOW_OK;
   }
 
   segment = g_new0 (MXFIndexTableSegment, 1);
index 0c83691..91fbda5 100644 (file)
@@ -868,9 +868,12 @@ mxf_index_table_segment_parse (const MXFUL * key,
         break;
       }
       default:
-        if (!mxf_local_tag_add_to_hash_table (primer, tag, tag_data, tag_size,
-                &segment->other_tags))
+        if (!primer->mappings) {
+          GST_WARNING ("No valid primer pack for this partition");
+        } else if (!mxf_local_tag_add_to_hash_table (primer, tag, tag_data,
+                tag_size, &segment->other_tags)) {
           goto error;
+        }
         break;
     }