diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am
index 61240de6ad..a7cfab01bf 100644
--- a/docs/plugins/Makefile.am
+++ b/docs/plugins/Makefile.am
@@ -79,7 +79,6 @@ EXTRA_HFILES = \
$(top_srcdir)/ext/taglib/gstid3v2mux.h \
$(top_srcdir)/ext/pulse/pulsesink.h \
$(top_srcdir)/ext/pulse/pulsesrc.h \
- $(top_srcdir)/ext/pulse/pulsemixer.h \
$(top_srcdir)/ext/speex/gstspeexenc.h \
$(top_srcdir)/ext/speex/gstspeexdec.h \
$(top_srcdir)/ext/wavpack/gstwavpackdec.h \
diff --git a/ext/pulse/Makefile.am b/ext/pulse/Makefile.am
index 693aa16caa..5aa6db0743 100644
--- a/ext/pulse/Makefile.am
+++ b/ext/pulse/Makefile.am
@@ -2,9 +2,6 @@ plugin_LTLIBRARIES = libgstpulse.la
libgstpulse_la_SOURCES = \
plugin.c \
- pulsemixer.c \
- pulsemixerctrl.c \
- pulsemixertrack.c \
pulseprobe.c \
pulsesink.c \
pulsesrc.c \
@@ -12,15 +9,12 @@ libgstpulse_la_SOURCES = \
libgstpulse_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(PULSE_CFLAGS)
libgstpulse_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \
- -lgstinterfaces-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) \
+ -lgstpbutils-$(GST_API_VERSION) \
$(GST_BASE_LIBS) $(GST_LIBS) $(PULSE_LIBS)
libgstpulse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstpulse_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = \
- pulsemixerctrl.h \
- pulsemixer.h \
- pulsemixertrack.h \
pulseprobe.h \
pulsesink.h \
pulsesrc.h \
diff --git a/ext/pulse/plugin.c b/ext/pulse/plugin.c
index 598f5a5be2..5903a5ebea 100644
--- a/ext/pulse/plugin.c
+++ b/ext/pulse/plugin.c
@@ -27,7 +27,6 @@
#include "pulsesink.h"
#include "pulsesrc.h"
-#include "pulsemixer.h"
GST_DEBUG_CATEGORY (pulse_debug);
@@ -49,10 +48,6 @@ plugin_init (GstPlugin * plugin)
GST_TYPE_PULSESRC))
return FALSE;
- if (!gst_element_register (plugin, "pulsemixer", GST_RANK_NONE,
- GST_TYPE_PULSEMIXER))
- return FALSE;
-
GST_DEBUG_CATEGORY_INIT (pulse_debug, "pulse", 0, "PulseAudio elements");
return TRUE;
}
diff --git a/ext/pulse/pulsemixer.c b/ext/pulse/pulsemixer.c
deleted file mode 100644
index 336690960c..0000000000
--- a/ext/pulse/pulsemixer.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * GStreamer pulseaudio plugin
- *
- * Copyright (c) 2004-2008 Lennart Poettering
- *
- * gst-pulse is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * gst-pulse 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with gst-pulse; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- */
-
-/**
- * SECTION:element-pulsemixer
- * @see_also: pulsesrc, pulsesink
- *
- * This element lets you adjust sound input and output levels for the
- * PulseAudio sound server. It supports the GstMixer interface, which can be
- * used to obtain a list of available mixer tracks. Set the mixer element to
- * READY state before using the GstMixer interface on it.
- *
- *
- * Example pipelines
- *
- * pulsemixer can't be used in a sensible way in gst-launch.
- *
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include
-#include
-
-#include "pulsemixer.h"
-
-enum
-{
- PROP_SERVER = 1,
- PROP_DEVICE,
- PROP_DEVICE_NAME
-};
-
-GST_DEBUG_CATEGORY_EXTERN (pulse_debug);
-#define GST_CAT_DEFAULT pulse_debug
-
-static void gst_pulsemixer_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_pulsemixer_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-static void gst_pulsemixer_finalize (GObject * object);
-
-static GstStateChangeReturn gst_pulsemixer_change_state (GstElement * element,
- GstStateChange transition);
-
-GST_IMPLEMENT_PULSEMIXER_CTRL_METHODS (GstPulseMixer, gst_pulsemixer);
-
-
-#define gst_pulsemixer_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstPulseMixer, gst_pulsemixer, GST_TYPE_ELEMENT,
- G_IMPLEMENT_INTERFACE (GST_TYPE_MIXER,
- gst_pulsemixer_mixer_interface_init));
-
-static void
-gst_pulsemixer_class_init (GstPulseMixerClass * g_class)
-{
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
- GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
-
- gstelement_class->change_state =
- GST_DEBUG_FUNCPTR (gst_pulsemixer_change_state);
-
- gobject_class->finalize = gst_pulsemixer_finalize;
- gobject_class->get_property = gst_pulsemixer_get_property;
- gobject_class->set_property = gst_pulsemixer_set_property;
-
- g_object_class_install_property (gobject_class,
- PROP_SERVER,
- g_param_spec_string ("server", "Server",
- "The PulseAudio server to connect to", NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class,
- PROP_DEVICE,
- g_param_spec_string ("device", "Device",
- "The PulseAudio sink or source to control", NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class,
- PROP_DEVICE_NAME,
- g_param_spec_string ("device-name", "Device name",
- "Human-readable name of the sound device", NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (g_class),
- "PulseAudio Mixer",
- "Generic/Audio",
- "Control sound input and output levels for PulseAudio",
- "Lennart Poettering");
-}
-
-static void
-gst_pulsemixer_init (GstPulseMixer * this)
-{
- this->mixer = NULL;
- this->server = NULL;
- this->device = NULL;
-
- this->probe =
- gst_pulseprobe_new (G_OBJECT (this), G_OBJECT_GET_CLASS (this),
- PROP_DEVICE, this->device, TRUE, TRUE);
-}
-
-static void
-gst_pulsemixer_finalize (GObject * object)
-{
- GstPulseMixer *this = GST_PULSEMIXER (object);
-
- g_free (this->server);
- g_free (this->device);
-
- if (this->mixer) {
- gst_pulsemixer_ctrl_free (this->mixer);
- this->mixer = NULL;
- }
-
- if (this->probe) {
- gst_pulseprobe_free (this->probe);
- this->probe = NULL;
- }
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_pulsemixer_set_property (GObject * object,
- guint prop_id, const GValue * value, GParamSpec * pspec)
-{
- GstPulseMixer *this = GST_PULSEMIXER (object);
-
- switch (prop_id) {
- case PROP_SERVER:
- g_free (this->server);
- this->server = g_value_dup_string (value);
-
- if (this->probe)
- gst_pulseprobe_set_server (this->probe, this->server);
-
- break;
-
- case PROP_DEVICE:
- g_free (this->device);
- this->device = g_value_dup_string (value);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_pulsemixer_get_property (GObject * object,
- guint prop_id, GValue * value, GParamSpec * pspec)
-{
- GstPulseMixer *this = GST_PULSEMIXER (object);
-
- switch (prop_id) {
- case PROP_SERVER:
- g_value_set_string (value, this->server);
- break;
- case PROP_DEVICE:
- g_value_set_string (value, this->device);
- break;
- case PROP_DEVICE_NAME:
- if (this->mixer) {
- char *t = g_strdup_printf ("%s: %s",
- this->mixer->type == GST_PULSEMIXER_SINK ? "Playback" : "Capture",
- this->mixer->description);
- g_value_take_string (value, t);
- } else
- g_value_set_string (value, NULL);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GstStateChangeReturn
-gst_pulsemixer_change_state (GstElement * element, GstStateChange transition)
-{
- GstPulseMixer *this = GST_PULSEMIXER (element);
- GstStateChangeReturn res;
-
- switch (transition) {
- case GST_STATE_CHANGE_NULL_TO_READY:
- if (!this->mixer)
- this->mixer =
- gst_pulsemixer_ctrl_new (G_OBJECT (this), this->server,
- this->device, GST_PULSEMIXER_UNKNOWN);
- break;
- default:
- ;
- }
-
- res = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
- switch (transition) {
- case GST_STATE_CHANGE_READY_TO_NULL:
- if (this->mixer) {
- gst_pulsemixer_ctrl_free (this->mixer);
- this->mixer = NULL;
- }
- break;
- default:
- ;
- }
-
- return res;
-}
diff --git a/ext/pulse/pulsemixer.h b/ext/pulse/pulsemixer.h
deleted file mode 100644
index 7ba3d2fa8c..0000000000
--- a/ext/pulse/pulsemixer.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * GStreamer pulseaudio plugin
- *
- * Copyright (c) 2004-2008 Lennart Poettering
- *
- * gst-pulse is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * gst-pulse 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with gst-pulse; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- */
-
-#ifndef __GST_PULSEMIXER_H__
-#define __GST_PULSEMIXER_H__
-
-#include
-
-#include
-#include
-
-#include "pulsemixerctrl.h"
-#include "pulseprobe.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_PULSEMIXER \
- (gst_pulsemixer_get_type())
-#define GST_PULSEMIXER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PULSEMIXER,GstPulseMixer))
-#define GST_PULSEMIXER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PULSEMIXER,GstPulseMixerClass))
-#define GST_IS_PULSEMIXER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PULSEMIXER))
-#define GST_IS_PULSEMIXER_CLASS(obj) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PULSEMIXER))
-
-typedef struct _GstPulseMixer GstPulseMixer;
-typedef struct _GstPulseMixerClass GstPulseMixerClass;
-
-struct _GstPulseMixer
-{
- GstElement parent;
-
- gchar *server, *device;
-
- GstPulseMixerCtrl *mixer;
- GstPulseProbe *probe;
-};
-
-struct _GstPulseMixerClass
-{
- GstElementClass parent_class;
-};
-
-GType gst_pulsemixer_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_PULSEMIXER_H__ */
diff --git a/ext/pulse/pulsemixerctrl.c b/ext/pulse/pulsemixerctrl.c
deleted file mode 100644
index 220c8d0655..0000000000
--- a/ext/pulse/pulsemixerctrl.c
+++ /dev/null
@@ -1,640 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 2 -*-*/
-
-/*
- * GStreamer pulseaudio plugin
- *
- * Copyright (c) 2004-2008 Lennart Poettering
- *
- * gst-pulse is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * gst-pulse 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with gst-pulse; 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
-
-#include "pulsemixerctrl.h"
-#include "pulsemixertrack.h"
-#include "pulseutil.h"
-
-GST_DEBUG_CATEGORY_EXTERN (pulse_debug);
-#define GST_CAT_DEFAULT pulse_debug
-
-static void
-gst_pulsemixer_ctrl_context_state_cb (pa_context * context, void *userdata)
-{
- GstPulseMixerCtrl *c = GST_PULSEMIXER_CTRL (userdata);
-
- /* Called from the background thread! */
-
- switch (pa_context_get_state (context)) {
- case PA_CONTEXT_READY:
- case PA_CONTEXT_TERMINATED:
- case PA_CONTEXT_FAILED:
- pa_threaded_mainloop_signal (c->mainloop, 0);
- break;
-
- case PA_CONTEXT_UNCONNECTED:
- case PA_CONTEXT_CONNECTING:
- case PA_CONTEXT_AUTHORIZING:
- case PA_CONTEXT_SETTING_NAME:
- break;
- }
-}
-
-static void
-gst_pulsemixer_ctrl_sink_info_cb (pa_context * context, const pa_sink_info * i,
- int eol, void *userdata)
-{
- GstPulseMixerCtrl *c = userdata;
- gboolean vol_chg = FALSE;
- gboolean old_mute;
-
- /* Called from the background thread! */
-
- if (c->outstandig_queries > 0)
- c->outstandig_queries--;
-
- if (c->ignore_queries > 0 || c->time_event) {
-
- if (c->ignore_queries > 0)
- c->ignore_queries--;
-
- return;
- }
-
- if (!i && eol < 0) {
- c->operation_success = FALSE;
- pa_threaded_mainloop_signal (c->mainloop, 0);
- return;
- }
-
- if (eol)
- return;
-
- g_free (c->name);
- g_free (c->description);
- c->name = g_strdup (i->name);
- c->description = g_strdup (i->description);
- c->index = i->index;
- c->channel_map = i->channel_map;
- vol_chg = !pa_cvolume_equal (&c->volume, &i->volume);
- c->volume = i->volume;
- old_mute = c->muted;
- c->muted = !!i->mute;
- c->type = GST_PULSEMIXER_SINK;
-
- if (c->track) {
- GstMixerTrackFlags flags = c->track->flags;
-
- flags =
- (flags & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0);
- c->track->flags = flags;
- }
-
- c->operation_success = TRUE;
- pa_threaded_mainloop_signal (c->mainloop, 0);
-
- if (vol_chg && c->track) {
- gint volumes[PA_CHANNELS_MAX];
- gint i;
- for (i = 0; i < c->volume.channels; i++)
- volumes[i] = (gint) (c->volume.values[i]);
- GST_LOG_OBJECT (c->object, "Sending volume change notification");
- gst_mixer_volume_changed (GST_MIXER (c->object), c->track, volumes);
- }
- if ((c->muted != old_mute) && c->track) {
- GST_LOG_OBJECT (c->object, "Sending mute toggled notification");
- gst_mixer_mute_toggled (GST_MIXER (c->object), c->track, c->muted);
- }
-}
-
-static void
-gst_pulsemixer_ctrl_source_info_cb (pa_context * context,
- const pa_source_info * i, int eol, void *userdata)
-{
- GstPulseMixerCtrl *c = userdata;
- gboolean vol_chg = FALSE;
- gboolean old_mute;
-
- /* Called from the background thread! */
-
- if (c->outstandig_queries > 0)
- c->outstandig_queries--;
-
- if (c->ignore_queries > 0 || c->time_event) {
-
- if (c->ignore_queries > 0)
- c->ignore_queries--;
-
- return;
- }
-
- if (!i && eol < 0) {
- c->operation_success = FALSE;
- pa_threaded_mainloop_signal (c->mainloop, 0);
- return;
- }
-
- if (eol)
- return;
-
- g_free (c->name);
- g_free (c->description);
- c->name = g_strdup (i->name);
- c->description = g_strdup (i->description);
- c->index = i->index;
- c->channel_map = i->channel_map;
- vol_chg = !pa_cvolume_equal (&c->volume, &i->volume);
- c->volume = i->volume;
- old_mute = c->muted;
- c->muted = !!i->mute;
- c->type = GST_PULSEMIXER_SOURCE;
-
- if (c->track) {
- GstMixerTrackFlags flags = c->track->flags;
-
- flags =
- (flags & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0);
- c->track->flags = flags;
- }
-
- c->operation_success = TRUE;
- pa_threaded_mainloop_signal (c->mainloop, 0);
-
- if (vol_chg && c->track) {
- gint volumes[PA_CHANNELS_MAX];
- gint i;
- for (i = 0; i < c->volume.channels; i++)
- volumes[i] = (gint) (c->volume.values[i]);
- GST_LOG_OBJECT (c->object, "Sending volume change notification");
- gst_mixer_volume_changed (GST_MIXER (c->object), c->track, volumes);
- }
- if ((c->muted != old_mute) && c->track) {
- GST_LOG_OBJECT (c->object, "Sending mute toggled notification");
- gst_mixer_mute_toggled (GST_MIXER (c->object), c->track, c->muted);
- }
-}
-
-static void
-gst_pulsemixer_ctrl_subscribe_cb (pa_context * context,
- pa_subscription_event_type_t t, uint32_t idx, void *userdata)
-{
- GstPulseMixerCtrl *c = GST_PULSEMIXER_CTRL (userdata);
- pa_operation *o = NULL;
-
- /* Called from the background thread! */
-
- if (c->index != idx)
- return;
-
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE)
- return;
-
- if (c->type == GST_PULSEMIXER_SINK)
- o = pa_context_get_sink_info_by_index (c->context, c->index,
- gst_pulsemixer_ctrl_sink_info_cb, c);
- else
- o = pa_context_get_source_info_by_index (c->context, c->index,
- gst_pulsemixer_ctrl_source_info_cb, c);
-
- if (!o) {
- GST_WARNING_OBJECT (c->object, "Failed to get sink info: %s",
- pa_strerror (pa_context_errno (c->context)));
- return;
- }
-
- pa_operation_unref (o);
-
- c->outstandig_queries++;
-}
-
-static void
-gst_pulsemixer_ctrl_success_cb (pa_context * context, int success,
- void *userdata)
-{
- GstPulseMixerCtrl *c = (GstPulseMixerCtrl *) userdata;
-
- c->operation_success = !!success;
- pa_threaded_mainloop_signal (c->mainloop, 0);
-}
-
-#define CHECK_DEAD_GOTO(c, label) \
- G_STMT_START { \
- if (!(c)->context || \
- !PA_CONTEXT_IS_GOOD(pa_context_get_state((c)->context))) { \
- GST_WARNING_OBJECT ((c)->object, "Not connected: %s", \
- (c)->context ? pa_strerror(pa_context_errno((c)->context)) : "NULL"); \
- goto label; \
- } \
- } G_STMT_END
-
-static gboolean
-gst_pulsemixer_ctrl_open (GstPulseMixerCtrl * c)
-{
- int e;
- gchar *name;
- pa_operation *o = NULL;
-
- g_assert (c);
-
- GST_DEBUG_OBJECT (c->object, "ctrl open");
-
- c->mainloop = pa_threaded_mainloop_new ();
- if (!c->mainloop)
- return FALSE;
-
- e = pa_threaded_mainloop_start (c->mainloop);
- if (e < 0)
- return FALSE;
-
- name = gst_pulse_client_name ();
-
- pa_threaded_mainloop_lock (c->mainloop);
-
- if (!(c->context =
- pa_context_new (pa_threaded_mainloop_get_api (c->mainloop), name))) {
- GST_WARNING_OBJECT (c->object, "Failed to create context");
- goto unlock_and_fail;
- }
-
- pa_context_set_state_callback (c->context,
- gst_pulsemixer_ctrl_context_state_cb, c);
- pa_context_set_subscribe_callback (c->context,
- gst_pulsemixer_ctrl_subscribe_cb, c);
-
- if (pa_context_connect (c->context, c->server, 0, NULL) < 0) {
- GST_WARNING_OBJECT (c->object, "Failed to connect context: %s",
- pa_strerror (pa_context_errno (c->context)));
- goto unlock_and_fail;
- }
-
- /* Wait until the context is ready */
- while (pa_context_get_state (c->context) != PA_CONTEXT_READY) {
- CHECK_DEAD_GOTO (c, unlock_and_fail);
- pa_threaded_mainloop_wait (c->mainloop);
- }
-
- /* Subscribe to events */
- if (!(o =
- pa_context_subscribe (c->context,
- PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE,
- gst_pulsemixer_ctrl_success_cb, c))) {
- GST_WARNING_OBJECT (c->object, "Failed to subscribe to events: %s",
- pa_strerror (pa_context_errno (c->context)));
- goto unlock_and_fail;
- }
-
- c->operation_success = FALSE;
- while (pa_operation_get_state (o) != PA_OPERATION_DONE) {
- CHECK_DEAD_GOTO (c, unlock_and_fail);
- pa_threaded_mainloop_wait (c->mainloop);
- }
-
- if (!c->operation_success) {
- GST_WARNING_OBJECT (c->object, "Failed to subscribe to events: %s",
- pa_strerror (pa_context_errno (c->context)));
- goto unlock_and_fail;
- }
- pa_operation_unref (o);
- o = NULL;
-
- /* Get sink info */
-
- if (c->type == GST_PULSEMIXER_UNKNOWN || c->type == GST_PULSEMIXER_SINK) {
- GST_WARNING_OBJECT (c->object, "Get info for '%s'", c->device);
- if (!(o =
- pa_context_get_sink_info_by_name (c->context, c->device,
- gst_pulsemixer_ctrl_sink_info_cb, c))) {
- GST_WARNING_OBJECT (c->object, "Failed to get sink info: %s",
- pa_strerror (pa_context_errno (c->context)));
- goto unlock_and_fail;
- }
-
- c->operation_success = FALSE;
- while (pa_operation_get_state (o) != PA_OPERATION_DONE) {
- CHECK_DEAD_GOTO (c, unlock_and_fail);
- pa_threaded_mainloop_wait (c->mainloop);
- }
-
- pa_operation_unref (o);
- o = NULL;
-
- if (!c->operation_success && (c->type == GST_PULSEMIXER_SINK
- || pa_context_errno (c->context) != PA_ERR_NOENTITY)) {
- GST_WARNING_OBJECT (c->object, "Failed to get sink info: %s",
- pa_strerror (pa_context_errno (c->context)));
- goto unlock_and_fail;
- }
- }
-
- if (c->type == GST_PULSEMIXER_UNKNOWN || c->type == GST_PULSEMIXER_SOURCE) {
- if (!(o =
- pa_context_get_source_info_by_name (c->context, c->device,
- gst_pulsemixer_ctrl_source_info_cb, c))) {
- GST_WARNING_OBJECT (c->object, "Failed to get source info: %s",
- pa_strerror (pa_context_errno (c->context)));
- goto unlock_and_fail;
- }
-
- c->operation_success = FALSE;
- while (pa_operation_get_state (o) != PA_OPERATION_DONE) {
- CHECK_DEAD_GOTO (c, unlock_and_fail);
- pa_threaded_mainloop_wait (c->mainloop);
- }
-
- pa_operation_unref (o);
- o = NULL;
-
- if (!c->operation_success) {
- GST_WARNING_OBJECT (c->object, "Failed to get source info: %s",
- pa_strerror (pa_context_errno (c->context)));
- goto unlock_and_fail;
- }
- }
-
- g_assert (c->type != GST_PULSEMIXER_UNKNOWN);
-
- c->track = gst_pulsemixer_track_new (c);
- c->tracklist = g_list_append (c->tracklist, c->track);
-
- pa_threaded_mainloop_unlock (c->mainloop);
- g_free (name);
-
- return TRUE;
-
-unlock_and_fail:
-
- if (o)
- pa_operation_unref (o);
-
- if (c->mainloop)
- pa_threaded_mainloop_unlock (c->mainloop);
-
- g_free (name);
-
- return FALSE;
-}
-
-static void
-gst_pulsemixer_ctrl_close (GstPulseMixerCtrl * c)
-{
- g_assert (c);
-
- GST_DEBUG_OBJECT (c->object, "ctrl close");
-
- if (c->mainloop)
- pa_threaded_mainloop_stop (c->mainloop);
-
- if (c->context) {
- pa_context_disconnect (c->context);
- pa_context_unref (c->context);
- c->context = NULL;
- }
-
- if (c->mainloop) {
- pa_threaded_mainloop_free (c->mainloop);
- c->mainloop = NULL;
- c->time_event = NULL;
- }
-
- if (c->tracklist) {
- g_list_free (c->tracklist);
- c->tracklist = NULL;
- }
-
- if (c->track) {
- GST_PULSEMIXER_TRACK (c->track)->control = NULL;
- g_object_unref (c->track);
- c->track = NULL;
- }
-}
-
-GstPulseMixerCtrl *
-gst_pulsemixer_ctrl_new (GObject * object, const gchar * server,
- const gchar * device, GstPulseMixerType type)
-{
- GstPulseMixerCtrl *c = NULL;
- g_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE ((object),
- GST_TYPE_MIXER), c);
-
- GST_DEBUG_OBJECT (object, "new mixer ctrl for %s", device);
- c = g_new (GstPulseMixerCtrl, 1);
- c->object = g_object_ref (object);
- c->tracklist = NULL;
- c->server = g_strdup (server);
- c->device = g_strdup (device);
- c->mainloop = NULL;
- c->context = NULL;
- c->track = NULL;
- c->ignore_queries = c->outstandig_queries = 0;
-
- pa_cvolume_mute (&c->volume, PA_CHANNELS_MAX);
- pa_channel_map_init (&c->channel_map);
- c->muted = FALSE;
- c->index = PA_INVALID_INDEX;
- c->type = type;
- c->name = NULL;
- c->description = NULL;
-
- c->time_event = NULL;
- c->update_volume = c->update_mute = FALSE;
-
- if (!(gst_pulsemixer_ctrl_open (c))) {
- gst_pulsemixer_ctrl_free (c);
- return NULL;
- }
-
- return c;
-}
-
-void
-gst_pulsemixer_ctrl_free (GstPulseMixerCtrl * c)
-{
- g_assert (c);
-
- gst_pulsemixer_ctrl_close (c);
-
- g_free (c->server);
- g_free (c->device);
- g_free (c->name);
- g_free (c->description);
- g_object_unref (c->object);
- g_free (c);
-}
-
-const GList *
-gst_pulsemixer_ctrl_list_tracks (GstPulseMixerCtrl * c)
-{
- g_assert (c);
-
- return c->tracklist;
-}
-
-static void
-gst_pulsemixer_ctrl_timeout_event (pa_mainloop_api * a, pa_time_event * e,
- const struct timeval *tv, void *userdata)
-{
- pa_operation *o;
- GstPulseMixerCtrl *c = GST_PULSEMIXER_CTRL (userdata);
-
- if (c->update_volume) {
- if (c->type == GST_PULSEMIXER_SINK)
- o = pa_context_set_sink_volume_by_index (c->context, c->index, &c->volume,
- NULL, NULL);
- else
- o = pa_context_set_source_volume_by_index (c->context, c->index,
- &c->volume, NULL, NULL);
-
- if (!o)
- GST_WARNING_OBJECT (c->object, "Failed to set device volume: %s",
- pa_strerror (pa_context_errno (c->context)));
- else
- pa_operation_unref (o);
-
- c->update_volume = FALSE;
- }
-
- if (c->update_mute) {
- if (c->type == GST_PULSEMIXER_SINK)
- o = pa_context_set_sink_mute_by_index (c->context, c->index, c->muted,
- NULL, NULL);
- else
- o = pa_context_set_source_mute_by_index (c->context, c->index, c->muted,
- NULL, NULL);
-
- if (!o)
- GST_WARNING_OBJECT (c->object, "Failed to set device mute: %s",
- pa_strerror (pa_context_errno (c->context)));
- else
- pa_operation_unref (o);
-
- c->update_mute = FALSE;
- }
-
- /* Make sure that all outstanding queries are being ignored */
- c->ignore_queries = c->outstandig_queries;
-
- g_assert (e == c->time_event);
- a->time_free (e);
- c->time_event = NULL;
-}
-
-#define UPDATE_DELAY 50000
-
-static void
-restart_time_event (GstPulseMixerCtrl * c)
-{
- struct timeval tv;
- pa_mainloop_api *api;
-
- g_assert (c);
-
- if (c->time_event)
- return;
-
- /* Updating the volume too often will cause a lot of traffic
- * when accessing a networked server. Therefore we make sure
- * to update the volume only once every 50ms */
-
- api = pa_threaded_mainloop_get_api (c->mainloop);
-
- c->time_event =
- api->time_new (api, pa_timeval_add (pa_gettimeofday (&tv), UPDATE_DELAY),
- gst_pulsemixer_ctrl_timeout_event, c);
-}
-
-void
-gst_pulsemixer_ctrl_set_volume (GstPulseMixerCtrl * c, GstMixerTrack * track,
- gint * volumes)
-{
- pa_cvolume v;
- int i;
-
- g_assert (c);
- g_assert (track == c->track);
-
- pa_threaded_mainloop_lock (c->mainloop);
-
- for (i = 0; i < c->channel_map.channels; i++)
- v.values[i] = (pa_volume_t) volumes[i];
-
- v.channels = c->channel_map.channels;
-
- c->volume = v;
- c->update_volume = TRUE;
-
- restart_time_event (c);
-
- pa_threaded_mainloop_unlock (c->mainloop);
-}
-
-void
-gst_pulsemixer_ctrl_get_volume (GstPulseMixerCtrl * c, GstMixerTrack * track,
- gint * volumes)
-{
- int i;
-
- g_assert (c);
- g_assert (track == c->track);
-
- pa_threaded_mainloop_lock (c->mainloop);
-
- for (i = 0; i < c->channel_map.channels; i++)
- volumes[i] = c->volume.values[i];
-
- pa_threaded_mainloop_unlock (c->mainloop);
-}
-
-void
-gst_pulsemixer_ctrl_set_record (GstPulseMixerCtrl * c, GstMixerTrack * track,
- gboolean record)
-{
- g_assert (c);
- g_assert (track == c->track);
-}
-
-void
-gst_pulsemixer_ctrl_set_mute (GstPulseMixerCtrl * c, GstMixerTrack * track,
- gboolean mute)
-{
- g_assert (c);
- g_assert (track == c->track);
-
- pa_threaded_mainloop_lock (c->mainloop);
-
- c->muted = mute;
- c->update_mute = TRUE;
-
- if (c->track) {
- GstMixerTrackFlags flags = c->track->flags;
-
- flags =
- (flags & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0);
- c->track->flags = flags;
- }
-
- restart_time_event (c);
-
- pa_threaded_mainloop_unlock (c->mainloop);
-}
-
-GstMixerFlags
-gst_pulsemixer_ctrl_get_mixer_flags (GstPulseMixerCtrl * mixer)
-{
- return GST_MIXER_FLAG_AUTO_NOTIFICATIONS;
-}
diff --git a/ext/pulse/pulsemixerctrl.h b/ext/pulse/pulsemixerctrl.h
deleted file mode 100644
index dbb0f99aa1..0000000000
--- a/ext/pulse/pulsemixerctrl.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 2 -*-*/
-
-/*
- * GStreamer pulseaudio plugin
- *
- * Copyright (c) 2004-2008 Lennart Poettering
- *
- * gst-pulse is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * gst-pulse 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with gst-pulse; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- */
-
-#ifndef __GST_PULSEMIXERCTRL_H__
-#define __GST_PULSEMIXERCTRL_H__
-
-#include
-#include
-
-#include
-#include
-
-G_BEGIN_DECLS
-
-#define GST_PULSEMIXER_CTRL(obj) ((GstPulseMixerCtrl*)(obj))
-typedef struct _GstPulseMixerCtrl GstPulseMixerCtrl;
-
-typedef enum
-{
- GST_PULSEMIXER_UNKNOWN,
- GST_PULSEMIXER_SINK,
- GST_PULSEMIXER_SOURCE
-} GstPulseMixerType;
-
-struct _GstPulseMixerCtrl
-{
- GObject *object;
-
- GList *tracklist;
-
- gchar *server, *device;
-
- pa_threaded_mainloop *mainloop;
- pa_context *context;
-
- gchar *name, *description;
- pa_channel_map channel_map;
-
- pa_cvolume volume;
- gboolean muted:1;
-
- gboolean update_volume:1;
- gboolean update_mute:1;
-
- gboolean operation_success:1;
-
- guint32 index;
- GstPulseMixerType type;
-
- GstMixerTrack *track;
-
- pa_time_event *time_event;
-
- int outstandig_queries;
- int ignore_queries;
-
-};
-
-GstPulseMixerCtrl *gst_pulsemixer_ctrl_new (GObject *object, const gchar * server,
- const gchar * device, GstPulseMixerType type);
-void gst_pulsemixer_ctrl_free (GstPulseMixerCtrl * mixer);
-
-const GList *gst_pulsemixer_ctrl_list_tracks (GstPulseMixerCtrl * mixer);
-
-void gst_pulsemixer_ctrl_set_volume (GstPulseMixerCtrl * mixer,
- GstMixerTrack * track, gint * volumes);
-void gst_pulsemixer_ctrl_get_volume (GstPulseMixerCtrl * mixer,
- GstMixerTrack * track, gint * volumes);
-void gst_pulsemixer_ctrl_set_mute (GstPulseMixerCtrl * mixer,
- GstMixerTrack * track, gboolean mute);
-void gst_pulsemixer_ctrl_set_record (GstPulseMixerCtrl * mixer,
- GstMixerTrack * track, gboolean record);
-GstMixerFlags gst_pulsemixer_ctrl_get_mixer_flags (GstPulseMixerCtrl * mixer);
-
-#define GST_IMPLEMENT_PULSEMIXER_CTRL_METHODS(Type, interface_as_function) \
-static const GList* \
-interface_as_function ## _list_tracks (GstMixer * mixer) \
-{ \
- Type *this = (Type*) mixer; \
- \
- g_return_val_if_fail (this != NULL, NULL); \
- g_return_val_if_fail (this->mixer != NULL, NULL); \
- \
- return gst_pulsemixer_ctrl_list_tracks (this->mixer); \
-} \
-static void \
-interface_as_function ## _set_volume (GstMixer * mixer, GstMixerTrack * track, \
- gint * volumes) \
-{ \
- Type *this = (Type*) mixer; \
- \
- g_return_if_fail (this != NULL); \
- g_return_if_fail (this->mixer != NULL); \
- \
- gst_pulsemixer_ctrl_set_volume (this->mixer, track, volumes); \
-} \
-static void \
-interface_as_function ## _get_volume (GstMixer * mixer, GstMixerTrack * track, \
- gint * volumes) \
-{ \
- Type *this = (Type*) mixer; \
- \
- g_return_if_fail (this != NULL); \
- g_return_if_fail (this->mixer != NULL); \
- \
- gst_pulsemixer_ctrl_get_volume (this->mixer, track, volumes); \
-} \
-static void \
-interface_as_function ## _set_record (GstMixer * mixer, GstMixerTrack * track, \
- gboolean record) \
-{ \
- Type *this = (Type*) mixer; \
- \
- g_return_if_fail (this != NULL); \
- g_return_if_fail (this->mixer != NULL); \
- \
- gst_pulsemixer_ctrl_set_record (this->mixer, track, record); \
-} \
-static void \
-interface_as_function ## _set_mute (GstMixer * mixer, GstMixerTrack * track, \
- gboolean mute) \
-{ \
- Type *this = (Type*) mixer; \
- \
- g_return_if_fail (this != NULL); \
- g_return_if_fail (this->mixer != NULL); \
- \
- gst_pulsemixer_ctrl_set_mute (this->mixer, track, mute); \
-} \
-static GstMixerFlags \
-interface_as_function ## _get_mixer_flags (GstMixer * mixer) \
-{ \
- Type *this = (Type*) mixer; \
- \
- g_return_val_if_fail (this != NULL, GST_MIXER_FLAG_NONE); \
- g_return_val_if_fail (this->mixer != NULL, GST_MIXER_FLAG_NONE); \
- \
- return gst_pulsemixer_ctrl_get_mixer_flags (this->mixer); \
-} \
-static GstMixerType \
-interface_as_function ## _get_mixer_type (GstMixer * mixer) \
-{ \
- return GST_MIXER_HARDWARE; \
-} \
-static void \
-interface_as_function ## _mixer_interface_init (GstMixerInterface * iface) \
-{ \
- iface->list_tracks = interface_as_function ## _list_tracks; \
- iface->set_volume = interface_as_function ## _set_volume; \
- iface->get_volume = interface_as_function ## _get_volume; \
- iface->set_mute = interface_as_function ## _set_mute; \
- iface->set_record = interface_as_function ## _set_record; \
- iface->get_mixer_flags = interface_as_function ## _get_mixer_flags; \
- iface->get_mixer_type = interface_as_function ## _get_mixer_type; \
-}
-
-G_END_DECLS
-
-#endif
diff --git a/ext/pulse/pulsemixertrack.c b/ext/pulse/pulsemixertrack.c
deleted file mode 100644
index 981351cb3a..0000000000
--- a/ext/pulse/pulsemixertrack.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * GStreamer pulseaudio plugin
- *
- * Copyright (c) 2004-2008 Lennart Poettering
- *
- * gst-pulse is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * gst-pulse 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with gst-pulse; 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
-
-#include "pulsemixertrack.h"
-
-GST_DEBUG_CATEGORY_EXTERN (pulse_debug);
-#define GST_CAT_DEFAULT pulse_debug
-
-G_DEFINE_TYPE (GstPulseMixerTrack, gst_pulsemixer_track, GST_TYPE_MIXER_TRACK);
-
-static void
-gst_pulsemixer_track_class_init (GstPulseMixerTrackClass * klass)
-{
-}
-
-static void
-gst_pulsemixer_track_init (GstPulseMixerTrack * track)
-{
- track->control = NULL;
-}
-
-GstMixerTrack *
-gst_pulsemixer_track_new (GstPulseMixerCtrl * control)
-{
- GstPulseMixerTrack *pulsetrack;
- GstMixerTrack *track;
-
- pulsetrack = g_object_new (GST_TYPE_PULSEMIXER_TRACK, NULL);
- pulsetrack->control = control;
-
- track = GST_MIXER_TRACK (pulsetrack);
- track->label = g_strdup ("Master");
- track->num_channels = control->channel_map.channels;
- track->flags =
- (control->type ==
- GST_PULSEMIXER_SINK ? GST_MIXER_TRACK_OUTPUT | GST_MIXER_TRACK_MASTER :
- GST_MIXER_TRACK_INPUT | GST_MIXER_TRACK_RECORD) | (control->muted ?
- GST_MIXER_TRACK_MUTE : 0);
- track->min_volume = PA_VOLUME_MUTED;
- track->max_volume = PA_VOLUME_NORM;
-
- return track;
-}
diff --git a/ext/pulse/pulsemixertrack.h b/ext/pulse/pulsemixertrack.h
deleted file mode 100644
index 5c958ed0e0..0000000000
--- a/ext/pulse/pulsemixertrack.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * GStreamer pulseaudio plugin
- *
- * Copyright (c) 2004-2008 Lennart Poettering
- *
- * gst-pulse is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * gst-pulse 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with gst-pulse; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- */
-
-#ifndef __GST_PULSEMIXERTRACK_H__
-#define __GST_PULSEMIXERTRACK_H__
-
-#include
-
-#include "pulsemixerctrl.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_PULSEMIXER_TRACK \
- (gst_pulsemixer_track_get_type())
-#define GST_PULSEMIXER_TRACK(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_PULSEMIXER_TRACK, GstPulseMixerTrack))
-#define GST_PULSEMIXER_TRACK_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_PULSEMIXER_TRACK, GstPulseMixerTrackClass))
-#define GST_IS_PULSEMIXER_TRACK(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_PULSEMIXER_TRACK))
-#define GST_IS_PULSEMIXER_TRACK_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_PULSEMIXER_TRACK))
-
-
-typedef struct _GstPulseMixerTrack
-{
- GstMixerTrack parent;
- GstPulseMixerCtrl *control;
-} GstPulseMixerTrack;
-
-typedef struct _GstPulseMixerTrackClass
-{
- GstMixerTrackClass parent;
-} GstPulseMixerTrackClass;
-
-GType gst_pulsemixer_track_get_type (void);
-
-GstMixerTrack *gst_pulsemixer_track_new (GstPulseMixerCtrl * control);
-
-G_END_DECLS
-
-#endif
diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c
index c8bcac4408..4452cf621d 100644
--- a/ext/pulse/pulsesink.c
+++ b/ext/pulse/pulsesink.c
@@ -23,7 +23,7 @@
/**
* SECTION:element-pulsesink
- * @see_also: pulsesrc, pulsemixer
+ * @see_also: pulsesrc
*
* This element outputs audio to a
* PulseAudio sound server.
diff --git a/ext/pulse/pulsesrc.c b/ext/pulse/pulsesrc.c
index 3c965ae4ea..b4afe370a4 100644
--- a/ext/pulse/pulsesrc.c
+++ b/ext/pulse/pulsesrc.c
@@ -21,7 +21,7 @@
/**
* SECTION:element-pulsesrc
- * @see_also: pulsesink, pulsemixer
+ * @see_also: pulsesink
*
* This element captures audio from a
* PulseAudio sound server.
@@ -47,7 +47,6 @@
#include "pulsesrc.h"
#include "pulseutil.h"
-#include "pulsemixerctrl.h"
GST_DEBUG_CATEGORY_EXTERN (pulse_debug);
#define GST_CAT_DEFAULT pulse_debug
@@ -127,11 +126,8 @@ static GstStaticPadTemplate pad_template = GST_STATIC_PAD_TEMPLATE ("src",
);
-GST_IMPLEMENT_PULSEMIXER_CTRL_METHODS (GstPulseSrc, gst_pulsesrc);
-
#define gst_pulsesrc_parent_class parent_class
G_DEFINE_TYPE_WITH_CODE (GstPulseSrc, gst_pulsesrc, GST_TYPE_AUDIO_SRC,
- G_IMPLEMENT_INTERFACE (GST_TYPE_MIXER, gst_pulsesrc_mixer_interface_init);
G_IMPLEMENT_INTERFACE (GST_TYPE_STREAM_VOLUME, NULL));
static void
@@ -287,8 +283,6 @@ gst_pulsesrc_init (GstPulseSrc * pulsesrc)
pulsesrc->notify = 0;
- pulsesrc->mixer = NULL;
-
pulsesrc->properties = NULL;
pulsesrc->proplist = NULL;
@@ -348,11 +342,6 @@ gst_pulsesrc_finalize (GObject * object)
if (pulsesrc->proplist)
pa_proplist_free (pulsesrc->proplist);
- if (pulsesrc->mixer) {
- gst_pulsemixer_ctrl_free (pulsesrc->mixer);
- pulsesrc->mixer = NULL;
- }
-
if (pulsesrc->probe) {
gst_pulseprobe_free (pulsesrc->probe);
pulsesrc->probe = NULL;
@@ -1616,11 +1605,6 @@ gst_pulsesrc_change_state (GstElement * element, GstStateChange transition)
this->mainloop = NULL;
goto mainloop_start_failed;
}
-
- if (!this->mixer)
- this->mixer =
- gst_pulsemixer_ctrl_new (G_OBJECT (this), this->server,
- this->device, GST_PULSEMIXER_SOURCE);
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
/* uncork and start recording */
@@ -1645,11 +1629,6 @@ gst_pulsesrc_change_state (GstElement * element, GstStateChange transition)
gst_pulsesrc_pause (this);
break;
case GST_STATE_CHANGE_READY_TO_NULL:
- if (this->mixer) {
- gst_pulsemixer_ctrl_free (this->mixer);
- this->mixer = NULL;
- }
-
if (this->mainloop)
pa_threaded_mainloop_stop (this->mainloop);
diff --git a/ext/pulse/pulsesrc.h b/ext/pulse/pulsesrc.h
index d4d20f8c3b..18ba1522cf 100644
--- a/ext/pulse/pulsesrc.h
+++ b/ext/pulse/pulsesrc.h
@@ -30,7 +30,6 @@
#include
#include
-#include "pulsemixerctrl.h"
#include "pulseprobe.h"
G_BEGIN_DECLS
@@ -69,7 +68,6 @@ struct _GstPulseSrc
size_t read_buffer_length;
gchar *device_description;
- GstPulseMixerCtrl *mixer;
GstPulseProbe *probe;
gdouble volume;
diff --git a/gst/rtsp/Makefile.am b/gst/rtsp/Makefile.am
index 76896cca45..5c2307d9d2 100644
--- a/gst/rtsp/Makefile.am
+++ b/gst/rtsp/Makefile.am
@@ -5,7 +5,6 @@ libgstrtsp_la_SOURCES = gstrtsp.c gstrtspsrc.c \
libgstrtsp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
libgstrtsp_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) \
- -lgstinterfaces-@GST_API_VERSION@ \
-lgstrtp-@GST_API_VERSION@ -lgstrtsp-@GST_API_VERSION@ \
-lgstsdp-@GST_API_VERSION@ $(GST_LIBS)
libgstrtsp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
diff --git a/sys/v4l2/Makefile.am b/sys/v4l2/Makefile.am
index 89b6fe1bb5..f1fe14ba1c 100644
--- a/sys/v4l2/Makefile.am
+++ b/sys/v4l2/Makefile.am
@@ -8,17 +8,42 @@ xv_source =
xv_libs =
endif
+
+# variables used for enum/marshal generation
+glib_enum_headers = tuner.h tunernorm.h tunerchannel.h
+glib_enum_define = GST_INTERFACES
+glib_gen_prefix = gst_interfaces
+glib_gen_basename = tuner
+
+built_sources = \
+ tuner-marshal.c \
+ tuner-enumtypes.c
+
+built_headers = \
+ tuner-marshal.h \
+ tuner-enumtypes.h
+
+EXTRA_DIST = tuner-marshal.list
+
+CLEANFILES = $(built_sources) $(built_headers)
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
libgstvideo4linux2_la_SOURCES = gstv4l2.c \
gstv4l2colorbalance.c \
gstv4l2object.c \
gstv4l2bufferpool.c \
+ gstv4l2sink.c \
gstv4l2src.c \
gstv4l2radio.c \
gstv4l2tuner.c \
gstv4l2vidorient.c \
v4l2_calls.c \
+ tuner.c \
+ tunerchannel.c \
+ tunernorm.c \
$(xv_source)
-libgstvideo4linux2_la_SOURCES += gstv4l2sink.c
+nodist_libgstvideo4linux2_la_SOURCES = $(built_sources) $(built_headers)
libgstvideo4linux2_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) \
@@ -34,7 +59,6 @@ libgstvideo4linux2_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
$(GST_BASE_LIBS) \
$(GST_PLUGINS_BASE_LIBS) \
-lgstvideo-$(GST_API_VERSION) \
- -lgstinterfaces-$(GST_API_VERSION) \
$(GST_LIBS) \
$(xv_libs) \
$(LIBV4L2_LIBS) \
@@ -50,4 +74,8 @@ noinst_HEADERS = \
gstv4l2tuner.h \
gstv4l2vidorient.h \
gstv4l2videooverlay.h \
- v4l2_calls.h
+ v4l2_calls.h \
+ tuner.h \
+ tunerchannel.h \
+ tunernorm.h
+
diff --git a/sys/v4l2/gstv4l2tuner.h b/sys/v4l2/gstv4l2tuner.h
index 75d4559e04..5a6e2f54dc 100644
--- a/sys/v4l2/gstv4l2tuner.h
+++ b/sys/v4l2/gstv4l2tuner.h
@@ -25,8 +25,8 @@
#define __GST_V4L2_TUNER_H__
#include
-#include
+#include "tuner.h"
#include "gstv4l2object.h"
G_BEGIN_DECLS
diff --git a/sys/v4l2/gstv4l2videooverlay.c b/sys/v4l2/gstv4l2videooverlay.c
index ae9a317918..88ccf5cdfc 100644
--- a/sys/v4l2/gstv4l2videooverlay.c
+++ b/sys/v4l2/gstv4l2videooverlay.c
@@ -34,7 +34,7 @@
/* for XkbKeycodeToKeysym */
#include
-#include
+#include
#include "gstv4l2videooverlay.h"
#include "gstv4l2object.h"
diff --git a/sys/v4l2/gstv4l2videooverlay.h b/sys/v4l2/gstv4l2videooverlay.h
index 7c044e71d8..0f602e75ca 100644
--- a/sys/v4l2/gstv4l2videooverlay.h
+++ b/sys/v4l2/gstv4l2videooverlay.h
@@ -26,7 +26,7 @@
#include
#include
-#include
+#include
#include /* for GstVideoRectange */
#include
diff --git a/sys/v4l2/tuner-marshal.list b/sys/v4l2/tuner-marshal.list
new file mode 100644
index 0000000000..c99ddc7d2b
--- /dev/null
+++ b/sys/v4l2/tuner-marshal.list
@@ -0,0 +1,2 @@
+VOID:OBJECT,ULONG
+VOID:OBJECT,INT
diff --git a/sys/v4l2/tuner.c b/sys/v4l2/tuner.c
new file mode 100644
index 0000000000..59cea711d4
--- /dev/null
+++ b/sys/v4l2/tuner.c
@@ -0,0 +1,577 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje
+ *
+ * tuner.c: tuner design virtual class function wrappers
+ *
+ * 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 "tuner.h"
+#include "tuner-marshal.h"
+
+#include
+
+/**
+ * SECTION:gsttuner
+ * @short_description: Interface for elements providing tuner operations
+ *
+ *
+ *
+ * The GstTuner interface is provided by elements that have the ability to
+ * tune into multiple input signals, for example TV or radio capture cards.
+ *
+ * The interpretation of 'tuning into' an input stream depends on the element
+ * implementing the interface. For v4lsrc, it might imply selection of an
+ * input source and/or frequency to be configured on a TV card. Another
+ * GstTuner implementation might be to allow selection of an active input pad
+ * from multiple input pads.
+ *
+ * That said, the GstTuner interface functions are biased toward the
+ * TV capture scenario.
+ *
+ * The general parameters provided are for configuration are:
+ *
+ * Selection of a current #GstTunerChannel. The current channel
+ * represents the input source (e.g. Composite, S-Video etc for TV capture).
+ *
+ * The #GstTunerNorm for the channel. The norm chooses the
+ * interpretation of the incoming signal for the current channel. For example,
+ * PAL or NTSC, or more specific variants there-of.
+ *
+ * Channel frequency. If the current channel has the ability to tune
+ * between multiple frequencies (if it has the GST_TUNER_CHANNEL_FREQUENCY flag)
+ * then the frequency can be changed/retrieved via the
+ * gst_tuner_set_frequency() and gst_tuner_get_frequency() methods.
+ *
+ *
+ *
+ *
+ * Where applicable, the signal strength can be retrieved and/or monitored
+ * via a signal.
+ *
+ *
+ */
+
+/* FIXME 0.11: check if we need to add API for sometimes-supportedness
+ * (aka making up for GstImplementsInterface removal) */
+
+/* FIXME 0.11: replace signals with messages (+ make API thread-safe) */
+
+enum
+{
+ NORM_CHANGED,
+ CHANNEL_CHANGED,
+ FREQUENCY_CHANGED,
+ SIGNAL_CHANGED,
+ LAST_SIGNAL
+};
+
+static void gst_tuner_class_init (GstTunerInterface * iface);
+
+static guint gst_tuner_signals[LAST_SIGNAL] = { 0 };
+
+GType
+gst_tuner_get_type (void)
+{
+ static GType gst_tuner_type = 0;
+
+ if (!gst_tuner_type) {
+ static const GTypeInfo gst_tuner_info = {
+ sizeof (GstTunerInterface),
+ (GBaseInitFunc) gst_tuner_class_init,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0,
+ 0,
+ NULL,
+ };
+
+ gst_tuner_type = g_type_register_static (G_TYPE_INTERFACE,
+ "GstTuner", &gst_tuner_info, 0);
+ }
+
+ return gst_tuner_type;
+}
+
+static void
+gst_tuner_class_init (GstTunerInterface * iface)
+{
+ static gboolean initialized = FALSE;
+
+ if (!initialized) {
+ /**
+ * GstTuner::norm-changed:
+ * @tuner: The element providing the GstTuner interface
+ * @norm: The new configured norm.
+ *
+ * Reports that the current #GstTunerNorm has changed.
+ */
+ gst_tuner_signals[NORM_CHANGED] =
+ g_signal_new ("norm-changed",
+ GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstTunerInterface, norm_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_TUNER_NORM);
+ /**
+ * GstTuner::channel-changed:
+ * @tuner: The element providing the GstTuner interface
+ * @channel: The new configured channel.
+ *
+ * Reports that the current #GstTunerChannel has changed.
+ */
+ gst_tuner_signals[CHANNEL_CHANGED] =
+ g_signal_new ("channel-changed",
+ GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstTunerInterface, channel_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1,
+ GST_TYPE_TUNER_CHANNEL);
+ /**
+ * GstTuner::frequency-changed:
+ * @tuner: The element providing the GstTuner interface
+ * @frequency: The new frequency (an unsigned long)
+ *
+ * Reports that the current frequency has changed.
+ */
+ gst_tuner_signals[FREQUENCY_CHANGED] =
+ g_signal_new ("frequency-changed",
+ GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstTunerInterface, frequency_changed),
+ NULL, NULL,
+ gst_interfaces_marshal_VOID__OBJECT_ULONG, G_TYPE_NONE, 2,
+ GST_TYPE_TUNER_CHANNEL, G_TYPE_ULONG);
+ /**
+ * GstTuner::signal-changed:
+ * @tuner: The element providing the GstTuner interface
+ * @channel: The current #GstTunerChannel
+ * @signal: The new signal strength (an integer)
+ *
+ * Reports that the signal strength has changed.
+ *
+ * See Also: gst_tuner_signal_strength()
+ */
+ gst_tuner_signals[SIGNAL_CHANGED] =
+ g_signal_new ("signal-changed",
+ GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstTunerInterface, signal_changed),
+ NULL, NULL,
+ gst_interfaces_marshal_VOID__OBJECT_INT, G_TYPE_NONE, 2,
+ GST_TYPE_TUNER_CHANNEL, G_TYPE_INT);
+
+ initialized = TRUE;
+ }
+
+ /* default virtual functions */
+ iface->list_channels = NULL;
+ iface->set_channel = NULL;
+ iface->get_channel = NULL;
+
+ iface->list_norms = NULL;
+ iface->set_norm = NULL;
+ iface->get_norm = NULL;
+
+ iface->set_frequency = NULL;
+ iface->get_frequency = NULL;
+ iface->signal_strength = NULL;
+}
+
+/**
+ * gst_tuner_list_channels:
+ * @tuner: the #GstTuner (a #GstElement) to get the channels from.
+ *
+ * Retrieve a #GList of #GstTunerChannels available
+ * (e.g. 'composite', 's-video', ...) from the given tuner object.
+ *
+ * Returns: A list of channels available on this tuner. The list is
+ * owned by the GstTuner and must not be freed.
+ */
+const GList *
+gst_tuner_list_channels (GstTuner * tuner)
+{
+ GstTunerInterface *iface;
+
+ g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+
+ iface = GST_TUNER_GET_INTERFACE (tuner);
+ if (iface->list_channels) {
+ return iface->list_channels (tuner);
+ }
+
+ return NULL;
+}
+
+/**
+ * gst_tuner_set_channel:
+ * @tuner: the #GstTuner (a #GstElement) that owns the channel.
+ * @channel: the channel to tune to.
+ *
+ * Tunes the object to the given channel, which should be one of the
+ * channels returned by gst_tuner_list_channels().
+ */
+
+void
+gst_tuner_set_channel (GstTuner * tuner, GstTunerChannel * channel)
+{
+ GstTunerInterface *iface;
+
+ g_return_if_fail (GST_IS_TUNER (tuner));
+
+ iface = GST_TUNER_GET_INTERFACE (tuner);
+ if (iface->set_channel) {
+ iface->set_channel (tuner, channel);
+ }
+}
+
+/**
+ * gst_tuner_get_channel:
+ * @tuner: the #GstTuner (a #GstElement) to get the current channel from.
+ *
+ * Retrieve the current channel from the tuner.
+ *
+ * Returns: the current channel of the tuner object.
+ */
+
+GstTunerChannel *
+gst_tuner_get_channel (GstTuner * tuner)
+{
+ GstTunerInterface *iface;
+
+ g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+
+ iface = GST_TUNER_GET_INTERFACE (tuner);
+ if (iface->get_channel) {
+ return iface->get_channel (tuner);
+ }
+
+ return NULL;
+}
+
+/**
+ * gst_tuner_list_norms:
+ * @tuner: the #GstTuner (*a #GstElement) to get the list of norms from.
+ *
+ * Retrieve a GList of available #GstTunerNorm settings for the currently
+ * tuned channel on the given tuner object.
+ *
+ * Returns: A list of norms available on the current channel for this
+ * tuner object. The list is owned by the GstTuner and must not
+ * be freed.
+ */
+
+const GList *
+gst_tuner_list_norms (GstTuner * tuner)
+{
+ GstTunerInterface *iface;
+
+ g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+
+ iface = GST_TUNER_GET_INTERFACE (tuner);
+ if (iface->list_norms) {
+ return iface->list_norms (tuner);
+ }
+
+ return NULL;
+}
+
+/**
+ * gst_tuner_set_norm:
+ * @tuner: the #GstTuner (a #GstElement) to set the norm on.
+ * @norm: the norm to use for the current channel.
+ *
+ * Changes the video norm on this tuner to the given norm, which should be
+ * one of the norms returned by gst_tuner_list_norms().
+ */
+
+void
+gst_tuner_set_norm (GstTuner * tuner, GstTunerNorm * norm)
+{
+ GstTunerInterface *iface;
+
+ g_return_if_fail (GST_IS_TUNER (tuner));
+
+ iface = GST_TUNER_GET_INTERFACE (tuner);
+ if (iface->set_norm) {
+ iface->set_norm (tuner, norm);
+ }
+}
+
+/**
+ * gst_tuner_get_norm:
+ * @tuner: the #GstTuner (a #GstElement) to get the current norm from.
+ *
+ * Get the current video norm from the given tuner object for the
+ * currently selected channel.
+ *
+ * Returns: the current norm.
+ */
+
+GstTunerNorm *
+gst_tuner_get_norm (GstTuner * tuner)
+{
+ GstTunerInterface *iface;
+
+ g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+
+ iface = GST_TUNER_GET_INTERFACE (tuner);
+ if (iface->get_norm) {
+ return iface->get_norm (tuner);
+ }
+
+ return NULL;
+}
+
+/**
+ * gst_tuner_set_frequency:
+ * @tuner: The #GstTuner (a #GstElement) that owns the given channel.
+ * @channel: The #GstTunerChannel to set the frequency on.
+ * @frequency: The frequency to tune in to.
+ *
+ * Sets a tuning frequency on the given tuner/channel. Note that this
+ * requires the given channel to be a "tuning" channel, which can be
+ * checked using GST_TUNER_CHANNEL_HAS_FLAG (), with the proper flag
+ * being GST_TUNER_CHANNEL_FREQUENCY.
+ *
+ * The frequency is in Hz, with minimum steps indicated by the
+ * frequency_multiplicator provided in the #GstTunerChannel. The
+ * valid range is provided in the min_frequency and max_frequency properties
+ * of the #GstTunerChannel.
+ */
+
+void
+gst_tuner_set_frequency (GstTuner * tuner,
+ GstTunerChannel * channel, gulong frequency)
+{
+ GstTunerInterface *iface;
+
+ g_return_if_fail (GST_IS_TUNER (tuner));
+ g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
+ g_return_if_fail (GST_TUNER_CHANNEL_HAS_FLAG (channel,
+ GST_TUNER_CHANNEL_FREQUENCY));
+
+ iface = GST_TUNER_GET_INTERFACE (tuner);
+ if (iface->set_frequency) {
+ iface->set_frequency (tuner, channel, frequency);
+ }
+}
+
+/**
+ * gst_tuner_get_frequency:
+ * @tuner: The #GstTuner (a #GstElement) that owns the given channel.
+ * @channel: The #GstTunerChannel to retrieve the frequency from.
+ *
+ * Retrieve the current frequency from the given channel. As for
+ * gst_tuner_set_frequency(), the #GstTunerChannel must support frequency
+ * operations, as indicated by the GST_TUNER_CHANNEL_FREQUENCY flag.
+ *
+ * Returns: The current frequency, or 0 on error.
+ */
+
+gulong
+gst_tuner_get_frequency (GstTuner * tuner, GstTunerChannel * channel)
+{
+ GstTunerInterface *iface;
+
+ g_return_val_if_fail (GST_IS_TUNER (tuner), 0);
+ g_return_val_if_fail (GST_IS_TUNER_CHANNEL (channel), 0);
+ g_return_val_if_fail (GST_TUNER_CHANNEL_HAS_FLAG (channel,
+ GST_TUNER_CHANNEL_FREQUENCY), 0);
+
+ iface = GST_TUNER_GET_INTERFACE (tuner);
+
+ if (iface->get_frequency) {
+ return iface->get_frequency (tuner, channel);
+ }
+
+ return 0;
+}
+
+/**
+ * gst_tuner_signal_strength:
+ * @tuner: the #GstTuner (a #GstElement) that owns the given channel.
+ * @channel: the #GstTunerChannel to get the signal strength from.
+ *
+ * Get the strength of the signal on this channel. Note that this
+ * requires the current channel to be a "tuning" channel, i.e. a
+ * channel on which frequency can be set. This can be checked using
+ * GST_TUNER_CHANNEL_HAS_FLAG (), and the appropriate flag to check
+ * for is GST_TUNER_CHANNEL_FREQUENCY.
+ *
+ * The valid range of the signal strength is indicated in the
+ * min_signal and max_signal properties of the #GstTunerChannel.
+ *
+ * Returns: Signal strength, or 0 on error.
+ */
+gint
+gst_tuner_signal_strength (GstTuner * tuner, GstTunerChannel * channel)
+{
+ GstTunerInterface *iface;
+
+ g_return_val_if_fail (GST_IS_TUNER (tuner), 0);
+ g_return_val_if_fail (GST_IS_TUNER_CHANNEL (channel), 0);
+ g_return_val_if_fail (GST_TUNER_CHANNEL_HAS_FLAG (channel,
+ GST_TUNER_CHANNEL_FREQUENCY), 0);
+
+ iface = GST_TUNER_GET_INTERFACE (tuner);
+ if (iface->signal_strength) {
+ return iface->signal_strength (tuner, channel);
+ }
+
+ return 0;
+}
+
+/**
+ * gst_tuner_find_norm_by_name:
+ * @tuner: A #GstTuner instance
+ * @norm: A string containing the name of a #GstTunerNorm
+ *
+ * Look up a #GstTunerNorm by name.
+ *
+ * Returns: A #GstTunerNorm, or NULL if no norm with the provided name
+ * is available.
+ */
+GstTunerNorm *
+gst_tuner_find_norm_by_name (GstTuner * tuner, gchar * norm)
+{
+ GList *walk;
+
+ g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+ g_return_val_if_fail (norm != NULL, NULL);
+
+ walk = (GList *) gst_tuner_list_norms (tuner);
+ while (walk) {
+ if (strcmp (GST_TUNER_NORM (walk->data)->label, norm) == 0)
+ return GST_TUNER_NORM (walk->data);
+ walk = g_list_next (walk);
+ }
+ return NULL;
+}
+
+/**
+ * gst_tuner_find_channel_by_name:
+ * @tuner: A #GstTuner instance
+ * @channel: A string containing the name of a #GstTunerChannel
+ *
+ * Look up a #GstTunerChannel by name.
+ *
+ * Returns: A #GstTunerChannel, or NULL if no channel with the provided name
+ * is available.
+ */
+GstTunerChannel *
+gst_tuner_find_channel_by_name (GstTuner * tuner, gchar * channel)
+{
+ GList *walk;
+
+ g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+ g_return_val_if_fail (channel != NULL, NULL);
+
+ walk = (GList *) gst_tuner_list_channels (tuner);
+ while (walk) {
+ if (strcmp (GST_TUNER_CHANNEL (walk->data)->label, channel) == 0)
+ return GST_TUNER_CHANNEL (walk->data);
+ walk = g_list_next (walk);
+ }
+ return NULL;
+}
+
+/**
+ * gst_tuner_channel_changed:
+ * @tuner: A #GstTuner instance
+ * @channel: A #GstTunerChannel instance
+ *
+ * Called by elements implementing the #GstTuner interface when the
+ * current channel changes. Fires the #GstTuner::channel-changed signal.
+ */
+void
+gst_tuner_channel_changed (GstTuner * tuner, GstTunerChannel * channel)
+{
+ g_return_if_fail (GST_IS_TUNER (tuner));
+ g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
+
+ g_signal_emit (G_OBJECT (tuner),
+ gst_tuner_signals[CHANNEL_CHANGED], 0, channel);
+}
+
+/**
+ * gst_tuner_norm_changed:
+ * @tuner: A #GstTuner instance
+ * @norm: A #GstTunerNorm instance
+ *
+ * Called by elements implementing the #GstTuner interface when the
+ * current norm changes. Fires the #GstTuner::norm-changed signal.
+ *
+ */
+void
+gst_tuner_norm_changed (GstTuner * tuner, GstTunerNorm * norm)
+{
+ g_return_if_fail (GST_IS_TUNER (tuner));
+ g_return_if_fail (GST_IS_TUNER_NORM (norm));
+
+ g_signal_emit (G_OBJECT (tuner), gst_tuner_signals[NORM_CHANGED], 0, norm);
+}
+
+/**
+ * gst_tuner_frequency_changed:
+ * @tuner: A #GstTuner instance
+ * @channel: The current #GstTunerChannel
+ * @frequency: The new frequency setting
+ *
+ * Called by elements implementing the #GstTuner interface when the
+ * configured frequency changes. Fires the #GstTuner::frequency-changed
+ * signal on the tuner, and the #GstTunerChannel::frequency-changed signal
+ * on the channel.
+ */
+void
+gst_tuner_frequency_changed (GstTuner * tuner,
+ GstTunerChannel * channel, gulong frequency)
+{
+ g_return_if_fail (GST_IS_TUNER (tuner));
+ g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
+
+ g_signal_emit (G_OBJECT (tuner),
+ gst_tuner_signals[FREQUENCY_CHANGED], 0, channel, frequency);
+
+ g_signal_emit_by_name (G_OBJECT (channel), "frequency_changed", frequency);
+}
+
+/**
+ * gst_tuner_signal_changed:
+ * @tuner: A #GstTuner instance
+ * @channel: The current #GstTunerChannel
+ * @signal: The new signal strength
+ *
+ * Called by elements implementing the #GstTuner interface when the
+ * incoming signal strength changes. Fires the #GstTuner::signal-changed
+ * signal on the tuner and the #GstTunerChannel::signal-changed signal on
+ * the channel.
+ */
+void
+gst_tuner_signal_changed (GstTuner * tuner,
+ GstTunerChannel * channel, gint signal)
+{
+ g_return_if_fail (GST_IS_TUNER (tuner));
+ g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
+
+ g_signal_emit (G_OBJECT (tuner),
+ gst_tuner_signals[SIGNAL_CHANGED], 0, channel, signal);
+
+ g_signal_emit_by_name (G_OBJECT (channel), "signal_changed", signal);
+}
diff --git a/sys/v4l2/tuner.h b/sys/v4l2/tuner.h
new file mode 100644
index 0000000000..c7cffe509c
--- /dev/null
+++ b/sys/v4l2/tuner.h
@@ -0,0 +1,142 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje
+ *
+ * tuner.h: tuner interface design
+ *
+ * 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_TUNER_H__
+#define __GST_TUNER_H__
+
+#include
+
+#include "tunernorm.h"
+#include "tunerchannel.h"
+#include "tuner-enumtypes.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TUNER \
+ (gst_tuner_get_type ())
+#define GST_TUNER(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER, GstTuner))
+#define GST_IS_TUNER(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER))
+#define GST_TUNER_GET_INTERFACE(inst) \
+ (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_TUNER, GstTunerInterface))
+
+typedef struct _GstTuner GstTuner;
+typedef struct _GstTunerInterface GstTunerInterface;
+
+/**
+ * GstTunerInterface:
+ * @iface: the parent interface
+ * @list_channels: list available channels
+ * @set_channel: set to a channel
+ * @get_channel: return the current channel
+ * @list_norms: list available norms
+ * @set_norm: set a norm
+ * @get_norm: return the current norm
+ * @set_frequency: set the frequency
+ * @get_frequency: return the current frequency
+ * @signal_strength: get the signal strength
+ * @channel_changed: default handler for channel changed notification
+ * @norm_changed: default handler for norm changed notification
+ * @frequency_changed: default handler for frequency changed notification
+ * @signal_changed: default handler for signal-strength changed notification
+ *
+ * Tuner interface.
+ */
+struct _GstTunerInterface {
+ GTypeInterface iface;
+
+ /* virtual functions */
+ const GList * (* list_channels) (GstTuner *tuner);
+ void (* set_channel) (GstTuner *tuner,
+ GstTunerChannel *channel);
+ GstTunerChannel *
+ (* get_channel) (GstTuner *tuner);
+
+ const GList * (* list_norms) (GstTuner *tuner);
+ void (* set_norm) (GstTuner *tuner,
+ GstTunerNorm *norm);
+ GstTunerNorm *(* get_norm) (GstTuner *tuner);
+
+ void (* set_frequency) (GstTuner *tuner,
+ GstTunerChannel *channel,
+ gulong frequency);
+ gulong (* get_frequency) (GstTuner *tuner,
+ GstTunerChannel *channel);
+ gint (* signal_strength) (GstTuner *tuner,
+ GstTunerChannel *channel);
+
+ /* signals */
+ void (*channel_changed) (GstTuner *tuner,
+ GstTunerChannel *channel);
+ void (*norm_changed) (GstTuner *tuner,
+ GstTunerNorm *norm);
+ void (*frequency_changed) (GstTuner *tuner,
+ GstTunerChannel *channel,
+ gulong frequency);
+ void (*signal_changed) (GstTuner *tuner,
+ GstTunerChannel *channel,
+ gint signal);
+};
+
+GType gst_tuner_get_type (void);
+
+/* virtual class function wrappers */
+const GList * gst_tuner_list_channels (GstTuner *tuner);
+void gst_tuner_set_channel (GstTuner *tuner,
+ GstTunerChannel *channel);
+GstTunerChannel *
+ gst_tuner_get_channel (GstTuner *tuner);
+
+const GList * gst_tuner_list_norms (GstTuner *tuner);
+void gst_tuner_set_norm (GstTuner *tuner,
+ GstTunerNorm *norm);
+GstTunerNorm * gst_tuner_get_norm (GstTuner *tuner);
+
+void gst_tuner_set_frequency (GstTuner *tuner,
+ GstTunerChannel *channel,
+ gulong frequency);
+gulong gst_tuner_get_frequency (GstTuner *tuner,
+ GstTunerChannel *channel);
+gint gst_tuner_signal_strength (GstTuner *tuner,
+ GstTunerChannel *channel);
+
+/* helper functions */
+GstTunerNorm * gst_tuner_find_norm_by_name (GstTuner *tuner,
+ gchar *norm);
+GstTunerChannel *gst_tuner_find_channel_by_name (GstTuner *tuner,
+ gchar *channel);
+
+/* trigger signals */
+void gst_tuner_channel_changed (GstTuner *tuner,
+ GstTunerChannel *channel);
+void gst_tuner_norm_changed (GstTuner *tuner,
+ GstTunerNorm *norm);
+void gst_tuner_frequency_changed (GstTuner *tuner,
+ GstTunerChannel *channel,
+ gulong frequency);
+void gst_tuner_signal_changed (GstTuner *tuner,
+ GstTunerChannel *channel,
+ gint signal);
+
+G_END_DECLS
+
+#endif /* __GST_TUNER_H__ */
diff --git a/sys/v4l2/tunerchannel.c b/sys/v4l2/tunerchannel.c
new file mode 100644
index 0000000000..ac2b74e819
--- /dev/null
+++ b/sys/v4l2/tunerchannel.c
@@ -0,0 +1,148 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje
+ *
+ * tunerchannel.c: tuner channel object design
+ *
+ * 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 "tunerchannel.h"
+
+/**
+ * SECTION:gsttunerchannel
+ * @short_description: A channel from an element implementing the #GstTuner
+ * interface.
+ *
+ *
+ * The #GstTunerChannel object is provided by an element implementing
+ * the #GstTuner interface.
+ *
+ *
+ * GstTunerChannel provides a name and flags to determine the type and
+ * capabilities of the channel. If the GST_TUNER_CHANNEL_FREQUENCY flag is
+ * set, then the channel also information about the minimum and maximum
+ * frequency, and range of the reported signal strength.
+ *
+ *
+ */
+
+enum
+{
+ /* FILL ME */
+ SIGNAL_FREQUENCY_CHANGED,
+ SIGNAL_SIGNAL_CHANGED,
+ LAST_SIGNAL
+};
+
+static void gst_tuner_channel_class_init (GstTunerChannelClass * klass);
+static void gst_tuner_channel_init (GstTunerChannel * channel);
+static void gst_tuner_channel_dispose (GObject * object);
+
+static GObjectClass *parent_class = NULL;
+static guint signals[LAST_SIGNAL] = { 0 };
+
+GType
+gst_tuner_channel_get_type (void)
+{
+ static GType gst_tuner_channel_type = 0;
+
+ if (!gst_tuner_channel_type) {
+ static const GTypeInfo tuner_channel_info = {
+ sizeof (GstTunerChannelClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) gst_tuner_channel_class_init,
+ NULL,
+ NULL,
+ sizeof (GstTunerChannel),
+ 0,
+ (GInstanceInitFunc) gst_tuner_channel_init,
+ NULL
+ };
+
+ gst_tuner_channel_type =
+ g_type_register_static (G_TYPE_OBJECT,
+ "GstTunerChannel", &tuner_channel_info, 0);
+ }
+
+ return gst_tuner_channel_type;
+}
+
+static void
+gst_tuner_channel_class_init (GstTunerChannelClass * klass)
+{
+ GObjectClass *object_klass = (GObjectClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ /**
+ * GstTunerChannel::frequency-changed:
+ * @tunerchannel: The #GstTunerChannel
+ * @frequency: The new frequency (an unsigned long)
+ *
+ * Reports that the current frequency has changed.
+ */
+ signals[SIGNAL_FREQUENCY_CHANGED] =
+ g_signal_new ("frequency-changed", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstTunerChannelClass,
+ frequency_changed),
+ NULL, NULL, g_cclosure_marshal_VOID__ULONG, G_TYPE_NONE, 1, G_TYPE_ULONG);
+ /**
+ * GstTunerChannel::signal-changed:
+ * @tunerchannel: The #GstTunerChannel
+ * @signal: The new signal strength (an integer)
+ *
+ * Reports that the signal strength has changed.
+ *
+ * See Also: gst_tuner_signal_strength()
+ */
+ signals[SIGNAL_SIGNAL_CHANGED] =
+ g_signal_new ("signal-changed", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstTunerChannelClass,
+ signal_changed),
+ NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+
+ object_klass->dispose = gst_tuner_channel_dispose;
+}
+
+static void
+gst_tuner_channel_init (GstTunerChannel * channel)
+{
+ channel->label = NULL;
+ channel->flags = 0;
+ channel->min_frequency = channel->max_frequency = 0;
+ channel->min_signal = channel->max_signal = 0;
+}
+
+static void
+gst_tuner_channel_dispose (GObject * object)
+{
+ GstTunerChannel *channel = GST_TUNER_CHANNEL (object);
+
+ if (channel->label) {
+ g_free (channel->label);
+ channel->label = NULL;
+ }
+
+ if (parent_class->dispose)
+ parent_class->dispose (object);
+}
diff --git a/sys/v4l2/tunerchannel.h b/sys/v4l2/tunerchannel.h
new file mode 100644
index 0000000000..1bbb6cfaae
--- /dev/null
+++ b/sys/v4l2/tunerchannel.h
@@ -0,0 +1,116 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje
+ *
+ * tunerchannel.h: tuner channel object design
+ *
+ * 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_TUNER_CHANNEL_H__
+#define __GST_TUNER_CHANNEL_H__
+
+#include
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TUNER_CHANNEL \
+ (gst_tuner_channel_get_type ())
+#define GST_TUNER_CHANNEL(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER_CHANNEL, \
+ GstTunerChannel))
+#define GST_TUNER_CHANNEL_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TUNER_CHANNEL, \
+ GstTunerChannelClass))
+#define GST_IS_TUNER_CHANNEL(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER_CHANNEL))
+#define GST_IS_TUNER_CHANNEL_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TUNER_CHANNEL))
+
+typedef struct _GstTunerChannel GstTunerChannel;
+typedef struct _GstTunerChannelClass GstTunerChannelClass;
+
+/**
+ * GstTunerChannelFlags:
+ * @GST_TUNER_CHANNEL_INPUT: The channel is for input
+ * @GST_TUNER_CHANNEL_OUTPUT: The channel is for output
+ * @GST_TUNER_CHANNEL_FREQUENCY: The channel has a frequency setting
+ * and signal strength.
+ * @GST_TUNER_CHANNEL_AUDIO: The channel carries audio.
+ *
+ * An enumeration for flags indicating the available capabilities
+ * of a #GstTunerChannel.
+ */
+typedef enum {
+ GST_TUNER_CHANNEL_INPUT = (1<<0),
+ GST_TUNER_CHANNEL_OUTPUT = (1<<1),
+ GST_TUNER_CHANNEL_FREQUENCY = (1<<2),
+ GST_TUNER_CHANNEL_AUDIO = (1<<3)
+} GstTunerChannelFlags;
+
+/**
+ * GST_TUNER_CHANNEL_HAS_FLAG:
+ * @channel: A #GstTunerChannel
+ * @flag: The flag to check for
+ *
+ * Macro to check if the given flag is set on a channel
+ */
+#define GST_TUNER_CHANNEL_HAS_FLAG(channel, flag) \
+ ((channel)->flags & flag)
+
+/**
+ * GstTunerChannel:
+ * @label: A string containing a descriptive name for this channel
+ * @flags: A set of #GstTunerChannelFlags for this channel
+ * @freq_multiplicator: The step size (in Hz) for the frequency setting.
+ * @min_frequency: Minimum valid frequency setting (in Hz).
+ * @max_frequency: Maximum valid frequency setting (in Hz).
+ * @min_signal: Minimum reported signal strength value.
+ * @max_signal: Maximum reported signal strength value.
+ */
+struct _GstTunerChannel {
+ GObject parent;
+
+ /*< public >*/
+ gchar *label;
+ GstTunerChannelFlags flags;
+ gfloat freq_multiplicator;
+ gulong min_frequency;
+ gulong max_frequency;
+ gint min_signal;
+ gint max_signal;
+
+ /*< private >*/
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstTunerChannelClass {
+ GObjectClass parent;
+
+ /*< private >*/
+ /* signals */
+ void (*frequency_changed) (GstTunerChannel *channel,
+ gulong frequency);
+ void (*signal_changed) (GstTunerChannel *channel,
+ gint signal);
+
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+GType gst_tuner_channel_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_TUNER_CHANNEL_H__ */
diff --git a/sys/v4l2/tunernorm.c b/sys/v4l2/tunernorm.c
new file mode 100644
index 0000000000..47260b0ed1
--- /dev/null
+++ b/sys/v4l2/tunernorm.c
@@ -0,0 +1,111 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje
+ *
+ * tunernorm.c: tuner norm object design
+ *
+ * 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 "tunernorm.h"
+
+/**
+ * SECTION:gsttunernorm
+ * @short_description: Encapsulates information about the data format(s)
+ * for a #GstTunerChannel.
+ *
+ *
+ * The #GstTunerNorm object is created by an element implementing the
+ * #GstTuner interface and encapsulates the selection of a capture/output format
+ * for a selected #GstTunerChannel.
+ *
+ *
+ */
+
+enum
+{
+ /* FILL ME */
+ LAST_SIGNAL
+};
+
+static void gst_tuner_norm_class_init (GstTunerNormClass * klass);
+static void gst_tuner_norm_init (GstTunerNorm * norm);
+static void gst_tuner_norm_dispose (GObject * object);
+
+static GObjectClass *parent_class = NULL;
+
+/*static guint signals[LAST_SIGNAL] = { 0 };*/
+
+GType
+gst_tuner_norm_get_type (void)
+{
+ static GType gst_tuner_norm_type = 0;
+
+ if (!gst_tuner_norm_type) {
+ static const GTypeInfo tuner_norm_info = {
+ sizeof (GstTunerNormClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) gst_tuner_norm_class_init,
+ NULL,
+ NULL,
+ sizeof (GstTunerNorm),
+ 0,
+ (GInstanceInitFunc) gst_tuner_norm_init,
+ NULL
+ };
+
+ gst_tuner_norm_type =
+ g_type_register_static (G_TYPE_OBJECT,
+ "GstTunerNorm", &tuner_norm_info, 0);
+ }
+
+ return gst_tuner_norm_type;
+}
+
+static void
+gst_tuner_norm_class_init (GstTunerNormClass * klass)
+{
+ GObjectClass *object_klass = (GObjectClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ object_klass->dispose = gst_tuner_norm_dispose;
+}
+
+static void
+gst_tuner_norm_init (GstTunerNorm * norm)
+{
+ norm->label = NULL;
+ g_value_init (&norm->framerate, GST_TYPE_FRACTION);
+}
+
+static void
+gst_tuner_norm_dispose (GObject * object)
+{
+ GstTunerNorm *norm = GST_TUNER_NORM (object);
+
+ if (norm->label) {
+ g_free (norm->label);
+ norm->label = NULL;
+ }
+
+ if (parent_class->dispose)
+ parent_class->dispose (object);
+}
diff --git a/sys/v4l2/tunernorm.h b/sys/v4l2/tunernorm.h
new file mode 100644
index 0000000000..988f4cb5d7
--- /dev/null
+++ b/sys/v4l2/tunernorm.h
@@ -0,0 +1,70 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje
+ *
+ * tunernorm.h: tuner norm object design
+ *
+ * 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_TUNER_NORM_H__
+#define __GST_TUNER_NORM_H__
+
+#include
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TUNER_NORM \
+ (gst_tuner_norm_get_type ())
+#define GST_TUNER_NORM(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER_NORM, GstTunerNorm))
+#define GST_TUNER_NORM_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TUNER_NORM, GstTunerNormClass))
+#define GST_IS_TUNER_NORM(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER_NORM))
+#define GST_IS_TUNER_NORM_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TUNER_NORM))
+
+typedef struct _GstTunerNorm GstTunerNorm;
+typedef struct _GstTunerNormClass GstTunerNormClass;
+
+/**
+ * GstTunerNorm:
+ * @label: A string containing a descriptive name for the norm
+ * @framerate: A GValue containing the framerate associated with this norm,
+ * if any. (May be unset).
+ */
+struct _GstTunerNorm {
+ GObject parent;
+
+ /*< public >*/
+ gchar *label;
+ GValue framerate;
+
+ /*< private >*/
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstTunerNormClass {
+ GObjectClass parent;
+
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+GType gst_tuner_norm_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_TUNER_NORM_H__ */
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index a22d8abd1c..7773f1a1b0 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -294,7 +294,7 @@ elements_sunaudio_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) \
$(AM_CFLAGS)
elements_sunaudio_LDADD = \
- $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-@GST_API_VERSION@ \
+ $(GST_PLUGINS_BASE_LIBS) \
$(LDADD)
elements_udpsrc_CFLAGS = $(AM_CFLAGS) $(GIO_CFLAGS)
diff --git a/tests/examples/pulse/Makefile.am b/tests/examples/pulse/Makefile.am
index e02a877ae7..48968cb45e 100644
--- a/tests/examples/pulse/Makefile.am
+++ b/tests/examples/pulse/Makefile.am
@@ -1,5 +1,5 @@
noinst_PROGRAMS = pulse
pulse_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
-pulse_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-$(GST_API_VERSION) $(GST_BASE_LIBS) $(GST_LIBS)
+pulse_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS)
diff --git a/tests/icles/Makefile.am b/tests/icles/Makefile.am
index 86b85f4a27..706a5bd0d9 100644
--- a/tests/icles/Makefile.am
+++ b/tests/icles/Makefile.am
@@ -13,8 +13,7 @@ V4L2_TESTS = v4l2src-test
v4l2src_test_SOURCES = v4l2src-test.c
v4l2src_test_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
v4l2src_test_LDADD = $(GST_PLUGINS_BASE_LIBS) \
- -lgstvideo-$(GST_API_VERSION) \
- -lgstinterfaces-$(GST_API_VERSION) $(GST_LIBS)
+ -lgstvideo-$(GST_API_VERSION)
else
V4L2_TESTS =
@@ -25,7 +24,7 @@ OSS4_TESTS=test-oss4
test_oss4_SOURCES = test-oss4.c
test_oss4_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-test_oss4_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-$(GST_API_VERSION) $(GST_LIBS)
+test_oss4_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_LIBS)
test_oss4_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
else
OSS4_TESTS=
diff --git a/tests/icles/v4l2src-test.c b/tests/icles/v4l2src-test.c
index 6742677984..8b9dfe3714 100644
--- a/tests/icles/v4l2src-test.c
+++ b/tests/icles/v4l2src-test.c
@@ -24,7 +24,6 @@
#include
#include
-#include
#include
#include
@@ -49,6 +48,7 @@ run_options (char opt)
int res;
switch (opt) {
+#if 0
case 'f':
{
GstTuner *tuner = GST_TUNER (source);
@@ -143,6 +143,7 @@ run_options (char opt)
gst_tuner_set_channel (tuner, channel);
}
break;
+#endif
case 'e':
gst_element_set_state (pipeline, GST_STATE_NULL);
g_main_loop_quit (loop);