summaryrefslogtreecommitdiffstats
path: root/gst/mxf/mxfdemux.c
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-12-11 14:35:08 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2008-12-11 14:35:08 +0000
commit1fe82925f5d7419bd073a33cfa85be2c3e19a397 (patch)
tree58b2c4d49ae1e0fa13ea7e3d5f5d20568f6c44a5 /gst/mxf/mxfdemux.c
parentdb08161b6d2562fc0b60b394a612972d886a693b (diff)
downloadgst-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.c37
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);