From 4c0569fc601b7c2a9cc2b74fd290f32b35bf9fe6 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Sat, 23 Nov 2013 13:55:21 -0800 Subject: [PATCH] removing compression from VoxelNodeData to eventually move it into VoxelPacket where it belongs --- interface/src/VoxelPacketProcessor.cpp | 15 +--- .../src/VoxelNodeData.cpp | 82 +------------------ .../voxel-server-library/src/VoxelNodeData.h | 10 +-- .../src/VoxelSendThread.cpp | 12 +-- libraries/voxels/src/VoxelPacket.cpp | 26 ++++++ libraries/voxels/src/VoxelTree.cpp | 2 +- 6 files changed, 39 insertions(+), 108 deletions(-) diff --git a/interface/src/VoxelPacketProcessor.cpp b/interface/src/VoxelPacketProcessor.cpp index 52f992d56b..93ae74cd99 100644 --- a/interface/src/VoxelPacketProcessor.cpp +++ b/interface/src/VoxelPacketProcessor.cpp @@ -58,20 +58,7 @@ void VoxelPacketProcessor::processPacket(sockaddr& senderAddress, unsigned char* app->_environment.parseData(&senderAddress, packetData, messageLength); } else { app->_voxels.setDataSourceUUID(voxelServer->getUUID()); - - // these packets are commpressed... - if (VOXEL_PACKETS_COMPRESSED) { - int numBytesPacketHeader = numBytesForPacketHeader(packetData); - QByteArray compressedData((const char*)packetData + numBytesPacketHeader, - messageLength - numBytesPacketHeader); - QByteArray uncompressedData = qUncompress(compressedData); - QByteArray uncompressedPacket((const char*)packetData, numBytesPacketHeader); - uncompressedPacket.append(uncompressedData); - - app->_voxels.parseData((unsigned char*)uncompressedPacket.data(), uncompressedPacket.size()); - } else { - app->_voxels.parseData(packetData, messageLength); - } + app->_voxels.parseData(packetData, messageLength); app->_voxels.setDataSourceUUID(QUuid()); } } diff --git a/libraries/voxel-server-library/src/VoxelNodeData.cpp b/libraries/voxel-server-library/src/VoxelNodeData.cpp index 1d42173e7d..d54d388431 100644 --- a/libraries/voxel-server-library/src/VoxelNodeData.cpp +++ b/libraries/voxel-server-library/src/VoxelNodeData.cpp @@ -30,11 +30,7 @@ VoxelNodeData::VoxelNodeData(Node* owningNode) : _lodChanged(false), _lodInitialized(false) { - if (VOXEL_PACKETS_COMPRESSED) { - _voxelPacketAvailableBytes = MAX_VOXEL_PACKET_SIZE * UNCOMPRESSED_SIZE_MULTIPLE; - } else { - _voxelPacketAvailableBytes = MAX_VOXEL_PACKET_SIZE; - } + _voxelPacketAvailableBytes = MAX_VOXEL_PACKET_SIZE; _voxelPacket = new unsigned char[_voxelPacketAvailableBytes]; _voxelPacketAt = _voxelPacket; _lastVoxelPacket = new unsigned char[_voxelPacketAvailableBytes]; @@ -108,89 +104,15 @@ void VoxelNodeData::resetVoxelPacket() { int numBytesPacketHeader = populateTypeAndVersion(_voxelPacket, voxelPacketType); _voxelPacketAt = _voxelPacket + numBytesPacketHeader; - if (VOXEL_PACKETS_COMPRESSED) { - _voxelPacketAvailableBytes = (MAX_VOXEL_PACKET_SIZE * UNCOMPRESSED_SIZE_MULTIPLE) - numBytesPacketHeader; - compressPacket(); - } else { - _voxelPacketAvailableBytes = MAX_VOXEL_PACKET_SIZE - numBytesPacketHeader; - } + _voxelPacketAvailableBytes = MAX_VOXEL_PACKET_SIZE - numBytesPacketHeader; _voxelPacketWaiting = false; } -bool VoxelNodeData::willFit(unsigned char* buffer, int bytes) { - bool wouldFit = false; - if (VOXEL_PACKETS_COMPRESSED) { - int uncompressedLength = getPacketLengthUncompressed(); - const int MAX_COMPRESSION = 9; - // we only want to compress the data payload, not the message header - int numBytesPacketHeader = numBytesForPacketHeader(_voxelPacket); - - // start with the current uncompressed data - QByteArray uncompressedTestData((const char*)_voxelPacket + numBytesPacketHeader, - uncompressedLength - numBytesPacketHeader); - - // append this next buffer... - uncompressedTestData.append((const char*)buffer, bytes); - - // test compress it - QByteArray compressedData = qCompress(uncompressedTestData, MAX_COMPRESSION); - - wouldFit = (compressedData.size() + numBytesPacketHeader) <= MAX_VOXEL_PACKET_SIZE; - - /* - if (!wouldFit) { - printf("would not fit... previous size: %d, buffer size: %d, would be:%d MAX_VOXEL_PACKET_SIZE: %d\n", - getPacketLength(), bytes, (compressedData.size() + numBytesPacketHeader), MAX_VOXEL_PACKET_SIZE); - } else { - printf("would fit... previous size: %d, buffer size: %d, would be:%d MAX_VOXEL_PACKET_SIZE: %d\n", - getPacketLength(), bytes, (compressedData.size() + numBytesPacketHeader), MAX_VOXEL_PACKET_SIZE); - } - */ - } else { - wouldFit = bytes <= _voxelPacketAvailableBytes; - } - return wouldFit; -} - void VoxelNodeData::writeToPacket(unsigned char* buffer, int bytes) { memcpy(_voxelPacketAt, buffer, bytes); _voxelPacketAvailableBytes -= bytes; _voxelPacketAt += bytes; _voxelPacketWaiting = true; - compressPacket(); -} - -const unsigned char* VoxelNodeData::getPacket() const { - if (VOXEL_PACKETS_COMPRESSED) { - return (const unsigned char*)_compressedPacket.constData(); - } - return _voxelPacket; -} - -int VoxelNodeData::getPacketLength() const { - if (VOXEL_PACKETS_COMPRESSED) { - return _compressedPacket.size(); - } - return getPacketLengthUncompressed(); -} - -int VoxelNodeData::getPacketLengthUncompressed() const { - if (VOXEL_PACKETS_COMPRESSED) { - return (MAX_VOXEL_PACKET_SIZE * UNCOMPRESSED_SIZE_MULTIPLE) - _voxelPacketAvailableBytes; - } - return MAX_VOXEL_PACKET_SIZE - _voxelPacketAvailableBytes; -} - -void VoxelNodeData::compressPacket() { - int uncompressedLength = getPacketLengthUncompressed(); - const int MAX_COMPRESSION = 9; - // we only want to compress the data payload, not the message header - int numBytesPacketHeader = numBytesForPacketHeader(_voxelPacket); - QByteArray compressedData = qCompress(_voxelPacket+numBytesPacketHeader, - uncompressedLength-numBytesPacketHeader, MAX_COMPRESSION); - _compressedPacket.clear(); - _compressedPacket.append((const char*)_voxelPacket, numBytesPacketHeader); - _compressedPacket.append(compressedData); } VoxelNodeData::~VoxelNodeData() { diff --git a/libraries/voxel-server-library/src/VoxelNodeData.h b/libraries/voxel-server-library/src/VoxelNodeData.h index 92ae5fc6c8..b429ec5a90 100644 --- a/libraries/voxel-server-library/src/VoxelNodeData.h +++ b/libraries/voxel-server-library/src/VoxelNodeData.h @@ -29,11 +29,10 @@ public: void resetVoxelPacket(); // resets voxel packet to after "V" header void writeToPacket(unsigned char* buffer, int bytes); // writes to end of packet - bool willFit(unsigned char* buffer, int bytes); // tests to see if the bytes will fit + bool willFit(unsigned char* buffer, int bytes) { return (bytes <= _voxelPacketAvailableBytes); } - const unsigned char* getPacket() const; - int getPacketLength() const; - int getPacketLengthUncompressed() const; + const unsigned char* getPacket() const { return _voxelPacket; } + int getPacketLength() const { return MAX_VOXEL_PACKET_SIZE - _voxelPacketAvailableBytes; } bool isPacketWaiting() const { return _voxelPacketWaiting; } @@ -112,9 +111,6 @@ private: float _lastClientVoxelSizeScale; bool _lodChanged; bool _lodInitialized; - - QByteArray _compressedPacket; - void compressPacket(); }; #endif /* defined(__hifi__VoxelNodeData__) */ diff --git a/libraries/voxel-server-library/src/VoxelSendThread.cpp b/libraries/voxel-server-library/src/VoxelSendThread.cpp index cb96fd1570..c0d6b90e4a 100644 --- a/libraries/voxel-server-library/src/VoxelSendThread.cpp +++ b/libraries/voxel-server-library/src/VoxelSendThread.cpp @@ -112,14 +112,14 @@ int VoxelSendThread::handlePacketSend(Node* node, VoxelNodeData* nodeData, int& int thisWastedBytes = MAX_PACKET_SIZE - statsMessageLength; // the statsMessageLength at this point includes data ::totalWastedBytes += thisWastedBytes; - ::totalUncompressed += nodeData->getPacketLengthUncompressed(); + ::totalUncompressed += nodeData->getPacketLength(); ::totalCompressed += nodeData->getPacketLength(); ::totalPackets++; if (debug) { qDebug("line: %d - Adding stats to packet [%d]: uncompress size:%d [%d], compressed size:%d [%d] thisWastedBytes:%d [%d]\n", __LINE__, totalPackets, - nodeData->getPacketLengthUncompressed(), ::totalUncompressed, + nodeData->getPacketLength(), ::totalUncompressed, nodeData->getPacketLength(), ::totalCompressed, thisWastedBytes, ::totalWastedBytes); } @@ -156,14 +156,14 @@ int VoxelSendThread::handlePacketSend(Node* node, VoxelNodeData* nodeData, int& thisWastedBytes = MAX_PACKET_SIZE - nodeData->getPacketLength(); ::totalWastedBytes += thisWastedBytes; - ::totalUncompressed += nodeData->getPacketLengthUncompressed(); + ::totalUncompressed += nodeData->getPacketLength(); ::totalCompressed += nodeData->getPacketLength(); ::totalPackets++; if (debug) { qDebug("line: %d - Sending packet [%d]: uncompress size:%d [%d], compressed size:%d [%d] thisWastedBytes:%d [%d]\n", __LINE__, totalPackets, - nodeData->getPacketLengthUncompressed(), ::totalUncompressed, + nodeData->getPacketLength(), ::totalUncompressed, nodeData->getPacketLength(), ::totalCompressed, thisWastedBytes, ::totalWastedBytes); } @@ -179,14 +179,14 @@ int VoxelSendThread::handlePacketSend(Node* node, VoxelNodeData* nodeData, int& int thisWastedBytes = MAX_PACKET_SIZE - nodeData->getPacketLength(); ::totalWastedBytes += thisWastedBytes; - ::totalUncompressed += nodeData->getPacketLengthUncompressed(); + ::totalUncompressed += nodeData->getPacketLength(); ::totalCompressed += nodeData->getPacketLength(); ::totalPackets++; if (debug) { qDebug("line: %d - Sending packet [%d]: uncompress size:%d [%d], compressed size:%d [%d] thisWastedBytes:%d [%d]\n", __LINE__, totalPackets, - nodeData->getPacketLengthUncompressed(), ::totalUncompressed, + nodeData->getPacketLength(), ::totalUncompressed, nodeData->getPacketLength(), ::totalCompressed, thisWastedBytes, ::totalWastedBytes); } diff --git a/libraries/voxels/src/VoxelPacket.cpp b/libraries/voxels/src/VoxelPacket.cpp index e11ce46f51..68739ae65e 100644 --- a/libraries/voxels/src/VoxelPacket.cpp +++ b/libraries/voxels/src/VoxelPacket.cpp @@ -129,3 +129,29 @@ bool VoxelPacket::appendColor(rgbColor color) { return success; } +/*** +void VoxelPacket::compressPacket() { + int uncompressedLength = getPacketLengthUncompressed(); + const int MAX_COMPRESSION = 9; + // we only want to compress the data payload, not the message header + int numBytesPacketHeader = numBytesForPacketHeader(_voxelPacket); + QByteArray compressedData = qCompress(_voxelPacket+numBytesPacketHeader, + uncompressedLength-numBytesPacketHeader, MAX_COMPRESSION); + _compressedPacket.clear(); + _compressedPacket.append((const char*)_voxelPacket, numBytesPacketHeader); + _compressedPacket.append(compressedData); +} + +void VoxelPacket::uncompressPacket() { + int numBytesPacketHeader = numBytesForPacketHeader(packetData); + QByteArray compressedData((const char*)packetData + numBytesPacketHeader, + messageLength - numBytesPacketHeader); + QByteArray uncompressedData = qUncompress(compressedData); + QByteArray uncompressedPacket((const char*)packetData, numBytesPacketHeader); + uncompressedPacket.append(uncompressedData); + //app->_voxels.parseData((unsigned char*)uncompressedPacket.data(), uncompressedPacket.size()); +} +***/ + + + diff --git a/libraries/voxels/src/VoxelTree.cpp b/libraries/voxels/src/VoxelTree.cpp index c9f2d4b044..c499973831 100644 --- a/libraries/voxels/src/VoxelTree.cpp +++ b/libraries/voxels/src/VoxelTree.cpp @@ -1247,7 +1247,7 @@ int VoxelTree::encodeTreeBitstreamRecursion(VoxelNode* node, unsigned char childrenExistInTreeBits = 0; unsigned char childrenExistInPacketBits = 0; unsigned char childrenColoredBits = 0; - const int BYTES_PER_COLOR = 3; + const int BYTES_PER_COLOR = 3; // Make our local buffer large enough to handle writing at this level in case we need to. int thisLevelKey = packet->startLevel();