CVS Root: /cvs/gstreamer
Module: gst-plugins-bad
Changes by: slomo
Date: Fri Nov 28 2008 18:13:44 UTC
Log message:
* gst/mxf/Makefile.am:
* gst/mxf/mxfaes-bwf.c: (mxf_bwf_create_caps):
* gst/mxf/mxfalaw.c: (mxf_is_alaw_audio_essence_track),
(mxf_alaw_handle_essence_element), (mxf_alaw_create_caps):
* gst/mxf/mxfalaw.h:
* gst/mxf/mxfdemux.c:
(gst_mxf_demux_handle_header_metadata_update_streams):
Add support for A-Law encoded audio essence (SMPTE 388M and 382M).
Modified files:
. : ChangeLog
gst/mxf : Makefile.am mxfaes-bwf.c mxfdemux.c
Added files:
gst/mxf : mxfalaw.c mxfalaw.h
Links:
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.3761&r2=1.3762
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/Makefile.am.diff?r1=1.2&r2=1.3
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfaes-bwf.c.diff?r1=1.4&r2=1.5
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfalaw.c?rev=1.1&content-type=text/vnd.viewcvs-markup
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfalaw.h?rev=1.1&content-type=text/vnd.viewcvs-markup
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.c.diff?r1=1.13&r2=1.14
====Begin Diffs====
Index: ChangeLog
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v
retrieving revision 1.3761
retrieving revision 1.3762
diff -u -d -r1.3761 -r1.3762
--- ChangeLog 28 Nov 2008 11:24:22 -0000 1.3761
+++ ChangeLog 28 Nov 2008 18:13:27 -0000 1.3762
@@ -1,5 +1,16 @@
2008-11-28 Sebastian Dröge <[email protected]>
+ * gst/mxf/Makefile.am:
+ * gst/mxf/mxfaes-bwf.c: (mxf_bwf_create_caps):
+ * gst/mxf/mxfalaw.c: (mxf_is_alaw_audio_essence_track),
+ (mxf_alaw_handle_essence_element), (mxf_alaw_create_caps):
+ * gst/mxf/mxfalaw.h:
+ * gst/mxf/mxfdemux.c:
+ (gst_mxf_demux_handle_header_metadata_update_streams):
+ Add support for A-Law encoded audio essence (SMPTE 388M and 382M).
+
+2008-11-28 Sebastian Dröge <[email protected]>
* gst/mxf/mxfdemux.c: (gst_mxf_demux_reset),
(gst_mxf_demux_handle_index_table_segment):
* gst/mxf/mxfdemux.h:
Index: Makefile.am
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/Makefile.am,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- Makefile.am 27 Nov 2008 10:09:52 -0000 1.2
+++ Makefile.am 28 Nov 2008 18:13:29 -0000 1.3
@@ -6,7 +6,8 @@
mxfparse.c \
mxfaes-bwf.c \
mxfmpeg.c \
- mxfdv-dif.c
+ mxfdv-dif.c \
+ mxfalaw.c
libgstmxf_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS)
libgstmxf_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS)
@@ -18,5 +19,6 @@
mxfaes-bwf.h \
mxfmpeg.h \
mxfdv-dif.h \
+ mxfalaw.h \
mxftypes.h
Index: mxfaes-bwf.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfaes-bwf.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- mxfaes-bwf.c 26 Nov 2008 10:37:33 -0000 1.4
+++ mxfaes-bwf.c 28 Nov 2008 18:13:29 -0000 1.5
@@ -244,6 +244,11 @@
0x7E, 0x00, 0x00, 0x00}
};
+static const MXFUL mxf_sound_essence_compression_alaw =
+ { {0x06, 0x0E, 0x2B, 0x34, 0x04, 0x01, 0x01, 0x03, 0x04, 0x02, 0x02, 0x02,
+ 0x03, 0x01, 0x01, 0x00}
+};
static GstCaps *
mxf_bwf_create_caps (MXFMetadataGenericPackage * package,
MXFMetadataTrack * track,
@@ -313,6 +318,19 @@
(block_align != 1), "endianness", G_TYPE_INT, G_BIG_ENDIAN, "depth",
G_TYPE_INT, (block_align / descriptor->channel_count) * 8, "width",
G_TYPE_INT, (block_align / descriptor->channel_count) * 8, NULL);
+ } else if (mxf_ul_is_equal (&descriptor->sound_essence_compression,
+ &mxf_sound_essence_compression_alaw)) {
+ if (descriptor->audio_sampling_rate.n != 0 ||
+ descriptor->audio_sampling_rate.d != 0 ||
+ descriptor->channel_count != 0) {
+ GST_ERROR ("Invalid descriptor");
+ return NULL;
+ }
+ ret = gst_caps_new_simple ("audio/x-alaw", "rate", G_TYPE_INT,
+ (gint) (((gdouble) descriptor->audio_sampling_rate.n) /
+ ((gdouble) descriptor->audio_sampling_rate.d) + 0.5),
+ "channels", G_TYPE_INT, descriptor->channel_count);
} else {
GST_ERROR ("Unsupported sound essence compression: %s",
mxf_ul_to_string (&descriptor->sound_essence_compression, str));
--- NEW FILE: mxfalaw.c ---
/* GStreamer
* Copyright (C) 2008 Sebastian Dröge <[email protected]>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/* Implementation of SMPTE 388M - Mapping A-Law coded audio into the MXF
* Generic Container
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <gst/gst.h>
#include <string.h>
#include "mxfalaw.h"
GST_DEBUG_CATEGORY_EXTERN (mxf_debug);
#define GST_CAT_DEFAULT mxf_debug
gboolean
mxf_is_alaw_audio_essence_track (const MXFMetadataTrack * track)
{
guint i;
g_return_val_if_fail (track != NULL, FALSE);
if (track->descriptor == NULL)
return FALSE;
for (i = 0; i < track->n_descriptor; i++) {
MXFMetadataFileDescriptor *d = track->descriptor[i];
MXFUL *key = &d->essence_container;
/* SMPTE 388M 6.1 */
if (mxf_is_generic_container_essence_container_label (key) &&
key->u[12] == 0x02 && key->u[13] == 0x0a &&
(key->u[14] == 0x01 || key->u[14] == 0x02 || key->u[14] == 0x03))
return TRUE;
}
return FALSE;
}
static GstFlowReturn
mxf_alaw_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
GstCaps * caps, MXFMetadataGenericPackage * package,
MXFMetadataTrack * track, MXFMetadataStructuralComponent * component,
gpointer mapping_data, GstBuffer ** outbuf)
*outbuf = buffer;
/* SMPTE 388M 5.1 */
if (key->u[12] != 0x16 || (key->u[14] != 0x08 && key->u[14] != 0x09
&& key->u[14] != 0x0a)) {
GST_ERROR ("Invalid A-Law essence element");
return GST_FLOW_ERROR;
return GST_FLOW_OK;
GstCaps *
mxf_alaw_create_caps (MXFMetadataGenericPackage * package,
MXFMetadataTrack * track, GstTagList ** tags,
MXFEssenceElementHandler * handler, gpointer * mapping_data)
MXFMetadataFileDescriptor *f = NULL;
MXFMetadataGenericSoundEssenceDescriptor *s = NULL;
GstCaps *caps = NULL;
g_return_val_if_fail (package != NULL, NULL);
g_return_val_if_fail (track != NULL, NULL);
if (track->descriptor == NULL) {
GST_ERROR ("No descriptor found for this track");
return NULL;
if (((MXFMetadataGenericDescriptor *) track->descriptor[i])->type ==
MXF_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR) {
s = (MXFMetadataGenericSoundEssenceDescriptor *) track->descriptor[i];
f = track->descriptor[i];
break;
} else if (((MXFMetadataGenericDescriptor *) track->
descriptor[i])->is_file_descriptor
&& ((MXFMetadataGenericDescriptor *) track->descriptor[i])->type !=
MXF_METADATA_MULTIPLE_DESCRIPTOR) {
}
if (!f) {
*handler = mxf_alaw_handle_essence_element;
caps = gst_caps_new_simple ("audio/x-alaw", NULL);
if (s) {
if (s->audio_sampling_rate.n != 0 && s->audio_sampling_rate.d != 0)
gst_caps_set_simple (caps, "rate", G_TYPE_INT,
(gint) (((gdouble) s->audio_sampling_rate.n) /
((gdouble) s->audio_sampling_rate.d) + 0.5), NULL);
if (s->channel_count != 0)
gst_caps_set_simple (caps, "channels", G_TYPE_INT, s->channel_count,
NULL);
/* TODO: Handle channel layout somehow? */
} else {
GST_WARNING ("Only a generic sound essence descriptor found");
return caps;
--- NEW FILE: mxfalaw.h ---
#ifndef __MXF_ALAW_H__
#define __MXF_ALAW_H__
#include "mxfparse.h"
gboolean mxf_is_alaw_audio_essence_track (const MXFMetadataTrack *track);
mxf_alaw_create_caps (MXFMetadataGenericPackage *package, MXFMetadataTrack *track, GstTagList **tags, MXFEssenceElementHandler *handler, gpointer *mapping_data);
#endif /* __MXF_ALAW_H__ */
Index: mxfdemux.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- mxfdemux.c 28 Nov 2008 11:24:23 -0000 1.13
+++ mxfdemux.c 28 Nov 2008 18:13:30 -0000 1.14
@@ -34,6 +34,7 @@
#include "mxfaes-bwf.h"
#include "mxfmpeg.h"
#include "mxfdv-dif.h"
+#include "mxfalaw.h"
#include <string.h>
@@ -1291,8 +1292,9 @@
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;
}
@@ -1842,6 +1844,10 @@
caps =
mxf_dv_dif_create_caps (source_package, source_track,
&pad->tags, &pad->handle_essence_element, &pad->mapping_data);
+ else if (mxf_is_alaw_audio_essence_track (source_track))
+ caps =
+ mxf_alaw_create_caps (source_package, source_track,
+ &pad->tags, &pad->handle_essence_element, &pad->mapping_data);
break;
case MXF_METADATA_TRACK_DATA_ESSENCE:
if (mxf_is_dv_dif_essence_track (source_track))
-------------------------------------------------------------------------
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.