From 3b98cbf4a375588c1133f8692ba79fafaa599c54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bodn=C3=A1r=20Zsombor?= <bodzsoaa@sch.bme.hu> Date: Fri, 19 Feb 2021 20:05:14 +0100 Subject: [PATCH] Use latest Qt 5 version Latest Qt 5 is more feature complete than Qt 6 --- CMakeLists.txt | 2 +- conanfile.py | 2 +- src/CMakeLists.txt | 8 ++++---- src/muebreceiver.cc | 6 +++--- src/muebtransmitter.cc | 22 ++++++++++++++++------ src/muebtransmitter_p.h | 27 +++++++++++++++++++++++++++ 6 files changed, 52 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0aee6e5..ed55411 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 2a430de..9d04c69 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 978fc1a..e6ea989 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 1794589..79fff6c 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 b08bf25..bc98b87 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 19e4a95..963c54c 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_ -- GitLab