diff --git a/common b/common index d6e219fd076d8f182bd1ee84228b1b85cdb807a6..6b0a313b93535f0df7956a01405ddb63a3d76b5a 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit d6e219fd076d8f182bd1ee84228b1b85cdb807a6 +Subproject commit 6b0a313b93535f0df7956a01405ddb63a3d76b5a diff --git a/ext/esd/esdsink.c b/ext/esd/esdsink.c index 43fe858960d4eae2b601f6800c4662a1f368815c..71edca32c56c20bf1b2d6809efcee749d6fbbe71 100644 --- a/ext/esd/esdsink.c +++ b/ext/esd/esdsink.c @@ -89,6 +89,7 @@ static GstElementStateReturn gst_esdsink_change_state (GstElement *element); static gboolean gst_esdsink_sync_parms (GstEsdsink *esdsink); static GstPadLinkReturn gst_esdsink_sinkconnect (GstPad *pad, GstCaps *caps); +static void gst_esdsink_set_clock (GstElement *element, GstClock *clock); static void gst_esdsink_chain (GstPad *pad, GstBuffer *buf); static void gst_esdsink_set_property (GObject *object, guint prop_id, @@ -184,6 +185,8 @@ gst_esdsink_class_init (GstEsdsinkClass *klass) gobject_class->get_property = gst_esdsink_get_property; gstelement_class->change_state = gst_esdsink_change_state; + gstelement_class->set_clock = gst_esdsink_set_clock; + //gstelement_class->get_clock = gst_esdsink_get_clock; } static void @@ -195,6 +198,8 @@ gst_esdsink_init(GstEsdsink *esdsink) gst_pad_set_chain_function(esdsink->sinkpad, GST_DEBUG_FUNCPTR(gst_esdsink_chain)); gst_pad_set_link_function(esdsink->sinkpad, gst_esdsink_sinkconnect); + GST_FLAG_SET (esdsink, GST_ELEMENT_EVENT_AWARE); + esdsink->mute = FALSE; esdsink->fd = -1; /* FIXME: get default from somewhere better than just putting them inline. */ @@ -238,6 +243,28 @@ gst_esdsink_sinkconnect (GstPad *pad, GstCaps *caps) return GST_PAD_LINK_REFUSED; } +#if 0 +static GstClock * +gst_esdsink_get_clock (GstElement *element) +{ + GstEsdsink *esdsink; + + esdsink = GET_ESDSINK (element); + + return GST_CLOCK(esdsink->provided_clock); +} +#endif + +static void +gst_esdsink_set_clock (GstElement *element, GstClock *clock) +{ + GstEsdsink *esdsink; + + esdsink = GST_ESDSINK (element); + + esdsink->clock = clock; +} + static void gst_esdsink_chain (GstPad *pad, GstBuffer *buf) { @@ -249,6 +276,33 @@ gst_esdsink_chain (GstPad *pad, GstBuffer *buf) esdsink = GST_ESDSINK (gst_pad_get_parent (pad)); + if (GST_IS_EVENT(buf)){ + GstEvent *event = GST_EVENT(buf); + + switch(GST_EVENT_TYPE(event)){ + case GST_EVENT_EOS: + break; + case GST_EVENT_DISCONTINUOUS: + { + gint64 value; + + if (gst_event_discont_get_value (event, GST_FORMAT_TIME, &value)) { + if (!gst_clock_handle_discont (esdsink->clock, value)){ + //gst_esdsink_clock_set_active (osssink->provided_clock, FALSE); + } + //esdsink->handled = 0; + } + //esdsink->resync = TRUE; + break; + } + default: + gst_pad_event_default(pad, event); + break; + } + gst_event_unref(event); + return; + } + if (GST_BUFFER_DATA (buf) != NULL) { if (!esdsink->mute && esdsink->fd >= 0) { GST_DEBUG (0, "esdsink: fd=%d data=%p size=%d", diff --git a/ext/esd/esdsink.h b/ext/esd/esdsink.h index e29e9f7c2bf1907b5968d555525aef6af636565f..cf92d50ac3c46b35cbaf204e45923ef8f8ee13c1 100644 --- a/ext/esd/esdsink.h +++ b/ext/esd/esdsink.h @@ -52,6 +52,8 @@ struct _GstEsdsink { GstPad *sinkpad; + GstClock *clock; + gboolean mute; int fd; gint format;