summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2010-01-14 10:05:35 +0100
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2010-01-14 10:05:35 +0100
commitd4e9225ed44c2a89e2a8373a04214effa9ee21f5 (patch)
tree8e7dd5ce7207a0f0cb78e9a51dbb6f3974208ccf
parent68c6ddc2fc9cfd9c32470d4b465c05b3b04abebe (diff)
vorbis: Move channel layout definitions into a single separate file
...instead of having two copies.
-rw-r--r--ext/vorbis/Makefile.am13
-rw-r--r--ext/vorbis/gstvorbiscommon.c75
-rw-r--r--ext/vorbis/gstvorbiscommon.h28
-rw-r--r--ext/vorbis/vorbisdec.c79
-rw-r--r--ext/vorbis/vorbisenc.c54
5 files changed, 126 insertions, 123 deletions
diff --git a/ext/vorbis/Makefile.am b/ext/vorbis/Makefile.am
index 604431e5..5c673c28 100644
--- a/ext/vorbis/Makefile.am
+++ b/ext/vorbis/Makefile.am
@@ -1,7 +1,11 @@
plugin_LTLIBRARIES = libgstvorbis.la
libgstvorbis_la_SOURCES = vorbis.c \
- vorbisdec.c vorbisenc.c vorbisparse.c vorbistag.c
+ vorbisdec.c \
+ vorbisenc.c \
+ vorbisparse.c \
+ vorbistag.c \
+ gstvorbiscommon.c
libgstvorbis_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(VORBIS_CFLAGS)
## AM_PATH_VORBIS also sets VORBISENC_LIBS
@@ -13,4 +17,9 @@ libgstvorbis_la_LIBADD = \
libgstvorbis_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstvorbis_la_LIBTOOLFLAGS = --tag=disable-static
-noinst_HEADERS = gstvorbisenc.h gstvorbisdec.h gstvorbisparse.h gstvorbistag.h
+noinst_HEADERS = gstvorbisenc.h \
+ gstvorbisdec.h \
+ gstvorbisparse.h \
+ gstvorbistag.h \
+ gstvorbiscommon.h
+
diff --git a/ext/vorbis/gstvorbiscommon.c b/ext/vorbis/gstvorbiscommon.c
new file mode 100644
index 00000000..c4dd408d
--- /dev/null
+++ b/ext/vorbis/gstvorbiscommon.c
@@ -0,0 +1,75 @@
+/* GStreamer
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstvorbiscommon.h"
+
+/* http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-800004.3.9 */
+const GstAudioChannelPosition gst_vorbis_channel_positions[][8] = {
+ { /* Mono */
+ GST_AUDIO_CHANNEL_POSITION_FRONT_MONO},
+ { /* Stereo */
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
+ { /* Stereo + Centre */
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
+ { /* Quadraphonic */
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ },
+ { /* Stereo + Centre + rear stereo */
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ },
+ { /* Full 5.1 Surround */
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_LFE,
+ },
+ { /* 6.1 Surround, in Vorbis spec since 2010-01-13 */
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_LFE},
+ { /* 7.1 Surround, in Vorbis spec since 2010-01-13 */
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_LFE},
+};
diff --git a/ext/vorbis/gstvorbiscommon.h b/ext/vorbis/gstvorbiscommon.h
new file mode 100644
index 00000000..563b8f71
--- /dev/null
+++ b/ext/vorbis/gstvorbiscommon.h
@@ -0,0 +1,28 @@
+/* GStreamer
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * 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.
+ */
+
+#ifndef __GST_VORBIS_COMMON_H__
+#define __GST_VORBIS_COMMON_H__
+
+#include <gst/gst.h>
+#include <gst/audio/multichannel.h>
+
+extern const GstAudioChannelPosition gst_vorbis_channel_positions[][8];
+
+#endif /* __GST_VORBIS_COMMON_H__ */
diff --git a/ext/vorbis/vorbisdec.c b/ext/vorbis/vorbisdec.c
index 4249993c..c56259a2 100644
--- a/ext/vorbis/vorbisdec.c
+++ b/ext/vorbis/vorbisdec.c
@@ -46,6 +46,8 @@
#include <gst/tag/tag.h>
#include <gst/audio/multichannel.h>
+#include "gstvorbiscommon.h"
+
GST_DEBUG_CATEGORY_EXTERN (vorbisdec_debug);
#define GST_CAT_DEFAULT vorbisdec_debug
@@ -564,77 +566,14 @@ vorbis_handle_identification_packet (GstVorbisDec * vd)
case 2:
/* nothing */
break;
- case 3:{
- static const GstAudioChannelPosition pos3[] = {
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
- };
- pos = pos3;
- break;
- }
- case 4:{
- static const GstAudioChannelPosition pos4[] = {
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT
- };
- pos = pos4;
- break;
- }
- case 5:{
- static const GstAudioChannelPosition pos5[] = {
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT
- };
- pos = pos5;
- break;
- }
- case 6:{
- static const GstAudioChannelPosition pos6[] = {
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_LFE
- };
- pos = pos6;
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ pos = gst_vorbis_channel_positions[vd->vi.channels - 1];
break;
- }
- /* 6.1 and 7.1 are in the Vorbis spec since 2010-01-13 */
- case 7:{
- static const GstAudioChannelPosition pos7[] = {
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
- GST_AUDIO_CHANNEL_POSITION_LFE
- };
- pos = pos7;
- /* fallthrough */
- }
- case 8:{
- static const GstAudioChannelPosition pos8[] = {
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_LFE
- };
-
- pos = pos8;
- /* fallthrough */
- }
default:{
gint i;
GstAudioChannelPosition *posn =
diff --git a/ext/vorbis/vorbisenc.c b/ext/vorbis/vorbisenc.c
index 4ad643c1..b09723b2 100644
--- a/ext/vorbis/vorbisenc.c
+++ b/ext/vorbis/vorbisenc.c
@@ -54,6 +54,8 @@
#include <gst/audio/audio.h>
#include "gstvorbisenc.h"
+#include "gstvorbiscommon.h"
+
GST_DEBUG_CATEGORY_EXTERN (vorbisenc_debug);
#define GST_CAT_DEFAULT vorbisenc_debug
@@ -228,56 +230,6 @@ gst_vorbis_enc_dispose (GObject * object)
G_OBJECT_CLASS (parent_class)->dispose (object);
}
-static const GstAudioChannelPosition vorbischannelpositions[][8] = {
- { /* Mono */
- GST_AUDIO_CHANNEL_POSITION_FRONT_MONO},
- { /* Stereo */
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
- { /* Stereo + Centre */
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
- { /* Quadraphonic */
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
- },
- { /* Stereo + Centre + rear stereo */
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
- },
- { /* Full 5.1 Surround */
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_LFE,
- },
- { /* 6.1 Surround, in Vorbis spec since 2010-01-13 */
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
- GST_AUDIO_CHANNEL_POSITION_LFE},
- { /* 7.1 Surround, in Vorbis spec since 2010-01-13 */
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_LFE},
-};
-
static GstCaps *
gst_vorbis_enc_generate_sink_caps (void)
{
@@ -305,7 +257,7 @@ gst_vorbis_enc_generate_sink_caps (void)
g_value_init (&pos, GST_TYPE_AUDIO_CHANNEL_POSITION);
for (c = 0; c < i; c++) {
- g_value_set_enum (&pos, vorbischannelpositions[i - 1][c]);
+ g_value_set_enum (&pos, gst_vorbis_channel_positions[i - 1][c]);
gst_value_array_append_value (&chanpos, &pos);
}
g_value_unset (&pos);