diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2008-12-03 16:08:28 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2008-12-03 16:08:28 +0000 |
commit | 7f61ced7e61ffe636e3a9a38ee2919a7ac9a43df (patch) | |
tree | ffd88e53d8086d8f3284604cb0a2fef58f8f4dda /gst/mxf/mxfdemux.c | |
parent | bc1fdfd0bd71a2749ff74c4a5de956aebd627837 (diff) | |
download | gst-plugins-bad-7f61ced7e61ffe636e3a9a38ee2919a7ac9a43df.tar.gz gst-plugins-bad-7f61ced7e61ffe636e3a9a38ee2919a7ac9a43df.tar.bz2 gst-plugins-bad-7f61ced7e61ffe636e3a9a38ee2919a7ac9a43df.zip |
gst/mxf/: Add support for AES3 audio (SMPTE 382M).
Original commit message from CVS:
* gst/mxf/mxfaes-bwf.c:
(mxf_metadata_aes3_audio_essence_descriptor_handle_tag),
(mxf_metadata_aes3_audio_essence_descriptor_reset),
(mxf_aes3_handle_essence_element), (mxf_bwf_create_caps),
(mxf_aes3_create_caps), (mxf_aes_bwf_create_caps):
* gst/mxf/mxfaes-bwf.h:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_reset_metadata),
(gst_mxf_demux_handle_metadata_aes3_audio_essence_descriptor),
(gst_mxf_demux_handle_header_metadata_resolve_references),
(gst_mxf_demux_handle_metadata):
* gst/mxf/mxfdemux.h:
Add support for AES3 audio (SMPTE 382M).
* gst/mxf/mxfdv-dif.c: (mxf_dv_dif_create_caps):
* gst/mxf/mxfjpeg2000.c: (mxf_jpeg2000_create_caps):
Fix coding style.
Diffstat (limited to 'gst/mxf/mxfdemux.c')
-rw-r--r-- | gst/mxf/mxfdemux.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c index fba453e3..4b803148 100644 --- a/gst/mxf/mxfdemux.c +++ b/gst/mxf/mxfdemux.c @@ -346,6 +346,15 @@ gst_mxf_demux_reset_metadata (GstMXFDemux * demux) demux->wave_audio_essence_descriptor = NULL; } + if (demux->aes3_audio_essence_descriptor) { + for (i = 0; i < demux->aes3_audio_essence_descriptor->len; i++) + mxf_metadata_aes3_audio_essence_descriptor_reset (&g_array_index + (demux->aes3_audio_essence_descriptor, + MXFMetadataAES3AudioEssenceDescriptor, i)); + g_array_free (demux->aes3_audio_essence_descriptor, TRUE); + demux->aes3_audio_essence_descriptor = NULL; + } + if (demux->descriptor) { g_ptr_array_free (demux->descriptor, TRUE); demux->descriptor = NULL; @@ -1081,6 +1090,43 @@ gst_mxf_demux_handle_metadata_wave_audio_essence_descriptor (GstMXFDemux * } static GstFlowReturn +gst_mxf_demux_handle_metadata_aes3_audio_essence_descriptor (GstMXFDemux * + demux, const MXFUL * key, guint16 type, GstBuffer * buffer) +{ + MXFMetadataAES3AudioEssenceDescriptor descriptor; + + memset (&descriptor, 0, sizeof (descriptor)); + + GST_DEBUG_OBJECT (demux, + "Handling metadata AES3 audio 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_aes3_audio_essence_descriptor_handle_tag, + (MXFMetadataDescriptorReset) + mxf_metadata_aes3_audio_essence_descriptor_reset)) { + GST_ERROR_OBJECT (demux, + "Parsing metadata AES3 audio essence descriptor failed"); + return GST_FLOW_ERROR; + } + + if (!demux->aes3_audio_essence_descriptor) + demux->aes3_audio_essence_descriptor = + g_array_new (FALSE, FALSE, + sizeof (MXFMetadataAES3AudioEssenceDescriptor)); + + g_array_append_val (demux->aes3_audio_essence_descriptor, descriptor); + + return GST_FLOW_OK; +} + + + +static GstFlowReturn gst_mxf_demux_handle_metadata_locator (GstMXFDemux * demux, const MXFUL * key, guint16 type, GstBuffer * buffer) { @@ -1174,6 +1220,13 @@ gst_mxf_demux_handle_header_metadata_resolve_references (GstMXFDemux * demux) MXFMetadataWaveAudioEssenceDescriptor, i)); } } + if (demux->aes3_audio_essence_descriptor) { + for (i = 0; i < demux->aes3_audio_essence_descriptor->len; i++) { + g_ptr_array_add (demux->descriptor, + &g_array_index (demux->aes3_audio_essence_descriptor, + MXFMetadataAES3AudioEssenceDescriptor, i)); + } + } if (demux->multiple_descriptor) { for (i = 0; i < demux->multiple_descriptor->len; i++) { g_ptr_array_add (demux->descriptor, @@ -2032,6 +2085,11 @@ gst_mxf_demux_handle_metadata (GstMXFDemux * demux, const MXFUL * key, gst_mxf_demux_handle_metadata_wave_audio_essence_descriptor (demux, key, type, buffer); break; + case MXF_METADATA_AES3_AUDIO_ESSENCE_DESCRIPTOR: + ret = + gst_mxf_demux_handle_metadata_aes3_audio_essence_descriptor (demux, + key, type, buffer); + break; case MXF_METADATA_NETWORK_LOCATOR: case MXF_METADATA_TEXT_LOCATOR: ret = gst_mxf_demux_handle_metadata_locator (demux, key, type, buffer); |