diff options
Diffstat (limited to 'gst-libs/gst/mixer')
-rw-r--r-- | gst-libs/gst/mixer/Makefile.am | 20 | ||||
-rw-r--r-- | gst-libs/gst/mixer/mixer.c | 82 | ||||
-rw-r--r-- | gst-libs/gst/mixer/mixer.h | 52 | ||||
-rw-r--r-- | gst-libs/gst/mixer/mixermarshal.list | 2 | ||||
-rw-r--r-- | gst-libs/gst/mixer/mixertrack.h | 7 |
5 files changed, 144 insertions, 19 deletions
diff --git a/gst-libs/gst/mixer/Makefile.am b/gst-libs/gst/mixer/Makefile.am index 193b5a10..f62ab4c8 100644 --- a/gst-libs/gst/mixer/Makefile.am +++ b/gst-libs/gst/mixer/Makefile.am @@ -9,5 +9,23 @@ noinst_LTLIBRARIES = libgstmixer.la libgstmixer_la_SOURCES = \ mixer.c \ - mixertrack.c + mixertrack.c \ + mixermarshal.c libgstmixer_la_CFLAGS = $(GST_CFLAGS) + +BUILT_SOURCES = \ + mixermarshal.c \ + mixermarshal.h +built_headers = \ + mixermarshal.h + +EXTRA_DIST = mixermarshal.list + +mixermarshal.h: mixermarshal.list + glib-genmarshal --header --prefix=gst_mixer_marshal $^ > mixermarshal.h.tmp + mv mixermarshal.h.tmp mixermarshal.h + +mixermarshal.c: mixermarshal.list + echo "#include \"mixermarshal.h\"" >> mixermarshal.c.tmp + glib-genmarshal --body --prefix=gst_mixer_marshal $^ >> mixermarshal.c.tmp + mv mixermarshal.c.tmp mixermarshal.c diff --git a/gst-libs/gst/mixer/mixer.c b/gst-libs/gst/mixer/mixer.c index 28d10e6a..cbdfdad4 100644 --- a/gst-libs/gst/mixer/mixer.c +++ b/gst-libs/gst/mixer/mixer.c @@ -24,9 +24,19 @@ #endif #include "mixer.h" +#include "mixermarshal.h" + +enum { + MUTE_TOGGLED, + RECORD_TOGGLED, + VOLUME_CHANGED, + LAST_SIGNAL +}; static void gst_mixer_class_init (GstMixerClass *klass); +static guint gst_mixer_signals[LAST_SIGNAL] = { 0 }; + GType gst_mixer_get_type (void) { @@ -49,7 +59,7 @@ gst_mixer_get_type (void) "GstMixer", &gst_mixer_info, 0); g_type_interface_add_prerequisite (gst_mixer_type, - GST_TYPE_INTERFACE); + GST_TYPE_IMPLEMENTS_INTERFACE); } return gst_mixer_type; @@ -58,6 +68,34 @@ gst_mixer_get_type (void) static void gst_mixer_class_init (GstMixerClass *klass) { + static gboolean initialized = FALSE; + + if (!initialized) { + gst_mixer_signals[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, 1, + GST_TYPE_MIXER_TRACK, G_TYPE_BOOLEAN); + gst_mixer_signals[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, 1, + GST_TYPE_MIXER_TRACK, G_TYPE_BOOLEAN); + gst_mixer_signals[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, 1, + GST_TYPE_MIXER_TRACK, G_TYPE_POINTER); + + initialized = TRUE; + } + /* default virtual functions */ klass->list_tracks = NULL; klass->set_volume = NULL; @@ -131,3 +169,45 @@ gst_mixer_set_record (GstMixer *mixer, klass->set_record (mixer, track, record); } } + +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); + + g_signal_emit_by_name (G_OBJECT (track), + "mute_toggled", + mute); +} + +void +gst_mixer_record_toggled (GstMixer *mixer, + GstMixerTrack *track, + gboolean record) +{ + g_signal_emit (G_OBJECT (mixer), + gst_mixer_signals[RECORD_TOGGLED], 0, + track, record); + + g_signal_emit_by_name (G_OBJECT (track), + "record_toggled", + record); +} + +void +gst_mixer_volume_changed (GstMixer *mixer, + GstMixerTrack *track, + gint *volumes) +{ + g_signal_emit (G_OBJECT (mixer), + gst_mixer_signals[VOLUME_CHANGED], 0, + track, volumes); + + g_signal_emit_by_name (G_OBJECT (track), + "volume_changed", + volumes); +} diff --git a/gst-libs/gst/mixer/mixer.h b/gst-libs/gst/mixer/mixer.h index 6ee49e3a..c60c8e9b 100644 --- a/gst-libs/gst/mixer/mixer.h +++ b/gst-libs/gst/mixer/mixer.h @@ -30,11 +30,11 @@ G_BEGIN_DECLS #define GST_TYPE_MIXER \ (gst_mixer_get_type ()) #define GST_MIXER(obj) \ - (GST_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MIXER, GstMixer)) + (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_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MIXER)) + (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) \ @@ -62,25 +62,47 @@ typedef struct _GstMixerClass { GstMixerTrack *track, gboolean record); + /* signals */ + 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); + GST_CLASS_PADDING } GstMixerClass; GType gst_mixer_get_type (void); /* virtual class function wrappers */ -const GList * gst_mixer_list_tracks (GstMixer *mixer); -void gst_mixer_set_volume (GstMixer *mixer, - GstMixerTrack *track, - gint *volumes); -void gst_mixer_get_volume (GstMixer *mixer, - GstMixerTrack *track, - gint *volumes); -void gst_mixer_set_mute (GstMixer *mixer, - GstMixerTrack *track, - gboolean mute); -void gst_mixer_set_record (GstMixer *mixer, - GstMixerTrack *track, - gboolean record); +const GList * gst_mixer_list_tracks (GstMixer *mixer); +void gst_mixer_set_volume (GstMixer *mixer, + GstMixerTrack *track, + gint *volumes); +void gst_mixer_get_volume (GstMixer *mixer, + GstMixerTrack *track, + gint *volumes); +void gst_mixer_set_mute (GstMixer *mixer, + GstMixerTrack *track, + gboolean mute); +void gst_mixer_set_record (GstMixer *mixer, + GstMixerTrack *track, + gboolean record); + +/* trigger signals */ +void gst_mixer_mute_toggled (GstMixer *mixer, + GstMixerTrack *track, + gboolean mute); +void gst_mixer_record_toggled (GstMixer *mixer, + GstMixerTrack *track, + gboolean record); +void gst_mixer_volume_changed (GstMixer *mixer, + GstMixerTrack *track, + gint *volumes); G_END_DECLS diff --git a/gst-libs/gst/mixer/mixermarshal.list b/gst-libs/gst/mixer/mixermarshal.list new file mode 100644 index 00000000..ac2cd6b8 --- /dev/null +++ b/gst-libs/gst/mixer/mixermarshal.list @@ -0,0 +1,2 @@ +VOID:OBJECT,BOOLEAN +VOID:OBJECT,POINTER diff --git a/gst-libs/gst/mixer/mixertrack.h b/gst-libs/gst/mixer/mixertrack.h index cb010822..1ee1e9d4 100644 --- a/gst-libs/gst/mixer/mixertrack.h +++ b/gst-libs/gst/mixer/mixertrack.h @@ -71,12 +71,15 @@ typedef struct _GstMixerTrack { typedef struct _GstMixerTrackClass { GObjectClass parent; + /* signals */ void (* mute_toggled) (GstMixerTrack *channel, - gboolean on); + gboolean mute); void (* record_toggled) (GstMixerTrack *channel, - gboolean on); + gboolean record); void (* volume_changed) (GstMixerTrack *channel, gint *volumes); + + GST_CLASS_PADDING } GstMixerTrackClass; GType gst_mixer_track_get_type (void); |