Implemented new "Speed" parameter which allows to set initial playback
speed.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2514 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/java/src/com/tightvnc/rfbplayer/ButtonPanel.java b/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
index 222c519..0a67090 100644
--- a/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
+++ b/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
@@ -47,7 +47,7 @@
 
     add(new Label(" Speed:"));
     timeScaleText = new TextField(5);
-    timeScaleText.setText("1.0");
+    timeScaleText.setText(String.valueOf(player.getSpeed()));
     add(timeScaleText);
     timeScaleText.addActionListener(this);
   }
@@ -87,7 +87,11 @@
     } else if (evt.getSource() == posText) {
       player.setPos(Integer.parseInt(posText.getText()));
     } else if (evt.getSource() == timeScaleText) {
-      player.setSpeed(Double.parseDouble(timeScaleText.getText()));
+      double speed = Double.parseDouble(timeScaleText.getText());
+      if (speed <= 0.0)
+	speed = 1.0;
+      timeScaleText.setText(String.valueOf(speed));
+      player.setSpeed(speed);
     }
   }
 }
diff --git a/java/src/com/tightvnc/rfbplayer/README b/java/src/com/tightvnc/rfbplayer/README
index 1661652..67a28d2 100644
--- a/java/src/com/tightvnc/rfbplayer/README
+++ b/java/src/com/tightvnc/rfbplayer/README
@@ -58,6 +58,15 @@
     coalesce several small updates into one drawing operation, improving CPU
     usage. Set this parameter to 0 to disable deferred updates.
 
+--> "Speed"
+
+    Value: positive fixed-point or floating-point number.
+    Default: "1.0".
+
+    Sets playback speed where 1 is normal speed, 2 is double speed,
+    and 0.5 is half speed etc. Both number formats like 0.2 and 2e-1
+    are acceptable.
+
 
 Licensing Terms
 ===============
diff --git a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
index 55ac568..a47220a 100644
--- a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
+++ b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
@@ -60,6 +60,7 @@
 
   String sessionURL;
   long initialTimeOffset;
+  double playbackSpeed;
   boolean showControls;
   int deferScreenUpdates;
 
@@ -161,6 +162,7 @@
 	try {
 	  setPaused(true);
 	  fbsStream.setTimeOffset(initialTimeOffset);
+	  fbsStream.setSpeed(playbackSpeed);
 	  vc.processNormalProtocol();
 	} catch (EOFException e) {
 	  initialTimeOffset = 0;
@@ -191,7 +193,12 @@
     }
   }
 
+  public double getSpeed() {
+    return playbackSpeed;
+  }
+
   public void setSpeed(double speed) {
+    playbackSpeed = speed;
     fbsStream.setSpeed(speed);
   }
 
@@ -216,6 +223,11 @@
 
     sessionURL = readParameter("URL", true);
     initialTimeOffset = readLongParameter("Position", 0);
+    if (initialTimeOffset < 0)
+      initialTimeOffset = 0;
+    playbackSpeed = readDoubleParameter("Speed", 1.0);
+    if (playbackSpeed <= 0.0)
+      playbackSpeed = 1.0;
 
     showControls = true;
     String str = readParameter("Show Controls", false);
@@ -272,6 +284,17 @@
     return result;
   }
 
+  double readDoubleParameter(String name, double defaultValue) {
+    String str = readParameter(name, false);
+    double result = defaultValue;
+    if (str != null) {
+      try {
+	result = Double.parseDouble(str);
+      } catch (NumberFormatException e) { }
+    }
+    return result;
+  }
+
   //
   // fatalError() - print out a fatal error message.
   //