summaryrefslogtreecommitdiffstats
path: root/sys/oss
diff options
context:
space:
mode:
authorIain Holmes <iain@prettypeople.org>2002-12-06 01:23:41 +0000
committerIain Holmes <iain@prettypeople.org>2002-12-06 01:23:41 +0000
commit3a96272da6c4f8078db4a4236cc6b6f88d4d39ea (patch)
tree16531be58b575f09b656b2293527ec55f0b0bff2 /sys/oss
parent8f5a50ba45a8711e10c705e950ad4f2e17fb7c03 (diff)
Add an event handler to the GstOssSrc. Handle EOS events.
Original commit message from CVS: Add an event handler to the GstOssSrc. Handle EOS events.
Diffstat (limited to 'sys/oss')
-rw-r--r--sys/oss/gstosssrc.c35
-rw-r--r--sys/oss/gstosssrc.h4
2 files changed, 37 insertions, 2 deletions
diff --git a/sys/oss/gstosssrc.c b/sys/oss/gstosssrc.c
index fe917829..8a9445d6 100644
--- a/sys/oss/gstosssrc.c
+++ b/sys/oss/gstosssrc.c
@@ -92,6 +92,7 @@ static void gst_osssrc_get_property (GObject *object, guint prop_id, GValue *
static GstElementStateReturn gst_osssrc_change_state (GstElement *element);
static GstPadConnectReturn gst_osssrc_connect (GstPad *pad, GstCaps *caps);
+static gboolean gst_osssrc_send_event (GstElement *element, GstEvent *event);
static void gst_osssrc_close_audio (GstOssSrc *src);
static gboolean gst_osssrc_open_audio (GstOssSrc *src);
static void gst_osssrc_sync_parms (GstOssSrc *osssrc);
@@ -157,6 +158,7 @@ gst_osssrc_class_init (GstOssSrcClass *klass)
gobject_class->get_property = gst_osssrc_get_property;
gstelement_class->change_state = gst_osssrc_change_state;
+ gstelement_class->send_event = gst_osssrc_send_event;
}
static void
@@ -175,6 +177,9 @@ gst_osssrc_init (GstOssSrc *osssrc)
osssrc->format = AFMT_S16_LE;
osssrc->channels = 2;
osssrc->frequency = 44100;
+
+ osssrc->need_eos = FALSE;
+ osssrc->need_sync = FALSE;
osssrc->bytes_per_read = 4096;
osssrc->curoffset = 0;
@@ -195,6 +200,12 @@ gst_osssrc_get (GstPad *pad)
GST_DEBUG (GST_CAT_PLUGIN_INFO, "attempting to read something from the soundcard");
+ if (src->need_eos) {
+/* gst_element_set_eos (GST_ELEMENT (src)); */
+ src->need_eos = FALSE;
+ return GST_BUFFER (gst_event_new (GST_EVENT_EOS));
+ }
+
buf = gst_buffer_new ();
g_return_val_if_fail (buf, NULL);
@@ -389,6 +400,29 @@ gst_osssrc_connect (GstPad *pad,
return GST_PAD_CONNECT_OK;
}
+static gboolean
+gst_osssrc_send_event (GstElement *element,
+ GstEvent *event)
+{
+ gboolean retval = FALSE;
+ GstOssSrc *osssrc;
+
+ osssrc = GST_OSSSRC (element);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_EOS:
+ osssrc->need_eos = TRUE;
+ retval = TRUE;
+ break;
+
+ default:
+ break;
+ }
+
+ gst_event_unref (event);
+ return retval;
+}
+
static gboolean
gst_osssrc_open_audio (GstOssSrc *src)
{
@@ -473,4 +507,3 @@ gst_osssrc_factory_init (GstPlugin *plugin)
return TRUE;
}
-
diff --git a/sys/oss/gstosssrc.h b/sys/oss/gstosssrc.h
index 343190ea..5109c3c4 100644
--- a/sys/oss/gstosssrc.h
+++ b/sys/oss/gstosssrc.h
@@ -70,8 +70,10 @@ struct _GstOssSrc {
gint format;
gint channels;
gint frequency;
+
gboolean need_sync; /* Do the parameters need resynced? */
-
+ gboolean need_eos; /* Do we need to emit an EOS? */
+
/* blocking */
guint64 basetime;
guint64 samples_since_basetime;