aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
authorConstantin Kaplinsky <const@tightvnc.com>2002-05-30 15:54:56 +0000
committerConstantin Kaplinsky <const@tightvnc.com>2002-05-30 15:54:56 +0000
commitce39d3be277c2f7c1952bba0cf07295d9dee8238 (patch)
treec7d0ffe9395733983d48635415ea6199692ef283 /java/src
parent972c25718c13f963dbd1d4ce6a885f3e66f2931f (diff)
downloadtigervnc-ce39d3be277c2f7c1952bba0cf07295d9dee8238.tar.gz
tigervnc-ce39d3be277c2f7c1952bba0cf07295d9dee8238.zip
Implemented variable playback speed, adjustable using a text field.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2513 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/tightvnc/rfbplayer/ButtonPanel.java4
-rw-r--r--java/src/com/tightvnc/rfbplayer/FbsInputStream.java32
-rw-r--r--java/src/com/tightvnc/rfbplayer/RfbPlayer.java5
3 files changed, 28 insertions, 13 deletions
diff --git a/java/src/com/tightvnc/rfbplayer/ButtonPanel.java b/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
index 7a1e8884..222c519d 100644
--- a/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
+++ b/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
@@ -48,8 +48,6 @@ class ButtonPanel extends Panel implements ActionListener {
add(new Label(" Speed:"));
timeScaleText = new TextField(5);
timeScaleText.setText("1.0");
- timeScaleText.setEnabled(false);
- timeScaleText.setEditable(false);
add(timeScaleText);
timeScaleText.addActionListener(this);
}
@@ -88,6 +86,8 @@ class ButtonPanel extends Panel implements ActionListener {
player.setPaused(playButton.getLabel().equals("Pause"));
} else if (evt.getSource() == posText) {
player.setPos(Integer.parseInt(posText.getText()));
+ } else if (evt.getSource() == timeScaleText) {
+ player.setSpeed(Double.parseDouble(timeScaleText.getText()));
}
}
}
diff --git a/java/src/com/tightvnc/rfbplayer/FbsInputStream.java b/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
index d47953ab..7baa145f 100644
--- a/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
+++ b/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
@@ -30,6 +30,7 @@ class FbsInputStream extends InputStream {
protected long timeOffset;
protected long seekOffset;
protected boolean paused;
+ protected double playbackSpeed;
protected byte[] buffer;
protected int bufferSize;
@@ -54,6 +55,7 @@ class FbsInputStream extends InputStream {
timeOffset = 0;
seekOffset = -1;
paused = false;
+ playbackSpeed = 1.0;
byte[] b = new byte[12];
readFully(b);
@@ -101,6 +103,7 @@ class FbsInputStream extends InputStream {
timeOffset = 0;
seekOffset = -1;
paused = false;
+ playbackSpeed = 1.0;
buffer = null;
bufferSize = 0;
@@ -111,19 +114,29 @@ class FbsInputStream extends InputStream {
// Methods providing additional functionality.
//
- public long getTimeOffset()
+ public synchronized long getTimeOffset()
{
- return timeOffset;
+ return (long)(timeOffset * playbackSpeed);
}
public synchronized void setTimeOffset(long pos)
{
// FIXME: Seeking works only in paused mode.
paused = true;
- seekOffset = pos;
+ seekOffset = (long)(pos / playbackSpeed);
notify();
}
+ public synchronized void setSpeed(double newSpeed)
+ {
+ timeOffset = (long)(timeOffset * playbackSpeed / newSpeed);
+ startTime = System.currentTimeMillis() - timeOffset;
+ if (isSeeking()) {
+ seekOffset = (long)(seekOffset * playbackSpeed / newSpeed);
+ }
+ playbackSpeed = newSpeed;
+ }
+
public boolean isSeeking()
{
return (seekOffset >= 0);
@@ -146,7 +159,7 @@ class FbsInputStream extends InputStream {
// Methods for internal use.
//
- private boolean fillBuffer() throws IOException
+ private synchronized boolean fillBuffer() throws IOException
{
waitWhilePaused();
@@ -156,8 +169,7 @@ class FbsInputStream extends InputStream {
buffer = new byte[realSize];
readFully(buffer);
bufferPos = 0;
-
- timeOffset = readUnsigned32();
+ timeOffset = (long)(readUnsigned32() / playbackSpeed);
}
if (bufferSize < 0 || timeOffset < 0) {
@@ -179,11 +191,9 @@ class FbsInputStream extends InputStream {
if (timeDiff <= 0) {
break;
}
- synchronized(this) {
- try {
- wait(timeDiff);
- } catch (InterruptedException e) {
- }
+ try {
+ wait(timeDiff);
+ } catch (InterruptedException e) {
}
waitWhilePaused();
}
diff --git a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
index 0d870060..55ac5686 100644
--- a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
+++ b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
@@ -191,10 +191,15 @@ public class RfbPlayer extends java.applet.Applet
}
}
+ public void setSpeed(double speed) {
+ fbsStream.setSpeed(speed);
+ }
+
public void setPos(int pos) {
fbsStream.setTimeOffset(pos * 1000);
}
+
public void updatePos() {
if (showControls)
buttonPanel.setPos((int)(fbsStream.getTimeOffset() / 1000));