summaryrefslogtreecommitdiff
path: root/gst/stereo/gststereo.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/stereo/gststereo.c')
-rw-r--r--gst/stereo/gststereo.c214
1 files changed, 0 insertions, 214 deletions
diff --git a/gst/stereo/gststereo.c b/gst/stereo/gststereo.c
deleted file mode 100644
index 95ca3526a..000000000
--- a/gst/stereo/gststereo.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* This effect is borrowed from xmms-0.6.1, though I mangled it so badly in
- * the process of copying it over that the xmms people probably won't want
- * any credit for it ;-)
- */
-/**
- * SECTION:element-stereo
- * @title: stereo
- *
- * Create a wide stereo effect.
- *
- * ## Example pipelines
- * |[
- * gst-launch-1.0 -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! stereo ! audioconvert ! audioresample ! alsasink
- * ]| Play an Ogg/Vorbis file.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "gststereo.h"
-
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-#include <gst/audio/audio.h>
-#include <gst/audio/gstaudiofilter.h>
-
-#define ALLOWED_CAPS \
- "audio/x-raw," \
- " format = "GST_AUDIO_NE (S16) "," \
- " rate = (int) [ 1, MAX ]," \
- " channels = (int) 2"
-
-/* Stereo signals and args */
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
-enum
-{
- PROP_0,
- PROP_ACTIVE,
- PROP_STEREO
-};
-
-static void gst_stereo_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_stereo_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-
-static GstFlowReturn gst_stereo_transform_ip (GstBaseTransform * base,
- GstBuffer * outbuf);
-
-G_DEFINE_TYPE (GstStereo, gst_stereo, GST_TYPE_AUDIO_FILTER);
-
-static void
-gst_stereo_class_init (GstStereoClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- GstBaseTransformClass *trans_class = GST_BASE_TRANSFORM_CLASS (klass);
- GstAudioFilterClass *audiofilter_class = GST_AUDIO_FILTER_CLASS (klass);
- GstCaps *caps;
-
- gst_element_class_set_static_metadata (element_class, "Stereo effect",
- "Filter/Effect/Audio",
- "Muck with the stereo signal to enhance its 'stereo-ness'",
- "Erik Walthinsen <omega@cse.ogi.edu>");
-
- caps = gst_caps_from_string (ALLOWED_CAPS);
- gst_audio_filter_class_add_pad_templates (audiofilter_class, caps);
- gst_caps_unref (caps);
-
- gobject_class->set_property = gst_stereo_set_property;
- gobject_class->get_property = gst_stereo_get_property;
-
- g_object_class_install_property (gobject_class, PROP_ACTIVE,
- g_param_spec_boolean ("active", "active", "active",
- TRUE,
- G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class, PROP_STEREO,
- g_param_spec_float ("stereo", "stereo", "stereo",
- 0.0, 1.0, 0.1f,
- G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
-
- trans_class->transform_ip = GST_DEBUG_FUNCPTR (gst_stereo_transform_ip);
-}
-
-static void
-gst_stereo_init (GstStereo * stereo)
-{
- stereo->active = TRUE;
- stereo->stereo = 0.1f;
-}
-
-static GstFlowReturn
-gst_stereo_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
-{
- GstStereo *stereo = GST_STEREO (base);
- gint samples;
- gint i;
- gdouble avg, ldiff, rdiff, tmp;
- gdouble mul = stereo->stereo;
- gint16 *data;
- GstMapInfo info;
-
- if (!gst_buffer_map (outbuf, &info, GST_MAP_READWRITE))
- return GST_FLOW_ERROR;
-
- data = (gint16 *) info.data;
- samples = info.size / 2;
-
- if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (outbuf)))
- gst_object_sync_values (GST_OBJECT (stereo), GST_BUFFER_TIMESTAMP (outbuf));
-
- if (stereo->active) {
- for (i = 0; i < samples / 2; i += 2) {
- avg = (data[i] + data[i + 1]) / 2;
- ldiff = data[i] - avg;
- rdiff = data[i + 1] - avg;
-
- tmp = avg + ldiff * mul;
- if (tmp < -32768)
- tmp = -32768;
- if (tmp > 32767)
- tmp = 32767;
- data[i] = tmp;
-
- tmp = avg + rdiff * mul;
- if (tmp < -32768)
- tmp = -32768;
- if (tmp > 32767)
- tmp = 32767;
- data[i + 1] = tmp;
- }
- }
-
- gst_buffer_unmap (outbuf, &info);
-
- return GST_FLOW_OK;
-}
-
-static void
-gst_stereo_set_property (GObject * object, guint prop_id, const GValue * value,
- GParamSpec * pspec)
-{
- GstStereo *stereo = GST_STEREO (object);
-
- switch (prop_id) {
- case PROP_ACTIVE:
- stereo->active = g_value_get_boolean (value);
- break;
- case PROP_STEREO:
- stereo->stereo = g_value_get_float (value) * 10.0;
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_stereo_get_property (GObject * object, guint prop_id, GValue * value,
- GParamSpec * pspec)
-{
- GstStereo *stereo = GST_STEREO (object);
-
- switch (prop_id) {
- case PROP_ACTIVE:
- g_value_set_boolean (value, stereo->active);
- break;
- case PROP_STEREO:
- g_value_set_float (value, stereo->stereo / 10.0);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return gst_element_register (plugin, "stereo", GST_RANK_NONE,
- GST_TYPE_STEREO);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- stereo,
- "Muck with the stereo signal, enhance its 'stereo-ness'",
- plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)