diff options
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); +} |