summaryrefslogtreecommitdiffstats
path: root/gst/mxf/mxfdemux.c
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-12-03 16:08:28 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2008-12-03 16:08:28 +0000
commit7f61ced7e61ffe636e3a9a38ee2919a7ac9a43df (patch)
treeffd88e53d8086d8f3284604cb0a2fef58f8f4dda /gst/mxf/mxfdemux.c
parentbc1fdfd0bd71a2749ff74c4a5de956aebd627837 (diff)
downloadgst-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.c58
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);