From b404b2239a628917540252b7a0bf8b2d9506bf3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 18 Nov 2015 19:07:53 +0200 Subject: [PATCH] qtdemux: Cast to signed integers to prevent unsigned compare between negative and positive numbers This fixes seeking if the first entries in the samples table are negative. The binary search would always fail on this as the array would not be sorted if interpreting the negative numbers as huge positive numbers. This caused us to always output buffers from the beginning after a seek instead of close to the seek position. Also add a case to the comparison function for equality. --- gst/isomp4/qtdemux.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index f2c8c73f21..c154060818 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -991,10 +991,12 @@ typedef struct } FindData; static gint -find_func (QtDemuxSample * s1, guint64 * media_time, gpointer user_data) +find_func (QtDemuxSample * s1, gint64 * media_time, gpointer user_data) { - if (s1->timestamp + s1->pts_offset > *media_time) + if ((gint64) s1->timestamp + s1->pts_offset > *media_time) return 1; + if ((gint64) s1->timestamp + s1->pts_offset == *media_time) + return 0; return -1; }