2005-12-07 Wim Taymans <wim@fluendo.com>
+ * plugins/elements/gstfakesrc.c: (gst_fake_src_class_init),
+ (gst_fake_src_get_times), (gst_fake_src_create):
+ Fix broken sync option, fixes #323259
+
+2005-12-07 Wim Taymans <wim@fluendo.com>
+
* gst/gstbuffer.c:
Small docs update.
* SECTION:element-fakesrc
* @short_description: Generate (meaningless) buffers
* @see_also: #GstFakeSink
- *
+ *
* <refsect2>
* <para>
* The fakesrc element is a multipurpose element that can generate
static gboolean gst_fake_src_is_seekable (GstBaseSrc * basesrc);
static gboolean gst_fake_src_event_handler (GstBaseSrc * src, GstEvent * event);
+static void gst_fake_src_get_times (GstBaseSrc * basesrc, GstBuffer * buffer,
+ GstClockTime * start, GstClockTime * end);
static GstFlowReturn gst_fake_src_create (GstBaseSrc * src, guint64 offset,
guint length, GstBuffer ** buf);
gstbase_src_class->start = GST_DEBUG_FUNCPTR (gst_fake_src_start);
gstbase_src_class->stop = GST_DEBUG_FUNCPTR (gst_fake_src_stop);
gstbase_src_class->event = GST_DEBUG_FUNCPTR (gst_fake_src_event_handler);
+ gstbase_src_class->get_times = GST_DEBUG_FUNCPTR (gst_fake_src_get_times);
gstbase_src_class->create = GST_DEBUG_FUNCPTR (gst_fake_src_create);
}
return buf;
}
+static void
+gst_fake_src_get_times (GstBaseSrc * basesrc, GstBuffer * buffer,
+ GstClockTime * start, GstClockTime * end)
+{
+ GstFakeSrc *src;
+
+ src = GST_FAKE_SRC (basesrc);
+
+ /* sync on the timestamp of the buffer if requested. */
+ if (src->sync) {
+ GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer);
+
+ if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
+ /* get duration to calculate end time */
+ GstClockTime duration = GST_BUFFER_DURATION (buffer);
+
+ if (GST_CLOCK_TIME_IS_VALID (duration)) {
+ *end = timestamp + duration;
+ }
+ *start = timestamp;
+ }
+ } else {
+ *start = -1;
+ *end = -1;
+ }
+}
+
static GstFlowReturn
gst_fake_src_create (GstBaseSrc * basesrc, guint64 offset, guint length,
GstBuffer ** ret)
if (src->datarate > 0) {
time = (src->bytes_sent * GST_SECOND) / src->datarate;
- if (src->sync) {
- /* gst_element_wait (GST_ELEMENT (src), time); */
- }
GST_BUFFER_DURATION (buf) =
GST_BUFFER_SIZE (buf) * GST_SECOND / src->datarate;