]> source.dussan.org Git - tigervnc.git/commitdiff
Added new option for player:
authorgeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Sun, 20 Feb 2005 16:47:01 +0000 (16:47 +0000)
committergeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Sun, 20 Feb 2005 16:47:01 +0000 (16:47 +0000)
Forces colour depth for the rfb session. Supports 8, 16, 24 bit mode.
It is useful option when the session file has wrong server init message.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@201 3789f03b-4d11-0410-bbf8-ca57d06f2519

rfbplayer/rfbplayer.cxx
rfbplayer/rfbplayer.h

index 6a2ce63c951b1e4d60a5541fe0125382a9dfc132..65c268ed520b28f5b5c806ac40a78653a8affc01 100644 (file)
@@ -48,6 +48,8 @@ char usage_msg[] =
  "usage: rfbplayer <options> <filename>\n"
  "Command-line options:\n"
  "  -help         \t- Provide usage information.\n"
+ "  -depth <bit>  \t- Forces the color depth for the session."
+ "                \t  Supports 8, 16 and 24 bit mode."
  "  -speed <value>\t- Sets playback speed, where 1 is normal speed,\n"
  "                \t  is double speed, 0.5 is half speed. Default: 1.0.\n"
  "  -pos <ms>     \t- Sets initial time position in the session file,\n"
@@ -64,6 +66,11 @@ char usage_msg[] =
 #define DEFAULT_PLAYER_WIDTH 640
 #define DEFAULT_PLAYER_HEIGHT 480 
 
+#define DEPTH_AUTO 0
+#define DEPTH8_RGB332 8
+#define DEPTH16_RGB655 16
+#define DEPTH24_RGB888 24
+
 #define ID_TOOLBAR 500
 #define ID_PLAY 510
 #define ID_PAUSE 520
@@ -73,7 +80,6 @@ char usage_msg[] =
 #define ID_POS_TRACKBAR 560
 #define ID_SPEED_UPDOWN 570
 
-
 //
 // -=- RfbPlayerClass
 
@@ -211,13 +217,15 @@ RfbFrameClass frameClass;
 // -=- RfbPlayer instance implementation
 //
 
-RfbPlayer::RfbPlayer(char *_fileName, long _initTime = 0, double _playbackSpeed = 1.0,
+RfbPlayer::RfbPlayer(char *_fileName, int _depth = DEPTH_AUTO, 
+                     long _initTime = 0, double _playbackSpeed = 1.0, 
                      bool _autoplay = false, bool _acceptBell = false)
-: RfbProto(_fileName), initTime(_initTime), playbackSpeed(_playbackSpeed),
-  autoplay(_autoplay), buffer(0), client_size(0, 0, 32, 32), 
-  window_size(0, 0, 32, 32), cutText(0), seekMode(false), fileName(_fileName), 
-  serverInitTime(0), lastPos(0), timeStatic(0), speedEdit(0), posTrackBar(0),
-  speedUpDown(0), acceptBell(_acceptBell), rfbReader(0), sessionTimeMs(0),
+: RfbProto(_fileName), colourDepth(_depth), initTime(_initTime), 
+  playbackSpeed(_playbackSpeed), autoplay(_autoplay), buffer(0), 
+  client_size(0, 0, 32, 32), window_size(0, 0, 32, 32), cutText(0), 
+  seekMode(false), fileName(_fileName), serverInitTime(0), lastPos(0), 
+  timeStatic(0), speedEdit(0), posTrackBar(0), speedUpDown(0), 
+  acceptBell(_acceptBell), rfbReader(0), sessionTimeMs(0),
   sliderDraging(false), sliderStepMs(0), loopPlayback(false) {
 
   CTRL_BAR_HEIGHT = 28;
@@ -839,7 +847,22 @@ void RfbPlayer::serverInit() {
     throw rdr::Exception("This version plays only true color session!");
 
   // Set the session pixel format
-  buffer->setPF(cp.pf()); 
+  switch (colourDepth) {
+  case DEPTH_AUTO: 
+    break;
+  case DEPTH8_RGB332: 
+    cp.setPF(PixelFormat(8,8,0,1,7,7,3,0,3,6)); 
+    break;
+  case DEPTH16_RGB655: 
+    cp.setPF(PixelFormat(16,16,0,1,63,31,31,0,6,11)); 
+    break;
+  case DEPTH24_RGB888: 
+    cp.setPF(PixelFormat(32,24,0,1,255,255,255,16,8,0)); 
+    break;
+  default: 
+    throw rdr::Exception("This color depth is not supported!");
+  }
+  buffer->setPF(cp.pf());
 
   // If the window is not maximised then resize it
   if (!(GetWindowLong(getMainHandle(), GWL_STYLE) & WS_MAXIMIZE))
@@ -1117,6 +1140,7 @@ void programUsage() {
 
 double playbackSpeed = 1.0;
 long initTime = -1;
+int depth = DEPTH_AUTO;
 bool autoplay = false;
 char *fileName = 0;
 bool print_usage = false;
@@ -1135,6 +1159,16 @@ bool processParams(int argc, char* argv[]) {
       return true;
     }
 
+    if ((strcasecmp(argv[i], "-depth") == 0) ||
+        (strcasecmp(argv[i], "/depth") == 0) && (i < argc-1)) {
+      depth = atoi(argv[++i]);
+      if (depth < 0) {
+        return false;
+      }
+      continue;
+    }
+
+
     if ((strcasecmp(argv[i], "-speed") == 0) ||
         (strcasecmp(argv[i], "/speed") == 0) && (i < argc-1)) {
       playbackSpeed = atof(argv[++i]);
@@ -1195,7 +1229,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prevInst, char* cmdLine, int cmdSho
   // Create the player
   RfbPlayer *player = NULL;
   try {
-    player = new RfbPlayer(fileName, initTime, playbackSpeed, autoplay, 
+    player = new RfbPlayer(fileName, depth, initTime, playbackSpeed, autoplay, 
                            acceptBell);
   } catch (rdr::Exception e) {
     MessageBox(NULL, e.str(), e.type(), MB_OK | MB_ICONERROR);
index 4124e690259b9a381d8130f6bfc2b04b7833af34..070cd9d95e3d4336de95cbfdcb1066081fa6c1f1 100644 (file)
@@ -31,8 +31,8 @@ using namespace rfb::win32;
 
 class RfbPlayer : public RfbProto {
   public:
-    RfbPlayer(char *filename, long _pos, double s_peed, bool autoplay
-              bool _acceptBell);
+    RfbPlayer(char *filename, int _depth, long _pos, double _speed
+              bool _autoplay, bool _acceptBell);
     ~RfbPlayer();
 
     // -=- Window Message handling
@@ -170,6 +170,7 @@ class RfbPlayer : public RfbProto {
 
     // The player's parameters
     bool autoplay;
+    int colourDepth;
     double playbackSpeed;
     long initTime;
     long serverInitTime;