summaryrefslogtreecommitdiffstats
path: root/gst/switch
diff options
context:
space:
mode:
Diffstat (limited to 'gst/switch')
-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
4 files changed, 57 insertions, 1 deletions
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);