Browse Source

Faster video seeking

By using our current position (if known), we shrink the search area.

--HG--
branch : minor
Bart van Strien 7 years ago
parent
commit
75e0caa0ff
1 changed files with 10 additions and 0 deletions
  1. 10 0
      src/modules/video/theora/OggDemuxer.cpp

+ 10 - 0
src/modules/video/theora/OggDemuxer.cpp

@@ -171,6 +171,16 @@ bool OggDemuxer::seek(ogg_packet &packet, double target, std::function<double(in
 	double low = 0;
 	double high = file->getSize();
 
+	// If we know our current position, we can drastically decrease the search area
+	if (packet.granulepos != -1)
+	{
+		double currentTime = getTime(packet.granulepos);
+		if (currentTime < target)
+			low = file->tell();
+		else if (currentTime > target)
+			high = file->tell();
+	}
+
 	while (high-low > rewindThreshold)
 	{
 		// Determine our next binary search position