summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2007-12-17 14:46:26 +0000
committerAndy Wingo <wingo@pobox.com>2007-12-17 14:46:26 +0000
commitad6223b448bf527de15f2617fed9b4fa53495854 (patch)
tree3309c66ca6dfbd3e94bc432b3204e1f2a95fb089
parent9db3f63b135acd7866bedc9a7e097da3a6b294bb (diff)
downloadgst-plugins-bad-ad6223b448bf527de15f2617fed9b4fa53495854.tar.gz
gst-plugins-bad-ad6223b448bf527de15f2617fed9b4fa53495854.tar.bz2
gst-plugins-bad-ad6223b448bf527de15f2617fed9b4fa53495854.zip
gst/switch/gstswitch.*: Add `block' and `switch' signals.
Original commit message from CVS: 2007-12-17 Andy Wingo <wingo@pobox.com> * gst/switch/gstswitch.h (struct _GstStreamSelectorClass): * gst/switch/gstswitch.c (gst_stream_selector_class_init): Add `block' and `switch' signals. * gst/switch/Makefile.am: * gst/switch/gstswitch-marshal.list: Add foo to generate a marshaller for the `switch' signal. Patch 2/12.
-rw-r--r--ChangeLog8
-rw-r--r--gst/switch/Makefile.am15
-rw-r--r--gst/switch/gstswitch-marshal.list1
-rw-r--r--gst/switch/gstswitch.c38
-rw-r--r--gst/switch/gstswitch.h4
5 files changed, 65 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 7d1065a4..7de180e5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2007-12-17 Andy Wingo <wingo@pobox.com>
+ * gst/switch/gstswitch.h (struct _GstStreamSelectorClass):
+ * gst/switch/gstswitch.c (gst_stream_selector_class_init): Add
+ `block' and `switch' signals.
+
+ * gst/switch/Makefile.am:
+ * gst/switch/gstswitch-marshal.list: Add foo to generate a
+ marshaller for the `switch' signal. Patch 2/12.
+
* gst/switch/gstswitch.h:
* gst/switch/gstswitch.c: Replace with files from
gststreamselector.[ch], registered as the "switch" plugin, with
diff --git a/gst/switch/Makefile.am b/gst/switch/Makefile.am
index b5a55038..b829095d 100644
--- a/gst/switch/Makefile.am
+++ b/gst/switch/Makefile.am
@@ -1,9 +1,22 @@
+glib_enum_prefix = gst_switch
+
+include $(top_srcdir)/common/glib-gen.mak
+
+built_sources = gstswitch-marshal.c
+built_headers = gstswitch-marshal.h
+
+BUILT_SOURCES = $(built_sources) $(built_headers)
+
+CLEANFILES = $(BUILT_SOURCES)
+
+EXTRA_DIST = gstswitch-marshal.list
plugin_LTLIBRARIES = libgstswitch.la
libgstswitch_la_SOURCES = gstswitch.c
+nodist_libgstswitch_la_SOURCES = $(built_sources)
libgstswitch_la_CFLAGS = $(GST_CFLAGS)
libgstswitch_la_LIBADD =
libgstswitch_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS)
-noinst_HEADERS = gstswitch.h
+noinst_HEADERS = gstswitch.h $(built_headers)
diff --git a/gst/switch/gstswitch-marshal.list b/gst/switch/gstswitch-marshal.list
new file mode 100644
index 00000000..57ed247e
--- /dev/null
+++ b/gst/switch/gstswitch-marshal.list
@@ -0,0 +1 @@
+VOID:STRING,UINT64,UINT64
diff --git a/gst/switch/gstswitch.c b/gst/switch/gstswitch.c
index c1f48bde..c1f4b53b 100644
--- a/gst/switch/gstswitch.c
+++ b/gst/switch/gstswitch.c
@@ -27,6 +27,7 @@
#include <string.h>
#include "gstswitch.h"
+#include "gstswitch-marshal.h"
GST_DEBUG_CATEGORY_STATIC (stream_selector_debug);
#define GST_CAT_DEFAULT stream_selector_debug
@@ -57,6 +58,15 @@ enum
PROP_ACTIVE_PAD = 1
};
+enum
+{
+ /* methods */
+ SIGNAL_BLOCK,
+ SIGNAL_SWITCH,
+ LAST_SIGNAL
+};
+static guint gst_stream_selector_signals[LAST_SIGNAL] = { 0 };
+
static gboolean gst_stream_selector_is_active_sinkpad (GstStreamSelector * sel,
GstPad * pad);
static GstPad *gst_stream_selector_activate_sinkpad (GstStreamSelector * sel,
@@ -429,6 +439,34 @@ gst_stream_selector_class_init (GstStreamSelectorClass * klass)
gobject_class->dispose = gst_stream_selector_dispose;
gstelement_class->request_new_pad = gst_stream_selector_request_new_pad;
gstelement_class->release_pad = gst_stream_selector_release_pad;
+
+ /**
+ * GstStreamSelector::block:
+ * @streamselector: the streamselector element to emit this signal on
+ *
+ * Block all sink pads in preparation for a switch.
+ */
+ gst_stream_selector_signals[SIGNAL_BLOCK] =
+ g_signal_new ("block", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstStreamSelectorClass, block),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+ /**
+ * GstStreamSelector::switch:
+ * @streamselector: the streamselector element to emit this signal on
+ * @pad: name of pad to switch to
+ * @stop_time: time at which to close the previous segment, or
+ * #GST_CLOCK_TIME_NONE for the last time on the previously
+ * active pad
+ * @start_time: start time for new segment, or foo
+ *
+ * Switch the given open file descriptor to multifdsink to write to and
+ * specify the burst parameters for the new connection.
+ */
+ gst_stream_selector_signals[SIGNAL_SWITCH] =
+ g_signal_new ("switch", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstStreamSelectorClass, switch_),
+ NULL, NULL, gst_switch_marshal_VOID__STRING_UINT64_UINT64,
+ G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_UINT64);
}
static void
diff --git a/gst/switch/gstswitch.h b/gst/switch/gstswitch.h
index a7c4b22f..3d88ca2b 100644
--- a/gst/switch/gstswitch.h
+++ b/gst/switch/gstswitch.h
@@ -52,6 +52,10 @@ struct _GstStreamSelector {
struct _GstStreamSelectorClass {
GstElementClass parent_class;
+
+ void (*block) (void);
+ void (*switch_) (const gchar *pad_name, GstClockTime stop_time,
+ GstClockTime start_time);
};
GType gst_stream_selector_get_type (void);