diff options
Diffstat (limited to 'gst/frei0r/gstfrei0rsrc.c')
-rw-r--r-- | gst/frei0r/gstfrei0rsrc.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/gst/frei0r/gstfrei0rsrc.c b/gst/frei0r/gstfrei0rsrc.c index 69b905b0f..e811b46d7 100644 --- a/gst/frei0r/gstfrei0rsrc.c +++ b/gst/frei0r/gstfrei0rsrc.c @@ -26,6 +26,8 @@ #include "gstfrei0r.h" #include "gstfrei0rsrc.h" +#include <gst/controller/gstcontroller.h> + GST_DEBUG_CATEGORY_EXTERN (frei0r_debug); #define GST_CAT_DEFAULT frei0r_debug @@ -66,6 +68,7 @@ gst_frei0r_src_create (GstPushSrc * src, GstBuffer ** buf) guint size, newsize; GstFlowReturn ret = GST_FLOW_OK; GstBuffer *outbuf = NULL; + GstClockTime timestamp; gdouble time; *buf = NULL; @@ -101,7 +104,7 @@ gst_frei0r_src_create (GstPushSrc * src, GstBuffer ** buf) gst_buffer_set_caps (outbuf, GST_PAD_CAPS (GST_BASE_SRC_PAD (src))); } - GST_BUFFER_TIMESTAMP (outbuf) = + GST_BUFFER_TIMESTAMP (outbuf) = timestamp = gst_util_uint64_scale (self->n_frames, GST_SECOND * self->fps_d, self->fps_n); GST_BUFFER_OFFSET (outbuf) = self->n_frames; @@ -111,6 +114,16 @@ gst_frei0r_src_create (GstPushSrc * src, GstBuffer ** buf) gst_util_uint64_scale (self->n_frames, GST_SECOND * self->fps_d, self->fps_n) - GST_BUFFER_TIMESTAMP (outbuf); + timestamp = + gst_segment_to_stream_time (&GST_BASE_SRC_CAST (self)->segment, + GST_FORMAT_TIME, timestamp); + + GST_DEBUG_OBJECT (self, "sync to %" GST_TIME_FORMAT, + GST_TIME_ARGS (timestamp)); + + if (GST_CLOCK_TIME_IS_VALID (timestamp)) + gst_object_sync_values (G_OBJECT (self), timestamp); + time = ((gdouble) GST_BUFFER_TIMESTAMP (outbuf)) / GST_SECOND; GST_OBJECT_LOCK (self); |