diff options
-rw-r--r-- | ext/sdl/sdlvideosink.c | 14 | ||||
-rw-r--r-- | gst-libs/gst/colorbalance/Makefile.am | 20 | ||||
-rw-r--r-- | gst-libs/gst/colorbalance/colorbalance.c | 37 | ||||
-rw-r--r-- | gst-libs/gst/colorbalance/colorbalance.h | 18 | ||||
-rw-r--r-- | gst-libs/gst/colorbalance/colorbalancechannel.c | 3 | ||||
-rw-r--r-- | gst-libs/gst/colorbalance/colorbalancechannel.h | 2 | ||||
-rw-r--r-- | gst-libs/gst/colorbalance/colorbalancemarshal.list | 1 | ||||
-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 | ||||
-rw-r--r-- | gst-libs/gst/tuner/Makefile.am | 19 | ||||
-rw-r--r-- | gst-libs/gst/tuner/tuner.c | 94 | ||||
-rw-r--r-- | gst-libs/gst/tuner/tuner.h | 30 | ||||
-rw-r--r-- | gst-libs/gst/tuner/tunerchannel.h | 6 | ||||
-rw-r--r-- | gst-libs/gst/tuner/tunermarshal.list | 2 | ||||
-rw-r--r-- | gst-libs/gst/tuner/tunernorm.h | 2 | ||||
-rw-r--r-- | gst-libs/gst/xoverlay/xoverlay.c | 4 | ||||
-rw-r--r-- | gst-libs/gst/xoverlay/xoverlay.h | 7 | ||||
-rw-r--r-- | sys/v4l2/gstv4l2element.c | 8 |
21 files changed, 384 insertions, 46 deletions
diff --git a/ext/sdl/sdlvideosink.c b/ext/sdl/sdlvideosink.c index 75d3134f..f75ee233 100644 --- a/ext/sdl/sdlvideosink.c +++ b/ext/sdl/sdlvideosink.c @@ -44,8 +44,8 @@ static void gst_sdlvideosink_base_init (gpointer g_class); static void gst_sdlvideosink_class_init (GstSDLVideoSinkClass *klass); static void gst_sdlvideosink_init (GstSDLVideoSink *sdl); -static void gst_sdlvideosink_interface_init (GstInterfaceClass *klass); -static gboolean gst_sdlvideosink_interface_supported (GstInterface *iface, +static void gst_sdlvideosink_interface_init (GstImplementsInterfaceClass *klass); +static gboolean gst_sdlvideosink_supported (GstImplementsInterface *iface, GType type); static void gst_sdlvideosink_xoverlay_init (GstXOverlayClass *klass); @@ -116,7 +116,7 @@ gst_sdlvideosink_get_type (void) sdlvideosink_type = g_type_register_static(GST_TYPE_VIDEOSINK, "GstSDLVideoSink", &sdlvideosink_info, 0); - g_type_add_interface_static(sdlvideosink_type, GST_TYPE_INTERFACE, + g_type_add_interface_static(sdlvideosink_type, GST_TYPE_IMPLEMENTS_INTERFACE, &iface_info); g_type_add_interface_static(sdlvideosink_type, GST_TYPE_X_OVERLAY, &xoverlay_info); @@ -296,14 +296,14 @@ gst_sdlvideosink_init (GstSDLVideoSink *sdlvideosink) } static void -gst_sdlvideosink_interface_init (GstInterfaceClass *klass) +gst_sdlvideosink_interface_init (GstImplementsInterfaceClass *klass) { - klass->supported = gst_sdlvideosink_interface_supported; + klass->supported = gst_sdlvideosink_supported; } static gboolean -gst_sdlvideosink_interface_supported (GstInterface *interface, - GType iface_type) +gst_sdlvideosink_supported (GstImplementsInterface *interface, + GType iface_type) { g_assert (iface_type == GST_TYPE_X_OVERLAY); diff --git a/gst-libs/gst/colorbalance/Makefile.am b/gst-libs/gst/colorbalance/Makefile.am index dc8bd0ea..b1f6bec4 100644 --- a/gst-libs/gst/colorbalance/Makefile.am +++ b/gst-libs/gst/colorbalance/Makefile.am @@ -9,5 +9,23 @@ noinst_LTLIBRARIES = libgstcolorbalance.la libgstcolorbalance_la_SOURCES = \ colorbalance.c \ - colorbalancechannel.c + colorbalancechannel.c \ + colorbalancemarshal.c libgstcolorbalance_la_CFLAGS = $(GST_CFLAGS) $(GST_OPT_CFLAGS) + +BUILT_SOURCES = \ + colorbalancemarshal.c \ + colorbalancemarshal.h +built_headers = \ + colorbalancemarshal.h + +EXTRA_DIST = colorbalancemarshal.list + +colorbalancemarshal.h: colorbalancemarshal.list + glib-genmarshal --header --prefix=gst_color_balance_marshal $^ > colorbalancemarshal.h.tmp + mv colorbalancemarshal.h.tmp colorbalancemarshal.h + +colorbalancemarshal.c: colorbalancemarshal.list + echo "#include \"colorbalancemarshal.h\"" >> colorbalancemarshal.c.tmp + glib-genmarshal --body --prefix=gst_color_balance_marshal $^ >> colorbalancemarshal.c.tmp + mv colorbalancemarshal.c.tmp colorbalancemarshal.c diff --git a/gst-libs/gst/colorbalance/colorbalance.c b/gst-libs/gst/colorbalance/colorbalance.c index 829cf5f6..163111cd 100644 --- a/gst-libs/gst/colorbalance/colorbalance.c +++ b/gst-libs/gst/colorbalance/colorbalance.c @@ -25,9 +25,17 @@ #endif #include "colorbalance.h" +#include "colorbalancemarshal.h" + +enum { + VALUE_CHANGED, + LAST_SIGNAL +}; static void gst_color_balance_class_init (GstColorBalanceClass *klass); +static guint gst_color_balance_signals[LAST_SIGNAL] = { 0 }; + GType gst_color_balance_get_type (void) { @@ -50,7 +58,7 @@ gst_color_balance_get_type (void) "GstColorBalance", &gst_color_balance_info, 0); g_type_interface_add_prerequisite (gst_color_balance_type, - GST_TYPE_INTERFACE); + GST_TYPE_IMPLEMENTS_INTERFACE); } return gst_color_balance_type; @@ -59,6 +67,21 @@ gst_color_balance_get_type (void) static void gst_color_balance_class_init (GstColorBalanceClass *klass) { + static gboolean initialized = FALSE; + + if (!initialized) { + gst_color_balance_signals[VALUE_CHANGED] = + g_signal_new ("value_changed", + GST_TYPE_COLOR_BALANCE, G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GstColorBalanceClass, value_changed), + NULL, NULL, + gst_color_balance_marshal_VOID__OBJECT_INT, + G_TYPE_NONE, 2, + GST_TYPE_COLOR_BALANCE_CHANNEL, G_TYPE_INT); + + initialized = TRUE; + } + /* default virtual functions */ klass->list_channels = NULL; klass->set_value = NULL; @@ -101,3 +124,15 @@ gst_color_balance_get_value (GstColorBalance *balance, return channel->min_value; } + +void +gst_color_balance_value_changed (GstColorBalance *balance, + GstColorBalanceChannel *channel, + gint value) +{ + g_signal_emit (G_OBJECT (balance), + gst_color_balance_signals[VALUE_CHANGED], + 0, channel, value); + + g_signal_emit_by_name (G_OBJECT (channel), "value_changed", value); +} diff --git a/gst-libs/gst/colorbalance/colorbalance.h b/gst-libs/gst/colorbalance/colorbalance.h index 2b9d27d3..041c4e8f 100644 --- a/gst-libs/gst/colorbalance/colorbalance.h +++ b/gst-libs/gst/colorbalance/colorbalance.h @@ -30,13 +30,13 @@ G_BEGIN_DECLS #define GST_TYPE_COLOR_BALANCE \ (gst_color_balance_get_type ()) #define GST_COLOR_BALANCE(obj) \ - (GST_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_COLOR_BALANCE, \ - GstColorBalance)) + (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_COLOR_BALANCE, \ + GstColorBalance)) #define GST_COLOR_BALANCE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_COLOR_BALANCE, \ GstColorBalanceClass)) #define GST_IS_COLOR_BALANCE(obj) \ - (GST_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_COLOR_BALANCE)) + (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_COLOR_BALANCE)) #define GST_IS_COLOR_BALANCE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_COLOR_BALANCE)) #define GST_COLOR_BALANCE_GET_CLASS(inst) \ @@ -55,6 +55,13 @@ typedef struct _GstColorBalanceClass { gint value); gint (* get_value) (GstColorBalance *balance, GstColorBalanceChannel *channel); + + /* signals */ + void (* value_changed) (GstColorBalance *balance, + GstColorBalanceChannel *channel, + gint value); + + GST_CLASS_PADDING } GstColorBalanceClass; GType gst_color_balance_get_type (void); @@ -68,6 +75,11 @@ void gst_color_balance_set_value (GstColorBalance *balance, gint gst_color_balance_get_value (GstColorBalance *balance, GstColorBalanceChannel *channel); +/* trigger signal */ +void gst_color_balance_value_changed (GstColorBalance *balance, + GstColorBalanceChannel *channel, + gint value); + G_END_DECLS #endif /* __GST_COLOR_BALANCE_H__ */ diff --git a/gst-libs/gst/colorbalance/colorbalancechannel.c b/gst-libs/gst/colorbalance/colorbalancechannel.c index 8241bfe7..f8710120 100644 --- a/gst-libs/gst/colorbalance/colorbalancechannel.c +++ b/gst-libs/gst/colorbalance/colorbalancechannel.c @@ -96,8 +96,7 @@ gst_color_balance_channel_dispose (GObject *object) { GstColorBalanceChannel *channel = GST_COLOR_BALANCE_CHANNEL (object); - if (channel->label) - g_free (channel->label); + g_free (channel->label); if (parent_class->dispose) parent_class->dispose (object); diff --git a/gst-libs/gst/colorbalance/colorbalancechannel.h b/gst-libs/gst/colorbalance/colorbalancechannel.h index 5f738ecb..81d0bd34 100644 --- a/gst-libs/gst/colorbalance/colorbalancechannel.h +++ b/gst-libs/gst/colorbalance/colorbalancechannel.h @@ -53,6 +53,8 @@ typedef struct _GstColorBalanceChannelClass { /* signals */ void (* value_changed) (GstColorBalanceChannel *channel, gint value); + + GST_CLASS_PADDING } GstColorBalanceChannelClass; GType gst_color_balance_channel_get_type (void); diff --git a/gst-libs/gst/colorbalance/colorbalancemarshal.list b/gst-libs/gst/colorbalance/colorbalancemarshal.list new file mode 100644 index 00000000..b9d0c499 --- /dev/null +++ b/gst-libs/gst/colorbalance/colorbalancemarshal.list @@ -0,0 +1 @@ +VOID:OBJECT,INT 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); diff --git a/gst-libs/gst/tuner/Makefile.am b/gst-libs/gst/tuner/Makefile.am index 6d14130d..717c49db 100644 --- a/gst-libs/gst/tuner/Makefile.am +++ b/gst-libs/gst/tuner/Makefile.am @@ -11,6 +11,23 @@ noinst_LTLIBRARIES = libgsttuner.la libgsttuner_la_SOURCES = \ tuner.c \ tunernorm.c \ - tunerchannel.c + tunerchannel.c \ + tunermarshal.c libgsttuner_la_CFLAGS = $(GST_CFLAGS) +BUILT_SOURCES = \ + tunermarshal.c \ + tunermarshal.h +built_headers = \ + tunermarshal.h + +EXTRA_DIST = tunermarshal.list + +tunermarshal.h: tunermarshal.list + glib-genmarshal --header --prefix=gst_tuner_marshal $^ > tunermarshal.h.tmp + mv tunermarshal.h.tmp tunermarshal.h + +tunermarshal.c: tunermarshal.list + echo "#include \"tunermarshal.h\"" >> tunermarshal.c.tmp + glib-genmarshal --body --prefix=gst_tuner_marshal $^ >> tunermarshal.c.tmp + mv tunermarshal.c.tmp tunermarshal.c diff --git a/gst-libs/gst/tuner/tuner.c b/gst-libs/gst/tuner/tuner.c index 43dda8d0..115cdbba 100644 --- a/gst-libs/gst/tuner/tuner.c +++ b/gst-libs/gst/tuner/tuner.c @@ -24,9 +24,20 @@ #endif #include "tuner.h" +#include "tunermarshal.h" + +enum { + NORM_CHANGED, + CHANNEL_CHANGED, + FREQUENCY_CHANGED, + SIGNAL_CHANGED, + LAST_SIGNAL +}; static void gst_tuner_class_init (GstTunerClass *klass); +static guint gst_tuner_signals[LAST_SIGNAL] = { 0 }; + GType gst_tuner_get_type (void) { @@ -49,7 +60,7 @@ gst_tuner_get_type (void) "GstTuner", &gst_tuner_info, 0); g_type_interface_add_prerequisite (gst_tuner_type, - GST_TYPE_INTERFACE); + GST_TYPE_IMPLEMENTS_INTERFACE); } return gst_tuner_type; @@ -58,6 +69,41 @@ gst_tuner_get_type (void) static void gst_tuner_class_init (GstTunerClass *klass) { + static gboolean initialized = FALSE; + + if (!initialized) { + gst_tuner_signals[NORM_CHANGED] = + g_signal_new ("norm_changed", + GST_TYPE_TUNER, G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GstTunerClass, norm_changed), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, + GST_TYPE_TUNER_NORM); + gst_tuner_signals[CHANNEL_CHANGED] = + g_signal_new ("channel_changed", + GST_TYPE_TUNER, G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GstTunerClass, channel_changed), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, + GST_TYPE_TUNER_CHANNEL); + gst_tuner_signals[NORM_CHANGED] = + g_signal_new ("norm_changed", + GST_TYPE_TUNER, G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GstTunerClass, frequency_changed), + NULL, NULL, + gst_tuner_marshal_VOID__OBJECT_ULONG, G_TYPE_NONE, 2, + GST_TYPE_TUNER_CHANNEL, G_TYPE_ULONG); + gst_tuner_signals[NORM_CHANGED] = + g_signal_new ("norm_changed", + GST_TYPE_TUNER, G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GstTunerClass, signal_changed), + NULL, NULL, + gst_tuner_marshal_VOID__OBJECT_INT, G_TYPE_NONE, 2, + GST_TYPE_TUNER_CHANNEL, G_TYPE_INT); + + initialized = TRUE; + } + /* default virtual functions */ klass->list_channels = NULL; klass->set_channel = NULL; @@ -188,3 +234,49 @@ gst_tuner_signal_strength (GstTuner *tuner, return 0; } + +void +gst_tuner_channel_changed (GstTuner *tuner, + GstTunerChannel *channel) +{ + g_signal_emit (G_OBJECT (tuner), + gst_tuner_signals[CHANNEL_CHANGED], 0, + channel); +} + +void +gst_tuner_norm_changed (GstTuner *tuner, + GstTunerNorm *norm) +{ + g_signal_emit (G_OBJECT (tuner), + gst_tuner_signals[NORM_CHANGED], 0, + norm); +} + +void +gst_tuner_frequency_changed (GstTuner *tuner, + GstTunerChannel *channel, + gulong frequency) +{ + g_signal_emit (G_OBJECT (tuner), + gst_tuner_signals[FREQUENCY_CHANGED], 0, + channel, frequency); + + g_signal_emit_by_name (G_OBJECT (channel), + "frequency_changed", + frequency); +} + +void +gst_tuner_signal_changed (GstTuner *tuner, + GstTunerChannel *channel, + gint signal) +{ + g_signal_emit (G_OBJECT (tuner), + gst_tuner_signals[SIGNAL_CHANGED], 0, + channel, signal); + + g_signal_emit_by_name (G_OBJECT (channel), + "signal_changed", + signal); +} diff --git a/gst-libs/gst/tuner/tuner.h b/gst-libs/gst/tuner/tuner.h index 1cd51e11..6c391073 100644 --- a/gst-libs/gst/tuner/tuner.h +++ b/gst-libs/gst/tuner/tuner.h @@ -31,11 +31,11 @@ G_BEGIN_DECLS #define GST_TYPE_TUNER \ (gst_tuner_get_type ()) #define GST_TUNER(obj) \ - (GST_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER, GstTuner)) + (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER, GstTuner)) #define GST_TUNER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TUNER, GstTunerClass)) #define GST_IS_TUNER(obj) \ - (GST_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER)) + (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER)) #define GST_IS_TUNER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TUNER)) #define GST_TUNER_GET_CLASS(inst) \ @@ -66,6 +66,20 @@ typedef struct _GstTunerClass { GstTunerChannel *channel); gint (* signal_strength) (GstTuner *tuner, GstTunerChannel *channel); + + /* signals */ + void (*channel_changed) (GstTuner *tuner, + GstTunerChannel *channel); + void (*norm_changed) (GstTuner *tuner, + GstTunerNorm *norm); + void (*frequency_changed) (GstTuner *tuner, + GstTunerChannel *channel, + gulong frequency); + void (*signal_changed) (GstTuner *tuner, + GstTunerChannel *channel, + gint signal); + + GST_CLASS_PADDING } GstTunerClass; GType gst_tuner_get_type (void); @@ -91,6 +105,18 @@ gulong gst_tuner_get_frequency (GstTuner *tuner, gint gst_tuner_signal_strength (GstTuner *tuner, GstTunerChannel *channel); +/* trigger signals */ +void gst_tuner_channel_changed (GstTuner *tuner, + GstTunerChannel *channel); +void gst_tuner_norm_changed (GstTuner *tuner, + GstTunerNorm *norm); +void gst_tuner_frequency_changed (GstTuner *tuner, + GstTunerChannel *channel, + gulong frequency); +void gst_tuner_signal_changed (GstTuner *tuner, + GstTunerChannel *channel, + gint signal); + G_END_DECLS #endif /* __GST_TUNER_H__ */ diff --git a/gst-libs/gst/tuner/tunerchannel.h b/gst-libs/gst/tuner/tunerchannel.h index b8031455..9545ea55 100644 --- a/gst-libs/gst/tuner/tunerchannel.h +++ b/gst-libs/gst/tuner/tunerchannel.h @@ -64,10 +64,12 @@ typedef struct _GstTunerChannelClass { GObjectClass parent; /* signals */ - void (*frequency_changed) (GstTunerChannel *tuner, + void (*frequency_changed) (GstTunerChannel *channel, gulong frequency); - void (*signal_changed) (GstTunerChannel *tuner, + void (*signal_changed) (GstTunerChannel *channel, gint signal); + + GST_CLASS_PADDING } GstTunerChannelClass; GType gst_tuner_channel_get_type (void); diff --git a/gst-libs/gst/tuner/tunermarshal.list b/gst-libs/gst/tuner/tunermarshal.list new file mode 100644 index 00000000..c99ddc7d --- /dev/null +++ b/gst-libs/gst/tuner/tunermarshal.list @@ -0,0 +1,2 @@ +VOID:OBJECT,ULONG +VOID:OBJECT,INT diff --git a/gst-libs/gst/tuner/tunernorm.h b/gst-libs/gst/tuner/tunernorm.h index 3e6e801d..9852228d 100644 --- a/gst-libs/gst/tuner/tunernorm.h +++ b/gst-libs/gst/tuner/tunernorm.h @@ -46,6 +46,8 @@ typedef struct _GstTunerNorm { typedef struct _GstTunerNormClass { GObjectClass parent; + + GST_CLASS_PADDING } GstTunerNormClass; GType gst_tuner_norm_get_type (void); diff --git a/gst-libs/gst/xoverlay/xoverlay.c b/gst-libs/gst/xoverlay/xoverlay.c index b4c737ff..6a6afe5b 100644 --- a/gst-libs/gst/xoverlay/xoverlay.c +++ b/gst-libs/gst/xoverlay/xoverlay.c @@ -56,7 +56,7 @@ gst_x_overlay_get_type (void) "GstXOverlay", &gst_x_overlay_info, 0); g_type_interface_add_prerequisite (gst_x_overlay_type, - GST_TYPE_INTERFACE); + GST_TYPE_IMPLEMENTS_INTERFACE); } return gst_x_overlay_type; @@ -79,6 +79,8 @@ gst_x_overlay_base_init (gpointer g_class) initialized = TRUE; } + + GST_X_OVERLAY_CLASS (g_class)->set_xwindow_id = NULL; } /** diff --git a/gst-libs/gst/xoverlay/xoverlay.h b/gst-libs/gst/xoverlay/xoverlay.h index 65ac1dc7..962f40b4 100644 --- a/gst-libs/gst/xoverlay/xoverlay.h +++ b/gst-libs/gst/xoverlay/xoverlay.h @@ -31,11 +31,12 @@ G_BEGIN_DECLS #define GST_TYPE_X_OVERLAY \ (gst_x_overlay_get_type ()) #define GST_X_OVERLAY(obj) \ - (GST_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_X_OVERLAY, GstXOverlay)) + (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_X_OVERLAY, \ + GstXOverlay)) #define GST_X_OVERLAY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_X_OVERLAY, GstXOverlayClass)) #define GST_IS_X_OVERLAY(obj) \ - (GST_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_X_OVERLAY)) + (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_X_OVERLAY)) #define GST_IS_X_OVERLAY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_X_OVERLAY)) #define GST_X_OVERLAY_GET_CLASS(inst) \ @@ -53,6 +54,8 @@ typedef struct _GstXOverlayClass { /* signals */ void (*have_xwindow_id) (GstXOverlay *overlay, XID xwindow_id); + + GST_CLASS_PADDING } GstXOverlayClass; GType gst_x_overlay_get_type (void); diff --git a/sys/v4l2/gstv4l2element.c b/sys/v4l2/gstv4l2element.c index 53893fac..d99f6d6d 100644 --- a/sys/v4l2/gstv4l2element.c +++ b/sys/v4l2/gstv4l2element.c @@ -78,8 +78,8 @@ static guint gst_v4l2element_signals[LAST_SIGNAL] = { 0 }; static gboolean -gst_v4l2_iface_supported (GstInterface *iface, - GType iface_type) +gst_v4l2_iface_supported (GstImplementsInterface *iface, + GType iface_type) { GstV4l2Element *v4l2element = GST_V4L2ELEMENT (iface); @@ -99,7 +99,7 @@ gst_v4l2_iface_supported (GstInterface *iface, static void -gst_v4l2_interface_init (GstInterfaceClass *klass) +gst_v4l2_interface_init (GstImplementsInterfaceClass *klass) { /* default virtual functions */ klass->supported = gst_v4l2_iface_supported; @@ -315,7 +315,7 @@ gst_v4l2element_get_type (void) "GstV4l2Element", &v4l2element_info, 0); g_type_add_interface_static (v4l2element_type, - GST_TYPE_INTERFACE, + GST_TYPE_IMPLEMENTS_INTERFACE, &v4l2iface_info); g_type_add_interface_static (v4l2element_type, GST_TYPE_TUNER, |