summaryrefslogtreecommitdiffstats
path: root/gst/mxf
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2009-01-26 16:23:38 +0100
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-01-31 11:02:24 +0100
commitafbec8ab9bc8b8b477ae0f1c948c8df3da4e1ea0 (patch)
tree094cb80728a8bda6384c5565c8bb1462c7245de1 /gst/mxf
parent4162c36f17bdd3e58fa52cc994fbc1bdf4e3e6a0 (diff)
downloadgst-plugins-bad-afbec8ab9bc8b8b477ae0f1c948c8df3da4e1ea0.tar.gz
gst-plugins-bad-afbec8ab9bc8b8b477ae0f1c948c8df3da4e1ea0.tar.bz2
gst-plugins-bad-afbec8ab9bc8b8b477ae0f1c948c8df3da4e1ea0.zip
Allow index table segments without primer pack
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.
Diffstat (limited to 'gst/mxf')
-rw-r--r--gst/mxf/mxfdemux.c17
-rw-r--r--gst/mxf/mxfparse.c7
2 files changed, 13 insertions, 11 deletions
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
index 246c6c15..0473b696 100644
--- a/gst/mxf/mxfdemux.c
+++ b/gst/mxf/mxfdemux.c
@@ -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);
diff --git a/gst/mxf/mxfparse.c b/gst/mxf/mxfparse.c
index 0c836912..91fbda57 100644
--- a/gst/mxf/mxfparse.c
+++ b/gst/mxf/mxfparse.c
@@ -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;
}