slomo gst-plugins-bad: gst-plugins-bad/ gst-plugins-bad/gst/mxf/
[email protected] Tue, 25 Nov 2008 01:38:41 -0800 (PST)
Newsgroups
gmane.comp.video.gstreamer.cvs
Message-ID
<[email protected] >
CVS Root: /cvs/gstreamer
Module: gst-plugins-bad
Changes by: slomo
Date: Tue Nov 25 2008 09:38:41 UTC
Log message:
* gst/mxf/mxfaes-bwf.c:
(mxf_metadata_wave_audio_essence_descriptor_handle_tag):
* gst/mxf/mxfaes-bwf.h:
* gst/mxf/mxfdemux.c:
(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_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/mxfmpeg.c:
(mxf_metadata_mpeg_video_descriptor_handle_tag):
* gst/mxf/mxfmpeg.h:
* gst/mxf/mxfparse.c: (mxf_partition_pack_parse),
(mxf_primer_pack_parse), (mxf_metadata_preface_parse),
(mxf_metadata_identification_parse),
(mxf_metadata_content_storage_parse),
(mxf_metadata_essence_container_data_parse),
(mxf_metadata_generic_package_parse), (mxf_metadata_track_parse),
(mxf_metadata_sequence_parse),
(mxf_metadata_structural_component_parse),
(mxf_metadata_descriptor_parse),
(mxf_metadata_generic_descriptor_handle_tag),
(mxf_metadata_generic_descriptor_reset),
(mxf_metadata_file_descriptor_handle_tag),
(mxf_metadata_generic_sound_essence_descriptor_handle_tag),
(mxf_metadata_generic_picture_essence_descriptor_handle_tag),
(mxf_metadata_cdci_picture_essence_descriptor_handle_tag),
(mxf_metadata_multiple_descriptor_handle_tag),
(mxf_metadata_locator_parse):
* gst/mxf/mxfparse.h:
Rewrite parsing of descriptors to go top-down instead of bottom-up
which makes it possible to have the buffer data non-writable.
Improve debugging a bit.
Modified files:
. : ChangeLog
gst/mxf : mxfaes-bwf.c mxfaes-bwf.h mxfdemux.c mxfmpeg.c
mxfmpeg.h mxfparse.c mxfparse.h
Links:
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.3738&r2=1.3739
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfaes-bwf.c.diff?r1=1.2&r2=1.3
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfaes-bwf.h.diff?r1=1.2&r2=1.3
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.c.diff?r1=1.6&r2=1.7
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfmpeg.c.diff?r1=1.2&r2=1.3
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfmpeg.h.diff?r1=1.2&r2=1.3
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfparse.c.diff?r1=1.4&r2=1.5
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfparse.h.diff?r1=1.2&r2=1.3
====Begin Diffs====
Index: ChangeLog
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v
retrieving revision 1.3738
retrieving revision 1.3739
diff -u -d -r1.3738 -r1.3739
--- ChangeLog 25 Nov 2008 00:20:20 -0000 1.3738
+++ ChangeLog 25 Nov 2008 09:38:23 -0000 1.3739
@@ -1,3 +1,45 @@
+2008-11-25 Sebastian Dröge <[email protected] >
+
+ * gst/mxf/mxfaes-bwf.c:
+ (mxf_metadata_wave_audio_essence_descriptor_handle_tag):
+ * gst/mxf/mxfaes-bwf.h:
+ * gst/mxf/mxfdemux.c:
+ (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_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/mxfmpeg.c:
+ (mxf_metadata_mpeg_video_descriptor_handle_tag):
+ * gst/mxf/mxfmpeg.h:
+ * gst/mxf/mxfparse.c: (mxf_partition_pack_parse),
+ (mxf_primer_pack_parse), (mxf_metadata_preface_parse),
+ (mxf_metadata_identification_parse),
+ (mxf_metadata_content_storage_parse),
+ (mxf_metadata_essence_container_data_parse),
+ (mxf_metadata_generic_package_parse), (mxf_metadata_track_parse),
+ (mxf_metadata_sequence_parse),
+ (mxf_metadata_structural_component_parse),
+ (mxf_metadata_descriptor_parse),
+ (mxf_metadata_generic_descriptor_handle_tag),
+ (mxf_metadata_generic_descriptor_reset),
+ (mxf_metadata_file_descriptor_handle_tag),
+ (mxf_metadata_generic_sound_essence_descriptor_handle_tag),
+ (mxf_metadata_generic_picture_essence_descriptor_handle_tag),
+ (mxf_metadata_cdci_picture_essence_descriptor_handle_tag),
+ (mxf_metadata_multiple_descriptor_handle_tag),
+ (mxf_metadata_locator_parse):
+ * gst/mxf/mxfparse.h:
+ Rewrite parsing of descriptors to go top-down instead of bottom-up
+ which makes it possible to have the buffer data non-writable.
+ Improve debugging a bit.
2008-11-24 Michael Smith <[email protected] >
* configure.ac:
Index: mxfaes-bwf.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfaes-bwf.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- mxfaes-bwf.c 22 Nov 2008 14:42:07 -0000 1.2
+++ mxfaes-bwf.c 25 Nov 2008 09:38:26 -0000 1.3
@@ -41,154 +41,134 @@
/* SMPTE 382M Annex 1 */
gboolean
-mxf_metadata_wave_audio_essence_descriptor_parse (const MXFUL * key,
- MXFMetadataWaveAudioEssenceDescriptor * descriptor,
- const MXFPrimerPack * primer, guint16 type, const guint8 * data, guint size)
+ mxf_metadata_wave_audio_essence_descriptor_handle_tag
+ (MXFMetadataGenericDescriptor * d, const MXFPrimerPack * primer,
+ guint16 tag, const guint8 * tag_data, guint16 tag_size)
{
- guint16 tag, tag_size;
- const guint8 *tag_data;
+ MXFMetadataWaveAudioEssenceDescriptor *descriptor =
+ (MXFMetadataWaveAudioEssenceDescriptor *) d;
+ gboolean ret = FALSE;
gchar str[48];
- g_return_val_if_fail (data != NULL, FALSE);
-
- memset (descriptor, 0, sizeof (MXFMetadataWaveAudioEssenceDescriptor));
- if (!mxf_metadata_generic_sound_essence_descriptor_parse (key,
- (MXFMetadataGenericSoundEssenceDescriptor *) descriptor, primer, type,
- data, size))
- goto error;
- while (mxf_local_tag_parse (data, size, &tag, &tag_size, &tag_data)) {
- if (tag_size == 0 || tag == 0x0000)
- goto next;
- switch (tag) {
- case 0x3d0a:
- GST_WRITE_UINT16_BE (data, 0x0000);
- if (tag_size != 2)
- goto error;
- descriptor->block_align = GST_READ_UINT16_BE (tag_data);
- break;
- case 0x3d0b:
- if (tag_size != 1)
- descriptor->sequence_offset = GST_READ_UINT8 (tag_data);
- case 0x3d09:
- if (tag_size != 4)
- descriptor->avg_bps = GST_READ_UINT32_BE (tag_data);
- case 0x3d32:
- if (tag_size != 16)
- memcpy (&descriptor->channel_assignment, tag_data, 16);
- case 0x3d29:
- descriptor->peak_envelope_version = GST_READ_UINT32_BE (tag_data);
- case 0x3d2a:
- descriptor->peak_envelope_format = GST_READ_UINT32_BE (tag_data);
- case 0x3d2b:
- descriptor->points_per_peak_value = GST_READ_UINT32_BE (tag_data);
- case 0x3d2c:
- descriptor->peak_envelope_block_size = GST_READ_UINT32_BE (tag_data);
- case 0x3d2d:
- descriptor->peak_channels = GST_READ_UINT32_BE (tag_data);
- case 0x3d2e:
- descriptor->peak_frames = GST_READ_UINT32_BE (tag_data);
- case 0x3d2f:
- if (tag_size != 8)
- descriptor->peak_of_peaks_position = GST_READ_UINT64_BE (tag_data);
- case 0x3d30:
- if (!mxf_timestamp_parse (&descriptor->peak_envelope_timestamp,
- tag_data, tag_size))
- case 0x3d31:
- descriptor->peak_envelope_data = g_memdup (tag_data, tag_size);
- descriptor->peak_envelope_data_length = tag_size;
- default:
- if (type != MXF_METADATA_WAVE_AUDIO_ESSENCE_DESCRIPTOR)
- goto next;
- if (!gst_metadata_add_custom_tag (primer, tag, tag_data, tag_size,
- &((MXFMetadataGenericDescriptor *) descriptor)->other_tags))
- }
- next:
- data += 4 + tag_size;
- size -= 4 + tag_size;
+ switch (tag) {
+ case 0x3d0a:
+ if (tag_size != 2)
+ goto error;
+ descriptor->block_align = GST_READ_UINT16_BE (tag_data);
+ GST_DEBUG (" block align = %u", descriptor->block_align);
+ ret = TRUE;
+ break;
+ case 0x3d0b:
+ if (tag_size != 1)
+ descriptor->sequence_offset = GST_READ_UINT8 (tag_data);
+ GST_DEBUG (" sequence offset = %u", descriptor->sequence_offset);
+ case 0x3d09:
+ if (tag_size != 4)
+ descriptor->avg_bps = GST_READ_UINT32_BE (tag_data);
+ GST_DEBUG (" average bps = %u", descriptor->avg_bps);
+ case 0x3d32:
+ if (tag_size != 16)
+ memcpy (&descriptor->channel_assignment, tag_data, 16);
+ GST_DEBUG (" channel assignment = %s",
+ mxf_ul_to_string (&descriptor->channel_assignment, str));
+ case 0x3d29:
+ descriptor->peak_envelope_version = GST_READ_UINT32_BE (tag_data);
+ GST_DEBUG (" peak envelope version = %u",
+ descriptor->peak_envelope_version);
+ case 0x3d2a:
+ descriptor->peak_envelope_format = GST_READ_UINT32_BE (tag_data);
+ GST_DEBUG (" peak envelope format = %u",
+ descriptor->peak_envelope_format);
+ case 0x3d2b:
+ descriptor->points_per_peak_value = GST_READ_UINT32_BE (tag_data);
+ GST_DEBUG (" points per peak value = %u",
+ descriptor->points_per_peak_value);
+ case 0x3d2c:
+ descriptor->peak_envelope_block_size = GST_READ_UINT32_BE (tag_data);
+ GST_DEBUG (" peak envelope block size = %u",
+ descriptor->peak_envelope_block_size);
+ case 0x3d2d:
+ descriptor->peak_channels = GST_READ_UINT32_BE (tag_data);
+ GST_DEBUG (" peak channels = %u", descriptor->peak_channels);
+ case 0x3d2e:
+ descriptor->peak_frames = GST_READ_UINT32_BE (tag_data);
+ GST_DEBUG (" peak frames = %u", descriptor->peak_frames);
+ case 0x3d2f:
+ if (tag_size != 8)
+ descriptor->peak_of_peaks_position = GST_READ_UINT64_BE (tag_data);
+ GST_DEBUG (" peak of peaks position = %" G_GINT64_FORMAT,
+ descriptor->peak_of_peaks_position);
+ case 0x3d30:
+ if (!mxf_timestamp_parse (&descriptor->peak_envelope_timestamp,
+ tag_data, tag_size))
+ GST_DEBUG (" peak envelope timestamp = %d/%u/%u %u:%u:%u.%u",
+ descriptor->peak_envelope_timestamp.year,
+ descriptor->peak_envelope_timestamp.month,
+ descriptor->peak_envelope_timestamp.day,
+ descriptor->peak_envelope_timestamp.hour,
+ descriptor->peak_envelope_timestamp.minute,
+ descriptor->peak_envelope_timestamp.second,
+ (descriptor->peak_envelope_timestamp.quarter_msecond * 1000) / 256);
+ case 0x3d31:
+ descriptor->peak_envelope_data = g_memdup (tag_data, tag_size);
+ descriptor->peak_envelope_data_length = tag_size;
+ GST_DEBUG (" peak evelope data size = %u",
+ descriptor->peak_envelope_data_length);
+ default:
+ ret =
+ mxf_metadata_generic_sound_essence_descriptor_handle_tag (d, primer,
+ tag, tag_data, tag_size);
}
- GST_DEBUG ("Parsed wave audio essence descriptor:");
- GST_DEBUG (" block align = %u", descriptor->block_align);
- GST_DEBUG (" sequence offset = %u", descriptor->sequence_offset);
- GST_DEBUG (" average bps = %u", descriptor->avg_bps);
- GST_DEBUG (" channel assignment = %s",
- mxf_ul_to_string (&descriptor->channel_assignment, str));
- GST_DEBUG (" peak envelope version = %u", descriptor->peak_envelope_version);
- GST_DEBUG (" peak envelope format = %u", descriptor->peak_envelope_format);
- GST_DEBUG (" points per peak value = %u", descriptor->points_per_peak_value);
- GST_DEBUG (" peak envelope block size = %u",
- descriptor->peak_envelope_block_size);
- GST_DEBUG (" peak channels = %u", descriptor->peak_channels);
- GST_DEBUG (" peak frames = %u", descriptor->peak_frames);
- GST_DEBUG (" peak of peaks position = %" G_GINT64_FORMAT,
- descriptor->peak_of_peaks_position);
- GST_DEBUG (" peak envelope timestamp = %d/%u/%u %u:%u:%u.%u",
- descriptor->peak_envelope_timestamp.year,
- descriptor->peak_envelope_timestamp.month,
- descriptor->peak_envelope_timestamp.day,
- descriptor->peak_envelope_timestamp.hour,
- descriptor->peak_envelope_timestamp.minute,
- descriptor->peak_envelope_timestamp.second,
- (descriptor->peak_envelope_timestamp.quarter_msecond * 1000) / 256);
- GST_DEBUG (" peak evelope data size = %u",
- descriptor->peak_envelope_data_length);
- return TRUE;
+ return ret;
error:
- GST_ERROR ("Invalid wave audio essence descriptor");
- mxf_metadata_wave_audio_essence_descriptor_reset (descriptor);
+ GST_ERROR ("Invalid wave audio essence descriptor tag 0x%04x of size %u", tag,
+ tag_size);
- return FALSE;
+ return TRUE;
}
void mxf_metadata_wave_audio_essence_descriptor_reset
Index: mxfaes-bwf.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfaes-bwf.h,v
--- mxfaes-bwf.h 22 Nov 2008 14:42:07 -0000 1.2
+++ mxfaes-bwf.h 25 Nov 2008 09:38:26 -0000 1.3
@@ -55,7 +55,8 @@
guint16 peak_envelope_data_length;
} MXFMetadataWaveAudioEssenceDescriptor;
-gboolean mxf_metadata_wave_audio_essence_descriptor_parse (const MXFUL *key, MXFMetadataWaveAudioEssenceDescriptor *descriptor, const MXFPrimerPack *primer, guint16 type, const guint8 *data, guint size);
+gboolean mxf_metadata_wave_audio_essence_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor,
+ const MXFPrimerPack *primer, guint16 tag, const guint8 *tag_data, guint16 tag_size);
void mxf_metadata_wave_audio_essence_descriptor_reset (MXFMetadataWaveAudioEssenceDescriptor *descriptor);
gboolean mxf_is_aes_bwf_essence_track (const MXFMetadataTrack *track);
Index: mxfdemux.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- mxfdemux.c 24 Nov 2008 11:31:27 -0000 1.6
+++ mxfdemux.c 25 Nov 2008 09:38:26 -0000 1.7
@@ -703,21 +703,26 @@
MXFMetadataGenericDescriptor descriptor;
+ memset (&descriptor, 0, sizeof (descriptor));
GST_DEBUG_OBJECT (demux,
"Handling metadata generic descriptor of size %u"
" at offset %" G_GUINT64_FORMAT " with type 0x%04d",
GST_BUFFER_SIZE (buffer), demux->offset, type);
- if (!mxf_metadata_generic_descriptor_parse (key, &descriptor,
- &demux->primer, type, GST_BUFFER_DATA (buffer),
- GST_BUFFER_SIZE (buffer))) {
+ if (!mxf_metadata_descriptor_parse (key,
+ (MXFMetadataGenericDescriptor *) & descriptor, &demux->primer,
+ type, GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer),
+ (MXFMetadataDescriptorHandleTag)
+ mxf_metadata_generic_descriptor_handle_tag,
+ (MXFMetadataDescriptorReset) mxf_metadata_generic_descriptor_reset)) {
GST_ERROR_OBJECT (demux, "Parsing metadata generic descriptor failed");
return GST_FLOW_ERROR;
if (!demux->generic_descriptor)
demux->generic_descriptor =
- g_array_new (FALSE, FALSE, sizeof (MXFMetadataGenericDescriptor));
+ g_array_new (FALSE, TRUE, sizeof (MXFMetadataGenericDescriptor));
g_array_append_val (demux->generic_descriptor, descriptor);
@@ -730,21 +735,26 @@
MXFMetadataFileDescriptor descriptor;
"Handling metadata file descriptor of size %u"
- if (!mxf_metadata_file_descriptor_parse (key, &descriptor,
+ mxf_metadata_file_descriptor_handle_tag,
+ (MXFMetadataDescriptorReset) mxf_metadata_file_descriptor_reset)) {
GST_ERROR_OBJECT (demux, "Parsing metadata file descriptor failed");
if (!demux->file_descriptor)
demux->file_descriptor =
- g_array_new (FALSE, FALSE, sizeof (MXFMetadataFileDescriptor));
+ g_array_new (FALSE, TRUE, sizeof (MXFMetadataFileDescriptor));
g_array_append_val (demux->file_descriptor, descriptor);
@@ -757,21 +767,27 @@
MXFMetadataMultipleDescriptor descriptor;
"Handling metadata multiple descriptor of size %u"
- if (!mxf_metadata_multiple_descriptor_parse (key, &descriptor,
+ mxf_metadata_multiple_descriptor_handle_tag,
+ (MXFMetadataDescriptorReset) mxf_metadata_multiple_descriptor_reset))
+ {
GST_ERROR_OBJECT (demux, "Parsing metadata multiple descriptor failed");
if (!demux->multiple_descriptor)
demux->multiple_descriptor =
- g_array_new (FALSE, FALSE, sizeof (MXFMetadataMultipleDescriptor));
+ g_array_new (FALSE, TRUE, sizeof (MXFMetadataMultipleDescriptor));
g_array_append_val (demux->multiple_descriptor, descriptor);
@@ -784,14 +800,20 @@
MXFMetadataGenericPictureEssenceDescriptor descriptor;
"Handling metadata generic picture essence descriptor of size %u"
- if (!mxf_metadata_generic_picture_essence_descriptor_parse (key, &descriptor,
+ mxf_metadata_generic_picture_essence_descriptor_handle_tag,
+ (MXFMetadataDescriptorReset)
+ mxf_metadata_generic_picture_essence_descriptor_reset)) {
GST_ERROR_OBJECT (demux,
"Parsing metadata generic picture essence descriptor failed");
@@ -799,7 +821,7 @@
if (!demux->generic_picture_essence_descriptor)
demux->generic_picture_essence_descriptor =
- g_array_new (FALSE, FALSE,
+ g_array_new (FALSE, TRUE,
sizeof (MXFMetadataGenericPictureEssenceDescriptor));
g_array_append_val (demux->generic_picture_essence_descriptor, descriptor);
@@ -813,14 +835,20 @@
MXFMetadataCDCIPictureEssenceDescriptor descriptor;
"Handling metadata CDCI picture essence descriptor of size %u"
- if (!mxf_metadata_cdci_picture_essence_descriptor_parse (key, &descriptor,
+ mxf_metadata_cdci_picture_essence_descriptor_handle_tag,
+ mxf_metadata_cdci_picture_essence_descriptor_reset)) {
"Parsing metadata CDCI picture essence descriptor failed");
@@ -828,7 +856,7 @@
if (!demux->cdci_picture_essence_descriptor)
demux->cdci_picture_essence_descriptor =
sizeof (MXFMetadataCDCIPictureEssenceDescriptor));
g_array_append_val (demux->cdci_picture_essence_descriptor, descriptor);
@@ -842,21 +870,27 @@
MXFMetadataMPEGVideoDescriptor descriptor;
"Handling metadata MPEG video descriptor of size %u"
- if (!mxf_metadata_mpeg_video_descriptor_parse (key, &descriptor,
+ mxf_metadata_mpeg_video_descriptor_handle_tag,
+ mxf_metadata_mpeg_video_descriptor_reset)) {
GST_ERROR_OBJECT (demux, "Parsing metadata MPEG video descriptor failed");
if (!demux->mpeg_video_descriptor)
demux->mpeg_video_descriptor =
- g_array_new (FALSE, FALSE, sizeof (MXFMetadataMPEGVideoDescriptor));
+ g_array_new (FALSE, TRUE, sizeof (MXFMetadataMPEGVideoDescriptor));
g_array_append_val (demux->mpeg_video_descriptor, descriptor);
@@ -869,14 +903,20 @@
MXFMetadataGenericSoundEssenceDescriptor descriptor;
"Handling metadata generic sound essence descriptor of size %u"
- if (!mxf_metadata_generic_sound_essence_descriptor_parse (key, &descriptor,
+ mxf_metadata_generic_sound_essence_descriptor_handle_tag,
+ mxf_metadata_generic_sound_essence_descriptor_reset)) {
"Parsing metadata generic sound essence descriptor failed");
@@ -884,7 +924,7 @@
if (!demux->generic_sound_essence_descriptor)
demux->generic_sound_essence_descriptor =
sizeof (MXFMetadataGenericSoundEssenceDescriptor));
g_array_append_val (demux->generic_sound_essence_descriptor, descriptor);
@@ -898,14 +938,20 @@
MXFMetadataWaveAudioEssenceDescriptor descriptor;
"Handling metadata wave sound essence descriptor of size %u"
- if (!mxf_metadata_wave_audio_essence_descriptor_parse (key, &descriptor,
+ mxf_metadata_wave_audio_essence_descriptor_handle_tag,
+ mxf_metadata_wave_audio_essence_descriptor_reset)) {
"Parsing metadata wave sound essence descriptor failed");
@@ -913,7 +959,7 @@
if (!demux->wave_audio_essence_descriptor)
demux->wave_audio_essence_descriptor =
sizeof (MXFMetadataWaveAudioEssenceDescriptor));
g_array_append_val (demux->wave_audio_essence_descriptor, descriptor);
@@ -1748,12 +1794,6 @@
return GST_FLOW_OK;
- /* Make writable as the parsing of descriptors sets already read local tags to 0x0000 */
- if (!gst_buffer_is_writable (buffer))
- buffer = gst_buffer_copy (buffer);
- else
- buffer = gst_buffer_ref (buffer);
switch (type) {
case MXF_METADATA_PREFACE:
ret = gst_mxf_demux_handle_metadata_preface (demux, key, buffer);
@@ -1838,8 +1878,6 @@
break;
- gst_buffer_unref (buffer);
return ret;
Index: mxfmpeg.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfmpeg.c,v
--- mxfmpeg.c 22 Nov 2008 14:42:07 -0000 1.2
+++ mxfmpeg.c 25 Nov 2008 09:38:26 -0000 1.3
@@ -89,116 +89,94 @@
};
-mxf_metadata_mpeg_video_descriptor_parse (const MXFUL * key,
- MXFMetadataMPEGVideoDescriptor * descriptor,
+mxf_metadata_mpeg_video_descriptor_handle_tag (MXFMetadataGenericDescriptor * d,
+ const MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
+ guint16 tag_size)
- memset (descriptor, 0, sizeof (MXFMetadataMPEGVideoDescriptor));
- if (!mxf_metadata_cdci_picture_essence_descriptor_parse (key,
- (MXFMetadataCDCIPictureEssenceDescriptor *) descriptor, primer, type,
- MXFUL *tag_ul = NULL;
+ MXFMetadataMPEGVideoDescriptor *descriptor =
+ (MXFMetadataMPEGVideoDescriptor *) d;
+ MXFUL *tag_ul = NULL;
- if (!(tag_ul =
- (MXFUL *) g_hash_table_lookup (primer->mappings,
- GUINT_TO_POINTER (((guint) tag)))))
+ if (!(tag_ul =
+ (MXFUL *) g_hash_table_lookup (primer->mappings,
+ GUINT_TO_POINTER (((guint) tag)))))
+ return FALSE;
- if (memcmp (tag_ul, &_single_sequence_ul, 16) == 0) {
- GST_WRITE_UINT16_BE (data, 0x0000);
- if (tag_size != 1)
- goto error;
- descriptor->single_sequence = GST_READ_UINT8 (tag_data);
- } else if (memcmp (tag_ul, &_constant_b_frames_ul, 16) == 0) {
- descriptor->const_b_frames = GST_READ_UINT8 (tag_data);
- } else if (memcmp (tag_ul, &_coded_content_type_ul, 16) == 0) {
- descriptor->coded_content_type = GST_READ_UINT8 (tag_data);
- } else if (memcmp (tag_ul, &_low_delay_ul, 16) == 0) {
- descriptor->low_delay = GST_READ_UINT8 (tag_data);
- } else if (memcmp (tag_ul, &_closed_gop_ul, 16) == 0) {
- descriptor->closed_gop = GST_READ_UINT8 (tag_data);
- } else if (memcmp (tag_ul, &_identical_gop_ul, 16) == 0) {
- descriptor->identical_gop = GST_READ_UINT8 (tag_data);
- } else if (memcmp (tag_ul, &_max_gop_ul, 16) == 0) {
- if (tag_size != 2)
- descriptor->max_gop = GST_READ_UINT16_BE (tag_data);
- } else if (memcmp (tag_ul, &_b_picture_count_ul, 16) == 0) {
- descriptor->b_picture_count = GST_READ_UINT16_BE (tag_data);
- } else if (memcmp (tag_ul, &_bitrate_ul, 16) == 0) {
- if (tag_size != 4)
- descriptor->bitrate = GST_READ_UINT32_BE (tag_data);
- } else if (memcmp (tag_ul, &_profile_and_level_ul, 16) == 0) {
- descriptor->profile_and_level = GST_READ_UINT8 (tag_data);
- } else {
- if (type != MXF_METADATA_MPEG_VIDEO_DESCRIPTOR)
- goto next;
- if (!gst_metadata_add_custom_tag (primer, tag, tag_data, tag_size,
- &((MXFMetadataGenericDescriptor *) descriptor)->other_tags))
+ if (memcmp (tag_ul, &_single_sequence_ul, 16) == 0) {
+ if (tag_size != 1)
+ goto error;
+ descriptor->single_sequence = GST_READ_UINT8 (tag_data);
+ GST_DEBUG (" single sequence = %s",
+ (descriptor->single_sequence) ? "yes" : "no");
+ ret = TRUE;
+ } else if (memcmp (tag_ul, &_constant_b_frames_ul, 16) == 0) {
+ descriptor->const_b_frames = GST_READ_UINT8 (tag_data);
+ GST_DEBUG (" constant b frames = %s",
+ } else if (memcmp (tag_ul, &_coded_content_type_ul, 16) == 0) {
+ descriptor->coded_content_type = GST_READ_UINT8 (tag_data);
+ GST_DEBUG (" coded content type = %u", descriptor->coded_content_type);
+ } else if (memcmp (tag_ul, &_low_delay_ul, 16) == 0) {
+ descriptor->low_delay = GST_READ_UINT8 (tag_data);
+ GST_DEBUG (" low delay = %s", (descriptor->low_delay) ? "yes" : "no");
+ } else if (memcmp (tag_ul, &_closed_gop_ul, 16) == 0) {
+ descriptor->closed_gop = GST_READ_UINT8 (tag_data);
+ GST_DEBUG (" closed gop = %s", (descriptor->closed_gop) ? "yes" : "no");
+ } else if (memcmp (tag_ul, &_identical_gop_ul, 16) == 0) {
+ descriptor->identical_gop = GST_READ_UINT8 (tag_data);
+ GST_DEBUG (" identical gop = %s",
+ (descriptor->identical_gop) ? "yes" : "no");
+ } else if (memcmp (tag_ul, &_max_gop_ul, 16) == 0) {
+ if (tag_size != 2)
+ descriptor->max_gop = GST_READ_UINT16_BE (tag_data);
+ GST_DEBUG (" max gop = %u", descriptor->max_gop);
+ } else if (memcmp (tag_ul, &_b_picture_count_ul, 16) == 0) {
+ descriptor->b_picture_count = GST_READ_UINT16_BE (tag_data);
+ GST_DEBUG (" b picture count = %u", descriptor->b_picture_count);
+ } else if (memcmp (tag_ul, &_bitrate_ul, 16) == 0) {
+ if (tag_size != 4)
+ descriptor->bitrate = GST_READ_UINT32_BE (tag_data);
+ GST_DEBUG (" bitrate = %u", descriptor->bitrate);
+ } else if (memcmp (tag_ul, &_profile_and_level_ul, 16) == 0) {
+ descriptor->profile_and_level = GST_READ_UINT8 (tag_data);
+ GST_DEBUG (" profile & level = %u", descriptor->profile_and_level);
+ } else {
+ ret =
+ mxf_metadata_cdci_picture_essence_descriptor_handle_tag (d, primer, tag,
+ tag_data, tag_size);
- GST_DEBUG ("Parsed mpeg video descriptors:");
- GST_DEBUG (" single sequence = %s",
- (descriptor->single_sequence) ? "yes" : "no");
- GST_DEBUG (" constant b frames = %s",
- GST_DEBUG (" coded content type = %u", descriptor->coded_content_type);
- GST_DEBUG (" low delay = %s", (descriptor->low_delay) ? "yes" : "no");
- GST_DEBUG (" closed gop = %s", (descriptor->closed_gop) ? "yes" : "no");
- GST_DEBUG (" identical gop = %s",
- (descriptor->identical_gop) ? "yes" : "no");
- GST_DEBUG (" max gop = %u", descriptor->max_gop);
- GST_DEBUG (" b picture count = %u", descriptor->b_picture_count);
- GST_DEBUG (" bitrate = %u", descriptor->bitrate);
- GST_DEBUG (" profile & level = %u", descriptor->profile_and_level);
- GST_ERROR ("Invalid mpeg video descriptor");
- mxf_metadata_mpeg_video_descriptor_reset (descriptor);
+ GST_ERROR ("Invalid mpeg video descriptor tag 0x%04x of size %u", tag,
return FALSE;
Index: mxfmpeg.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfmpeg.h,v
--- mxfmpeg.h 22 Nov 2008 14:42:07 -0000 1.2
+++ mxfmpeg.h 25 Nov 2008 09:38:26 -0000 1.3
@@ -49,7 +49,7 @@
guint8 profile_and_level;
} MXFMetadataMPEGVideoDescriptor;
-gboolean mxf_metadata_mpeg_video_descriptor_parse (const MXFUL *key, MXFMetadataMPEGVideoDescriptor *descriptor, const MXFPrimerPack *primer, guint16 type, const guint8 *data, guint size);
+gboolean mxf_metadata_mpeg_video_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor, const MXFPrimerPack *primer, guint16 tag, const guint8 *tag_data, guint16 tag_size);
void mxf_metadata_mpeg_video_descriptor_reset (MXFMetadataMPEGVideoDescriptor *descriptor);
gboolean mxf_is_mpeg_video_essence_track (const MXFMetadataTrack *track);
Index: mxfparse.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfparse.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- mxfparse.c 24 Nov 2008 10:41:13 -0000 1.4
+++ mxfparse.c 25 Nov 2008 09:38:26 -0000 1.5
@@ -406,6 +406,8 @@
memset (pack, 0, sizeof (MXFPartitionPack));
+ GST_DEBUG ("Parsing partition pack:");
if (key->u[13] == 0x02)
pack->type = MXF_PARTITION_PACK_HEADER;
else if (key->u[13] == 0x03)
@@ -413,9 +415,16 @@
else if (key->u[13] == 0x04)
pack->type = MXF_PARTITION_PACK_FOOTER;
[...2492 lines suppressed...]
DFLT:
default:
if (!gst_metadata_add_custom_tag (primer, tag, tag_data, tag_size,
&locator->other_tags))
goto error;
@@ -2660,13 +2509,6 @@
size -= 4 + tag_size;
- GST_DEBUG ("Parsed locator:");
- GST_DEBUG (" instance uid = %s", mxf_ul_to_string (&locator->instance_uid,
- str));
- GST_DEBUG (" generation uid = %s",
- mxf_ul_to_string (&locator->generation_uid, str));
- GST_DEBUG (" location = %s", GST_STR_NULL (locator->location));
return TRUE;
Index: mxfparse.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfparse.h,v
--- mxfparse.h 22 Nov 2008 14:42:08 -0000 1.2
+++ mxfparse.h 25 Nov 2008 09:38:26 -0000 1.3
@@ -24,6 +24,10 @@
typedef GstFlowReturn (*MXFEssenceElementHandler) (const MXFUL *key, GstBuffer *buffer, GstCaps *caps, MXFMetadataGenericPackage *package, MXFMetadataTrack *track, MXFMetadataStructuralComponent *component, gpointer mapping_data, GstBuffer **outbuf);
+typedef gboolean (*MXFMetadataDescriptorHandleTag) (MXFMetadataGenericDescriptor *descriptor,
+typedef void (*MXFMetadataDescriptorReset) (MXFMetadataGenericDescriptor *descriptor);
gchar * mxf_ul_to_string (const MXFUL *ul, gchar str[48]);
gboolean mxf_ul_is_equal (const MXFUL *a, const MXFUL *b);
gboolean mxf_ul_is_zero (const MXFUL *ul);
@@ -104,22 +108,31 @@
gboolean mxf_metadata_structural_component_parse (const MXFUL *key, MXFMetadataStructuralComponent *component, const MXFPrimerPack *primer, guint16 type, const guint8 *data, guint size);
void mxf_metadata_structural_component_reset (MXFMetadataStructuralComponent *component);
-gboolean mxf_metadata_generic_descriptor_parse (const MXFUL *key, MXFMetadataGenericDescriptor *descriptor, const MXFPrimerPack *primer, guint16 type, const guint8 *data, guint size);
+gboolean
+mxf_metadata_descriptor_parse (const MXFUL * key, MXFMetadataGenericDescriptor * descriptor, const MXFPrimerPack * primer, guint16 type, const guint8 * data, guint size, MXFMetadataDescriptorHandleTag handle_tag, MXFMetadataDescriptorReset reset);
+gboolean mxf_metadata_generic_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor,
void mxf_metadata_generic_descriptor_reset (MXFMetadataGenericDescriptor *descriptor);
-gboolean mxf_metadata_file_descriptor_parse (const MXFUL *key, MXFMetadataFileDescriptor *descriptor, const MXFPrimerPack *primer, guint16 type, const guint8 *data, guint size);
+gboolean mxf_metadata_file_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor,
void mxf_metadata_file_descriptor_reset (MXFMetadataFileDescriptor *descriptor);
-gboolean mxf_metadata_generic_sound_essence_descriptor_parse (const MXFUL *key, MXFMetadataGenericSoundEssenceDescriptor *descriptor, const MXFPrimerPack *primer, guint16 type, const guint8 *data, guint size);
+gboolean mxf_metadata_generic_sound_essence_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor,
void mxf_metadata_generic_sound_essence_descriptor_reset (MXFMetadataGenericSoundEssenceDescriptor *descriptor);
-gboolean mxf_metadata_generic_picture_essence_descriptor_parse (const MXFUL *key, MXFMetadataGenericPictureEssenceDescriptor *descriptor, const MXFPrimerPack *primer, guint16 type, const guint8 *data, guint size);
+gboolean mxf_metadata_generic_picture_essence_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor,
void mxf_metadata_generic_picture_essence_descriptor_reset (MXFMetadataGenericPictureEssenceDescriptor *descriptor);
-gboolean mxf_metadata_cdci_picture_essence_descriptor_parse (const MXFUL *key, MXFMetadataCDCIPictureEssenceDescriptor *descriptor, const MXFPrimerPack *primer, guint16 type, const guint8 *data, guint size);
+gboolean mxf_metadata_cdci_picture_essence_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor,
void mxf_metadata_cdci_picture_essence_descriptor_reset (MXFMetadataCDCIPictureEssenceDescriptor *descriptor);
-gboolean mxf_metadata_multiple_descriptor_parse (const MXFUL *key, MXFMetadataMultipleDescriptor *descriptor, const MXFPrimerPack *primer, guint16 type, const guint8 *data, guint size);
+gboolean mxf_metadata_multiple_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor,
void mxf_metadata_multiple_descriptor_reset (MXFMetadataMultipleDescriptor *descriptor);
gboolean mxf_metadata_locator_parse (const MXFUL *key, MXFMetadataLocator *locator, const MXFPrimerPack *primer, guint16 type, const guint8 *data, guint size);
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
gstreamer-cvs-verbose mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gstreamer-cvs-verbose