]> source.dussan.org Git - tigervnc.git/commitdiff
[Development] Using index-driven positioning when seeking forward over more than...
authorConstantin Kaplinsky <const@tightvnc.com>
Mon, 23 Jun 2008 13:34:36 +0000 (13:34 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Mon, 23 Jun 2008 13:34:36 +0000 (13:34 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2621 3789f03b-4d11-0410-bbf8-ca57d06f2519

java/src/com/tightvnc/rfbplayer/FbsInputStream.java
java/src/com/tightvnc/rfbplayer/RfbPlayer.java

index db02a1dd8cbe76b0eb47df782c1050cd0bf4ef51..2077bc5aae86c7eba274d5ac7bc2eeab37fe03e4 100644 (file)
@@ -33,7 +33,7 @@ class FbsInputStream extends InputStream {
   protected long startTime;
   protected long timeOffset;
   protected long seekOffset;
-  protected boolean seekBackwards;
+  protected boolean farSeeking;
   protected boolean paused;
   protected boolean isQuitting = false;
   protected double playbackSpeed;
@@ -101,7 +101,7 @@ class FbsInputStream extends InputStream {
     startTime = System.currentTimeMillis() - timeOffset;
     this.timeOffset = timeOffset;
     seekOffset = -1;
-    seekBackwards = false;
+    farSeeking = false;
     paused = false;
     playbackSpeed = 1.0;
 
@@ -147,7 +147,7 @@ class FbsInputStream extends InputStream {
     startTime = -1;
     timeOffset = 0;
     seekOffset = -1;
-    seekBackwards = false;
+    farSeeking = false;
     paused = false;
     playbackSpeed = 1.0;
 
@@ -169,8 +169,9 @@ class FbsInputStream extends InputStream {
 
   public synchronized void setTimeOffset(long pos) {
     seekOffset = (long)(pos / playbackSpeed);
-    if (seekOffset < timeOffset) {
-      seekBackwards = true;
+    long minJumpForwardOffset = timeOffset + (long)(10000 / playbackSpeed);
+    if (seekOffset < timeOffset || seekOffset >  minJumpForwardOffset) {
+      farSeeking = true;
     }
     notify();
   }
@@ -216,9 +217,9 @@ class FbsInputStream extends InputStream {
   // Methods for internal use.
   //
   private synchronized boolean fillBuffer() throws IOException {
-    // The reading thread should be interrupted on backward seeking.
-    if (seekBackwards)
-      throw new EOFException("[REWIND]");
+    // The reading thread should be interrupted on far seeking.
+    if (farSeeking)
+      throw new EOFException("[JUMP]");
 
     // Just wait unless we are performing playback OR seeking.
     waitWhilePaused();
index 85d067d123cb90e646bc874d3accfe7de82d8c80..6cdd386f584e2d8b36a9a3d0911fa45b666b4358 100644 (file)
@@ -180,8 +180,9 @@ public class RfbPlayer extends java.applet.Applet
           vc.processNormalProtocol();
         } catch (EOFException e) {
           long newTimeOffset;
-          if (e.getMessage() != null && e.getMessage().equals("[REWIND]")) {
-            // A special type of EOFException allowing us to seek backwards.
+          if (e.getMessage() != null && e.getMessage().equals("[JUMP]")) {
+            // A special type of EOFException allowing us to close FBS stream
+            // and then re-open it for jumping to a different time offset.
             newTimeOffset = fbs.getSeekOffset();
             autoPlay = !fbs.isPaused();
           } else {