cleanups in the VNC plugin

Change-Id: Iac930d3c7036b285ff5003691bfecf6071795d54
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
This commit is contained in:
Lars Knoll 2015-12-17 09:45:44 +01:00 committed by Andy Nichols
parent a1dbf346e6
commit ef4db5a347
3 changed files with 10 additions and 163 deletions

View File

@ -450,6 +450,7 @@ void QRfbRawEncoder::write()
const int bytesPerPixel = server->clientBytesPerPixel(); const int bytesPerPixel = server->clientBytesPerPixel();
// create a region from the dirty rects and send the region's merged rects. // create a region from the dirty rects and send the region's merged rects.
// ### use the tile map again
QRegion rgn = server->screen()->dirtyRegion; QRegion rgn = server->screen()->dirtyRegion;
server->screen()->clearDirty(); server->screen()->clearDirty();
QT_VNC_DEBUG() << "QRfbRawEncoder::write()" << rgn; QT_VNC_DEBUG() << "QRfbRawEncoder::write()" << rgn;
@ -496,25 +497,6 @@ void QRfbRawEncoder::write()
const uchar *screendata = screenImage.scanLine(rect.y) const uchar *screendata = screenImage.scanLine(rect.y)
+ rect.x * screenImage.depth() / 8; + rect.x * screenImage.depth() / 8;
#if 0 //ndef QT_NO_QWS_CURSOR
// hardware cursors must be blended with the screen memory
const bool doBlendCursor = qt_screencursor
&& !server->hasClientCursor()
&& qt_screencursor->isAccelerated();
QImage tileImage;
if (doBlendCursor) {
const QRect cursorRect = qt_screencursor->boundingRect()
.translated(-server->screen()->offset());
if (tileRect.intersects(cursorRect)) {
tileImage = screenImage.copy(tileRect);
blendCursor(tileImage,
tileRect.translated(server->screen()->offset()));
screendata = tileImage.bits();
linestep = tileImage.bytesPerLine();
}
}
#endif // QT_NO_QWS_CURSOR
if (server->doPixelConversion()) { if (server->doPixelConversion()) {
const int bufferSize = rect.w * rect.h * bytesPerPixel; const int bufferSize = rect.w * rect.h * bytesPerPixel;
if (bufferSize > buffer.size()) if (bufferSize > buffer.size())
@ -541,7 +523,6 @@ void QRfbRawEncoder::write()
socket->flush(); socket->flush();
} }
QVncClientCursor::QVncClientCursor(QVncServer *s) QVncClientCursor::QVncClientCursor(QVncServer *s)
: server(s) : server(s)
{ {
@ -703,9 +684,7 @@ void QVncServer::newConnection()
QT_VNC_DEBUG() << "new Connection" << thread(); QT_VNC_DEBUG() << "new Connection" << thread();
// #### qvnc_screen->setPowerState(QPlatformScreen::PowerStateOn);
// if (!qvnc_screen->screen() && !qvnc_screen->noDisablePainting)
// QWSServer::instance()->enablePainting(true);
} }
void QVncServer::readClient() void QVncServer::readClient()
@ -976,46 +955,22 @@ void QVncServer::setEncodings()
supportHextile = true; supportHextile = true;
if (encoder) if (encoder)
break; break;
#if 0
switch (qvnc_screen->depth()) { switch (qvnc_screen->depth()) {
#ifdef QT_QWS_DEPTH_8
case 8: case 8:
encoder = new QRfbHextileEncoder<quint8>(this); encoder = new QRfbHextileEncoder<quint8>(this);
break; break;
#endif
#ifdef QT_QWS_DEPTH_12
case 12:
encoder = new QRfbHextileEncoder<qrgb444>(this);
break;
#endif
#ifdef QT_QWS_DEPTH_15
case 15:
encoder = new QRfbHextileEncoder<qrgb555>(this);
break;
#endif
#ifdef QT_QWS_DEPTH_16
case 16: case 16:
encoder = new QRfbHextileEncoder<quint16>(this); encoder = new QRfbHextileEncoder<quint16>(this);
break; break;
#endif
#ifdef QT_QWS_DEPTH_18
case 18:
encoder = new QRfbHextileEncoder<qrgb666>(this);
break;
#endif
#ifdef QT_QWS_DEPTH_24
case 24:
encoder = new QRfbHextileEncoder<qrgb888>(this);
break;
#endif
#ifdef QT_QWS_DEPTH_32
case 32: case 32:
encoder = new QRfbHextileEncoder<quint32>(this); encoder = new QRfbHextileEncoder<quint32>(this);
break; break;
#endif
default: default:
break; break;
} }
QT_VNC_DEBUG("QVncServer::setEncodings: using hextile"); QT_VNC_DEBUG("QVncServer::setEncodings: using hextile");
#endif
break; break;
case ZRLE: case ZRLE:
supportZRLE = true; supportZRLE = true;
@ -1129,22 +1084,10 @@ bool QVncServer::pixelConversionNeeded() const
case 32: case 32:
case 24: case 24:
return false; return false;
case 18:
return (pixelFormat.redBits == 6
&& pixelFormat.greenBits == 6
&& pixelFormat.blueBits == 6);
case 16: case 16:
return (pixelFormat.redBits == 5 return (pixelFormat.redBits == 5
&& pixelFormat.greenBits == 6 && pixelFormat.greenBits == 6
&& pixelFormat.blueBits == 5); && pixelFormat.blueBits == 5);
case 15:
return (pixelFormat.redBits == 5
&& pixelFormat.greenBits == 5
&& pixelFormat.blueBits == 5);
case 12:
return (pixelFormat.redBits == 4
&& pixelFormat.greenBits == 4
&& pixelFormat.blueBits == 4);
} }
return true; return true;
} }
@ -1210,25 +1153,10 @@ void QVncServer::convertPixels(char *dst, const char *src, int count) const
const int bytesPerPixel = (pixelFormat.bitsPerPixel + 7) / 8; const int bytesPerPixel = (pixelFormat.bitsPerPixel + 7) / 8;
// nibble = 0;
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
int r, g, b; int r, g, b;
switch (screendepth) { switch (screendepth) {
#if 0
case 4: {
if (!nibble) {
r = ((*src) & 0x0f) << 4;
} else {
r = (*src) & 0xf0;
src++;
}
nibble = !nibble;
g = b = r;
break;
}
#endif
case 8: { case 8: {
QRgb rgb = qvnc_screen->image()->colorTable()[int(*src)]; QRgb rgb = qvnc_screen->image()->colorTable()[int(*src)];
r = qRed(rgb); r = qRed(rgb);
@ -1237,26 +1165,6 @@ void QVncServer::convertPixels(char *dst, const char *src, int count) const
src++; src++;
break; break;
} }
#ifdef QT_QWS_DEPTH_12
case 12: {
quint32 p = quint32(*reinterpret_cast<const qrgb444*>(src));
r = qRed(p);
g = qGreen(p);
b = qBlue(p);
src += sizeof(qrgb444);
break;
}
#endif
#ifdef QT_QWS_DEPTH_15
case 15: {
quint32 p = quint32(*reinterpret_cast<const qrgb555*>(src));
r = qRed(p);
g = qGreen(p);
b = qBlue(p);
src += sizeof(qrgb555);
break;
}
#endif
case 16: { case 16: {
quint16 p = *reinterpret_cast<const quint16*>(src); quint16 p = *reinterpret_cast<const quint16*>(src);
#if Q_BYTE_ORDER == Q_BIG_ENDIAN #if Q_BYTE_ORDER == Q_BIG_ENDIAN
@ -1272,26 +1180,6 @@ void QVncServer::convertPixels(char *dst, const char *src, int count) const
src += sizeof(quint16); src += sizeof(quint16);
break; break;
} }
#ifdef QT_QWS_DEPTH_18
case 18: {
quint32 p = quint32(*reinterpret_cast<const qrgb666*>(src));
r = qRed(p);
g = qGreen(p);
b = qBlue(p);
src += sizeof(qrgb666);
break;
}
#endif
#ifdef QT_QWS_DEPTH_24
case 24: {
quint32 p = quint32(*reinterpret_cast<const qrgb888*>(src));
r = qRed(p);
g = qGreen(p);
b = qBlue(p);
src += sizeof(qrgb888);
break;
}
#endif
case 32: { case 32: {
quint32 p = *reinterpret_cast<const quint32*>(src); quint32 p = *reinterpret_cast<const quint32*>(src);
r = (p >> 16) & 0xff; r = (p >> 16) & 0xff;
@ -1321,7 +1209,7 @@ void QVncServer::convertPixels(char *dst, const char *src, int count) const
(b << pixelFormat.blueShift); (b << pixelFormat.blueShift);
if (sameEndian || pixelFormat.bitsPerPixel == 8) { if (sameEndian || pixelFormat.bitsPerPixel == 8) {
memcpy(dst, &pixel, bytesPerPixel); // XXX: do a simple for-loop instead? memcpy(dst, &pixel, bytesPerPixel);
dst += bytesPerPixel; dst += bytesPerPixel;
continue; continue;
} }
@ -1385,6 +1273,7 @@ void QVncServer::checkUpdate()
encoder->write(); encoder->write();
wantUpdate = false; wantUpdate = false;
} }
// ### re-enable map support
// if (dirtyMap()->numDirty > 0) { // if (dirtyMap()->numDirty > 0) {
// if (encoder) // if (encoder)
// encoder->write(); // encoder->write();
@ -1402,9 +1291,8 @@ void QVncServer::discardClient()
delete qvnc_cursor; delete qvnc_cursor;
qvnc_cursor = 0; qvnc_cursor = 0;
#endif #endif
// ###
// if (!qvnc_screen->screen() && !qvnc_screen->noDisablePainting && QWSServer::instance()) qvnc_screen->setPowerState(QPlatformScreen::PowerStateOff);
// QWSServer::instance()->enablePainting(false);
} }
inline QImage QVncServer::screenImage() const inline QImage QVncServer::screenImage() const

