Various Cleanups (#1075)

* LedDevice - Address clang findings

* Fix Windows Warnings

* Ensure newInput is initialised

* Clean-up unused elements for Plaform Capture

* Fix initialization problem and spellings

* Address clang findings and spelling corrections

* LedDevice clean-ups

* Cleanups

* Align that getLedCount is int

* Have "display" as default for Grabbers

* Fix config during start-up for missing elements

* Framegrabber Clean-up - Remove non supported grabbers from selection, filter valid options

* Typo

* Framegrabber.json - Fix property numbering

* Preselect active Grabbertype

* Sort Grabbernames

* Align options with selected element

* Fix deletion of pointer to incomplete type 'BonjourBrowserWrapper'

* Address macOS compile warnings

* Have default layout = 1 LED only to avoid errors as in #673

* Address lgtm findings

* Address finding that params passed to LedDevice discovery were not considered

* Cleanups after merging with latest master

* Update Changelog

* Address lgtm findings

* Fix comment

* Test Fix

* Fix Python Warning

* Handle Dummy Device assignment correctly

* Address delete called on non-final 'commandline::Option' that has virtual functions but non-virtual destructor

* Correct that QTimer.start accepts only int

* Have Release Python GIL & reset threat state chnage downward compatible

* Correct format specifier

* LedDevice - add assertions

* Readonly DB - Fix merge issue

* Smoothing - Fix wrong defaults

* LedDevice - correct assertion

* Show smoothing config set# in debug and related values.

* Suppress error on windows, if default file is "/dev/null"

* CMAKE - Allow to define QT_BASE_DIR dynamically via environment-variable

* Ignore Visual Studio specific files

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
This commit is contained in:
LordGrey
2020-11-14 17:58:56 +01:00
committed by GitHub
parent d28540a7fe
commit efc2046ab5
93 changed files with 1140 additions and 1172 deletions

View File

@@ -61,30 +61,30 @@
HyperionDaemon *HyperionDaemon::daemon = nullptr;
HyperionDaemon::HyperionDaemon(const QString rootPath, QObject *parent, bool logLvlOverwrite, bool readonlyMode)
: QObject(parent), _log(Logger::getInstance("DAEMON"))
, _instanceManager(new HyperionIManager(rootPath, this, readonlyMode))
, _authManager(new AuthManager(this, readonlyMode))
HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool logLvlOverwrite, bool readonlyMode)
: QObject(parent), _log(Logger::getInstance("DAEMON"))
, _instanceManager(new HyperionIManager(rootPath, this, readonlyMode))
, _authManager(new AuthManager(this, readonlyMode))
#ifdef ENABLE_AVAHI
, _bonjourBrowserWrapper(new BonjourBrowserWrapper())
, _bonjourBrowserWrapper(new BonjourBrowserWrapper())
#endif
, _netOrigin(new NetOrigin(this))
, _pyInit(new PythonInit())
, _webserver(nullptr)
, _sslWebserver(nullptr)
, _jsonServer(nullptr)
, _v4l2Grabber(nullptr)
, _dispmanx(nullptr)
, _x11Grabber(nullptr)
, _xcbGrabber(nullptr)
, _amlGrabber(nullptr)
, _fbGrabber(nullptr)
, _osxGrabber(nullptr)
, _qtGrabber(nullptr)
, _dxGrabber(nullptr)
, _ssdp(nullptr)
, _cecHandler(nullptr)
, _currVideoMode(VideoMode::VIDEO_2D)
, _netOrigin(new NetOrigin(this))
, _pyInit(new PythonInit())
, _webserver(nullptr)
, _sslWebserver(nullptr)
, _jsonServer(nullptr)
, _v4l2Grabber(nullptr)
, _dispmanx(nullptr)
, _x11Grabber(nullptr)
, _xcbGrabber(nullptr)
, _amlGrabber(nullptr)
, _fbGrabber(nullptr)
, _osxGrabber(nullptr)
, _qtGrabber(nullptr)
, _dxGrabber(nullptr)
, _ssdp(nullptr)
, _cecHandler(nullptr)
, _currVideoMode(VideoMode::VIDEO_2D)
{
HyperionDaemon::daemon = this;
@@ -101,12 +101,14 @@ HyperionDaemon::HyperionDaemon(const QString rootPath, QObject *parent, bool log
// set inital log lvl if the loglvl wasn't overwritten by arg
if (!logLvlOverwrite)
{
handleSettingsUpdate(settings::LOGGER, getSetting(settings::LOGGER));
}
createCecHandler();
// init EffectFileHandler
EffectFileHandler *efh = new EffectFileHandler(rootPath, getSetting(settings::EFFECTS), this);
EffectFileHandler* efh = new EffectFileHandler(rootPath, getSetting(settings::EFFECTS), this);
connect(this, &HyperionDaemon::settingsChanged, efh, &EffectFileHandler::handleSettingsUpdate);
// connect and apply settings for AuthManager
@@ -135,7 +137,7 @@ HyperionDaemon::HyperionDaemon(const QString rootPath, QObject *parent, bool log
// return videoMode changes from Daemon to HyperionIManager
connect(this, &HyperionDaemon::videoMode, _instanceManager, &HyperionIManager::newVideoMode);
// ---- grabber -----
// ---- grabber -----
#if !defined(ENABLE_DISPMANX) && !defined(ENABLE_OSX) && !defined(ENABLE_FB) && !defined(ENABLE_X11) && !defined(ENABLE_XCB) && !defined(ENABLE_AMLOGIC) && !defined(ENABLE_QT) && !defined(ENABLE_DX)
Info(_log, "No platform capture supported on this platform");
#endif
@@ -178,7 +180,7 @@ void HyperionDaemon::freeObjects()
delete _jsonServer;
_jsonServer = nullptr;
if (_flatBufferServer)
if (_flatBufferServer != nullptr)
{
auto flatBufferServerThread = _flatBufferServer->thread();
flatBufferServerThread->quit();
@@ -187,7 +189,7 @@ void HyperionDaemon::freeObjects()
_flatBufferServer = nullptr;
}
if (_protoServer)
if (_protoServer != nullptr)
{
auto protoServerThread = _protoServer->thread();
protoServerThread->quit();
@@ -197,7 +199,7 @@ void HyperionDaemon::freeObjects()
}
//ssdp before webserver
if (_ssdp)
if (_ssdp != nullptr)
{
auto ssdpThread = _ssdp->thread();
ssdpThread->quit();
@@ -206,18 +208,18 @@ void HyperionDaemon::freeObjects()
_ssdp = nullptr;
}
if(_webserver)
if (_webserver != nullptr)
{
auto webserverThread =_webserver->thread();
auto webserverThread = _webserver->thread();
webserverThread->quit();
webserverThread->wait();
delete webserverThread;
_webserver = nullptr;
}
if (_sslWebserver)
if (_sslWebserver != nullptr)
{
auto sslWebserverThread =_sslWebserver->thread();
auto sslWebserverThread = _sslWebserver->thread();
sslWebserverThread->quit();
sslWebserverThread->wait();
delete sslWebserverThread;
@@ -225,7 +227,7 @@ void HyperionDaemon::freeObjects()
}
#ifdef ENABLE_CEC
if (_cecHandler)
if (_cecHandler != nullptr)
{
auto cecHandlerThread = _cecHandler->thread();
cecHandlerThread->quit();
@@ -239,7 +241,11 @@ void HyperionDaemon::freeObjects()
// stop Hyperions (non blocking)
_instanceManager->stopAll();
#ifdef ENABLE_AVAHI
delete _bonjourBrowserWrapper;
_bonjourBrowserWrapper = nullptr;
#endif
delete _amlGrabber;
delete _dispmanx;
delete _fbGrabber;
@@ -249,7 +255,7 @@ void HyperionDaemon::freeObjects()
delete _v4l2Grabber;
_v4l2Grabber = nullptr;
_bonjourBrowserWrapper = nullptr;
_amlGrabber = nullptr;
_dispmanx = nullptr;
_fbGrabber = nullptr;
@@ -266,7 +272,7 @@ void HyperionDaemon::startNetworkServices()
// Create FlatBuffer server in thread
_flatBufferServer = new FlatBufferServer(getSetting(settings::FLATBUFSERVER));
QThread *fbThread = new QThread(this);
QThread* fbThread = new QThread(this);
fbThread->setObjectName("FlatBufferServerThread");
_flatBufferServer->moveToThread(fbThread);
connect(fbThread, &QThread::started, _flatBufferServer, &FlatBufferServer::initServer);
@@ -276,7 +282,7 @@ void HyperionDaemon::startNetworkServices()
// Create Proto server in thread
_protoServer = new ProtoServer(getSetting(settings::PROTOSERVER));
QThread *pThread = new QThread(this);
QThread* pThread = new QThread(this);
pThread->setObjectName("ProtoServerThread");
_protoServer->moveToThread(pThread);
connect(pThread, &QThread::started, _protoServer, &ProtoServer::initServer);
@@ -286,7 +292,7 @@ void HyperionDaemon::startNetworkServices()
// Create Webserver in thread
_webserver = new WebServer(getSetting(settings::WEBSERVER), false);
QThread *wsThread = new QThread(this);
QThread* wsThread = new QThread(this);
wsThread->setObjectName("WebServerThread");
_webserver->moveToThread(wsThread);
connect(wsThread, &QThread::started, _webserver, &WebServer::initServer);
@@ -296,7 +302,7 @@ void HyperionDaemon::startNetworkServices()
// Create SSL Webserver in thread
_sslWebserver = new WebServer(getSetting(settings::WEBSERVER), true);
QThread *sslWsThread = new QThread(this);
QThread* sslWsThread = new QThread(this);
sslWsThread->setObjectName("SSLWebServerThread");
_sslWebserver->moveToThread(sslWsThread);
connect(sslWsThread, &QThread::started, _sslWebserver, &WebServer::initServer);
@@ -306,12 +312,12 @@ void HyperionDaemon::startNetworkServices()
// Create SSDP server in thread
_ssdp = new SSDPHandler(_webserver,
getSetting(settings::FLATBUFSERVER).object()["port"].toInt(),
getSetting(settings::PROTOSERVER).object()["port"].toInt(),
getSetting(settings::JSONSERVER).object()["port"].toInt(),
getSetting(settings::WEBSERVER).object()["sslPort"].toInt(),
getSetting(settings::GENERAL).object()["name"].toString());
QThread *ssdpThread = new QThread(this);
getSetting(settings::FLATBUFSERVER).object()["port"].toInt(),
getSetting(settings::PROTOSERVER).object()["port"].toInt(),
getSetting(settings::JSONSERVER).object()["port"].toInt(),
getSetting(settings::WEBSERVER).object()["sslPort"].toInt(),
getSetting(settings::GENERAL).object()["name"].toString());
QThread* ssdpThread = new QThread(this);
ssdpThread->setObjectName("SSDPThread");
_ssdp->moveToThread(ssdpThread);
connect(ssdpThread, &QThread::started, _ssdp, &SSDPHandler::initServer);
@@ -321,26 +327,34 @@ void HyperionDaemon::startNetworkServices()
ssdpThread->start();
}
void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJsonDocument &config)
void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJsonDocument& config)
{
if (settingsType == settings::LOGGER)
{
const QJsonObject &logConfig = config.object();
const QJsonObject& logConfig = config.object();
std::string level = logConfig["level"].toString("warn").toStdString(); // silent warn verbose debug
if (level == "silent")
{
Logger::setLogLevel(Logger::OFF);
}
else if (level == "warn")
{
Logger::setLogLevel(Logger::LogLevel::WARNING);
}
else if (level == "verbose")
{
Logger::setLogLevel(Logger::INFO);
}
else if (level == "debug")
{
Logger::setLogLevel(Logger::DEBUG);
}
}
if (settingsType == settings::SYSTEMCAPTURE)
{
const QJsonObject &grabberConfig = config.object();
const QJsonObject& grabberConfig = config.object();
_grabber_width = grabberConfig["width"].toInt(96);
_grabber_height = grabberConfig["height"].toInt(96);
@@ -354,11 +368,11 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
_grabber_ge2d_mode = grabberConfig["ge2d_mode"].toInt(0);
_grabber_device = grabberConfig["amlogic_grabber"].toString("amvideocap0");
#ifdef ENABLE_OSX
#ifdef ENABLE_OSX
QString type = "osx";
#else
#else
QString type = grabberConfig["type"].toString("auto");
#endif
#endif
// auto eval of type
if (type == "auto")
@@ -369,33 +383,36 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
type = "dispmanx";
}
// amlogic -> /dev/amvideo exists
else if (QFile::exists("/dev/amvideo"))
{
type = "amlogic";
if (!QFile::exists("/dev/" + _grabber_device))
{
Error(_log, "grabber device '%s' for type amlogic not found!", QSTRING_CSTR(_grabber_device));
}
}
else
{
// x11 -> if DISPLAY is set
QByteArray envDisplay = qgetenv("DISPLAY");
if ( !envDisplay.isEmpty() )
if (QFile::exists("/dev/amvideo"))
{
#if defined(ENABLE_X11)
type = "x11";
#elif defined(ENABLE_XCB)
type = "xcb";
#else
type = "qt";
#endif
type = "amlogic";
if (!QFile::exists("/dev/" + _grabber_device))
{
Error(_log, "grabber device '%s' for type amlogic not found!", QSTRING_CSTR(_grabber_device));
}
}
// qt -> if nothing other applies
else
{
type = "qt";
// x11 -> if DISPLAY is set
QByteArray envDisplay = qgetenv("DISPLAY");
if (!envDisplay.isEmpty())
{
#if defined(ENABLE_X11)
type = "x11";
#elif defined(ENABLE_XCB)
type = "xcb";
#else
type = "qt";
#endif
}
// qt -> if nothing other applies
else
{
type = "qt";
}
}
}
}
@@ -406,7 +423,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
// stop all capture interfaces
#ifdef ENABLE_FB
if(_fbGrabber != nullptr)
if (_fbGrabber != nullptr)
{
_fbGrabber->stop();
delete _fbGrabber;
@@ -414,7 +431,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
}
#endif
#ifdef ENABLE_DISPMANX
if(_dispmanx != nullptr)
if (_dispmanx != nullptr)
{
_dispmanx->stop();
delete _dispmanx;
@@ -422,7 +439,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
}
#endif
#ifdef ENABLE_AMLOGIC
if(_amlGrabber != nullptr)
if (_amlGrabber != nullptr)
{
_amlGrabber->stop();
delete _amlGrabber;
@@ -430,7 +447,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
}
#endif
#ifdef ENABLE_OSX
if(_osxGrabber != nullptr)
if (_osxGrabber != nullptr)
{
_osxGrabber->stop();
delete _osxGrabber;
@@ -438,23 +455,23 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
}
#endif
#ifdef ENABLE_X11
if(_x11Grabber != nullptr)
if (_x11Grabber != nullptr)
{
_x11Grabber->stop();
delete _x11Grabber;
_x11Grabber = nullptr;
_x11Grabber->stop();
delete _x11Grabber;
_x11Grabber = nullptr;
}
#endif
#ifdef ENABLE_XCB
if(_xcbGrabber != nullptr)
if (_xcbGrabber != nullptr)
{
_xcbGrabber->stop();
delete _xcbGrabber;
_xcbGrabber = nullptr;
_xcbGrabber->stop();
delete _xcbGrabber;
_xcbGrabber = nullptr;
}
#endif
#ifdef ENABLE_QT
if(_qtGrabber != nullptr)
if (_qtGrabber != nullptr)
{
_qtGrabber->stop();
delete _qtGrabber;
@@ -462,7 +479,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
}
#endif
#ifdef ENABLE_DX
if(_dxGrabber != nullptr)
if (_dxGrabber != nullptr)
{
_dxGrabber->stop();
delete _dxGrabber;
@@ -474,7 +491,9 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
if (type == "framebuffer")
{
if (_fbGrabber == nullptr)
{
createGrabberFramebuffer(grabberConfig);
}
#ifdef ENABLE_FB
_fbGrabber->tryStart();
#endif
@@ -482,7 +501,9 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
else if (type == "dispmanx")
{
if (_dispmanx == nullptr)
{
createGrabberDispmanx();
}
#ifdef ENABLE_DISPMANX
_dispmanx->tryStart();
#endif
@@ -490,7 +511,9 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
else if (type == "amlogic")
{
if (_amlGrabber == nullptr)
{
createGrabberAmlogic();
}
#ifdef ENABLE_AMLOGIC
_amlGrabber->tryStart();
#endif
@@ -498,7 +521,9 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
else if (type == "osx")
{
if (_osxGrabber == nullptr)
{
createGrabberOsx(grabberConfig);
}
#ifdef ENABLE_OSX
_osxGrabber->tryStart();
#endif
@@ -506,7 +531,9 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
else if (type == "x11")
{
if (_x11Grabber == nullptr)
{
createGrabberX11(grabberConfig);
}
#ifdef ENABLE_X11
_x11Grabber->tryStart();
#endif
@@ -514,7 +541,9 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
else if (type == "xcb")
{
if (_xcbGrabber == nullptr)
{
createGrabberXcb(grabberConfig);
}
#ifdef ENABLE_XCB
_xcbGrabber->tryStart();
#endif
@@ -522,7 +551,9 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
else if (type == "qt")
{
if (_qtGrabber == nullptr)
{
createGrabberQt(grabberConfig);
}
#ifdef ENABLE_QT
_qtGrabber->tryStart();
#endif
@@ -530,7 +561,9 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
else if (type == "dx")
{
if (_dxGrabber == nullptr)
{
createGrabberDx(grabberConfig);
}
#ifdef ENABLE_DX
_dxGrabber->tryStart();
#endif
@@ -545,10 +578,13 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
}
else if (settingsType == settings::V4L2)
{
const QJsonObject &grabberConfig = config.object();
#if defined(ENABLE_CEC) || defined(ENABLE_V4L2)
const QJsonObject& grabberConfig = config.object();
#endif
#ifdef ENABLE_CEC
QString operation;
if (_cecHandler && grabberConfig["cecDetection"].toBool(false))
if (_cecHandler != nullptr && grabberConfig["cecDetection"].toBool(false))
{
QMetaObject::invokeMethod(_cecHandler, "start", Qt::QueuedConnection);
}
@@ -559,36 +595,38 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
#endif
if (_v4l2Grabber != nullptr)
{
return;
}
#ifdef ENABLE_V4L2
_v4l2Grabber = new V4L2Wrapper(
grabberConfig["device"].toString("auto"),
grabberConfig["width"].toInt(0),
grabberConfig["height"].toInt(0),
grabberConfig["fps"].toInt(15),
grabberConfig["input"].toInt(-1),
parseVideoStandard(grabberConfig["standard"].toString("no-change")),
parsePixelFormat(grabberConfig["pixelFormat"].toString("no-change")),
grabberConfig["sizeDecimation"].toInt(8));
grabberConfig["device"].toString("auto"),
grabberConfig["width"].toInt(0),
grabberConfig["height"].toInt(0),
grabberConfig["fps"].toInt(15),
grabberConfig["input"].toInt(-1),
parseVideoStandard(grabberConfig["standard"].toString("no-change")),
parsePixelFormat(grabberConfig["pixelFormat"].toString("no-change")),
grabberConfig["sizeDecimation"].toInt(8));
_v4l2Grabber->setSignalThreshold(
grabberConfig["redSignalThreshold"].toDouble(0.0) / 100.0,
grabberConfig["greenSignalThreshold"].toDouble(0.0) / 100.0,
grabberConfig["blueSignalThreshold"].toDouble(0.0) / 100.0);
grabberConfig["redSignalThreshold"].toDouble(0.0) / 100.0,
grabberConfig["greenSignalThreshold"].toDouble(0.0) / 100.0,
grabberConfig["blueSignalThreshold"].toDouble(0.0) / 100.0);
_v4l2Grabber->setCropping(
grabberConfig["cropLeft"].toInt(0),
grabberConfig["cropRight"].toInt(0),
grabberConfig["cropTop"].toInt(0),
grabberConfig["cropBottom"].toInt(0));
grabberConfig["cropLeft"].toInt(0),
grabberConfig["cropRight"].toInt(0),
grabberConfig["cropTop"].toInt(0),
grabberConfig["cropBottom"].toInt(0));
_v4l2Grabber->setCecDetectionEnable(grabberConfig["cecDetection"].toBool(true));
_v4l2Grabber->setSignalDetectionEnable(grabberConfig["signalDetection"].toBool(true));
_v4l2Grabber->setSignalDetectionOffset(
grabberConfig["sDHOffsetMin"].toDouble(0.25),
grabberConfig["sDVOffsetMin"].toDouble(0.25),
grabberConfig["sDHOffsetMax"].toDouble(0.75),
grabberConfig["sDVOffsetMax"].toDouble(0.75));
grabberConfig["sDHOffsetMin"].toDouble(0.25),
grabberConfig["sDVOffsetMin"].toDouble(0.25),
grabberConfig["sDHOffsetMax"].toDouble(0.75),
grabberConfig["sDVOffsetMax"].toDouble(0.75));
Debug(_log, "V4L2 grabber created");
// connect to HyperionDaemon signal
@@ -632,13 +670,13 @@ void HyperionDaemon::createGrabberAmlogic()
#endif
}
void HyperionDaemon::createGrabberX11(const QJsonObject &grabberConfig)
void HyperionDaemon::createGrabberX11(const QJsonObject& grabberConfig)
{
#ifdef ENABLE_X11
_x11Grabber = new X11Wrapper(
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom,
grabberConfig["pixelDecimation"].toInt(8),
_grabber_frequency);
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom,
grabberConfig["pixelDecimation"].toInt(8),
_grabber_frequency);
_x11Grabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
// connect to HyperionDaemon signal
@@ -651,13 +689,13 @@ void HyperionDaemon::createGrabberX11(const QJsonObject &grabberConfig)
#endif
}
void HyperionDaemon::createGrabberXcb(const QJsonObject &grabberConfig)
void HyperionDaemon::createGrabberXcb(const QJsonObject& grabberConfig)
{
#ifdef ENABLE_XCB
_xcbGrabber = new XcbWrapper(
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom,
grabberConfig["pixelDecimation"].toInt(8),
_grabber_frequency);
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom,
grabberConfig["pixelDecimation"].toInt(8),
_grabber_frequency);
_xcbGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
// connect to HyperionDaemon signal
@@ -670,14 +708,14 @@ void HyperionDaemon::createGrabberXcb(const QJsonObject &grabberConfig)
#endif
}
void HyperionDaemon::createGrabberQt(const QJsonObject &grabberConfig)
void HyperionDaemon::createGrabberQt(const QJsonObject& grabberConfig)
{
#ifdef ENABLE_QT
_qtGrabber = new QtWrapper(
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom,
grabberConfig["pixelDecimation"].toInt(8),
grabberConfig["display"].toInt(0),
_grabber_frequency);
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom,
grabberConfig["pixelDecimation"].toInt(8),
grabberConfig["display"].toInt(0),
_grabber_frequency);
// connect to HyperionDaemon signal
connect(this, &HyperionDaemon::videoMode, _qtGrabber, &QtWrapper::setVideoMode);
@@ -689,14 +727,14 @@ void HyperionDaemon::createGrabberQt(const QJsonObject &grabberConfig)
#endif
}
void HyperionDaemon::createGrabberDx(const QJsonObject &grabberConfig)
void HyperionDaemon::createGrabberDx(const QJsonObject& grabberConfig)
{
#ifdef ENABLE_DX
_dxGrabber = new DirectXWrapper(
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom,
grabberConfig["pixelDecimation"].toInt(8),
grabberConfig["display"].toInt(0),
_grabber_frequency);
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom,
grabberConfig["pixelDecimation"].toInt(8),
grabberConfig["display"].toInt(0),
_grabber_frequency);
// connect to HyperionDaemon signal
connect(this, &HyperionDaemon::videoMode, _dxGrabber, &DirectXWrapper::setVideoMode);
@@ -708,13 +746,13 @@ void HyperionDaemon::createGrabberDx(const QJsonObject &grabberConfig)
#endif
}
void HyperionDaemon::createGrabberFramebuffer(const QJsonObject &grabberConfig)
void HyperionDaemon::createGrabberFramebuffer(const QJsonObject& grabberConfig)
{
#ifdef ENABLE_FB
// Construct and start the framebuffer grabber if the configuration is present
_fbGrabber = new FramebufferWrapper(
grabberConfig["device"].toString("/dev/fb0"),
_grabber_width, _grabber_height, _grabber_frequency);
grabberConfig["device"].toString("/dev/fb0"),
_grabber_width, _grabber_height, _grabber_frequency);
_fbGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
// connect to HyperionDaemon signal
connect(this, &HyperionDaemon::videoMode, _fbGrabber, &FramebufferWrapper::setVideoMode);
@@ -726,13 +764,13 @@ void HyperionDaemon::createGrabberFramebuffer(const QJsonObject &grabberConfig)
#endif
}
void HyperionDaemon::createGrabberOsx(const QJsonObject &grabberConfig)
void HyperionDaemon::createGrabberOsx(const QJsonObject& grabberConfig)
{
#ifdef ENABLE_OSX
// Construct and start the osx grabber if the configuration is present
_osxGrabber = new OsxWrapper(
grabberConfig["display"].toInt(0),
_grabber_width, _grabber_height, _grabber_frequency);
grabberConfig["display"].toInt(0),
_grabber_width, _grabber_height, _grabber_frequency);
// connect to HyperionDaemon signal
connect(this, &HyperionDaemon::videoMode, _osxGrabber, &OsxWrapper::setVideoMode);
@@ -749,14 +787,16 @@ void HyperionDaemon::createCecHandler()
#if defined(ENABLE_V4L2) && defined(ENABLE_CEC)
_cecHandler = new CECHandler;
QThread * thread = new QThread(this);
QThread* thread = new QThread(this);
thread->setObjectName("CECThread");
_cecHandler->moveToThread(thread);
thread->start();
connect(_cecHandler, &CECHandler::cecEvent, [&] (CECEvent event) {
if (_v4l2Grabber)
connect(_cecHandler, &CECHandler::cecEvent, [&](CECEvent event) {
if (_v4l2Grabber != nullptr)
{
_v4l2Grabber->handleCecEvent(event);
}
});
Info(_log, "CEC handler created");