diff options
author | Stefan Kost <ensonic@users.sourceforge.net> | 2006-08-21 19:34:03 +0000 |
---|---|---|
committer | Stefan Kost <ensonic@users.sourceforge.net> | 2006-08-21 19:34:03 +0000 |
commit | 539c398b3e23e9623cbfa2608b4da1cbdf517e85 (patch) | |
tree | 247d77e3cab5bbba40399088a4d6469448955e82 | |
parent | 40c2bef1c3bfc8def935218d40a86dc4cd00a84d (diff) |
gst/audiopanorama/: die! die! die! you should never have been there
Original commit message from CVS:
* gst/audiopanorama/.cvsignore:
* gst/audiopanorama/Makefile.am:
* gst/audiopanorama/audiofx.c:
* gst/audiopanorama/audiopanorama.c:
* gst/audiopanorama/audiopanorama.h:
die! die! die! you should never have been there
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | gst/audiopanorama/.gitignore | 6 | ||||
-rw-r--r-- | gst/audiopanorama/Makefile.am | 19 | ||||
-rw-r--r-- | gst/audiopanorama/audiofx.c | 49 | ||||
-rw-r--r-- | gst/audiopanorama/audiopanorama.c | 365 | ||||
-rw-r--r-- | gst/audiopanorama/audiopanorama.h | 56 |
6 files changed, 9 insertions, 495 deletions
@@ -1,3 +1,12 @@ +2006-08-21 Stefan Kost <ensonic@users.sf.net> + + * gst/audiopanorama/.cvsignore: + * gst/audiopanorama/Makefile.am: + * gst/audiopanorama/audiofx.c: + * gst/audiopanorama/audiopanorama.c: + * gst/audiopanorama/audiopanorama.h: + die! die! die! you should never have been there + 2006-08-21 Jan Schmidt <thaytan@mad.scientist.com> * tests/check/elements/audiopanorama.c: (GST_START_TEST): diff --git a/gst/audiopanorama/.gitignore b/gst/audiopanorama/.gitignore deleted file mode 100644 index 799fc978..00000000 --- a/gst/audiopanorama/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -.deps -.libs -*.lo -*.la -Makefile -Makefile.in diff --git a/gst/audiopanorama/Makefile.am b/gst/audiopanorama/Makefile.am deleted file mode 100644 index 34708cfe..00000000 --- a/gst/audiopanorama/Makefile.am +++ /dev/null @@ -1,19 +0,0 @@ -# plugindir is set in configure - -plugin_LTLIBRARIES = libgstaudiofxgood.la - -# sources used to compile this plug-in -libgstaudiofxgood_la_SOURCES = audiofx.c\ - audiopanorama.c - -# flags used to compile this plugin -libgstaudiofxgood_la_CFLAGS = $(GST_CFLAGS) \ - $(GST_BASE_CFLAGS) \ - $(GST_CONTROLLER_CFLAGS) -libgstaudiofxgood_la_LIBADD = $(GST_LIBS) \ - $(GST_BASE_LIBS) \ - $(GST_CONTROLLER_LIBS) -libgstaudiofxgood_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) - -# headers we need but don't want installed -noinst_HEADERS = audiopanorama.h diff --git a/gst/audiopanorama/audiofx.c b/gst/audiopanorama/audiofx.c deleted file mode 100644 index 9b0a071d..00000000 --- a/gst/audiopanorama/audiofx.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2006 Stefan Kost <ensonic@users.sf.net> - * - * 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 <gst/gst.h> -#include <gst/controller/gstcontroller.h> - -#include "audiopanorama.h" - -/* entry point to initialize the plug-in - * initialize the plug-in itself - * register the element factories and pad templates - * register the features - */ -static gboolean -plugin_init (GstPlugin * plugin) -{ - /* initialize gst controller library */ - gst_controller_init (NULL, NULL); - - return gst_element_register (plugin, "audiopanorama", GST_RANK_NONE, - GST_TYPE_AUDIO_PANORAMA); -} - -GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, - GST_VERSION_MINOR, - "audiofxgood", - "Audio effects plugin", - plugin_init, VERSION, "LGPL", "GStreamer", "http://gstreamer.net/") diff --git a/gst/audiopanorama/audiopanorama.c b/gst/audiopanorama/audiopanorama.c deleted file mode 100644 index 760f6ed0..00000000 --- a/gst/audiopanorama/audiopanorama.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2006 Stefan Kost <ensonic@users.sf.net> - * - * 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. - */ - -/** - * SECTION:gstaudiopanorama - * @short_description: audio strereo pan effect - * - * <refsect2> - * Echo effect with controllable effect-ratio, delay-time and feedback. - * <title>Example launch line</title> - * <para> - * <programlisting> - * gst-launch audiotestsrc wave=saw ! audiopanorama panorama=-100 ! alsasink - * gst-launch filesrc location="melo1.ogg" ! oggdemux ! vorbisdec ! audioconvert ! audiopanorama panorama=-100 ! alsasink - * </programlisting> - * In the latter example the echo is applied to the input signal of the - * soundcard (like a microphone). - * </para> - * </refsect2> - */ - -/* FIXME: also support 32/64 bit float audio, and maybe 8/24 bit integer */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gst/gst.h> -#include <gst/base/gstbasetransform.h> -#include <gst/controller/gstcontroller.h> - -#include "audiopanorama.h" - -#define GST_CAT_DEFAULT gst_audio_panorama_debug -GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); - -static const GstElementDetails element_details = -GST_ELEMENT_DETAILS ("AudioPanorama", - "Filter/Effect/Audio", - "Positions audio streams in the stereo panorama", - "Stefan Kost <ensonic@users.sf.net>"); - -/* Filter signals and args */ -enum -{ - /* FILL ME */ - LAST_SIGNAL -}; - -enum -{ - PROP_0, - PROP_PANORAMA -}; - -static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "rate = (int) [ 1, MAX ], " - "channels = (int) [ 1, 2 ], " - "endianness = (int) BYTE_ORDER, " - "width = (int) 16, " "depth = (int) 16, " "signed = (boolean) true") - ); - -static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "rate = (int) [ 1, MAX ], " - "channels = (int) 2, " - "endianness = (int) BYTE_ORDER, " - "width = (int) 16, " "depth = (int) 16, " "signed = (boolean) true") - ); - -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_audio_panorama_debug, "audiopanorama", 0, "audiopanorama plugin"); - -GST_BOILERPLATE_FULL (GstAudioPanorama, gst_audio_panorama, GstBaseTransform, - GST_TYPE_BASE_TRANSFORM, DEBUG_INIT); - -static void gst_audio_panorama_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec); -static void gst_audio_panorama_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec); - -static gboolean gst_audio_panorama_get_unit_size (GstBaseTransform * base, - GstCaps * caps, guint * size); -static GstCaps *gst_audio_panorama_transform_caps (GstBaseTransform * base, - GstPadDirection direction, GstCaps * caps); -static gboolean gst_audio_panorama_set_caps (GstBaseTransform * base, - GstCaps * incaps, GstCaps * outcaps); - -static void gst_audio_panorama_transform_m2s (GstAudioPanorama * filter, - gint16 * idata, gint16 * odata, guint num_samples); -static void gst_audio_panorama_transform_s2s (GstAudioPanorama * filter, - gint16 * idata, gint16 * odata, guint num_samples); - -static GstFlowReturn gst_audio_panorama_transform (GstBaseTransform * base, - GstBuffer * inbuf, GstBuffer * outbuf); - -/* GObject vmethod implementations */ - -static void -gst_audio_panorama_base_init (gpointer klass) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&src_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&sink_template)); - gst_element_class_set_details (element_class, &element_details); -} - -static void -gst_audio_panorama_class_init (GstAudioPanoramaClass * klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass *) klass; - gobject_class->set_property = gst_audio_panorama_set_property; - gobject_class->get_property = gst_audio_panorama_get_property; - - g_object_class_install_property (gobject_class, PROP_PANORAMA, - g_param_spec_int ("panorama", "Panorama", - "Position in stereo panorama (-100 left -> 100 right)", -100, 100, 0, - G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE)); - - GST_BASE_TRANSFORM_CLASS (klass)->get_unit_size = - GST_DEBUG_FUNCPTR (gst_audio_panorama_get_unit_size); - GST_BASE_TRANSFORM_CLASS (klass)->transform_caps = - GST_DEBUG_FUNCPTR (gst_audio_panorama_transform_caps); - GST_BASE_TRANSFORM_CLASS (klass)->set_caps = - GST_DEBUG_FUNCPTR (gst_audio_panorama_set_caps); - GST_BASE_TRANSFORM_CLASS (klass)->transform = - GST_DEBUG_FUNCPTR (gst_audio_panorama_transform); -} - -static void -gst_audio_panorama_init (GstAudioPanorama * filter, - GstAudioPanoramaClass * klass) -{ - filter->panorama = 0; -} - -static void -gst_audio_panorama_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - GstAudioPanorama *filter = GST_AUDIO_PANORAMA (object); - - switch (prop_id) { - case PROP_PANORAMA: - filter->panorama = g_value_get_int (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_audio_panorama_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - GstAudioPanorama *filter = GST_AUDIO_PANORAMA (object); - - switch (prop_id) { - case PROP_PANORAMA: - g_value_set_int (value, filter->panorama); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -/* GstBaseTransform vmethod implementations */ - -static gboolean -gst_audio_panorama_get_unit_size (GstBaseTransform * base, GstCaps * caps, - guint * size) -{ - gint width, channels; - GstStructure *structure; - gboolean ret; - - g_assert (size); - - /* this works for both float and int */ - structure = gst_caps_get_structure (caps, 0); - ret = gst_structure_get_int (structure, "width", &width); - ret &= gst_structure_get_int (structure, "channels", &channels); - - *size = width * channels / 8; - - return ret; -} - -static GstCaps * -gst_audio_panorama_transform_caps (GstBaseTransform * base, - GstPadDirection direction, GstCaps * caps) -{ - GstCaps *res; - GstStructure *structure; - - /* transform caps gives one single caps so we can just replace - * the channel property with our range. */ - res = gst_caps_copy (caps); - structure = gst_caps_get_structure (res, 0); - if (direction == GST_PAD_SRC) { - GST_INFO ("allow 1-2 channels"); - gst_structure_set (structure, "channels", GST_TYPE_INT_RANGE, 1, 2, NULL); - } else { - GST_INFO ("allow 2 channels"); - gst_structure_set (structure, "channels", G_TYPE_INT, 2, NULL); - } - - return res; -} - -static gboolean -gst_audio_panorama_set_caps (GstBaseTransform * base, GstCaps * incaps, - GstCaps * outcaps) -{ - GstAudioPanorama *filter = GST_AUDIO_PANORAMA (base); - const GstStructure *structure; - gboolean ret; - gint channels; - - /*GST_INFO ("incaps are %" GST_PTR_FORMAT, incaps); */ - - structure = gst_caps_get_structure (incaps, 0); - ret = gst_structure_get_int (structure, "channels", &channels); - if (!ret) - goto no_channels; - /* FIXME: also check width and gst_structure_get_name()?int/float */ - - GST_DEBUG ("try to process input with %d channels", channels); - - /* set processing function */ - switch (channels) { - case 1: - filter->process = gst_audio_panorama_transform_m2s; - ret = TRUE; - break; - case 2: - filter->process = gst_audio_panorama_transform_s2s; - ret = TRUE; - break; - default: - filter->process = NULL; - ret = FALSE; - GST_WARNING ("can't process input with %d channels", channels); - } - -no_channels: - GST_DEBUG ("no channels in caps"); - return ret; -} - -static void -gst_audio_panorama_transform_m2s (GstAudioPanorama * filter, gint16 * idata, - gint16 * odata, guint num_samples) -{ - guint i; - gdouble val; - glong lval, rval; - gdouble rpan, lpan; - - /* pan: -100 0 100 - * lpan: 1.0 0.5 0.0 - * rpan: 0.0 0.5 1.0 - */ - rpan = (gdouble) (filter->panorama + 100) / 200.0; - lpan = 1.0 - rpan; - - for (i = 0; i < num_samples; i++) { - val = (gdouble) * idata++; - - lval = (glong) (val * lpan); - rval = (glong) (val * rpan); - - *odata++ = (gint16) CLAMP (lval, G_MININT16, G_MAXINT16); - *odata++ = (gint16) CLAMP (rval, G_MININT16, G_MAXINT16); - } -} - -static void -gst_audio_panorama_transform_s2s (GstAudioPanorama * filter, gint16 * idata, - gint16 * odata, guint num_samples) -{ - guint i; - glong lval, rval; - gdouble lival, rival; - gdouble lrpan, llpan, rrpan, rlpan; - - /* pan: -100 0 100 - * llpan: 1.0 1.0 0.0 - * lrpan: 1.0 0.0 0.0 - * rrpan: 0.0 1.0 1.0 - * rlpan: 0.0 0.0 1.0 - */ - if (filter->panorama > 0) { - rlpan = (gdouble) filter->panorama / 100.0; - llpan = 1.0 - rlpan; - lrpan = 0.0; - rrpan = 1.0; - } else { - rrpan = (gdouble) (100 + filter->panorama) / 100.0; - lrpan = 1.0 - rrpan; - rlpan = 0.0; - llpan = 1.0; - } - - for (i = 0; i < num_samples; i++) { - lival = (gdouble) * idata++; - rival = (gdouble) * idata++; - - lval = lival * llpan + rival * lrpan; - rval = lival * rlpan + rival * rrpan; - - *odata++ = (gint16) CLAMP (lval, G_MININT16, G_MAXINT16); - *odata++ = (gint16) CLAMP (rval, G_MININT16, G_MAXINT16); - } -} - -/* this function does the actual processing - */ -static GstFlowReturn -gst_audio_panorama_transform (GstBaseTransform * base, GstBuffer * inbuf, - GstBuffer * outbuf) -{ - GstAudioPanorama *filter = GST_AUDIO_PANORAMA (base); - guint num_samples = GST_BUFFER_SIZE (outbuf) / (2 * sizeof (gint16)); - - if (!gst_buffer_is_writable (outbuf)) - return GST_FLOW_OK; - - if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (outbuf))) - gst_object_sync_values (G_OBJECT (filter), GST_BUFFER_TIMESTAMP (outbuf)); - - filter->process (filter, (gint16 *) GST_BUFFER_DATA (inbuf), - (gint16 *) GST_BUFFER_DATA (outbuf), num_samples); - - return GST_FLOW_OK; -} diff --git a/gst/audiopanorama/audiopanorama.h b/gst/audiopanorama/audiopanorama.h deleted file mode 100644 index 5799901a..00000000 --- a/gst/audiopanorama/audiopanorama.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2006 Stefan Kost <ensonic@users.sf.net> - * - * 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_AUDIO_PANORAMA_H__ -#define __GST_AUDIO_PANORAMA_H__ - -#include <gst/gst.h> -#include <gst/base/gstbasetransform.h> - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_PANORAMA (gst_audio_panorama_get_type()) -#define GST_AUDIO_PANORAMA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_PANORAMA,GstAudioPanorama)) -#define GST_IS_AUDIO_PANORAMA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_PANORAMA)) -#define GST_AUDIO_PANORAMA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_AUDIO_PANORAMA,GstAudioPanoramaClass)) -#define GST_IS_AUDIO_PANORAMA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_AUDIO_PANORAMA)) -#define GST_AUDIO_PANORAMA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_AUDIO_PANORAMA,GstAudioPanoramaClass)) - -typedef struct _GstAudioPanorama GstAudioPanorama; -typedef struct _GstAudioPanoramaClass GstAudioPanoramaClass; - -struct _GstAudioPanorama { - GstBaseTransform element; - - gint panorama; - - /* < private > */ - void (*process)(GstAudioPanorama*, gint16*, gint16*, guint); -}; - -struct _GstAudioPanoramaClass { - GstBaseTransformClass parent_class; -}; - -GType gst_audio_panorama_get_type (void); - -G_END_DECLS - -#endif /* __GST_AUDIO_PANORAMA_H__ */ |