View File

@ -60,9 +60,8 @@ class QVncScreen;
class QVncServer; class QVncServer;
class QVncClientCursor; class QVncClientCursor;
// This fits with the VNC hextile messages
#define MAP_TILE_SIZE 16 #define MAP_TILE_SIZE 16
#define MAP_WIDTH 1280 / MAP_TILE_SIZE
#define MAP_HEIGHT 1024 / MAP_TILE_SIZE
class QVncDirtyMap class QVncDirtyMap
{ {

View File

@ -70,41 +70,15 @@ bool QVncScreen::initialize()
mCursor = new QFbCursor(this); mCursor = new QFbCursor(this);
switch (depth()) { switch (depth()) {
#if 1//def QT_QWS_DEPTH_32
case 32: case 32:
dirty = new QVncDirtyMapOptimized<quint32>(this); dirty = new QVncDirtyMapOptimized<quint32>(this);
break; break;
#endif
//#if 1//def QT_QWS_DEPTH_24
// case 24:
// dirty = new QVncDirtyMapOptimized<qrgb888>(this);
// break;
//#endif
//#if 1//def QT_QWS_DEPTH_24
// case 18:
// dirty = new QVncDirtyMapOptimized<qrgb666>(this);
// break;
//#endif
#if 1//def QT_QWS_DEPTH_24
case 16: case 16:
dirty = new QVncDirtyMapOptimized<quint16>(this); dirty = new QVncDirtyMapOptimized<quint16>(this);
break; break;
#endif
//#if 1//def QT_QWS_DEPTH_24
// case 15:
// dirty = new QVncDirtyMapOptimized<qrgb555>(this);
// break;
//#endif
//#if 1//def QT_QWS_DEPTH_24
// case 12:
// dirty = new QVncDirtyMapOptimized<qrgb444>(this);
// break;
//#endif
#if 1//def QT_QWS_DEPTH_24
case 8: case 8:
dirty = new QVncDirtyMapOptimized<quint8>(this); dirty = new QVncDirtyMapOptimized<quint8>(this);
break; break;
#endif
default: default:
qWarning("QVNCScreen::initDevice: No support for screen depth %d", qWarning("QVNCScreen::initDevice: No support for screen depth %d",
depth()); depth());
@ -112,17 +86,7 @@ bool QVncScreen::initialize()
return false; return false;
} }
setPowerState(PowerStateOff);
// const bool ok = QProxyScreen::initDevice();
//#ifndef QT_NO_QWS_CURSOR
// qt_screencursor = new QVNCCursor(this);
//#endif
// if (QProxyScreen::screen())
// return ok;
// // Disable painting if there is only 1 display and nothing is attached to the VNC server
// if (!d_ptr->noDisablePainting)
// QWSServer::instance()->enablePainting(false);
return true; return true;
} }
@ -136,10 +100,6 @@ QRegion QVncScreen::doRedraw()
return touched; return touched;
dirtyRegion += touched; dirtyRegion += touched;
QVector<QRect> rects = touched.rects();
for (int i = 0; i < rects.size(); i++) {
// ### send to client
}
vncServer->setDirty(); vncServer->setDirty();
return touched; return touched;
} }