From 047b3735cf27fe719ac032e260df0de2e6732409 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 15 Mar 2013 09:51:42 +0100 Subject: [PATCH] omxvideodec: Don't interpolate timestamps We will get exactly one frame per input buffer and assigning timestamps between frames if more than one OMX buffer is required per frame easily confuses timestamp tracking in OMX. --- omx/gstomxvideodec.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c index d4ce85a..a3ea2f4 100644 --- a/omx/gstomxvideodec.c +++ b/omx/gstomxvideodec.c @@ -2185,7 +2185,7 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder, GstOMXBuffer *buf; GstBuffer *codec_data = NULL; guint offset = 0, size; - GstClockTime timestamp, duration, timestamp_offset = 0; + GstClockTime timestamp, duration; OMX_ERRORTYPE err; self = GST_OMX_VIDEO_DEC (decoder); @@ -2347,22 +2347,20 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder, buf->omx_buf->pBuffer + buf->omx_buf->nOffset, buf->omx_buf->nFilledLen); - /* Interpolate timestamps if we're passing the buffer - * in multiple chunks */ - if (offset != 0 && duration != GST_CLOCK_TIME_NONE) { - timestamp_offset = gst_util_uint64_scale (offset, duration, size); - } - if (timestamp != GST_CLOCK_TIME_NONE) { buf->omx_buf->nTimeStamp = - gst_util_uint64_scale (timestamp + timestamp_offset, - OMX_TICKS_PER_SECOND, GST_SECOND); - self->last_upstream_ts = timestamp + timestamp_offset; + gst_util_uint64_scale (timestamp, OMX_TICKS_PER_SECOND, GST_SECOND); + self->last_upstream_ts = timestamp; + } else { + buf->omx_buf->nTimeStamp = 0; } - if (duration != GST_CLOCK_TIME_NONE) { + + if (duration != GST_CLOCK_TIME_NONE && offset == 0) { buf->omx_buf->nTickCount = gst_util_uint64_scale (buf->omx_buf->nFilledLen, duration, size); self->last_upstream_ts += duration; + } else { + buf->omx_buf->nTickCount = 0; } if (offset == 0) { -- 2.7.4