summaryrefslogtreecommitdiff
path: root/omx
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 /omx
parentc59d8930ac1dc4a0480d6e3ba2b88cd5affe1c7c (diff)
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.
Diffstat (limited to '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) {