Seeking backwards has been implemented.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2522 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/java/src/com/tightvnc/rfbplayer/FbsInputStream.java b/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
index 4057aca..2e90bc4 100644
--- a/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
+++ b/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
@@ -30,6 +30,7 @@
protected long startTime;
protected long timeOffset;
protected long seekOffset;
+ protected boolean seekBackwards;
protected boolean paused;
protected double playbackSpeed;
@@ -57,6 +58,7 @@
startTime = System.currentTimeMillis();
timeOffset = 0;
seekOffset = -1;
+ seekBackwards = false;
paused = false;
playbackSpeed = 1.0;
@@ -105,6 +107,7 @@
startTime = -1;
timeOffset = 0;
seekOffset = -1;
+ seekBackwards = false;
paused = false;
playbackSpeed = 1.0;
@@ -128,6 +131,9 @@
public synchronized void setTimeOffset(long pos)
{
seekOffset = (long)(pos / playbackSpeed);
+ if (seekOffset < timeOffset) {
+ seekBackwards = true;
+ }
notify();
}
@@ -147,6 +153,16 @@
return (seekOffset >= 0);
}
+ public long getSeekOffset()
+ {
+ return seekOffset;
+ }
+
+ public boolean isPaused()
+ {
+ return paused;
+ }
+
public synchronized void pausePlayback()
{
paused = true;
@@ -171,6 +187,11 @@
private synchronized boolean fillBuffer() throws IOException
{
+ // The reading thread should be interrupted on backward seeking.
+ if (seekBackwards)
+ throw new EOFException("[REWIND]");
+
+ // Just wait unless we are performing playback OR seeking.
waitWhilePaused();
bufferSize = (int)readUnsigned32();