diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2004-05-27 03:36:17 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2004-05-27 03:36:17 +0000 |
commit | 2652468b976e56a219c35259e03efc8f1e189e13 (patch) | |
tree | d24b947e4dcfd3efee18897e2bf72e2d14518ce3 /gst-libs/gst/mixer/mixer.c | |
parent | b897ebfaec8e13384bc51e164197bc7acfda0c7d (diff) | |
download | gst-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.c | 79 |
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); +} |