diff -r 4c282e7dd6d3 -r 5505e8908944 gst_plugins_base/gst-libs/gst/interfaces/mixer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gst_plugins_base/gst-libs/gst/interfaces/mixer.h Fri Jan 22 09:59:59 2010 +0200 @@ -0,0 +1,306 @@ +/* GStreamer Mixer + * Copyright (C) 2003 Ronald Bultje + * + * mixer.h: mixer 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_MIXER_H__ +#define __GST_MIXER_H__ + +#include +#include +#include +#include + +G_BEGIN_DECLS + +#define GST_TYPE_MIXER \ + (gst_mixer_get_type ()) +#define GST_MIXER(obj) \ + (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MIXER, GstMixer)) +#define GST_MIXER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MIXER, GstMixerClass)) +#define GST_IS_MIXER(obj) \ + (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MIXER)) +#define GST_IS_MIXER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MIXER)) +#define GST_MIXER_GET_CLASS(inst) \ + (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_MIXER, GstMixerClass)) + +#define GST_MIXER_TYPE(klass) (klass->mixer_type) + +typedef struct _GstMixer GstMixer; +typedef struct _GstMixerClass GstMixerClass; + +typedef enum +{ + GST_MIXER_HARDWARE, + GST_MIXER_SOFTWARE +} GstMixerType; + +/** + * GstMixerMessageType: + * @GST_MIXER_MESSAGE_INVALID: Not a GstMixer message + * @GST_MIXER_MESSAGE_MUTE_TOGGLED: A mute-toggled GstMixer message + * @GST_MIXER_MESSAGE_RECORD_TOGGLED: A record-toggled GstMixer message + * @GST_MIXER_MESSAGE_VOLUME_CHANGED: A volume-changed GstMixer message + * @GST_MIXER_MESSAGE_OPTION_CHANGED: An option-changed GstMixer message + * @GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED: An options-list-changed + * GstMixer message, posted when the list of available options for a + * GstMixerOptions object has changed (Since: 0.10.18) + * @GST_MIXER_MESSAGE_MIXER_CHANGED: A mixer-changed GstMixer message, posted + * when the list of available mixer tracks has changed. The application + * should re-build its interface in this case (Since: 0.10.18) + * + * An enumeration for the type of a GstMixer message received on the bus + * + * Since: 0.10.14 + */ +typedef enum +{ + GST_MIXER_MESSAGE_INVALID, + GST_MIXER_MESSAGE_MUTE_TOGGLED, + GST_MIXER_MESSAGE_RECORD_TOGGLED, + GST_MIXER_MESSAGE_VOLUME_CHANGED, + GST_MIXER_MESSAGE_OPTION_CHANGED, + GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED, + GST_MIXER_MESSAGE_MIXER_CHANGED +} GstMixerMessageType; + +/** + * GstMixerFlags: + * @GST_MIXER_FLAG_NONE: No flags + * @GST_MIXER_FLAG_AUTO_NOTIFICATIONS: The mixer implementation automatically sends + * notification messages. + * + * Flags for supported features. Whether the element automatically sends + * notifications on the bus is the only one for now. + * + * Since: 0.10.14 + */ +typedef enum +{ + GST_MIXER_FLAG_NONE = 0, + GST_MIXER_FLAG_AUTO_NOTIFICATIONS = (1<<0) +} GstMixerFlags; + +struct _GstMixerClass { + GTypeInterface klass; + + GstMixerType mixer_type; + + /* virtual functions */ + const GList * (* list_tracks) (GstMixer *mixer); + + void (* set_volume) (GstMixer *mixer, + GstMixerTrack *track, + gint *volumes); + void (* get_volume) (GstMixer *mixer, + GstMixerTrack *track, + gint *volumes); + + void (* set_mute) (GstMixer *mixer, + GstMixerTrack *track, + gboolean mute); + void (* set_record) (GstMixer *mixer, + GstMixerTrack *track, + gboolean record); +#ifndef GST_DISABLE_DEPRECATED + /* signals (deprecated) */ + void (* mute_toggled) (GstMixer *mixer, + GstMixerTrack *channel, + gboolean mute); + void (* record_toggled) (GstMixer *mixer, + GstMixerTrack *channel, + gboolean record); + void (* volume_changed) (GstMixer *mixer, + GstMixerTrack *channel, + gint *volumes); +#else + gpointer padding1[3]; +#endif /* not GST_DISABLE_DEPRECATED */ + + void (* set_option) (GstMixer *mixer, + GstMixerOptions *opts, + gchar *value); + const gchar * (* get_option) (GstMixer *mixer, + GstMixerOptions *opts); + +#ifndef GST_DISABLE_DEPRECATED + void (* option_changed) (GstMixer *mixer, + GstMixerOptions *opts, + gchar *option); +#else + gpointer padding2; +#endif /* not GST_DISABLE_DEPRECATED */ + + GstMixerFlags (* get_mixer_flags) (GstMixer *mixer); + + /*< private >*/ + gpointer _gst_reserved[GST_PADDING-1]; +}; +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + + +GType gst_mixer_get_type (void); + +/* virtual class function wrappers */ +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +const GList * gst_mixer_list_tracks (GstMixer *mixer); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_set_volume (GstMixer *mixer, + GstMixerTrack *track, + gint *volumes); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_get_volume (GstMixer *mixer, + GstMixerTrack *track, + gint *volumes); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_set_mute (GstMixer *mixer, + GstMixerTrack *track, + gboolean mute); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_set_record (GstMixer *mixer, + GstMixerTrack *track, + gboolean record); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_set_option (GstMixer *mixer, + GstMixerOptions *opts, + gchar *value); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +const gchar * gst_mixer_get_option (GstMixer *mixer, + GstMixerOptions *opts); + +/* trigger bus messages */ +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_mute_toggled (GstMixer *mixer, + GstMixerTrack *track, + gboolean mute); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_record_toggled (GstMixer *mixer, + GstMixerTrack *track, + gboolean record); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_volume_changed (GstMixer *mixer, + GstMixerTrack *track, + gint *volumes); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_option_changed (GstMixer *mixer, + GstMixerOptions *opts, + gchar *value); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + + +void gst_mixer_mixer_changed (GstMixer *mixer); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + + +void gst_mixer_options_list_changed (GstMixer *mixer, + GstMixerOptions *opts); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + + + +GstMixerFlags gst_mixer_get_mixer_flags (GstMixer *mixer); + +/* Functions for recognising and parsing GstMixerMessages on the bus */ +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +GstMixerMessageType gst_mixer_message_get_type (GstMessage *message); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_message_parse_mute_toggled (GstMessage *message, + GstMixerTrack **track, + gboolean *mute); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_message_parse_record_toggled (GstMessage *message, + GstMixerTrack **track, + gboolean *record); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_message_parse_volume_changed (GstMessage *message, + GstMixerTrack **track, + gint **volumes, + gint *num_channels); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_message_parse_option_changed (GstMessage *message, + GstMixerOptions **options, + const gchar **value); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +void gst_mixer_message_parse_options_list_changed (GstMessage *message, + GstMixerOptions **options); + +G_END_DECLS + +#endif /* __GST_MIXER_H__ */