From d705291cbdc9353f9865a0cdbb9dee984c273a8e Mon Sep 17 00:00:00 2001 From: "Joshua M. Doe" Date: Wed, 30 Oct 2019 14:51:39 -0400 Subject: [PATCH] imperxflexsrc: fix timestamps Previous implementation was trying to be too clever. If we want absolute timestamps we can use the timestamp/x-unix reference time meta. --- sys/imperxflex/gstframelinksrc.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sys/imperxflex/gstframelinksrc.c b/sys/imperxflex/gstframelinksrc.c index 82dace4..9a39c4a 100644 --- a/sys/imperxflex/gstframelinksrc.c +++ b/sys/imperxflex/gstframelinksrc.c @@ -640,9 +640,16 @@ gst_framelinksrc_callback (void *lpUserData, VCECLB_FrameInfoEx * pFrameInfo) static guint64 last_frame_number = 0; static guint64 buffers_processed = 0; static guint64 total_dropped_frames = 0; + GstClock *clock; + GstClockTime timestamp; g_assert (src != NULL); + clock = gst_element_get_clock (GST_ELEMENT (src)); + timestamp = GST_CLOCK_DIFF (gst_element_get_base_time (GST_ELEMENT (src)), + gst_clock_get_time (clock)); + gst_object_unref (clock); + /* check for DMA errors */ if (pFrameInfo->dma_status == VCECLB_DMA_STATUS_FRAME_DROP) { /* TODO: save this in dropped frame total? */ @@ -691,9 +698,8 @@ gst_framelinksrc_callback (void *lpUserData, VCECLB_FrameInfoEx * pFrameInfo) src->buffer = gst_framelinksrc_create_buffer_from_frameinfo (src, pFrameInfo); - GST_BUFFER_TIMESTAMP (src->buffer) = - GST_CLOCK_DIFF (gst_element_get_base_time (GST_ELEMENT (src)), - src->acq_start_time + pFrameInfo->timestamp * GST_USECOND); + GST_BUFFER_TIMESTAMP (src->buffer) = timestamp; + GST_BUFFER_OFFSET (src->buffer) = buffers_processed; ++buffers_processed;