diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2008-12-11 14:35:08 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2008-12-11 14:35:08 +0000 |
commit | 1fe82925f5d7419bd073a33cfa85be2c3e19a397 (patch) | |
tree | 58b2c4d49ae1e0fa13ea7e3d5f5d20568f6c44a5 /gst/mxf/mxfdemux.c | |
parent | db08161b6d2562fc0b60b394a612972d886a693b (diff) | |
download | gst-plugins-bad-1fe82925f5d7419bd073a33cfa85be2c3e19a397.tar.gz gst-plugins-bad-1fe82925f5d7419bd073a33cfa85be2c3e19a397.tar.bz2 gst-plugins-bad-1fe82925f5d7419bd073a33cfa85be2c3e19a397.zip |
gst/mxf/: Implement parsing of Event Tracks, Static Tracks, DM Segments and DM Source Clips as a preparation for desc...
Original commit message from CVS:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_handle_metadata_track),
(gst_mxf_demux_handle_header_metadata_resolve_references),
(gst_mxf_demux_handle_metadata):
* gst/mxf/mxfparse.c: (mxf_metadata_track_parse),
(mxf_metadata_structural_component_parse),
(mxf_metadata_structural_component_reset):
* gst/mxf/mxfparse.h:
* gst/mxf/mxftypes.h:
Implement parsing of Event Tracks, Static Tracks, DM Segments
and DM Source Clips as a preparation for descriptive metadata
support. Next step is to implement SMPTE S380M, "Descriptive
Metadata Scheme-1".
Diffstat (limited to 'gst/mxf/mxfdemux.c')
-rw-r--r-- | gst/mxf/mxfdemux.c | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c index 6c6e9296..93318859 100644 --- a/gst/mxf/mxfdemux.c +++ b/gst/mxf/mxfdemux.c @@ -720,17 +720,18 @@ gst_mxf_demux_handle_metadata_source_package (GstMXFDemux * demux, static GstFlowReturn gst_mxf_demux_handle_metadata_track (GstMXFDemux * demux, - const MXFUL * key, GstBuffer * buffer) + const MXFUL * key, guint16 type, GstBuffer * buffer) { MXFMetadataTrack track; GST_DEBUG_OBJECT (demux, - "Handling metadata track of size %u" - " at offset %" G_GUINT64_FORMAT, GST_BUFFER_SIZE (buffer), demux->offset); + "Handling metadata track with type 0x%04x of size %u" + " at offset %" G_GUINT64_FORMAT, type, GST_BUFFER_SIZE (buffer), + demux->offset); if (!mxf_metadata_track_parse (key, &track, &demux->primer, - GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer))) { - GST_ERROR_OBJECT (demux, "Parsing metadata track timecode failed"); + type, GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer))) { + GST_ERROR_OBJECT (demux, "Parsing metadata track failed"); return GST_FLOW_ERROR; } @@ -1287,8 +1288,6 @@ gst_mxf_demux_handle_header_metadata_resolve_references (GstMXFDemux * demux) } demux->preface.content_storage = &demux->content_storage; - /* TODO: dm_schemes */ - /* Content storage */ demux->content_storage.packages = g_new0 (MXFMetadataGenericPackage *, demux->content_storage.n_packages); @@ -1317,8 +1316,9 @@ gst_mxf_demux_handle_header_metadata_resolve_references (GstMXFDemux * demux) MXFMetadataEssenceContainerData, i); for (j = 0; j < demux->content_storage.n_essence_container_data; j++) { - if (mxf_ul_is_equal (&demux->content_storage. - essence_container_data_uids[j], &data->instance_uid)) { + if (mxf_ul_is_equal (&demux-> + content_storage.essence_container_data_uids[j], + &data->instance_uid)) { demux->content_storage.essence_container_data[j] = data; break; } @@ -1500,7 +1500,8 @@ gst_mxf_demux_handle_header_metadata_resolve_references (GstMXFDemux * demux) &g_array_index (demux->structural_component, MXFMetadataStructuralComponent, i); - if (component->type != MXF_METADATA_SOURCE_CLIP) + if (component->type != MXF_METADATA_SOURCE_CLIP + && component->type != MXF_METADATA_DM_SOURCE_CLIP) continue; for (j = 0; j < demux->source_package->len; j++) { @@ -1508,10 +1509,16 @@ gst_mxf_demux_handle_header_metadata_resolve_references (GstMXFDemux * demux) &g_array_index (demux->source_package, MXFMetadataGenericPackage, j); - if (mxf_umid_is_equal (&component->source_clip.source_package_id, + if (component->type == MXF_METADATA_SOURCE_CLIP && + mxf_umid_is_equal (&component->source_clip.source_package_id, &package->package_uid)) { component->source_clip.source_package = package; break; + } else if (component->type == MXF_METADATA_DM_SOURCE_CLIP && + mxf_umid_is_equal (&component->dm_source_clip.source_package_id, + &package->package_uid)) { + component->dm_source_clip.source_package = package; + break; } } } @@ -1986,7 +1993,7 @@ gst_mxf_demux_handle_metadata (GstMXFDemux * demux, const MXFUL * key, GST_DEBUG_OBJECT (demux, "Handling metadata of size %u at offset %" - G_GUINT64_FORMAT " of type 0x%04d", GST_BUFFER_SIZE (buffer), + G_GUINT64_FORMAT " of type 0x%04x", GST_BUFFER_SIZE (buffer), demux->offset, type); if (G_UNLIKELY (!demux->partition.valid)) { @@ -2027,13 +2034,17 @@ gst_mxf_demux_handle_metadata (GstMXFDemux * demux, const MXFUL * key, ret = gst_mxf_demux_handle_metadata_source_package (demux, key, buffer); break; case MXF_METADATA_TRACK: - ret = gst_mxf_demux_handle_metadata_track (demux, key, buffer); + case MXF_METADATA_EVENT_TRACK: + case MXF_METADATA_STATIC_TRACK: + ret = gst_mxf_demux_handle_metadata_track (demux, key, type, buffer); break; case MXF_METADATA_SEQUENCE: ret = gst_mxf_demux_handle_metadata_sequence (demux, key, buffer); break; case MXF_METADATA_TIMECODE_COMPONENT: case MXF_METADATA_SOURCE_CLIP: + case MXF_METADATA_DM_SEGMENT: + case MXF_METADATA_DM_SOURCE_CLIP: ret = gst_mxf_demux_handle_metadata_structural_component (demux, key, type, buffer); |