aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>2005-02-20 16:47:01 +0000
committergeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>2005-02-20 16:47:01 +0000
commit193d8e4d989975be2810a5277bed09fad230b1a4 (patch)
treefd9b5ea532fa46df9d8c630cd673d06fa9c0c5dd
parent5f326fed774c240580b5b5a8978d62191f5100ce (diff)
downloadtigervnc-193d8e4d989975be2810a5277bed09fad230b1a4.tar.gz
tigervnc-193d8e4d989975be2810a5277bed09fad230b1a4.zip
Added new option for player:
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
-rw-r--r--rfbplayer/rfbplayer.cxx52
-rw-r--r--rfbplayer/rfbplayer.h5
2 files changed, 46 insertions, 11 deletions
diff --git a/rfbplayer/rfbplayer.cxx b/rfbplayer/rfbplayer.cxx
index 6a2ce63c..65c268ed 100644
--- a/rfbplayer/rfbplayer.cxx
+++ b/rfbplayer/rfbplayer.cxx
@@ -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);
diff --git a/rfbplayer/rfbplayer.h b/rfbplayer/rfbplayer.h
index 4124e690..070cd9d9 100644
--- a/rfbplayer/rfbplayer.h
+++ b/rfbplayer/rfbplayer.h
@@ -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;