summaryrefslogtreecommitdiff
path: root/gst/frei0r/gstfrei0rsrc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/frei0r/gstfrei0rsrc.c')
-rw-r--r--gst/frei0r/gstfrei0rsrc.c15
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);