summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2015-11-18 19:07:53 +0200
committerSebastian Dröge <sebastian@centricular.com>2015-12-01 15:08:28 +0200
commit003ecb0bd41850c40e72cdbe20b7a07735b32e92 (patch)
tree25ad9347b7c6e20f5e5f490586c5244f04522726
parent49d409336c3d3791896fece4d86d5fc882aea026 (diff)
downloadgstreamer-plugins-good-003ecb0bd41850c40e72cdbe20b7a07735b32e92.tar.gz
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.
-rw-r--r--gst/isomp4/qtdemux.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
index 3c4ec5182..cc408939c 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;
}