diff -upr vnc-4_1_2-unixsrc/common/rfb/CMsgReaderV3.cxx ../vnc-4_1_2-unixsrc-new/common/rfb/CMsgReaderV3.cxx --- vnc-4_1_2-unixsrc/common/rfb/CMsgReaderV3.cxx 2006-05-15 17:56:20.000000000 +0100 +++ ../vnc-4_1_2-unixsrc-new/common/rfb/CMsgReaderV3.cxx 2008-02-13 14:13:05.000000000 +0000 @@ -74,6 +74,13 @@ void CMsgReaderV3::readMsg() case pseudoEncodingDesktopSize: handler->setDesktopSize(w, h); break; + case pseudoEncodingWMVi: + { + PixelFormat pf; + pf.read(is); + handler->setPixelFormat(pf); + } + break; case pseudoEncodingCursor: readSetCursor(w, h, Point(x,y)); break; diff -upr vnc-4_1_2-unixsrc/common/rfb/CMsgWriter.cxx ../vnc-4_1_2-unixsrc-new/common/rfb/CMsgWriter.cxx --- vnc-4_1_2-unixsrc/common/rfb/CMsgWriter.cxx 2006-05-15 17:56:20.000000000 +0100 +++ ../vnc-4_1_2-unixsrc-new/common/rfb/CMsgWriter.cxx 2008-02-13 14:13:32.000000000 +0000 @@ -64,6 +64,8 @@ void CMsgWriter::writeSetEncodings(int p encodings[nEncodings++] = pseudoEncodingCursor; if (cp->supportsDesktopResize) encodings[nEncodings++] = pseudoEncodingDesktopSize; + if (cp->supportsWMVi) + encodings[nEncodings++] = pseudoEncodingWMVi; if (Decoder::supported(preferredEncoding)) { encodings[nEncodings++] = preferredEncoding; } diff -upr vnc-4_1_2-unixsrc/common/rfb/ConnParams.cxx ../vnc-4_1_2-unixsrc-new/common/rfb/ConnParams.cxx --- vnc-4_1_2-unixsrc/common/rfb/ConnParams.cxx 2006-05-15 17:56:20.000000000 +0100 +++ ../vnc-4_1_2-unixsrc-new/common/rfb/ConnParams.cxx 2008-02-13 14:14:14.000000000 +0000 @@ -88,6 +88,7 @@ void ConnParams::setEncodings(int nEncod useCopyRect = false; supportsLocalCursor = false; supportsDesktopResize = false; + supportsWMVi = false; currentEncoding_ = encodingRaw; for (int i = nEncodings-1; i >= 0; i--) { @@ -99,6 +100,8 @@ void ConnParams::setEncodings(int nEncod supportsLocalCursor = true; else if (encodings[i] == pseudoEncodingDesktopSize) supportsDesktopResize = true; + else if (encodings[i] == pseudoEncodingWMVi) + supportsWMVi = true; else if (encodings[i] <= encodingMax && Encoder::supported(encodings[i])) currentEncoding_ = encodings[i]; } diff -upr vnc-4_1_2-unixsrc/common/rfb/ConnParams.h ../vnc-4_1_2-unixsrc-new/common/rfb/ConnParams.h --- vnc-4_1_2-unixsrc/common/rfb/ConnParams.h 2006-05-15 17:56:20.000000000 +0100 +++ ../vnc-4_1_2-unixsrc-new/common/rfb/ConnParams.h 2008-02-13 14:14:33.000000000 +0000 @@ -71,6 +71,7 @@ namespace rfb { bool supportsLocalCursor; bool supportsDesktopResize; + bool supportsWMVi; private: diff -upr vnc-4_1_2-unixsrc/common/rfb/encodings.h ../vnc-4_1_2-unixsrc-new/common/rfb/encodings.h --- vnc-4_1_2-unixsrc/common/rfb/encodings.h 2006-05-15 17:56:20.000000000 +0100 +++ ../vnc-4_1_2-unixsrc-new/common/rfb/encodings.h 2008-02-13 14:14:58.000000000 +0000 @@ -31,6 +31,7 @@ namespace rfb { const unsigned int pseudoEncodingCursor = 0xffffff11; const unsigned int pseudoEncodingDesktopSize = 0xffffff21; + const unsigned int pseudoEncodingWMVi = 0x574D5669; int encodingNum(const char* name); const char* encodingName(unsigned int num); diff -upr vnc-4_1_2-unixsrc/unix/vncviewer/CConn.cxx ../vnc-4_1_2-unixsrc-new/unix/vncviewer/CConn.cxx --- vnc-4_1_2-unixsrc/unix/vncviewer/CConn.cxx 2006-05-15 17:56:20.000000000 +0100 +++ ../vnc-4_1_2-unixsrc-new/unix/vncviewer/CConn.cxx 2008-02-13 14:15:51.000000000 +0000 @@ -75,6 +75,7 @@ CConn::CConn(Display* dpy_, int argc_, c autoSelect = false; } cp.supportsDesktopResize = true; + cp.supportsWMVi = true; cp.supportsLocalCursor = useLocalCursor; initMenu(); @@ -260,6 +261,17 @@ void CConn::setDesktopSize(int w, int h) } } +// setPixelFormat is called upon receving a WMVi message +void CConn::setPixelFormat(const PixelFormat &pf) { + cp.setPF(pf); + if (desktop) { + char str[256]; + desktop->setPF(pf); + desktop->getPF().print(str, 256); + vlog.info("Using pixel format %s",str); + } + } + // framebufferUpdateEnd() is called at the end of an update. // For each rectangle, the FdInStream will have timed the speed // of the connection, allowing us to select format and encoding diff -upr vnc-4_1_2-unixsrc/unix/vncviewer/CConn.h ../vnc-4_1_2-unixsrc-new/unix/vncviewer/CConn.h --- vnc-4_1_2-unixsrc/unix/vncviewer/CConn.h 2006-05-15 17:56:20.000000000 +0100 +++ ../vnc-4_1_2-unixsrc-new/unix/vncviewer/CConn.h 2008-02-13 14:16:17.000000000 +0000 @@ -26,6 +26,7 @@ #include #include #include +#include #include #include "TXWindow.h" @@ -74,6 +75,7 @@ public: rfb::CSecurity* getCSecurity(int secType); void serverInit(); void setDesktopSize(int w, int h); + void setPixelFormat(const rfb::PixelFormat& pf); void setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs); void bell(); void serverCutText(const char* str, int len);