From a2cf896663e538e1bc2f29a16368dca9b18a626f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bodn=C3=A1r=20Zsombor?= <bodzsoaa@sch.bme.hu> Date: Sat, 6 Feb 2021 14:34:34 +0100 Subject: [PATCH] Move MuebTransmitterPrivate to private header file --- src/CMakeLists.txt | 2 +- src/muebtransmitter.cc | 92 +------------------------------------- src/muebtransmitter_p.h | 97 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 92 deletions(-) create mode 100644 src/muebtransmitter_p.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d698c42..d422e1a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,7 +2,7 @@ add_library( muebtransmitter SHARED ${CMAKE_SOURCE_DIR}/include/libmueb/libmueb_global.h ${CMAKE_SOURCE_DIR}/include/libmueb/muebtransmitter.h configuration.h - muebtransmitter.cc configuration.cc) + muebtransmitter_p.h muebtransmitter.cc configuration.cc) target_include_directories(muebtransmitter PUBLIC ../include/${PROJECT_NAME}) target_link_libraries( muebtransmitter diff --git a/src/muebtransmitter.cc b/src/muebtransmitter.cc index cc3f025..6515461 100644 --- a/src/muebtransmitter.cc +++ b/src/muebtransmitter.cc @@ -1,96 +1,6 @@ #include "muebtransmitter.h" -#include <QByteArray> -#include <QDebug> -#include <QNetworkDatagram> -#include <QUdpSocket> -#include <QtConcurrent> - -#include "configuration.h" - -class MuebTransmitterPrivate { - Q_DECLARE_PUBLIC(MuebTransmitter) - Q_DISABLE_COPY(MuebTransmitterPrivate) - - public: - explicit MuebTransmitterPrivate(MuebTransmitter* q) - : datagram_(QByteArray(), configuration_.target_address(), - configuration_.broadcast_animation_port()), - q_ptr(q) { - qInfo().noquote() << "[MuebTransmitter] UDP Socket will send frame to" - << QString("%1:%2") - .arg(configuration_.target_address().toString()) - .arg(configuration_.broadcast_animation_port()); - } - - void SendFrame(libmueb::Frame frame) { - std::uint8_t packet_number{0}; - - QByteArray reduced_compressed_frame; - // Frame color reduction and compression - if (configuration_.color_depth() < 5) { - reduced_compressed_frame = - QtConcurrent::blockingMappedReduced<QByteArray>( - frame.constBits(), frame.constBits() + frame.sizeInBytes(), - /* Reference: - * http://threadlocalmutex.com/?p=48 - * http://threadlocalmutex.com/?page_id=60 - */ - [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; - }, - [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; - }, - QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce); - } - // No compression - else { - reduced_compressed_frame.setRawData( - reinterpret_cast<const char*>(frame.bits()), frame.sizeInBytes()); - } - - if (configuration_.max_packet_number() == 1) { - reduced_compressed_frame.insert(0, configuration_.protocol_type()) - .insert(1, packet_number); - - datagram_.setData(reduced_compressed_frame); - } else { - for (std::uint8_t i = 0; i < configuration_.max_packet_number(); ++i) { - QByteArray data; - data.append(configuration_.protocol_type()) - .append(packet_number++) - .append(reduced_compressed_frame.sliced( - i * configuration_.frame_fragment_size(), - configuration_.frame_fragment_size())); - - datagram_.setData(data); - } - } - - socket_.writeDatagram(datagram_); - } - - Configuration configuration_; - QUdpSocket socket_; - QNetworkDatagram datagram_; - MuebTransmitter* q_ptr; -}; +#include "muebtransmitter_p.h" MuebTransmitter::MuebTransmitter(QObject* parent) : QObject(parent), d_ptr_(new MuebTransmitterPrivate(this)) {} diff --git a/src/muebtransmitter_p.h b/src/muebtransmitter_p.h new file mode 100644 index 0000000..facfc11 --- /dev/null +++ b/src/muebtransmitter_p.h @@ -0,0 +1,97 @@ +#ifndef LIBMUEB_MUEBTRANSMITTER_P_H_ +#define LIBMUEB_MUEBTRANSMITTER_P_H_ + +#include <QByteArray> +#include <QDebug> +#include <QNetworkDatagram> +#include <QUdpSocket> +#include <QtConcurrent> + +#include "configuration.h" +#include "muebtransmitter.h" + +class MuebTransmitterPrivate { + Q_DECLARE_PUBLIC(MuebTransmitter) + Q_DISABLE_COPY(MuebTransmitterPrivate) + + public: + explicit MuebTransmitterPrivate(MuebTransmitter* q) + : datagram_(QByteArray(), configuration_.target_address(), + configuration_.broadcast_animation_port()), + q_ptr(q) { + qInfo().noquote() << "[MuebTransmitter] UDP Socket will send frame to" + << QString("%1:%2") + .arg(configuration_.target_address().toString()) + .arg(configuration_.broadcast_animation_port()); + } + + void SendFrame(libmueb::Frame frame) { + std::uint8_t packet_number{0}; + + QByteArray reduced_compressed_frame; + // Frame color reduction and compression + if (configuration_.color_depth() < 5) { + reduced_compressed_frame = + QtConcurrent::blockingMappedReduced<QByteArray>( + frame.constBits(), frame.constBits() + frame.sizeInBytes(), + /* Reference: + * http://threadlocalmutex.com/?p=48 + * http://threadlocalmutex.com/?page_id=60 + */ + [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; + }, + [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; + }, + QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce); + } + // No compression + else { + reduced_compressed_frame.setRawData( + reinterpret_cast<const char*>(frame.bits()), frame.sizeInBytes()); + } + + if (configuration_.max_packet_number() == 1) { + reduced_compressed_frame.insert(0, configuration_.protocol_type()) + .insert(1, packet_number); + + datagram_.setData(reduced_compressed_frame); + } else { + for (std::uint8_t i = 0; i < configuration_.max_packet_number(); ++i) { + QByteArray data; + data.append(configuration_.protocol_type()) + .append(packet_number++) + .append(reduced_compressed_frame.sliced( + i * configuration_.frame_fragment_size(), + configuration_.frame_fragment_size())); + + datagram_.setData(data); + } + } + + socket_.writeDatagram(datagram_); + } + + Configuration configuration_; + QUdpSocket socket_; + QNetworkDatagram datagram_; + MuebTransmitter* q_ptr; +}; + +#endif // LIBMUEB_MUEBTRANSMITTER_P_H_ -- GitLab