Skip to content

Commit

Permalink
Start SmartPointers (#1679)
Browse files Browse the repository at this point in the history
* Refactor to fix #1671

* Add GUI/NonGUI mode to info page

* Do not show lock config, if in non-UI mode

* Updae Changelog

* Correct includes

* Ensure key member initialization - RGB Channels

* Ensure key member initialization - WebServer

* Update RGBChannels

* Fix initialization order

* Fix key when inserting new logger in LoggerMap,
Prepare logBuffer-JSON snapshot view in LoggerManager,
Increase buffered loglines to 500

* Fix Memory leak in GrabberWrapper

* Fix Memory leak in BlackBorderProcessor

* Fix Memory leak in BlackBorderProcessor

* use ninja generator under macos

* Fix BGEffectHandler destruction

* Fix Mdns code

* Clear list after applying qDeleteAll

* Fix deletion of CecHandler

* Fix memory leak caused by wrong buffer allocation

* Remove extra pixel consistently

* Change mDNS to Qt SmartPointers

* Correct removal

* Fix usage of _width/_height (they are the output resolution, not the screen resolution)
That avoids unnecessary resizing of the output image with every transferFrame call

* Move main non Thread Objects to Smart Pointers

* Refactor Hyperion Daemon unsing smartpointers

* Correction

* Correct typos/ align text

* Fix startGrabberDispmanx

* Fix startGrabberDispmanx

* Address CodeQL finding

* Create Screen grabbers via Template

* Fix typo

* Change way of logging

* Revert change

* Address deprecation warning

* Correct auto screen grabber evaluation

---------

Co-authored-by: Paulchen-Panther <[email protected]>
  • Loading branch information
Lord-Grey and Paulchen-Panther authored Feb 25, 2024
1 parent bb40778 commit 31df065
Show file tree
Hide file tree
Showing 65 changed files with 796 additions and 905 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ Note: The wizard will configure an APIv2 capable bridge always with Entertainmen
- Changed default build from Stretch to Buster
- Support Qt 6.7, Update to Protobuf 25.1, Update mbedTLS to v3.4.0, Update flatbuffers to v23.5.26
- Use C++17 standard as default
- Started using SmartPointers (#981)
- Added Pull Request (PR) installation script, allowing users to test development builds savely on Linux
- Fixed missing include limits in QJsonSchemaChecker - Thanks @Portisch
- Fixed dependencies for deb packages in Debian Bookworm (#1579) - Thanks @hg42, @Psirus
Expand Down
9 changes: 7 additions & 2 deletions include/events/EventHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,9 @@ class EventHandler : public QObject
Q_OBJECT

public:
EventHandler();
~EventHandler() override;

static EventHandler* getInstance();
static QScopedPointer<EventHandler>& getInstance();

public slots:

Expand All @@ -40,6 +39,12 @@ public slots:
Logger * _log {};

private:
EventHandler();
EventHandler(const EventHandler&) = delete;
EventHandler& operator=(const EventHandler&) = delete;

static QScopedPointer<EventHandler> instance;

bool _isSuspended;
bool _isIdle;
};
Expand Down
9 changes: 9 additions & 0 deletions include/grabber/amlogic/AmlogicWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ class AmlogicWrapper : public GrabberWrapper
{
Q_OBJECT
public:

static constexpr const char* GRABBERTYPE = "Amlogic";

///
/// Constructs the Amlogic frame grabber
///
Expand All @@ -22,6 +25,12 @@ class AmlogicWrapper : public GrabberWrapper
AmlogicWrapper(int pixelDecimation=GrabberWrapper::DEFAULT_PIXELDECIMATION,
int updateRate_Hz=GrabberWrapper::DEFAULT_RATE_HZ);

///
/// Constructs the Amlogic frame grabber from configuration settings
///
AmlogicWrapper(const QJsonDocument& grabberConfig = QJsonDocument());


public slots:
///
/// Performs a single frame grab and computes the led-colors
Expand Down
7 changes: 7 additions & 0 deletions include/grabber/directx/DirectXWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
class DirectXWrapper: public GrabberWrapper
{
public:
static constexpr const char* GRABBERTYPE = "DirectX";

///
/// Constructs the DirectX grabber with a specified grab size and update rate.
///
Expand All @@ -25,6 +27,11 @@ class DirectXWrapper: public GrabberWrapper
int cropTop=0, int cropBottom=0
);

///
/// Constructs the QT frame grabber from configuration settings
///
DirectXWrapper(const QJsonDocument& grabberConfig = QJsonDocument());

///
/// Destructor of this DirectX grabber. Releases any claimed resources.
///
Expand Down
4 changes: 2 additions & 2 deletions include/grabber/dispmanx/DispmanxFrameGrabber.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ class DispmanxFrameGrabber : public Grabber
///
/// @brief Determine if the bcm library is available.
///
/// @return Zero, on success (i.e. library is present), else negative
/// @return true, on success (i.e. library is present), else false
///
bool isAvailable();
bool isAvailable() override;

///
/// @brief Opens the input device.
Expand Down
10 changes: 8 additions & 2 deletions include/grabber/dispmanx/DispmanxWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ class DispmanxWrapper: public GrabberWrapper
{
Q_OBJECT
public:

static constexpr const char* GRABBERTYPE = "DispmanX";

///
/// Constructs the dispmanx frame grabber with a specified grab size and update rate.
///
Expand All @@ -23,9 +26,12 @@ class DispmanxWrapper: public GrabberWrapper
int pixelDecimation=GrabberWrapper::DEFAULT_PIXELDECIMATION
);

bool screenInit();
///
/// Constructs the QT frame grabber from configuration settings
///
DispmanxWrapper(const QJsonDocument& grabberConfig = QJsonDocument());

bool available = false;
bool screenInit();

///
/// Starts the grabber which produces led values with the specified update rate
Expand Down
6 changes: 3 additions & 3 deletions include/grabber/framebuffer/FramebufferFrameGrabber.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class FramebufferFrameGrabber : public Grabber
///
/// @param[in] device The framebuffer device name/path
///
FramebufferFrameGrabber(const QString & device="/dev/fb0");
FramebufferFrameGrabber(int deviceIdx = 0);

~FramebufferFrameGrabber() override;

Expand Down Expand Up @@ -45,7 +45,7 @@ class FramebufferFrameGrabber : public Grabber
///@brief Set new width and height for framegrabber, overwrite Grabber.h implementation
bool setWidthHeight(int width, int height) override;

QString getPath() const {return _fbDevice;}
QString getPath() const {return QString("/dev/fb%1").arg(_input);}

///
/// @brief Discover Framebuffer screens available (for configuration).
Expand All @@ -62,7 +62,7 @@ class FramebufferFrameGrabber : public Grabber
bool closeDevice();
bool getScreenInfo();

/// Framebuffer device e.g. /dev/fb0
// /// Framebuffer device e.g. /dev/fb0
QString _fbDevice;

int _fbfd;
Expand Down
12 changes: 10 additions & 2 deletions include/grabber/framebuffer/FramebufferWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,26 @@ class FramebufferWrapper: public GrabberWrapper
{
Q_OBJECT
public:

static constexpr const char* GRABBERTYPE = "FB";

///
/// Constructs the framebuffer frame grabber with a specified grab size and update rate.
///
/// @param[in] updateRate_Hz The image grab rate [Hz]
/// @param[in] device Framebuffer device name/path
/// @param[in] deviceIdx Framebuffer device index
/// @param[in] pixelDecimation Decimation factor for image [pixels]
///
FramebufferWrapper( int updateRate_Hz=GrabberWrapper::DEFAULT_RATE_HZ,
const QString & device = "/dev/fb0",
int deviceIdx = 0,
int pixelDecimation=GrabberWrapper::DEFAULT_PIXELDECIMATION
);

///
/// Constructs the QT frame grabber from configuration settings
///
FramebufferWrapper(const QJsonDocument& grabberConfig = QJsonDocument());

public slots:
///
/// Performs a single frame grab and computes the led-colors
Expand Down
8 changes: 8 additions & 0 deletions include/grabber/osx/OsxWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ class OsxWrapper: public GrabberWrapper
{
Q_OBJECT
public:

static constexpr const char* GRABBERTYPE = "OSX";
///
/// Constructs the osx frame grabber with a specified grab size and update rate.
///
Expand All @@ -23,6 +25,12 @@ class OsxWrapper: public GrabberWrapper
int pixelDecimation=GrabberWrapper::DEFAULT_PIXELDECIMATION
);

///
/// Constructs the QT frame grabber from configuration settings
///
OsxWrapper(const QJsonDocument& grabberConfig = QJsonDocument());


public slots:
///
/// Performs a single frame grab and computes the led-colors
Expand Down
12 changes: 11 additions & 1 deletion include/grabber/qt/QtWrapper.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#pragma once

#include <QJsonObject>
#include <QStringLiteral>

#include <hyperion/GrabberWrapper.h>
#include <grabber/qt/QtGrabber.h>

Expand All @@ -8,7 +11,10 @@
///
class QtWrapper: public GrabberWrapper
{

public:
static constexpr const char* GRABBERTYPE = "Qt";

///
/// Constructs the QT frame grabber with a specified grab size and update rate.
///
Expand All @@ -19,7 +25,6 @@ class QtWrapper: public GrabberWrapper
/// @param[in] cropRight Remove from right [pixels]
/// @param[in] cropTop Remove from top [pixels]
/// @param[in] cropBottom Remove from bottom [pixels]

///
QtWrapper( int updateRate_Hz=GrabberWrapper::DEFAULT_RATE_HZ,
int display=0,
Expand All @@ -28,6 +33,11 @@ class QtWrapper: public GrabberWrapper
int cropTop=0, int cropBottom=0
);

///
/// Constructs the QT frame grabber from configuration settings
///
QtWrapper(const QJsonDocument& grabberConfig = QJsonDocument());

///
/// Starts the grabber which produces led values with the specified update rate
///
Expand Down
8 changes: 7 additions & 1 deletion include/grabber/x11/X11Wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@
#undef None
#endif


///
/// The X11Wrapper uses an instance of the X11Grabber to obtain ImageRgb's from the displayed content.
/// This ImageRgb is processed to a ColorRgb for each led and committed to the attached Hyperion.
///
class X11Wrapper: public GrabberWrapper
{
public:
static constexpr const char* GRABBERTYPE = "X11";

///
/// Constructs the X11 frame grabber with a specified grab size and update rate.
///
Expand All @@ -27,6 +28,11 @@ class X11Wrapper: public GrabberWrapper
int cropTop=0, int cropBottom=0
);

///
/// Constructs the X11 frame grabber from configuration settings
///
X11Wrapper(const QJsonDocument& grabberConfig = QJsonDocument());

///
/// Destructor of this frame grabber. Releases any claimed resources.
///
Expand Down
18 changes: 18 additions & 0 deletions include/grabber/xcb/XcbWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,30 @@
class XcbWrapper: public GrabberWrapper
{
public:

static constexpr const char* GRABBERTYPE = "XCB";

///
/// Constructs the XCB frame grabber with a specified grab size and update rate.
///
/// @param[in] updateRate_Hz The image grab rate [Hz]
/// @param[in] pixelDecimation Decimation factor for image [pixels]
/// @param[in] cropLeft Remove from left [pixels]
/// @param[in] cropRight Remove from right [pixels]
/// @param[in] cropTop Remove from top [pixels]
/// @param[in] cropBottom Remove from bottom [pixels]
///
XcbWrapper( int updateRate_Hz=GrabberWrapper::DEFAULT_RATE_HZ,
int pixelDecimation=GrabberWrapper::DEFAULT_PIXELDECIMATION,
int cropLeft=0, int cropRight=0,
int cropTop=0, int cropBottom=0
);

///
/// Constructs the XCB frame grabber from configuration settings
///
XcbWrapper(const QJsonDocument& grabberConfig = QJsonDocument());

~XcbWrapper() override;

public slots:
Expand Down
12 changes: 12 additions & 0 deletions include/hyperion/Grabber.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,13 @@ class Grabber : public QObject

QString getGrabberName() const { return _grabberName; }

///
/// @brief Determine if the grabber is available.
///
/// @return true, on success (i.e. library is present), else false
///
virtual bool isAvailable() { return _isAvailable; }

public slots:

virtual void handleEvent(Event event) {}
Expand Down Expand Up @@ -168,10 +175,15 @@ protected slots:

// Device states

/// Is the device available?
bool _isAvailable;

/// Is the device enabled?
bool _isEnabled;

/// Is the device in error state and stopped?
bool _isDeviceInError;



};
15 changes: 15 additions & 0 deletions include/hyperion/GrabberWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@ class GrabberWrapper : public QObject
{
Q_OBJECT
public:

static constexpr const char* GRABBERTYPE = "Base";

template<typename GrabberType>
static QSharedPointer<GrabberType> create(const QJsonDocument& config) {
return QSharedPointer<GrabberType>::create(config);
}

GrabberWrapper(const QString& grabberName, Grabber * ggrabber,int updateRate_Hz = DEFAULT_RATE_HZ);

~GrabberWrapper() override;
Expand Down Expand Up @@ -71,6 +79,11 @@ class GrabberWrapper : public QObject
///
virtual bool isActive() const;

virtual bool isAvailable() { return _isAvailable; }


QString getName() { return _grabberName; }

///
/// @brief Get active grabber name
/// @param hyperionInd The instance index
Expand Down Expand Up @@ -195,4 +208,6 @@ private slots:

/// The image used for grabbing frames
Image<ColorRgb> _image;

bool _isAvailable;
};
17 changes: 7 additions & 10 deletions include/mdns/MdnsBrowser.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <QByteArray>
#include <QMap>
#include <QJsonArray>
#include <QScopedPointer>
#include <QSharedPointer>

// Utility includes
Expand All @@ -39,21 +40,17 @@ class MdnsBrowser : public QObject
///
// Run MdnsBrowser as singleton
MdnsBrowser(QObject* parent = nullptr);
~MdnsBrowser() override;

public:

static MdnsBrowser& getInstance()
{
static MdnsBrowser* instance = new MdnsBrowser();
return *instance;
}

MdnsBrowser(const MdnsBrowser&) = delete;
MdnsBrowser(MdnsBrowser&&) = delete;
MdnsBrowser& operator=(const MdnsBrowser&) = delete;
MdnsBrowser& operator=(MdnsBrowser&&) = delete;

static QScopedPointer<MdnsBrowser> instance;

public:
~MdnsBrowser() override;
static QScopedPointer<MdnsBrowser>& getInstance();

QMdnsEngine::Service getFirstService(const QByteArray& serviceType, const QString& filter = ".*", const std::chrono::milliseconds waitTime = DEFAULT_DISCOVER_TIMEOUT) const;
QJsonArray getServicesDiscoveredJson(const QByteArray& serviceType, const QString& filter = ".*", const std::chrono::milliseconds waitTime = std::chrono::milliseconds{ 0 }) const;

Expand Down
Loading

0 comments on commit 31df065

Please sign in to comment.