Move over from GstInterface to GstImplementsInterface. Also adds some signals to...
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>
Sun, 7 Dec 2003 12:11:30 +0000 (12:11 +0000)
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>
Sun, 7 Dec 2003 12:11:30 +0000 (12:11 +0000)
Original commit message from CVS:
Move over from GstInterface to GstImplementsInterface. Also adds some signals to several interfaces

21 files changed:
ext/sdl/sdlvideosink.c
gst-libs/gst/colorbalance/Makefile.am
gst-libs/gst/colorbalance/colorbalance.c
gst-libs/gst/colorbalance/colorbalance.h
gst-libs/gst/colorbalance/colorbalancechannel.c
gst-libs/gst/colorbalance/colorbalancechannel.h
gst-libs/gst/colorbalance/colorbalancemarshal.list [new file with mode: 0644]
gst-libs/gst/mixer/Makefile.am
gst-libs/gst/mixer/mixer.c
gst-libs/gst/mixer/mixer.h
gst-libs/gst/mixer/mixermarshal.list [new file with mode: 0644]
gst-libs/gst/mixer/mixertrack.h
gst-libs/gst/tuner/Makefile.am
gst-libs/gst/tuner/tuner.c
gst-libs/gst/tuner/tuner.h
gst-libs/gst/tuner/tunerchannel.h
gst-libs/gst/tuner/tunermarshal.list [new file with mode: 0644]
gst-libs/gst/tuner/tunernorm.h
gst-libs/gst/xoverlay/xoverlay.c
gst-libs/gst/xoverlay/xoverlay.h
sys/v4l2/gstv4l2element.c

index 75d3134..f75ee23 100644 (file)
@@ -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);
 
index dc8bd0e..b1f6bec 100644 (file)
@@ -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
index 829cf5f..163111c 100644 (file)
 #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);
+}
index 2b9d27d..041c4e8 100644 (file)
@@ -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__ */
index 8241bfe..f871012 100644 (file)
@@ -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);
index 5f738ec..81d0bd3 100644 (file)
@@ -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 (file)
index 0000000..b9d0c49
--- /dev/null
@@ -0,0 +1 @@
+VOID:OBJECT,INT
index 193b5a1..f62ab4c 100644 (file)
@@ -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
index 28d10e6..cbdfdad 100644 (file)
 #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);
+}
index 6ee49e3..c60c8e9 100644 (file)
@@ -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 (file)
index 0000000..ac2cd6b
--- /dev/null
@@ -0,0 +1,2 @@
+VOID:OBJECT,BOOLEAN
+VOID:OBJECT,POINTER
index cb01082..1ee1e9d 100644 (file)
@@ -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);
index 6d14130..717c49d 100644 (file)
@@ -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
index 43dda8d..115cdbb 100644 (file)
 #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);
+}
index 1cd51e1..6c39107 100644 (file)
@@ -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__ */
index b803145..9545ea5 100644 (file)
@@ -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 (file)
index 0000000..c99ddc7
--- /dev/null
@@ -0,0 +1,2 @@
+VOID:OBJECT,ULONG
+VOID:OBJECT,INT
index 3e6e801..9852228 100644 (file)
@@ -46,6 +46,8 @@ typedef struct _GstTunerNorm {
 
 typedef struct _GstTunerNormClass {
   GObjectClass parent;
+
+  GST_CLASS_PADDING
 } GstTunerNormClass;
 
 GType          gst_tuner_norm_get_type         (void);
index b4c737f..6a6afe5 100644 (file)
@@ -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;
 }
 
 /**
index 65ac1dc..962f40b 100644 (file)
@@ -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);
index 53893fa..d99f6d6 100644 (file)
@@ -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,