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
#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)
{
"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;
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;
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);
+}
#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) \
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);
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__ */
{
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);
/* signals */
void (* value_changed) (GstColorBalanceChannel *channel,
gint value);
+
+ GST_CLASS_PADDING
} GstColorBalanceChannelClass;
GType gst_color_balance_channel_get_type (void);
--- /dev/null
+VOID:OBJECT,INT
#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)
{
"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;
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;
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);
+}
#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) \
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);
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__ */
{
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);
/* signals */
void (* value_changed) (GstColorBalanceChannel *channel,
gint value);
+
+ GST_CLASS_PADDING
} GstColorBalanceChannelClass;
GType gst_color_balance_channel_get_type (void);
#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)
{
"GstMixer",
&gst_mixer_info, 0);
g_type_interface_add_prerequisite (gst_mixer_type,
- GST_TYPE_INTERFACE);
+ GST_TYPE_IMPLEMENTS_INTERFACE);
}
return gst_mixer_type;
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;
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);
+}
#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) \
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
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);
#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)
{
"GstTuner",
&gst_tuner_info, 0);
g_type_interface_add_prerequisite (gst_tuner_type,
- GST_TYPE_INTERFACE);
+ GST_TYPE_IMPLEMENTS_INTERFACE);
}
return gst_tuner_type;
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;
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);
+}
#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) \
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);
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__ */
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);
typedef struct _GstTunerNormClass {
GObjectClass parent;
+
+ GST_CLASS_PADDING
} GstTunerNormClass;
GType gst_tuner_norm_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;
initialized = TRUE;
}
+
+ GST_X_OVERLAY_CLASS (g_class)->set_xwindow_id = NULL;
}
/**
#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) \
/* signals */
void (*have_xwindow_id) (GstXOverlay *overlay,
XID xwindow_id);
+
+ GST_CLASS_PADDING
} GstXOverlayClass;
GType gst_x_overlay_get_type (void);
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
#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)
{
"GstMixer",
&gst_mixer_info, 0);
g_type_interface_add_prerequisite (gst_mixer_type,
- GST_TYPE_INTERFACE);
+ GST_TYPE_IMPLEMENTS_INTERFACE);
}
return gst_mixer_type;
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;
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);
+}
#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) \
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
--- /dev/null
+VOID:OBJECT,BOOLEAN
+VOID:OBJECT,POINTER
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);
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
#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)
{
"GstTuner",
&gst_tuner_info, 0);
g_type_interface_add_prerequisite (gst_tuner_type,
- GST_TYPE_INTERFACE);
+ GST_TYPE_IMPLEMENTS_INTERFACE);
}
return gst_tuner_type;
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;
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);
+}
#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) \
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);
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__ */
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);
--- /dev/null
+VOID:OBJECT,ULONG
+VOID:OBJECT,INT
typedef struct _GstTunerNormClass {
GObjectClass parent;
+
+ GST_CLASS_PADDING
} GstTunerNormClass;
GType gst_tuner_norm_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;
initialized = TRUE;
}
+
+ GST_X_OVERLAY_CLASS (g_class)->set_xwindow_id = NULL;
}
/**
#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) \
/* signals */
void (*have_xwindow_id) (GstXOverlay *overlay,
XID xwindow_id);
+
+ GST_CLASS_PADDING
} GstXOverlayClass;
GType gst_x_overlay_get_type (void);
static guint gst_v4lelement_signals[LAST_SIGNAL] = { 0 };
static gboolean
-gst_v4l_iface_supported (GstInterface *iface,
- GType iface_type)
+gst_v4l_iface_supported (GstImplementsInterface *iface,
+ GType iface_type)
{
GstV4lElement *v4lelement = GST_V4LELEMENT (iface);
}
static void
-gst_v4l_interface_init (GstInterfaceClass *klass)
+gst_v4l_interface_init (GstImplementsInterfaceClass *klass)
{
/* default virtual functions */
klass->supported = gst_v4l_iface_supported;
&v4lelement_info, 0);
g_type_add_interface_static (v4lelement_type,
- GST_TYPE_INTERFACE,
+ GST_TYPE_IMPLEMENTS_INTERFACE,
&v4liface_info);
g_type_add_interface_static (v4lelement_type,
GST_TYPE_TUNER,
/* Interfaces stuff */
static gboolean
-gst_ximagesink_interface_supported (GstInterface *iface, GType type)
+gst_ximagesink_interface_supported (GstImplementsInterface *iface, GType type)
{
g_assert (type == GST_TYPE_NAVIGATION || type == GST_TYPE_X_OVERLAY);
return TRUE;
}
static void
-gst_ximagesink_interface_init (GstInterfaceClass *klass)
+gst_ximagesink_interface_init (GstImplementsInterfaceClass *klass)
{
klass->supported = gst_ximagesink_interface_supported;
}
"GstXImageSink",
&ximagesink_info, 0);
- g_type_add_interface_static (ximagesink_type, GST_TYPE_INTERFACE,
+ g_type_add_interface_static (ximagesink_type, GST_TYPE_IMPLEMENTS_INTERFACE,
&iface_info);
g_type_add_interface_static (ximagesink_type, GST_TYPE_NAVIGATION,
&navigation_info);
/* Interfaces stuff */
static gboolean
-gst_xvimagesink_interface_supported (GstInterface *iface, GType type)
+gst_xvimagesink_interface_supported (GstImplementsInterface *iface, GType type)
{
g_assert (type == GST_TYPE_NAVIGATION || type == GST_TYPE_X_OVERLAY);
return TRUE;
}
static void
-gst_xvimagesink_interface_init (GstInterfaceClass *klass)
+gst_xvimagesink_interface_init (GstImplementsInterfaceClass *klass)
{
klass->supported = gst_xvimagesink_interface_supported;
}
"GstXvImageSink",
&xvimagesink_info, 0);
- g_type_add_interface_static (xvimagesink_type, GST_TYPE_INTERFACE,
+ g_type_add_interface_static (xvimagesink_type, GST_TYPE_IMPLEMENTS_INTERFACE,
&iface_info);
g_type_add_interface_static (xvimagesink_type, GST_TYPE_NAVIGATION,
&navigation_info);