summaryrefslogtreecommitdiffstats
path: root/gst/mxf/mxfdemux.c
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-11-25 10:26:11 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2008-11-25 10:26:11 +0000
commit4f365b391e9ab1582c2374889f4255da61f8d330 (patch)
treebf19e9e86e06297722d7fe31fe4d3497e671ab71 /gst/mxf/mxfdemux.c
parentfb8d2b901ddf2d03f4263f9e69b673ef1c89e353 (diff)
downloadgst-plugins-bad-4f365b391e9ab1582c2374889f4255da61f8d330.tar.gz
gst-plugins-bad-4f365b391e9ab1582c2374889f4255da61f8d330.tar.bz2
gst-plugins-bad-4f365b391e9ab1582c2374889f4255da61f8d330.zip
gst/mxf/: Add initial parsing of RGBA descriptors.
Original commit message from CVS: * gst/mxf/mxfdemux.c: (gst_mxf_demux_reset_metadata), (gst_mxf_demux_handle_metadata_generic_descriptor), (gst_mxf_demux_handle_metadata_file_descriptor), (gst_mxf_demux_handle_metadata_multiple_descriptor), (gst_mxf_demux_handle_metadata_generic_picture_essence_descriptor), (gst_mxf_demux_handle_metadata_cdci_picture_essence_descriptor), (gst_mxf_demux_handle_metadata_rgba_picture_essence_descriptor), (gst_mxf_demux_handle_metadata_mpeg_video_descriptor), (gst_mxf_demux_handle_metadata_generic_sound_essence_descriptor), (gst_mxf_demux_handle_metadata_wave_audio_essence_descriptor), (gst_mxf_demux_handle_header_metadata_resolve_references), (gst_mxf_demux_handle_metadata): * gst/mxf/mxfdemux.h: * gst/mxf/mxfparse.c: (mxf_metadata_rgba_picture_essence_descriptor_handle_tag), (mxf_metadata_rgba_picture_essence_descriptor_reset): * gst/mxf/mxfparse.h: * gst/mxf/mxftypes.h: Add initial parsing of RGBA descriptors. Don't initialize descriptor GArray with zeroes.
Diffstat (limited to 'gst/mxf/mxfdemux.c')
-rw-r--r--gst/mxf/mxfdemux.c78
1 files changed, 67 insertions, 11 deletions
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
index bb272121..d02e5ade 100644
--- a/gst/mxf/mxfdemux.c
+++ b/gst/mxf/mxfdemux.c
@@ -289,6 +289,15 @@ gst_mxf_demux_reset_metadata (GstMXFDemux * demux)
demux->cdci_picture_essence_descriptor = NULL;
}
+ if (demux->rgba_picture_essence_descriptor) {
+ for (i = 0; i < demux->rgba_picture_essence_descriptor->len; i++)
+ mxf_metadata_rgba_picture_essence_descriptor_reset (&g_array_index
+ (demux->rgba_picture_essence_descriptor,
+ MXFMetadataRGBAPictureEssenceDescriptor, i));
+ g_array_free (demux->rgba_picture_essence_descriptor, TRUE);
+ demux->rgba_picture_essence_descriptor = NULL;
+ }
+
if (demux->mpeg_video_descriptor) {
for (i = 0; i < demux->mpeg_video_descriptor->len; i++)
mxf_metadata_mpeg_video_descriptor_reset (&g_array_index
@@ -722,7 +731,7 @@ gst_mxf_demux_handle_metadata_generic_descriptor (GstMXFDemux * demux,
if (!demux->generic_descriptor)
demux->generic_descriptor =
- g_array_new (FALSE, TRUE, sizeof (MXFMetadataGenericDescriptor));
+ g_array_new (FALSE, FALSE, sizeof (MXFMetadataGenericDescriptor));
g_array_append_val (demux->generic_descriptor, descriptor);
@@ -754,7 +763,7 @@ gst_mxf_demux_handle_metadata_file_descriptor (GstMXFDemux * demux,
if (!demux->file_descriptor)
demux->file_descriptor =
- g_array_new (FALSE, TRUE, sizeof (MXFMetadataFileDescriptor));
+ g_array_new (FALSE, FALSE, sizeof (MXFMetadataFileDescriptor));
g_array_append_val (demux->file_descriptor, descriptor);
@@ -787,7 +796,7 @@ gst_mxf_demux_handle_metadata_multiple_descriptor (GstMXFDemux * demux,
if (!demux->multiple_descriptor)
demux->multiple_descriptor =
- g_array_new (FALSE, TRUE, sizeof (MXFMetadataMultipleDescriptor));
+ g_array_new (FALSE, FALSE, sizeof (MXFMetadataMultipleDescriptor));
g_array_append_val (demux->multiple_descriptor, descriptor);
@@ -821,7 +830,7 @@ gst_mxf_demux_handle_metadata_generic_picture_essence_descriptor (GstMXFDemux *
if (!demux->generic_picture_essence_descriptor)
demux->generic_picture_essence_descriptor =
- g_array_new (FALSE, TRUE,
+ g_array_new (FALSE, FALSE,
sizeof (MXFMetadataGenericPictureEssenceDescriptor));
g_array_append_val (demux->generic_picture_essence_descriptor, descriptor);
@@ -856,7 +865,7 @@ gst_mxf_demux_handle_metadata_cdci_picture_essence_descriptor (GstMXFDemux *
if (!demux->cdci_picture_essence_descriptor)
demux->cdci_picture_essence_descriptor =
- g_array_new (FALSE, TRUE,
+ g_array_new (FALSE, FALSE,
sizeof (MXFMetadataCDCIPictureEssenceDescriptor));
g_array_append_val (demux->cdci_picture_essence_descriptor, descriptor);
@@ -865,6 +874,41 @@ gst_mxf_demux_handle_metadata_cdci_picture_essence_descriptor (GstMXFDemux *
}
static GstFlowReturn
+gst_mxf_demux_handle_metadata_rgba_picture_essence_descriptor (GstMXFDemux *
+ demux, const MXFUL * key, guint16 type, GstBuffer * buffer)
+{
+ MXFMetadataRGBAPictureEssenceDescriptor descriptor;
+
+ memset (&descriptor, 0, sizeof (descriptor));
+
+ GST_DEBUG_OBJECT (demux,
+ "Handling metadata RGBA picture essence descriptor of size %u"
+ " at offset %" G_GUINT64_FORMAT " with type 0x%04d",
+ GST_BUFFER_SIZE (buffer), demux->offset, type);
+
+ if (!mxf_metadata_descriptor_parse (key,
+ (MXFMetadataGenericDescriptor *) & descriptor, &demux->primer,
+ type, GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer),
+ (MXFMetadataDescriptorHandleTag)
+ mxf_metadata_rgba_picture_essence_descriptor_handle_tag,
+ (MXFMetadataDescriptorReset)
+ mxf_metadata_rgba_picture_essence_descriptor_reset)) {
+ GST_ERROR_OBJECT (demux,
+ "Parsing metadata RGBA picture essence descriptor failed");
+ return GST_FLOW_ERROR;
+ }
+
+ if (!demux->rgba_picture_essence_descriptor)
+ demux->rgba_picture_essence_descriptor =
+ g_array_new (FALSE, FALSE,
+ sizeof (MXFMetadataRGBAPictureEssenceDescriptor));
+
+ g_array_append_val (demux->rgba_picture_essence_descriptor, descriptor);
+
+ return GST_FLOW_OK;
+}
+
+static GstFlowReturn
gst_mxf_demux_handle_metadata_mpeg_video_descriptor (GstMXFDemux * demux,
const MXFUL * key, guint16 type, GstBuffer * buffer)
{
@@ -890,7 +934,7 @@ gst_mxf_demux_handle_metadata_mpeg_video_descriptor (GstMXFDemux * demux,
if (!demux->mpeg_video_descriptor)
demux->mpeg_video_descriptor =
- g_array_new (FALSE, TRUE, sizeof (MXFMetadataMPEGVideoDescriptor));
+ g_array_new (FALSE, FALSE, sizeof (MXFMetadataMPEGVideoDescriptor));
g_array_append_val (demux->mpeg_video_descriptor, descriptor);
@@ -924,7 +968,7 @@ gst_mxf_demux_handle_metadata_generic_sound_essence_descriptor (GstMXFDemux *
if (!demux->generic_sound_essence_descriptor)
demux->generic_sound_essence_descriptor =
- g_array_new (FALSE, TRUE,
+ g_array_new (FALSE, FALSE,
sizeof (MXFMetadataGenericSoundEssenceDescriptor));
g_array_append_val (demux->generic_sound_essence_descriptor, descriptor);
@@ -959,7 +1003,7 @@ gst_mxf_demux_handle_metadata_wave_audio_essence_descriptor (GstMXFDemux *
if (!demux->wave_audio_essence_descriptor)
demux->wave_audio_essence_descriptor =
- g_array_new (FALSE, TRUE,
+ g_array_new (FALSE, FALSE,
sizeof (MXFMetadataWaveAudioEssenceDescriptor));
g_array_append_val (demux->wave_audio_essence_descriptor, descriptor);
@@ -1033,6 +1077,13 @@ gst_mxf_demux_handle_header_metadata_resolve_references (GstMXFDemux * demux)
MXFMetadataCDCIPictureEssenceDescriptor, i));
}
}
+ if (demux->rgba_picture_essence_descriptor) {
+ for (i = 0; i < demux->rgba_picture_essence_descriptor->len; i++) {
+ g_ptr_array_add (demux->descriptor,
+ &g_array_index (demux->rgba_picture_essence_descriptor,
+ MXFMetadataRGBAPictureEssenceDescriptor, i));
+ }
+ }
if (demux->mpeg_video_descriptor) {
for (i = 0; i < demux->mpeg_video_descriptor->len; i++) {
g_ptr_array_add (demux->descriptor,
@@ -1173,8 +1224,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;
}
@@ -1827,7 +1879,6 @@ gst_mxf_demux_handle_metadata (GstMXFDemux * demux, const MXFUL * key,
gst_mxf_demux_handle_metadata_structural_component (demux,
key, type, buffer);
break;
- case MXF_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR:
case MXF_METADATA_GENERIC_DATA_ESSENCE_DESCRIPTOR:
ret =
gst_mxf_demux_handle_metadata_generic_descriptor (demux,
@@ -1848,6 +1899,11 @@ gst_mxf_demux_handle_metadata (GstMXFDemux * demux, const MXFUL * key,
gst_mxf_demux_handle_metadata_cdci_picture_essence_descriptor (demux,
key, type, buffer);
break;
+ case MXF_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR:
+ ret =
+ gst_mxf_demux_handle_metadata_rgba_picture_essence_descriptor (demux,
+ key, type, buffer);
+ break;
case MXF_METADATA_MPEG_VIDEO_DESCRIPTOR:
ret =
gst_mxf_demux_handle_metadata_mpeg_video_descriptor (demux,