summaryrefslogtreecommitdiff
path: root/gst-libs/gst/interfaces/streamvolume.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst-libs/gst/interfaces/streamvolume.c')
-rw-r--r--gst-libs/gst/interfaces/streamvolume.c229
1 files changed, 0 insertions, 229 deletions
diff --git a/gst-libs/gst/interfaces/streamvolume.c b/gst-libs/gst/interfaces/streamvolume.c
deleted file mode 100644
index a3efe468..00000000
--- a/gst-libs/gst/interfaces/streamvolume.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/* GStreamer Mixer
- * 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.
- */
-
-/**
- * SECTION:gststreamvolume
- * @short_description: Interface for elements that provide a stream volume
- *
- * <refsect2>
- * <para>
- * This interface is implemented by elements that provide a stream volume. Examples for
- * such elements are #volume and #playbin2.
- * </para>
- * <para>
- * Applications can use this interface to get or set the current stream volume. For this
- * the "volume" #GObject property can be used or the helper functions gst_stream_volume_set_volume()
- * and gst_stream_volume_get_volume(). This volume is always a linear factor, i.e. 0.0 is muted
- * 1.0 is 100%. For showing the volume in a GUI it might make sense to convert it to
- * a different format by using gst_stream_volume_convert_volume(). Volume sliders should usually
- * use a cubic volume.
- *
- * Separate from the volume the stream can also be muted by the "mute" #GObject property or
- * gst_stream_volume_set_mute() and gst_stream_volume_get_mute().
- * </para>
- * <para>
- * Elements that provide some kind of stream volume should implement the "volume" and
- * "mute" #GObject properties and handle setting and getting of them properly.
- * The volume property is defined to be a linear volume factor.
- * </para>
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "streamvolume.h"
-#include <math.h>
-
-#ifndef HAVE_CBRT
-#define cbrt(x) (pow(abs(x),1.0/3.0))
-#endif
-
-static void
-gst_stream_volume_class_init (GstStreamVolumeInterface * iface)
-{
- g_object_interface_install_property (iface,
- g_param_spec_double ("volume",
- "Volume",
- "Linear volume factor, 1.0=100%",
- 0.0, G_MAXDOUBLE, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_interface_install_property (iface,
- g_param_spec_boolean ("mute",
- "Mute",
- "Mute the audio channel without changing the volume",
- FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-}
-
-GType
-gst_stream_volume_get_type (void)
-{
- static volatile gsize type = 0;
- if (g_once_init_enter (&type)) {
- GType tmp;
- static const GTypeInfo info = {
- sizeof (GstStreamVolumeInterface),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gst_stream_volume_class_init, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
- 0,
- 0, /* n_preallocs */
- NULL /* instance_init */
- };
- tmp = g_type_register_static (G_TYPE_INTERFACE,
- "GstStreamVolume", &info, 0);
- g_type_interface_add_prerequisite (tmp, G_TYPE_OBJECT);
-
- g_once_init_leave (&type, tmp);
- }
- return type;
-}
-
-/**
- * gst_stream_volume_get_volume:
- * @volume: #GstStreamVolume that should be used
- * @format: #GstStreamVolumeFormat which should be returned
- *
- * Returns: The current stream volume as linear factor
- *
- * Since: 0.10.25
- */
-gdouble
-gst_stream_volume_get_volume (GstStreamVolume * volume,
- GstStreamVolumeFormat format)
-{
- gdouble val;
-
- g_return_val_if_fail (GST_IS_STREAM_VOLUME (volume), 1.0);
-
- g_object_get (volume, "volume", &val, NULL);
- if (format != GST_STREAM_VOLUME_FORMAT_LINEAR)
- val =
- gst_stream_volume_convert_volume (GST_STREAM_VOLUME_FORMAT_LINEAR,
- format, val);
- return val;
-}
-
-/**
- * gst_stream_volume_set_volume:
- * @volume: #GstStreamVolume that should be used
- * @format: #GstStreamVolumeFormat of @val
- * @val: Linear volume factor that should be set
- *
- * Since: 0.10.25
- */
-void
-gst_stream_volume_set_volume (GstStreamVolume * volume,
- GstStreamVolumeFormat format, gdouble val)
-{
- g_return_if_fail (GST_IS_STREAM_VOLUME (volume));
-
- if (format != GST_STREAM_VOLUME_FORMAT_LINEAR)
- val =
- gst_stream_volume_convert_volume (format,
- GST_STREAM_VOLUME_FORMAT_LINEAR, val);
- g_object_set (volume, "volume", val, NULL);
-}
-
-/**
- * gst_stream_volume_get_mute:
- * @volume: #GstStreamVolume that should be used
- *
- * Returns: Returns %TRUE if the stream is muted
- *
- * Since: 0.10.25
- */
-gboolean
-gst_stream_volume_get_mute (GstStreamVolume * volume)
-{
- gboolean val;
-
- g_return_val_if_fail (GST_IS_STREAM_VOLUME (volume), FALSE);
-
- g_object_get (volume, "mute", &val, NULL);
- return val;
-}
-
-/**
- * gst_stream_volume_set_mute:
- * @volume: #GstStreamVolume that should be used
- * @mute: Mute state that should be set
- *
- * Since: 0.10.25
- */
-void
-gst_stream_volume_set_mute (GstStreamVolume * volume, gboolean mute)
-{
- g_return_if_fail (GST_IS_STREAM_VOLUME (volume));
-
- g_object_set (volume, "mute", mute, NULL);
-}
-
-/**
- * gst_stream_volume_convert_volume:
- * @from: #GstStreamVolumeFormat to convert from
- * @to: #GstStreamVolumeFormat to convert to
- * @val: Volume in @from format that should be converted
- *
- * Returns: the converted volume
- *
- * Since: 0.10.25
- */
-gdouble
-gst_stream_volume_convert_volume (GstStreamVolumeFormat from,
- GstStreamVolumeFormat to, gdouble val)
-{
- switch (from) {
- case GST_STREAM_VOLUME_FORMAT_LINEAR:
- g_return_val_if_fail (val >= 0.0, 0.0);
- switch (to) {
- case GST_STREAM_VOLUME_FORMAT_LINEAR:
- return val;
- case GST_STREAM_VOLUME_FORMAT_CUBIC:
- return cbrt (val);
- case GST_STREAM_VOLUME_FORMAT_DB:
- return 20.0 * log10 (val);
- }
- break;
- case GST_STREAM_VOLUME_FORMAT_CUBIC:
- g_return_val_if_fail (val >= 0.0, 0.0);
- switch (to) {
- case GST_STREAM_VOLUME_FORMAT_LINEAR:
- return val * val * val;
- case GST_STREAM_VOLUME_FORMAT_CUBIC:
- return val;
- case GST_STREAM_VOLUME_FORMAT_DB:
- return 3.0 * 20.0 * log10 (val);
- }
- break;
- case GST_STREAM_VOLUME_FORMAT_DB:
- switch (to) {
- case GST_STREAM_VOLUME_FORMAT_LINEAR:
- return pow (10.0, val / 20.0);
- case GST_STREAM_VOLUME_FORMAT_CUBIC:
- return pow (10.0, val / (3.0 * 20.0));
- case GST_STREAM_VOLUME_FORMAT_DB:
- return val;
- }
- break;
- }
- g_return_val_if_reached (0.0);
-}