summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2013-03-15 09:51:42 +0100
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2013-03-15 09:51:42 +0100
commit047b3735cf27fe719ac032e260df0de2e6732409 (patch)
tree821ad7f07d9f8c62042e112913f828a87cf0761c
parentc59d8930ac1dc4a0480d6e3ba2b88cd5affe1c7c (diff)
downloadgst-omx-047b3735cf27fe719ac032e260df0de2e6732409.tar.gz
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.
-rw-r--r--omx/gstomxvideodec.c20
1 files 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) {