mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Start SmartPointers (#1679)
* 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 <16664240+Paulchen-Panther@users.noreply.github.com>
This commit is contained in:
@@ -2,13 +2,13 @@
|
||||
#include "FramebufferWrapper.h"
|
||||
|
||||
FramebufferWrapper::FramebufferWrapper( int updateRate_Hz,
|
||||
const QString & device,
|
||||
int deviceIdx,
|
||||
int pixelDecimation,
|
||||
int cropLeft, int cropRight,
|
||||
int cropTop, int cropBottom
|
||||
) :
|
||||
_timer(this),
|
||||
_grabber(device)
|
||||
_grabber(deviceIdx)
|
||||
{
|
||||
_grabber.setFramerate(updateRate_Hz);
|
||||
_grabber.setCropping(cropLeft, cropRight, cropTop, cropBottom);
|
||||
|
@@ -12,7 +12,7 @@ class FramebufferWrapper : public QObject
|
||||
public:
|
||||
|
||||
FramebufferWrapper( int updateRate_Hz=GrabberWrapper::DEFAULT_RATE_HZ,
|
||||
const QString & device = "/dev/fb0",
|
||||
int deviceIdx = 0,
|
||||
int pixelDecimation=GrabberWrapper::DEFAULT_PIXELDECIMATION,
|
||||
int cropLeft=0, int cropRight=0,
|
||||
int cropTop=0, int cropBottom=0
|
||||
|
@@ -50,7 +50,7 @@ int main(int argc, char ** argv)
|
||||
// create the option parser and initialize all parameters
|
||||
Parser parser("FrameBuffer capture application for Hyperion. Will automatically search a Hyperion server if -a option isn't used. Please note that if you have more than one server running it's more or less random which one will be used.");
|
||||
|
||||
Option & argDevice = parser.add<Option> ('d', "device", "Set the framebuffer device [default: %1]", "/dev/fb0");
|
||||
IntOption & argDeviceIdx = parser.add<IntOption> ('d', "deviceIdx", "Set the framebuffer device index [default: %1]", 0);
|
||||
|
||||
IntOption & argFps = parser.add<IntOption> ('f', "framerate", QString("Capture frame rate. Range %1-%2fps").arg(GrabberWrapper::DEFAULT_MIN_GRAB_RATE_HZ).arg(GrabberWrapper::DEFAULT_MAX_GRAB_RATE_HZ), QString::number(GrabberWrapper::DEFAULT_RATE_HZ), GrabberWrapper::DEFAULT_MIN_GRAB_RATE_HZ, GrabberWrapper::DEFAULT_MAX_GRAB_RATE_HZ);
|
||||
IntOption & argSizeDecimation = parser.add<IntOption> ('s', "size-decimator", "Decimation factor for the output image size [default=%1]", QString::number(GrabberWrapper::DEFAULT_PIXELDECIMATION), 1);
|
||||
@@ -88,7 +88,7 @@ int main(int argc, char ** argv)
|
||||
|
||||
FramebufferWrapper fbWrapper(
|
||||
argFps.getInt(parser),
|
||||
argDevice.value(parser),
|
||||
argDeviceIdx.getInt(parser),
|
||||
argSizeDecimation.getInt(parser),
|
||||
argCropLeft.getInt(parser),
|
||||
argCropRight.getInt(parser),
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,12 @@
|
||||
#pragma once
|
||||
#ifndef HYPERIOND_H
|
||||
#define HYPERIOND_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <QApplication>
|
||||
#include <QObject>
|
||||
#include <QJsonObject>
|
||||
#include <QScopedPointer>
|
||||
|
||||
#include <hyperion/HyperionIManager.h>
|
||||
|
||||
@@ -110,7 +114,7 @@ public:
|
||||
///
|
||||
/// @brief Get webserver pointer (systray)
|
||||
///
|
||||
WebServer *getWebServerInstance() { return _webserver; }
|
||||
WebServer *getWebServerInstance() { return _webserver.data(); }
|
||||
|
||||
///
|
||||
/// @brief Get the current videoMode
|
||||
@@ -122,14 +126,11 @@ public:
|
||||
///
|
||||
QJsonDocument getSetting(settings::type type) const;
|
||||
|
||||
void startNetworkServices();
|
||||
void startEventServices();
|
||||
|
||||
static HyperionDaemon* getInstance() { return daemon; }
|
||||
static HyperionDaemon* daemon;
|
||||
|
||||
public slots:
|
||||
void freeObjects();
|
||||
void stoppServices();
|
||||
|
||||
signals:
|
||||
///////////////////////////////////////
|
||||
@@ -176,67 +177,100 @@ private slots:
|
||||
void handleInstanceStateChange(InstanceState state, quint8 instance);
|
||||
|
||||
private:
|
||||
void createGrabberDispmanx(const QJsonObject & grabberConfig);
|
||||
void createGrabberAmlogic(const QJsonObject & grabberConfig);
|
||||
void createGrabberFramebuffer(const QJsonObject & grabberConfig);
|
||||
void createGrabberOsx(const QJsonObject & grabberConfig);
|
||||
void createGrabberX11(const QJsonObject & grabberConfig);
|
||||
void createGrabberXcb(const QJsonObject & grabberConfig);
|
||||
void createGrabberQt(const QJsonObject & grabberConfig);
|
||||
void createGrabberDx(const QJsonObject & grabberConfig);
|
||||
void createGrabberAudio(const QJsonObject & grabberConfig);
|
||||
|
||||
void startCecHandler();
|
||||
void stopCecHandler();
|
||||
void createNetworkServices();
|
||||
void startNetworkServices();
|
||||
void stopNetworkServices();
|
||||
|
||||
void startEventServices();
|
||||
void stopEventServices();
|
||||
|
||||
void startGrabberServices();
|
||||
void stopGrabberServices();
|
||||
|
||||
void updateScreenGrabbers(const QJsonDocument& grabberConfig);
|
||||
void updateVideoGrabbers(const QJsonObject& grabberConfig);
|
||||
void updateAudioGrabbers(const QJsonObject& grabberConfig);
|
||||
|
||||
QString evalScreenGrabberType();
|
||||
|
||||
template<typename GrabberType>
|
||||
void startGrabber(QScopedPointer<GrabberWrapper>& sharedGrabber, const QJsonDocument& grabberConfig, bool enableGrabber = true) {
|
||||
|
||||
QString typeName = GrabberType::GRABBERTYPE;
|
||||
if (!enableGrabber)
|
||||
{
|
||||
Debug(_log, "The %s grabber is not enabled on this platform", QSTRING_CSTR(typeName));
|
||||
sharedGrabber.reset();
|
||||
return;
|
||||
}
|
||||
|
||||
std::unique_ptr<GrabberType> grabber = std::make_unique<GrabberType>(grabberConfig);
|
||||
|
||||
if (!grabber)
|
||||
{
|
||||
Error(_log, "Failed to cast grabber type %s to GrabberWrapper", QSTRING_CSTR(typeName));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!grabber->isAvailable())
|
||||
{
|
||||
Debug(_log, "The %s grabber is not available on this platform", QSTRING_CSTR(typeName));
|
||||
return;
|
||||
}
|
||||
connect(this, &HyperionDaemon::videoMode, grabber.get(), &GrabberType::setVideoMode);
|
||||
connect(this, &HyperionDaemon::settingsChanged, grabber.get(), &GrabberType::handleSettingsUpdate);
|
||||
|
||||
Info(_log, "%s grabber created", QSTRING_CSTR(typeName));
|
||||
grabber->tryStart();
|
||||
|
||||
// Transfer ownership to sharedGrabber
|
||||
sharedGrabber.reset(grabber.release());
|
||||
}
|
||||
}
|
||||
|
||||
Logger* _log;
|
||||
|
||||
/// Core services
|
||||
QScopedPointer<HyperionIManager> _instanceManager;
|
||||
QScopedPointer<SettingsManager> _settingsManager;
|
||||
|
||||
Logger* _log;
|
||||
HyperionIManager* _instanceManager;
|
||||
AuthManager* _authManager;
|
||||
#ifdef ENABLE_MDNS
|
||||
MdnsProvider* _mDNSProvider;
|
||||
#endif
|
||||
NetOrigin* _netOrigin;
|
||||
#if defined(ENABLE_EFFECTENGINE)
|
||||
PythonInit* _pyInit;
|
||||
#endif
|
||||
WebServer* _webserver;
|
||||
WebServer* _sslWebserver;
|
||||
JsonServer* _jsonServer;
|
||||
VideoWrapper* _videoGrabber;
|
||||
DispmanxWrapper* _dispmanx;
|
||||
X11Wrapper* _x11Grabber;
|
||||
XcbWrapper* _xcbGrabber;
|
||||
AmlogicWrapper* _amlGrabber;
|
||||
FramebufferWrapper* _fbGrabber;
|
||||
OsxWrapper* _osxGrabber;
|
||||
QtWrapper* _qtGrabber;
|
||||
DirectXWrapper* _dxGrabber;
|
||||
AudioWrapper* _audioGrabber;
|
||||
SSDPHandler* _ssdp;
|
||||
EventHandler* _eventHandler;
|
||||
OsEventHandler* _osEventHandler;
|
||||
EventScheduler* _eventScheduler;
|
||||
#ifdef ENABLE_CEC
|
||||
CECHandler* _cecHandler;
|
||||
|
||||
/// Network services
|
||||
QScopedPointer<AuthManager> _authManager;
|
||||
QScopedPointer<NetOrigin> _netOrigin;
|
||||
QScopedPointer<JsonServer, QScopedPointerDeleteLater> _jsonServer;
|
||||
QScopedPointer<WebServer, QScopedPointerDeleteLater> _webserver;
|
||||
QScopedPointer<WebServer, QScopedPointerDeleteLater> _sslWebserver;
|
||||
QScopedPointer<SSDPHandler, QScopedPointerDeleteLater> _ssdp;
|
||||
#ifdef ENABLE_MDNS
|
||||
QScopedPointer<MdnsProvider, QScopedPointerDeleteLater> _mDNSProvider;
|
||||
#endif
|
||||
#if defined(ENABLE_FLATBUF_SERVER)
|
||||
QScopedPointer<FlatBufferServer, QScopedPointerDeleteLater> _flatBufferServer;
|
||||
#endif
|
||||
#if defined(ENABLE_PROTOBUF_SERVER)
|
||||
QScopedPointer<ProtoServer, QScopedPointerDeleteLater> _protoServer;
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_FLATBUF_SERVER)
|
||||
FlatBufferServer* _flatBufferServer;
|
||||
#endif
|
||||
#if defined(ENABLE_PROTOBUF_SERVER)
|
||||
ProtoServer* _protoServer;
|
||||
#endif
|
||||
int _grabber_width;
|
||||
int _grabber_height;
|
||||
int _grabber_pixelDecimation;
|
||||
int _grabber_frequency;
|
||||
int _grabber_cropLeft;
|
||||
int _grabber_cropRight;
|
||||
int _grabber_cropTop;
|
||||
int _grabber_cropBottom;
|
||||
/// Event services
|
||||
QScopedPointer<EventHandler> _eventHandler;
|
||||
QScopedPointer<OsEventHandler> _osEventHandler;
|
||||
QScopedPointer<EventScheduler> _eventScheduler;
|
||||
#ifdef ENABLE_CEC
|
||||
QScopedPointer<CECHandler> _cecHandler;
|
||||
#endif
|
||||
|
||||
/// Grabber services
|
||||
QScopedPointer<GrabberWrapper> _screenGrabber;
|
||||
QScopedPointer<VideoWrapper> _videoGrabber;
|
||||
QScopedPointer<AudioWrapper> _audioGrabber;
|
||||
|
||||
QString _prevType;
|
||||
|
||||
VideoMode _currVideoMode;
|
||||
SettingsManager* _settingsManager;
|
||||
};
|
||||
|
||||
#endif // HYPERIOND_H
|
||||
|
@@ -389,9 +389,6 @@ int main(int argc, char** argv)
|
||||
Error(log, "Hyperion aborted: %s", e.what());
|
||||
}
|
||||
|
||||
// delete components
|
||||
Logger::deleteInstance();
|
||||
|
||||
#ifdef _WIN32
|
||||
if (parser.isSet(consoleOption))
|
||||
{
|
||||
|
@@ -45,7 +45,7 @@ SysTray::SysTray(HyperionDaemon *hyperiond)
|
||||
// instance changes
|
||||
connect(_instanceManager, &HyperionIManager::instanceStateChanged, this, &SysTray::handleInstanceStateChange);
|
||||
|
||||
connect(this, &SysTray::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
||||
connect(this, &SysTray::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent);
|
||||
}
|
||||
|
||||
SysTray::~SysTray()
|
||||
|
Reference in New Issue
Block a user