diff --git a/CMakeLists.txt b/CMakeLists.txt index 0aee6e5d791997fb5f0d0570c2b4168491c0dcc4..ed554110ce4abfcb8e07191a3ee06ed85b56c44d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ conan_basic_setup() endif() find_package( - Qt6 + Qt5 COMPONENTS Core Gui Network Concurrent REQUIRED) diff --git a/conanfile.py b/conanfile.py index 2a430deb510226abedaa55ee50fec7d7eaeb5bef..9d04c69fbd0d2db4d46b54d785719f26394b3a63 100644 --- a/conanfile.py +++ b/conanfile.py @@ -12,7 +12,7 @@ class LibmuebConan(ConanFile): settings = "os", "compiler", "build_type", "arch" options = {"shared": [True], "fPIC": [True]} default_options = {"shared": True, "fPIC": True} - requires = "qt/[^6.0.0]@bincrafters/stable" + requires = "qt/[^5.15.2]" build_requires = "cmake/[^3.17.0]", "ninja/1.10.2" generators = "cmake" exports_sources = "CMakeLists.txt", "!CMakeLists.txt.user", "include/*", "src/*" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 978fc1a8ff477dc7a878631fc531243993367fab..e6ea989411fadf4858bc7c623a54c14301c0ef0b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -6,8 +6,8 @@ add_library( target_include_directories(muebtransmitter PUBLIC ../include/${PROJECT_NAME}) target_link_libraries( muebtransmitter - PUBLIC Qt6::Core Qt6::Gui - PRIVATE Qt6::Network Qt6::Concurrent) + PUBLIC Qt5::Core Qt5::Gui + PRIVATE Qt5::Network Qt5::Concurrent) target_compile_definitions(muebtransmitter PRIVATE LIBMUEB_LIBRARY) add_library( @@ -18,6 +18,6 @@ add_library( target_include_directories(muebreceiver PUBLIC ../include/${PROJECT_NAME}) target_link_libraries( muebreceiver - PUBLIC Qt6::Core Qt6::Gui - PRIVATE Qt6::Network) + PUBLIC Qt5::Core Qt5::Gui + PRIVATE Qt5::Network) target_compile_definitions(muebreceiver PRIVATE LIBMUEB_LIBRARY) diff --git a/src/muebreceiver.cc b/src/muebreceiver.cc index 179458985c57d27a39c63e7d89e5801d6529071c..79fff6c4ea1c385a26e93e7fe85fafb294a3e35b 100644 --- a/src/muebreceiver.cc +++ b/src/muebreceiver.cc @@ -31,18 +31,18 @@ void MuebReceiver::ReadPendingDatagrams() { while (d->socket.hasPendingDatagrams()) { if (d->socket.pendingDatagramSize() == d->configuration.packet_size()) { - QNetworkDatagram datagram = d->socket.receiveDatagram(); + const QNetworkDatagram &datagram = d->socket.receiveDatagram(); QByteArray data = datagram.data(); // Process datagram // Packet header check // Check protocol - if (data[0] != d->configuration.protocol_type()) { + if (data.at(0) != d->configuration.protocol_type()) { datagram_uncompress_error(); return; } - auto packet_number = data[1]; + auto packet_number = data.at(1); if (packet_number >= d->configuration.max_packet_number() || packet_number < 0) { datagram_uncompress_error(); diff --git a/src/muebtransmitter.cc b/src/muebtransmitter.cc index b08bf25f6f57134a254b676c7042154b060f1ee1..bc98b878c35a6400c029244b6458f26d8e3e2a15 100644 --- a/src/muebtransmitter.cc +++ b/src/muebtransmitter.cc @@ -22,12 +22,18 @@ void MuebTransmitter::SendFrame(libmueb::Frame frame) { QByteArray reduced_compressed_frame; // Frame color reduction and compression if (d->configuration_.color_depth() < 5) { + // FIXME Remove in Qt 6 reduced_compressed_frame = QtConcurrent::blockingMappedReduced<QByteArray>( frame.constBits(), frame.constBits() + frame.sizeInBytes(), - /* Reference: - * http://threadlocalmutex.com/?p=48 - * http://threadlocalmutex.com/?page_id=60 - */ + d->reduceColor, d->compressColor, + QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce); + + /* FIXME Add in Qt 6 + reduced_compressed_frame = QtConcurrent::blockingMappedReduced<QByteArray>( + frame.constBits(), frame.constBits() + frame.sizeInBytes(), + // Reference: + // http://threadlocalmutex.com/?p=48 + // http://threadlocalmutex.com/?page_id=60 [d](const uchar& color) -> uchar { if (d->configuration_.color_depth() == 3) { return (color * 225 + 4096) >> 13; @@ -49,7 +55,7 @@ void MuebTransmitter::SendFrame(libmueb::Frame frame) { msb = !msb; }, - QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce); + QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce);*/ } // No compression else { @@ -68,9 +74,13 @@ void MuebTransmitter::SendFrame(libmueb::Frame frame) { QByteArray data; data.append(d->configuration_.protocol_type()) .append(i /*packet number*/) - .append(reduced_compressed_frame.sliced( + .append(reduced_compressed_frame.mid( i * d->configuration_.packet_payload_size(), d->configuration_.packet_payload_size())); + /* FIXME in Qt6 + .append(reduced_compressed_frame.sliced( + i * d->configuration_.packet_payload_size(), + d->configuration_.packet_payload_size()));*/ d->datagram_.setData(data); d->socket_.writeDatagram(d->datagram_); diff --git a/src/muebtransmitter_p.h b/src/muebtransmitter_p.h index 19e4a95cfa1c18b6710df66be5906b3419b7ede3..963c54c515d05c246b7bb3632694bbc4c0bddfb2 100644 --- a/src/muebtransmitter_p.h +++ b/src/muebtransmitter_p.h @@ -29,6 +29,33 @@ class MuebTransmitterPrivate { QUdpSocket socket_; QNetworkDatagram datagram_; MuebTransmitter* q_ptr; + + // FIXME Remove in Qt 6 + std::function<uchar(const uchar&)> reduceColor = + [this](const uchar& color) -> uchar { + if (configuration_.color_depth() == 3) { + return (color * 225 + 4096) >> 13; + } else if (configuration_.color_depth() == 4) { + return (color * 15 + 135) >> 8; + } + + return color; + }; + + // FIXME Remove in Qt 6 + std::function<void(QByteArray&, const uchar&)> compressColor = + [this](QByteArray& compressed_colors, const uchar& color) { + static bool msb{true}; + + // Compress 2 color components into 1 byte + if (msb) { + compressed_colors.append(color << configuration_.factor()); + } else { + compressed_colors.back() = compressed_colors.back() | color; + } + + msb = !msb; + }; }; #endif // LIBMUEB_MUEBTRANSMITTER_P_H_