From 02158124de5a4903f43c590552f5b0831cd9126a Mon Sep 17 00:00:00 2001 From: Daniel Nachbaur Date: Thu, 24 May 2018 16:15:27 +0200 Subject: [PATCH] Fix receiving of uncompressed tiles --- deflect/server/ServerWorker.cpp | 1 + doc/Changelog.md | 2 ++ tests/cpp/ServerTests.cpp | 37 +++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/deflect/server/ServerWorker.cpp b/deflect/server/ServerWorker.cpp index f762129..04bd820 100644 --- a/deflect/server/ServerWorker.cpp +++ b/deflect/server/ServerWorker.cpp @@ -322,6 +322,7 @@ void ServerWorker::_handlePixelStreamMessage(const QByteArray& message) const auto data = message.data(); const auto params = reinterpret_cast(data); + tile.format = params->format; tile.x = params->x; tile.y = params->y; tile.width = params->width; diff --git a/doc/Changelog.md b/doc/Changelog.md index 19ac80b..2a04856 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -4,6 +4,8 @@ Changelog {#Changelog} ## Deflect 1.0 ### 1.0.1 (master) +* [199](https://github.com/BlueBrain/Deflect/pull/199): + Fix receiving of uncompressed tiles * [198](https://github.com/BlueBrain/Deflect/pull/198): Fix unreliable server-side stream close. diff --git a/tests/cpp/ServerTests.cpp b/tests/cpp/ServerTests.cpp index f0d3202..3dc8fb2 100644 --- a/tests/cpp/ServerTests.cpp +++ b/tests/cpp/ServerTests.cpp @@ -408,4 +408,41 @@ BOOST_AUTO_TEST_CASE(compressionErrorForBigNullImage) SAFE_BOOST_CHECK_THROW(stream.send(bigImage).get(), std::invalid_argument); } +BOOST_AUTO_TEST_CASE(uncompressedImages) +{ + const unsigned int width = 4; + const unsigned int height = 4; + const unsigned int byte = width * height * 4; + std::unique_ptr pixels(new uint8_t[byte]); + ::memset(pixels.get(), 0, byte); + deflect::ImageWrapper image(pixels.get(), width, height, deflect::RGBA); + image.compressionPolicy = deflect::COMPRESSION_OFF; + + const size_t expectedFrames = 5; + + setFrameReceivedCallback([&](deflect::server::FramePtr frame) { + SAFE_BOOST_REQUIRE_EQUAL(frame->tiles.size(), 1); + SAFE_BOOST_CHECK(frame->tiles[0].format == deflect::Format::rgba); + const auto dim = frame->computeDimensions(); + SAFE_BOOST_CHECK_EQUAL(dim.width(), width); + SAFE_BOOST_CHECK_EQUAL(dim.height(), height); + }); + + deflect::Stream stream(testStreamId.toStdString(), "localhost", + serverPort()); + BOOST_REQUIRE(stream.isConnected()); + + for (size_t i = 0; i < expectedFrames; ++i) + { + stream.sendAndFinish(image).wait(); + requestFrame(testStreamId); + + waitForMessage(); + + BOOST_CHECK_EQUAL(getReceivedFrames(), i + 1); + } + + BOOST_CHECK_EQUAL(getReceivedFrames(), expectedFrames); +} + BOOST_AUTO_TEST_SUITE_END()