Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Start SmartPointers #1679

Merged
merged 38 commits into from
Feb 25, 2024
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
1b4df36
Refactor to fix #1671
Lord-Grey Dec 23, 2023
49cfca7
Add GUI/NonGUI mode to info page
Lord-Grey Dec 23, 2023
a833308
Do not show lock config, if in non-UI mode
Lord-Grey Dec 23, 2023
2d5df04
Updae Changelog
Lord-Grey Dec 23, 2023
870062a
Correct includes
Lord-Grey Dec 23, 2023
757d84c
Ensure key member initialization - RGB Channels
Lord-Grey Dec 27, 2023
ca88678
Ensure key member initialization - WebServer
Lord-Grey Dec 27, 2023
75c5eea
Update RGBChannels
Lord-Grey Dec 27, 2023
1166c76
Fix initialization order
Lord-Grey Dec 28, 2023
1cc8783
Fix key when inserting new logger in LoggerMap,
Lord-Grey Dec 28, 2023
592e61d
Fix Memory leak in GrabberWrapper
Lord-Grey Dec 28, 2023
0c87869
Fix Memory leak in BlackBorderProcessor
Lord-Grey Dec 28, 2023
dc564e9
Fix Memory leak in BlackBorderProcessor
Lord-Grey Dec 28, 2023
dad1d8b
use ninja generator under macos
Paulchen-Panther Dec 28, 2023
6aacac7
Fix BGEffectHandler destruction
Lord-Grey Dec 28, 2023
e71185a
Fix Mdns code
Lord-Grey Dec 29, 2023
40d74fa
Clear list after applying qDeleteAll
Lord-Grey Dec 29, 2023
fcee3d0
Fix deletion of CecHandler
Lord-Grey Dec 29, 2023
89ec43b
Fix memory leak caused by wrong buffer allocation
Lord-Grey Dec 29, 2023
ccacad9
Remove extra pixel consistently
Lord-Grey Dec 30, 2023
e8f19e2
Change mDNS to Qt SmartPointers
Lord-Grey Dec 30, 2023
77f7a6b
Correct removal
Lord-Grey Dec 31, 2023
6df4550
Fix usage of _width/_height (they are the output resolution, not the …
Lord-Grey Jan 1, 2024
26102ca
Move main non Thread Objects to Smart Pointers
Lord-Grey Jan 1, 2024
4630d9b
Refactor Hyperion Daemon unsing smartpointers
Lord-Grey Jan 3, 2024
76c54bf
Merge remote-tracking branch 'origin/master' into smartp
Lord-Grey Jan 3, 2024
8007b3c
Correction
Lord-Grey Jan 3, 2024
f6955ea
Correct typos/ align text
Lord-Grey Jan 3, 2024
1bb77e7
Fix startGrabberDispmanx
Lord-Grey Jan 4, 2024
8b04621
Fix startGrabberDispmanx
Lord-Grey Jan 4, 2024
524ff6a
Address CodeQL finding
Lord-Grey Jan 6, 2024
3cf1d4c
Create Screen grabbers via Template
Lord-Grey Jan 7, 2024
f6a6519
Fix typo
Lord-Grey Jan 7, 2024
be34366
Change way of logging
Lord-Grey Jan 7, 2024
fae8fe1
Revert change
Lord-Grey Jan 7, 2024
09637f6
Address deprecation warning
Lord-Grey Jan 7, 2024
6ecc2b0
Merge remote-tracking branch 'origin/master' into smartp
Lord-Grey Jan 14, 2024
2ae1e8a
Correct auto screen grabber evaluation
Lord-Grey Jan 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ Note: The wizard will configure an APIv2 capable bridge always with Entertainmen
- MDNSBrower - Fixed, if timeout while resolving host occurs
- Non image updates ignored blacklisted LEDs (#1634)
- Fixed that Windows OsEvents failed in non-GUI mode (#1671)
- Addressed serious (#1425) and some smaller memory leaks

##### LED-Devices

Expand All @@ -79,6 +80,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
11 changes: 8 additions & 3 deletions include/blackborder/BlackBorderProcessor.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
#pragma once
#ifndef BLACK_BORDER_PROCESSOR_H
#define BLACK_BORDER_PROCESSOR_H

#include <memory>

// QT includes
#include <QJsonObject>
Expand All @@ -24,7 +27,7 @@ namespace hyperion
Q_OBJECT
public:
BlackBorderProcessor(Hyperion* hyperion, QObject* parent);
~BlackBorderProcessor() override;

///
/// Return the current (detected) border
/// @return The current border
Expand Down Expand Up @@ -141,7 +144,7 @@ namespace hyperion
QString _detectionMode;

/// The black-border detector
BlackBorderDetector* _detector;
std::unique_ptr<BlackBorderDetector> _detector;

/// The current detected border
BlackBorder _currentBorder;
Expand All @@ -162,3 +165,5 @@ namespace hyperion

};
} // end namespace hyperion

#endif // BLACK_BORDER_PROCESSOR_H
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
4 changes: 2 additions & 2 deletions include/grabber/qt/QtGrabber.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,8 @@ private slots:
int _display;
int _numberOfSDisplays;

int _calculatedWidth;
int _calculatedHeight;
int _screenWidth;
int _screenHeight;
int _src_x;
int _src_y;
int _src_x_max;
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
20 changes: 10 additions & 10 deletions include/grabber/x11/X11Grabber.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class X11Grabber : public Grabber , public QAbstractNativeEventFilter
///
/// @brief Apply new width/height values, overwrite Grabber.h implementation as X11 doesn't use width/height, just pixelDecimation to calc dimensions
///
bool setWidthHeight(int width, int height) override { return true; }
bool setWidthHeight(int /*width*/, int /*height*/) override { return true; }

///
/// @brief Apply new pixelDecimation
Expand Down Expand Up @@ -109,19 +109,19 @@ class X11Grabber : public Grabber , public QAbstractNativeEventFilter
Picture _srcPicture;
Picture _dstPicture;

int _XRandREventBase;
int _xRandREventBase;

XTransform _transform;

unsigned _calculatedWidth;
unsigned _calculatedHeight;
unsigned _src_x;
unsigned _src_y;
int _screenWidth;
int _screenHeight;
int _src_x;
int _src_y;

bool _XShmAvailable;
bool _XShmPixmapAvailable;
bool _XRenderAvailable;
bool _XRandRAvailable;
bool _xShmAvailable;
bool _xShmPixmapAvailable;
bool _xRenderAvailable;
bool _xRandRAvailable;
bool _isWayland;

Logger * _logger;
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
10 changes: 10 additions & 0 deletions include/hyperion/BGEffectHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,16 @@ class BGEffectHandler : public QObject
handleSettingsUpdate(settings::BGEFFECT, _hyperion->getSetting(settings::BGEFFECT));
}

///
/// @brief Disconnect from connected signals
/// Disconnect should be done before other priorities invoke methods during shutdown
///
void disconnect()
{
QObject::disconnect(_prioMuxer, &PriorityMuxer::prioritiesChanged, nullptr, nullptr);
QObject::disconnect(_hyperion, nullptr, nullptr, nullptr);
}

///
/// @brief Check, if background effect processing is enabled.
/// @return True, background effect processing is enabled.
Expand Down
Loading
Loading