浏览代码

Faster video seeking

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

--HG--
branch : minor
Bart van Strien 8 年之前
父节点
当前提交
75e0caa0ff
共有 1 个文件被更改,包括 10 次插入0 次删除
  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