summaryrefslogtreecommitdiffstats
path: root/gst-libs/gst/mixer/mixer.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-05-27 03:36:17 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-05-27 03:36:17 +0000
commit2652468b976e56a219c35259e03efc8f1e189e13 (patch)
treed24b947e4dcfd3efee18897e2bf72e2d14518ce3 /gst-libs/gst/mixer/mixer.c
parentb897ebfaec8e13384bc51e164197bc7acfda0c7d (diff)
downloadgst-plugins-bad-2652468b976e56a219c35259e03efc8f1e189e13.tar.gz
gst-plugins-bad-2652468b976e56a219c35259e03efc8f1e189e13.tar.bz2
gst-plugins-bad-2652468b976e56a219c35259e03efc8f1e189e13.zip
ext/alsa/: Add enumerations (as GstMixerOptions). Make correct distinction between input/output tracks. Add capture/p...
Original commit message from CVS: * ext/alsa/Makefile.am: * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_interface_init), (gst_alsa_mixer_build_list), (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record), (gst_alsa_mixer_set_option), (gst_alsa_mixer_get_option): * ext/alsa/gstalsamixer.h: * ext/alsa/gstalsamixeroptions.c: (gst_alsa_mixer_options_get_type), (gst_alsa_mixer_options_class_init), (gst_alsa_mixer_options_init), (gst_alsa_mixer_options_new): * ext/alsa/gstalsamixeroptions.h: * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new): * ext/alsa/gstalsamixertrack.h: Add enumerations (as GstMixerOptions). Make correct distinction between input/output tracks. Add capture/playback private flag. Use flag to decide on whether to set capture or playback volumes or switches. Use playback and record switches. * gst-libs/gst/mixer/Makefile.am: * gst-libs/gst/mixer/mixer-marshal.list: * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init), (gst_mixer_set_option), (gst_mixer_get_option), (gst_mixer_mute_toggled), (gst_mixer_record_toggled), (gst_mixer_volume_changed), (gst_mixer_option_changed): * gst-libs/gst/mixer/mixer.h: * gst-libs/gst/mixer/mixeroptions.c: (gst_mixer_options_get_type), (gst_mixer_options_class_init), (gst_mixer_options_init), (gst_mixer_options_dispose): * gst-libs/gst/mixer/mixeroptions.h: Add GstMixerOptions. * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices): Rename Audio Mixer to OSS Mixer (similar to Alsa Mixer). Fix broken device detection on computers with multiple OSS sound cards.
Diffstat (limited to 'gst-libs/gst/mixer/mixer.c')
-rw-r--r--gst-libs/gst/mixer/mixer.c79
1 files changed, 70 insertions, 9 deletions
diff --git a/gst-libs/gst/mixer/mixer.c b/gst-libs/gst/mixer/mixer.c
index 1db3d6a3..dcae8741 100644
--- a/gst-libs/gst/mixer/mixer.c
+++ b/gst-libs/gst/mixer/mixer.c
@@ -28,9 +28,10 @@
enum
{
- MUTE_TOGGLED,
- RECORD_TOGGLED,
- VOLUME_CHANGED,
+ SIGNAL_MUTE_TOGGLED,
+ SIGNAL_RECORD_TOGGLED,
+ SIGNAL_VOLUME_CHANGED,
+ SIGNAL_OPTION_CHANGED,
LAST_SIGNAL
};
@@ -71,27 +72,34 @@ gst_mixer_class_init (GstMixerClass * klass)
static gboolean initialized = FALSE;
if (!initialized) {
- gst_mixer_signals[RECORD_TOGGLED] =
+ gst_mixer_signals[SIGNAL_RECORD_TOGGLED] =
g_signal_new ("record-toggled",
GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstMixerClass, record_toggled),
NULL, NULL,
gst_mixer_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2,
GST_TYPE_MIXER_TRACK, G_TYPE_BOOLEAN);
- gst_mixer_signals[MUTE_TOGGLED] =
+ gst_mixer_signals[SIGNAL_MUTE_TOGGLED] =
g_signal_new ("mute-toggled",
GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstMixerClass, mute_toggled),
NULL, NULL,
gst_mixer_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2,
GST_TYPE_MIXER_TRACK, G_TYPE_BOOLEAN);
- gst_mixer_signals[VOLUME_CHANGED] =
+ gst_mixer_signals[SIGNAL_VOLUME_CHANGED] =
g_signal_new ("volume-changed",
GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstMixerClass, volume_changed),
NULL, NULL,
gst_mixer_marshal_VOID__OBJECT_POINTER, G_TYPE_NONE, 2,
GST_TYPE_MIXER_TRACK, G_TYPE_POINTER);
+ gst_mixer_signals[SIGNAL_OPTION_CHANGED] =
+ g_signal_new ("option-changed",
+ GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstMixerClass, option_changed),
+ NULL, NULL,
+ gst_mixer_marshal_VOID__OBJECT_STRING, G_TYPE_NONE, 2,
+ GST_TYPE_MIXER_OPTIONS, G_TYPE_STRING);
initialized = TRUE;
}
@@ -104,6 +112,8 @@ gst_mixer_class_init (GstMixerClass * klass)
klass->get_volume = NULL;
klass->set_mute = NULL;
klass->set_record = NULL;
+ klass->set_option = NULL;
+ klass->get_option = NULL;
}
/**
@@ -226,11 +236,52 @@ gst_mixer_set_record (GstMixer * mixer, GstMixerTrack * track, gboolean record)
}
}
+/**
+ * gst_mixer_set_option:
+ * @mixer: The #GstMixer (a #GstElement) that owns the optionlist.
+ * @opts: The #GstMixerOptions that we operate on.
+ * @value: The requested new option value.
+ *
+ * Sets a name/value option in the mixer to the requested value.
+ */
+
+void
+gst_mixer_set_option (GstMixer * mixer, GstMixerOptions * opts, gchar * value)
+{
+ GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
+
+ if (klass->set_option) {
+ klass->set_option (mixer, opts, value);
+ }
+}
+
+/**
+ * gst_mixer_g_option:
+ * @mixer: The #GstMixer (a #GstElement) that owns the optionlist.
+ * @opts: The #GstMixerOptions that we operate on.
+ *
+ * Get the current value of a name/value option in the mixer.
+ *
+ * Returns: current value of the name/value option.
+ */
+
+const gchar *
+gst_mixer_get_option (GstMixer * mixer, GstMixerOptions * opts)
+{
+ GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
+
+ if (klass->get_option) {
+ return klass->get_option (mixer, opts);
+ }
+
+ return NULL;
+}
+
void
gst_mixer_mute_toggled (GstMixer * mixer, GstMixerTrack * track, gboolean mute)
{
g_signal_emit (G_OBJECT (mixer),
- gst_mixer_signals[MUTE_TOGGLED], 0, track, mute);
+ gst_mixer_signals[SIGNAL_MUTE_TOGGLED], 0, track, mute);
g_signal_emit_by_name (G_OBJECT (track), "mute_toggled", mute);
}
@@ -240,7 +291,7 @@ gst_mixer_record_toggled (GstMixer * mixer,
GstMixerTrack * track, gboolean record)
{
g_signal_emit (G_OBJECT (mixer),
- gst_mixer_signals[RECORD_TOGGLED], 0, track, record);
+ gst_mixer_signals[SIGNAL_RECORD_TOGGLED], 0, track, record);
g_signal_emit_by_name (G_OBJECT (track), "record_toggled", record);
}
@@ -250,7 +301,17 @@ gst_mixer_volume_changed (GstMixer * mixer,
GstMixerTrack * track, gint * volumes)
{
g_signal_emit (G_OBJECT (mixer),
- gst_mixer_signals[VOLUME_CHANGED], 0, track, volumes);
+ gst_mixer_signals[SIGNAL_VOLUME_CHANGED], 0, track, volumes);
g_signal_emit_by_name (G_OBJECT (track), "volume_changed", volumes);
}
+
+void
+gst_mixer_option_changed (GstMixer * mixer,
+ GstMixerOptions * opts, gchar * value)
+{
+ g_signal_emit (G_OBJECT (mixer),
+ gst_mixer_signals[SIGNAL_OPTION_CHANGED], 0, opts, value);
+
+ g_signal_emit_by_name (G_OBJECT (opts), "value_changed", value);
+}