mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
mDNS Support (#1452)
* Allow build, if no grabbers are enabled * Align available functions to right Qt version * Update to next development version * Align available functions to right Qt version * fix workflows (apt/nightly) * Disable QNetworkConfigurationManager deprecation warnings * Initial go on Smart Pointers * Add Deallocation * Correct QT_WARNING_DISABLE_DEPRECATED (available since 5.9) * Cluster Build Variables * Hyperion Light * Address build warnings * Hyperion Light - UI * Update Protobuf to latest master * Removed compiler warnings * Added restart ability to systray * Correct Protobuf * Ignore 'no-return' warning on protobuf build * hyperion-remote: Fix auto discovery of hyperion server * Fix Qt version override * Update changelog * Remove Grabber Components, if no Grabber exists * Standalone Grabber - Fix fps default * Remote Control - Have Source Selction accrosswhole screen * Enable Blackborder detection only, if relevant input sources available * Enable Blackborder detection only, if relevant input sources available * Remote UI - rearrange containers * Checkout * Fix compilation on windows * Re-added qmdnsengine template cmake * chrono added for linux * Removed existing AVAHI/Bonjour, allow to enable/disable mDNS * hyperiond macos typo fix * Fix macOS Bundle build * Fix macOS bundle info details * Correct CMake files * Removed existing AVAHI/Bonjour (2) * Share hyperion's services via mDNS * Add mDNS Browser and mDNS for LED-Devices * Support mDNS discovery for standalone grabbers * Remove ZLib Dependency & Cleanup * mDNS - hanle 2.local2 an ".local." domains equally * Hue - Link discovery to bridge class, workaround port 443 for mDNS discovery * Fix save button state when switching between devices * Removed sessions (of other hyperions) * mDNS Publisher - Simplify service naming * mDNS refactoring & Forwarder discovery * mDNS Updates to use device service name * Consistency of standalone grabbers with mDNS Service Registry * Merge branch 'hyperion-project:master' into mDNS * Start JSON and WebServers only after Instance 0 is available * Remove bespoke qDebug Output again * MDNS updates and refactor Forwarder * Minor updates * Upgrade to CMake 3.1 * typo * macOS fix * Correct merge * - Remove dynamic linker flag from standalone dispmanX Grabber - Added ability to use system qmdns libs * Cec handler library will load at runtime * typo fix * protobuf changes * mDNS changes for Windows/macOS * test window build qmdnsengine * absolute path to protobuf cmake dir * Rework Hue Wizard supporting mDNS * LED-Devices - Retry support + Refactoring (excl. Hue) * LED-Devices - Refactoring/Retry support Hue + additional alignments * Address LGTM findings * Fix CI-Build, revert test changes * Build Windows in Release mode to avoid python problem * Correct that WebServerObject is available earlier * Ensure that instance name in logs for one instance are presented * Update content LEDs * Rework mDNS Address lookup * Fix LED UI * Fix for non mDNS Services (ignore default port) * Disbale device when now input is available * Revert back some updates, ensure last color is updated when switched on * Handle reopening case and changed IP, port for API-calls * Add UPD-DDP Device * WLED support for DDP * Fix printout * LEDDevice - Allow more retries, udapte defaults * LED-Net Devices - Select Custom device, if configured Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com> Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
project(hyperion-aml)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Network Widgets REQUIRED)
|
||||
@@ -29,12 +29,17 @@ target_link_libraries(${PROJECT_NAME}
|
||||
flatbuffers
|
||||
amlogic-grabber
|
||||
framebuffer-grabber
|
||||
ssdp
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
Qt${QT_VERSION_MAJOR}::Widgets
|
||||
)
|
||||
|
||||
if(ENABLE_MDNS)
|
||||
target_link_libraries(${PROJECT_NAME} mdns)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} ssdp)
|
||||
endif()
|
||||
|
||||
if (ENABLE_AMLOGIC)
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
pcre16 dl z
|
||||
|
@@ -9,12 +9,25 @@
|
||||
#include "HyperionConfig.h"
|
||||
#include <commandline/Parser.h>
|
||||
|
||||
#ifdef ENABLE_MDNS
|
||||
// mDNS discover
|
||||
#include <mdns/MdnsBrowser.h>
|
||||
#include <mdns/MdnsServiceRegister.h>
|
||||
#else
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#endif
|
||||
#include <utils/NetUtils.h>
|
||||
|
||||
#include <utils/DefaultSignalHandler.h>
|
||||
|
||||
// Constants
|
||||
namespace {
|
||||
|
||||
const char SERVICE_TYPE[] = "flatbuffer";
|
||||
|
||||
} //End of constants
|
||||
|
||||
using namespace commandline;
|
||||
|
||||
// save the image as screenshot
|
||||
@@ -111,27 +124,34 @@ int main(int argc, char ** argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
// server searching by ssdp
|
||||
QString address = argAddress.value(parser);
|
||||
if(address == "127.0.0.1" || address == "127.0.0.1:19400")
|
||||
{
|
||||
SSDPDiscover discover;
|
||||
address = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
if(address.isEmpty())
|
||||
{
|
||||
address = argAddress.value(parser);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve hostname and port (or use default port)
|
||||
QString host;
|
||||
quint16 port{ FLATBUFFER_DEFAULT_PORT };
|
||||
QString serviceName{ QHostInfo::localHostName() };
|
||||
int port{ FLATBUFFER_DEFAULT_PORT };
|
||||
|
||||
if (!NetUtils::resolveHostPort(address, host, port))
|
||||
// Split hostname and port (or use default port)
|
||||
QString givenAddress = argAddress.value(parser);
|
||||
if (!NetUtils::resolveHostPort(givenAddress, host, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(address).toStdString());
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(givenAddress).toStdString());
|
||||
}
|
||||
|
||||
// Search available Hyperion services via mDNS, if default/localhost IP is given
|
||||
if (host == "127.0.0.1" || host == "::1")
|
||||
{
|
||||
#ifndef ENABLE_MDNS
|
||||
SSDPDiscover discover;
|
||||
host = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
#endif
|
||||
QHostAddress address;
|
||||
if (!NetUtils::resolveHostToAddress(log, host, address, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Address could not be resolved for hostname: %2").arg(QSTRING_CSTR(host)).toStdString());
|
||||
}
|
||||
host = address.toString();
|
||||
}
|
||||
|
||||
Info(log, "Connecting to Hyperion host: %s, port: %u using service: %s", QSTRING_CSTR(host), port, QSTRING_CSTR(serviceName));
|
||||
|
||||
// Create the Flabuf-connection
|
||||
FlatBufferConnection flatbuf("AML Standalone", host, argPriority.getInt(parser), parser.isSet(argSkipReply), port);
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
project(hyperion-dispmanx)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Network Widgets REQUIRED)
|
||||
@@ -22,21 +22,23 @@ add_executable( ${PROJECT_NAME}
|
||||
${Hyperion_Dispmanx_SOURCES}
|
||||
)
|
||||
|
||||
SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-rdynamic")
|
||||
SET(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS} "-rdynamic")
|
||||
|
||||
target_link_libraries( ${PROJECT_NAME}
|
||||
commandline
|
||||
hyperion-utils
|
||||
flatbufconnect
|
||||
flatbuffers
|
||||
dispmanx-grabber
|
||||
ssdp
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
Qt${QT_VERSION_MAJOR}::Widgets
|
||||
)
|
||||
|
||||
if(ENABLE_MDNS)
|
||||
target_link_libraries(${PROJECT_NAME} mdns)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} ssdp)
|
||||
endif()
|
||||
|
||||
install ( TARGETS ${PROJECT_NAME} DESTINATION "share/hyperion/bin" COMPONENT "hyperion_dispmanx" )
|
||||
|
||||
if(CMAKE_HOST_UNIX)
|
||||
|
@@ -10,12 +10,25 @@
|
||||
#include "HyperionConfig.h"
|
||||
#include <commandline/Parser.h>
|
||||
|
||||
#ifdef ENABLE_MDNS
|
||||
// mDNS discover
|
||||
#include <mdns/MdnsBrowser.h>
|
||||
#include <mdns/MdnsServiceRegister.h>
|
||||
#else
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#endif
|
||||
#include <utils/NetUtils.h>
|
||||
|
||||
#include <utils/DefaultSignalHandler.h>
|
||||
|
||||
// Constants
|
||||
namespace {
|
||||
|
||||
const char SERVICE_TYPE[] = "flatbuffer";
|
||||
|
||||
} //End of constants
|
||||
|
||||
using namespace commandline;
|
||||
|
||||
// save the image as screenshot
|
||||
@@ -114,27 +127,34 @@ int main(int argc, char ** argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
// server searching by ssdp
|
||||
QString address = argAddress.value(parser);
|
||||
if(address == "127.0.0.1" || address == "127.0.0.1:19400")
|
||||
{
|
||||
SSDPDiscover discover;
|
||||
address = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
if(address.isEmpty())
|
||||
{
|
||||
address = argAddress.value(parser);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve hostname and port (or use default port)
|
||||
QString host;
|
||||
quint16 port{ FLATBUFFER_DEFAULT_PORT };
|
||||
QString serviceName{ QHostInfo::localHostName() };
|
||||
int port{ FLATBUFFER_DEFAULT_PORT };
|
||||
|
||||
if (!NetUtils::resolveHostPort(address, host, port))
|
||||
// Split hostname and port (or use default port)
|
||||
QString givenAddress = argAddress.value(parser);
|
||||
if (!NetUtils::resolveHostPort(givenAddress, host, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(address).toStdString());
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(givenAddress).toStdString());
|
||||
}
|
||||
|
||||
// Search available Hyperion services via mDNS, if default/localhost IP is given
|
||||
if (host == "127.0.0.1" || host == "::1")
|
||||
{
|
||||
#ifndef ENABLE_MDNS
|
||||
SSDPDiscover discover;
|
||||
host = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
#endif
|
||||
QHostAddress address;
|
||||
if (!NetUtils::resolveHostToAddress(log, host, address, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Address could not be resolved for hostname: %2").arg(QSTRING_CSTR(host)).toStdString());
|
||||
}
|
||||
host = address.toString();
|
||||
}
|
||||
|
||||
Info(log, "Connecting to Hyperion host: %s, port: %u using service: %s", QSTRING_CSTR(host), port, QSTRING_CSTR(serviceName));
|
||||
|
||||
// Create the Flabuf-connection
|
||||
FlatBufferConnection flatbuf("Dispmanx Standalone", host, argPriority.getInt(parser), parser.isSet(argSkipReply), port);
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
project(hyperion-framebuffer)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Network Widgets REQUIRED)
|
||||
@@ -28,13 +28,18 @@ target_link_libraries( ${PROJECT_NAME}
|
||||
flatbufconnect
|
||||
flatbuffers
|
||||
framebuffer-grabber
|
||||
ssdp
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
Qt${QT_VERSION_MAJOR}::Gui
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
Qt${QT_VERSION_MAJOR}::Widgets
|
||||
)
|
||||
|
||||
if(ENABLE_MDNS)
|
||||
target_link_libraries(${PROJECT_NAME} mdns)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} ssdp)
|
||||
endif()
|
||||
|
||||
if (ENABLE_AMLOGIC)
|
||||
target_link_libraries( ${PROJECT_NAME}
|
||||
pcre16 dl z
|
||||
|
@@ -9,12 +9,25 @@
|
||||
#include "HyperionConfig.h"
|
||||
#include <commandline/Parser.h>
|
||||
|
||||
#ifdef ENABLE_MDNS
|
||||
// mDNS discover
|
||||
#include <mdns/MdnsBrowser.h>
|
||||
#include <mdns/MdnsServiceRegister.h>
|
||||
#else
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#endif
|
||||
#include <utils/NetUtils.h>
|
||||
|
||||
#include <utils/DefaultSignalHandler.h>
|
||||
|
||||
// Constants
|
||||
namespace {
|
||||
|
||||
const char SERVICE_TYPE[] = "flatbuffer";
|
||||
|
||||
} //End of constants
|
||||
|
||||
using namespace commandline;
|
||||
|
||||
// save the image as screenshot
|
||||
@@ -114,27 +127,34 @@ int main(int argc, char ** argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
// server searching by ssdp
|
||||
QString address = argAddress.value(parser);
|
||||
if(address == "127.0.0.1" || address == "127.0.0.1:19400")
|
||||
{
|
||||
SSDPDiscover discover;
|
||||
address = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
if(address.isEmpty())
|
||||
{
|
||||
address = argAddress.value(parser);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve hostname and port (or use default port)
|
||||
QString host;
|
||||
quint16 port{ FLATBUFFER_DEFAULT_PORT };
|
||||
QString serviceName{ QHostInfo::localHostName() };
|
||||
int port{ FLATBUFFER_DEFAULT_PORT };
|
||||
|
||||
if (!NetUtils::resolveHostPort(address, host, port))
|
||||
// Split hostname and port (or use default port)
|
||||
QString givenAddress = argAddress.value(parser);
|
||||
if (!NetUtils::resolveHostPort(givenAddress, host, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(address).toStdString());
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(givenAddress).toStdString());
|
||||
}
|
||||
|
||||
// Search available Hyperion services via mDNS, if default/localhost IP is given
|
||||
if (host == "127.0.0.1" || host == "::1")
|
||||
{
|
||||
#ifndef ENABLE_MDNS
|
||||
SSDPDiscover discover;
|
||||
host = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
#endif
|
||||
QHostAddress address;
|
||||
if (!NetUtils::resolveHostToAddress(log, host, address, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Address could not be resolved for hostname: %2").arg(QSTRING_CSTR(host)).toStdString());
|
||||
}
|
||||
host = address.toString();
|
||||
}
|
||||
|
||||
Info(log, "Connecting to Hyperion host: %s, port: %u using service: %s", QSTRING_CSTR(host), port, QSTRING_CSTR(serviceName));
|
||||
|
||||
// Create the Flabuf-connection
|
||||
FlatBufferConnection flatbuf("Framebuffer Standalone", host, argPriority.getInt(parser), parser.isSet(argSkipReply), port);
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
project(hyperion-osx)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Network Widgets REQUIRED)
|
||||
@@ -28,11 +28,16 @@ target_link_libraries( ${PROJECT_NAME}
|
||||
flatbufconnect
|
||||
flatbuffers
|
||||
osx-grabber
|
||||
ssdp
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
Qt${QT_VERSION_MAJOR}::Gui
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
Qt${QT_VERSION_MAJOR}::Widgets
|
||||
)
|
||||
|
||||
if(ENABLE_MDNS)
|
||||
target_link_libraries(${PROJECT_NAME} mdns)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} ssdp)
|
||||
endif()
|
||||
|
||||
install ( TARGETS ${PROJECT_NAME} DESTINATION "." COMPONENT "hyperion_osx" )
|
||||
|
@@ -8,12 +8,25 @@
|
||||
#include "OsxWrapper.h"
|
||||
#include <commandline/Parser.h>
|
||||
|
||||
#ifdef ENABLE_MDNS
|
||||
// mDNS discover
|
||||
#include <mdns/MdnsBrowser.h>
|
||||
#include <mdns/MdnsServiceRegister.h>
|
||||
#else
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#endif
|
||||
#include <utils/NetUtils.h>
|
||||
|
||||
#include <utils/DefaultSignalHandler.h>
|
||||
|
||||
// Constants
|
||||
namespace {
|
||||
|
||||
const char SERVICE_TYPE[] = "flatbuffer";
|
||||
|
||||
} //End of constants
|
||||
|
||||
using namespace commandline;
|
||||
|
||||
// save the image as screenshot
|
||||
@@ -108,27 +121,35 @@ int main(int argc, char ** argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
// server searching by ssdp
|
||||
QString address = argAddress.value(parser);
|
||||
if(address == "127.0.0.1" || address == "127.0.0.1:19400")
|
||||
{
|
||||
SSDPDiscover discover;
|
||||
address = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
if(address.isEmpty())
|
||||
{
|
||||
address = argAddress.value(parser);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve hostname and port (or use default port)
|
||||
QString host;
|
||||
quint16 port{ FLATBUFFER_DEFAULT_PORT };
|
||||
QString serviceName{ QHostInfo::localHostName() };
|
||||
int port{ FLATBUFFER_DEFAULT_PORT };
|
||||
|
||||
if (!NetUtils::resolveHostPort(address, host, port))
|
||||
// Split hostname and port (or use default port)
|
||||
QString givenAddress = argAddress.value(parser);
|
||||
if (!NetUtils::resolveHostPort(givenAddress, host, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(address).toStdString());
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(givenAddress).toStdString());
|
||||
}
|
||||
|
||||
// Search available Hyperion services via mDNS, if default/localhost IP is given
|
||||
if (host == "127.0.0.1" || host == "::1")
|
||||
{
|
||||
#ifndef ENABLE_MDNS
|
||||
SSDPDiscover discover;
|
||||
host = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
#endif
|
||||
|
||||
QHostAddress address;
|
||||
if (!NetUtils::resolveHostToAddress(log, host, address, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Address could not be resolved for hostname: %2").arg(QSTRING_CSTR(host)).toStdString());
|
||||
}
|
||||
host = address.toString();
|
||||
}
|
||||
|
||||
Info(log, "Connecting to Hyperion host: %s, port: %u using service: %s", QSTRING_CSTR(host), port, QSTRING_CSTR(serviceName));
|
||||
|
||||
// Create the Flabuf-connection
|
||||
FlatBufferConnection flatbuf("OSX Standalone", host, argPriority.getInt(parser), parser.isSet(argSkipReply), port);
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
project(hyperion-qt)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Network Widgets REQUIRED)
|
||||
@@ -34,13 +34,18 @@ target_link_libraries(${PROJECT_NAME}
|
||||
qt-grabber
|
||||
flatbufconnect
|
||||
flatbuffers
|
||||
ssdp
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
Qt${QT_VERSION_MAJOR}::Gui
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
Qt${QT_VERSION_MAJOR}::Widgets
|
||||
)
|
||||
|
||||
if(ENABLE_MDNS)
|
||||
target_link_libraries(${PROJECT_NAME} mdns)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} ssdp)
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
install ( TARGETS ${PROJECT_NAME} DESTINATION "." COMPONENT "hyperion_qt" )
|
||||
elseif(NOT WIN32)
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
// QT includes
|
||||
#include <QCoreApplication>
|
||||
#include <QImage>
|
||||
@@ -10,20 +9,33 @@
|
||||
#include "HyperionConfig.h"
|
||||
#include <commandline/Parser.h>
|
||||
|
||||
#ifdef ENABLE_MDNS
|
||||
// mDNS discover
|
||||
#include <mdns/MdnsBrowser.h>
|
||||
#include <mdns/MdnsServiceRegister.h>
|
||||
#else
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#endif
|
||||
#include <utils/NetUtils.h>
|
||||
|
||||
//flatbuf sending
|
||||
#include <flatbufserver/FlatBufferConnection.h>
|
||||
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#include <utils/NetUtils.h>
|
||||
// Constants
|
||||
namespace {
|
||||
|
||||
const char SERVICE_TYPE[] = "flatbuffer";
|
||||
|
||||
} //End of constants
|
||||
|
||||
using namespace commandline;
|
||||
|
||||
// save the image as screenshot
|
||||
void saveScreenshot(QString filename, const Image<ColorRgb> & image)
|
||||
void saveScreenshot(const QString& filename, const Image<ColorRgb> & image)
|
||||
{
|
||||
// store as PNG
|
||||
QImage pngImage((const uint8_t *) image.memptr(), image.width(), image.height(), 3*image.width(), QImage::Format_RGB888);
|
||||
QImage pngImage(reinterpret_cast<const uint8_t *>(image.memptr()), static_cast<int>(image.width()), static_cast<int>(image.height()), static_cast<int>(3*image.width()), QImage::Format_RGB888);
|
||||
pngImage.save(filename);
|
||||
}
|
||||
|
||||
@@ -115,38 +127,46 @@ int main(int argc, char ** argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
// server searching by ssdp
|
||||
QString address = argAddress.value(parser);
|
||||
if(address == "127.0.0.1" || address == "127.0.0.1:19400")
|
||||
{
|
||||
SSDPDiscover discover;
|
||||
address = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
if(address.isEmpty())
|
||||
{
|
||||
address = argAddress.value(parser);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve hostname and port (or use default port)
|
||||
QString host;
|
||||
quint16 port { FLATBUFFER_DEFAULT_PORT };
|
||||
QString serviceName {QHostInfo::localHostName()};
|
||||
int port {FLATBUFFER_DEFAULT_PORT};
|
||||
|
||||
if ( !NetUtils::resolveHostPort(address, host, port) )
|
||||
// Split hostname and port (or use default port)
|
||||
QString givenAddress = argAddress.value(parser);
|
||||
if (!NetUtils::resolveHostPort(givenAddress, host, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(address).toStdString());
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(givenAddress).toStdString());
|
||||
}
|
||||
|
||||
// Search available Hyperion services via mDNS, if default/localhost IP is given
|
||||
if (host == "127.0.0.1" || host == "::1")
|
||||
{
|
||||
#ifndef ENABLE_MDNS
|
||||
SSDPDiscover discover;
|
||||
host = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
#endif
|
||||
|
||||
QHostAddress address;
|
||||
if (!NetUtils::resolveHostToAddress(log, host, address, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Address could not be resolved for hostname: %2").arg(QSTRING_CSTR(host)).toStdString());
|
||||
}
|
||||
host = address.toString();
|
||||
}
|
||||
|
||||
Info(log, "Connecting to Hyperion host: %s, port: %u using service: %s", QSTRING_CSTR(host), port, QSTRING_CSTR(serviceName));
|
||||
|
||||
// Create the Flabuf-connection
|
||||
FlatBufferConnection flatbuf("Qt Standalone", host, argPriority.getInt(parser), parser.isSet(argSkipReply), port);
|
||||
|
||||
// Connect the screen capturing to flatbuf connection processing
|
||||
QObject::connect(&qtWrapper, SIGNAL(sig_screenshot(const Image<ColorRgb> &)), &flatbuf, SLOT(setImage(Image<ColorRgb>)));
|
||||
QObject::connect(&qtWrapper, &QtWrapper::sig_screenshot, &flatbuf, &FlatBufferConnection::setImage);
|
||||
|
||||
// Start the capturing
|
||||
qtWrapper.start();
|
||||
|
||||
// Start the application
|
||||
app.exec();
|
||||
QGuiApplication::exec();
|
||||
}
|
||||
}
|
||||
catch (const std::runtime_error & e)
|
||||
|
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
project(hyperion-remote)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Network Widgets REQUIRED)
|
||||
@@ -32,7 +32,6 @@ add_executable(${PROJECT_NAME}
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
commandline
|
||||
hyperion-utils
|
||||
ssdp
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
Qt${QT_VERSION_MAJOR}::Widgets
|
||||
@@ -44,6 +43,12 @@ if (ENABLE_AMLOGIC)
|
||||
)
|
||||
endif()
|
||||
|
||||
if(ENABLE_MDNS)
|
||||
target_link_libraries(${PROJECT_NAME} mdns)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} ssdp)
|
||||
endif()
|
||||
|
||||
if(ENABLE_EFFECTENGINE)
|
||||
target_link_libraries(${PROJECT_NAME} effectengine)
|
||||
endif()
|
||||
|
@@ -9,7 +9,7 @@
|
||||
//forward class decl
|
||||
class Logger;
|
||||
|
||||
const int JSON_DEFAULT_PORT = 19444;
|
||||
const int JSONAPI_DEFAULT_PORT = 19444;
|
||||
|
||||
///
|
||||
/// Connection class to setup an connection to the hyperion server and execute commands
|
||||
@@ -24,7 +24,7 @@ public:
|
||||
/// @param address The port of the Hyperion JSON-server (default port = 19444)
|
||||
/// @param printJson Boolean indicating if the sent and received json is written to stdout
|
||||
///
|
||||
JsonConnection(const QString& host, bool printJson, quint16 port = JSON_DEFAULT_PORT);
|
||||
JsonConnection(const QString& host, bool printJson, quint16 port = JSONAPI_DEFAULT_PORT);
|
||||
|
||||
///
|
||||
/// Destructor
|
||||
|
@@ -9,18 +9,34 @@
|
||||
#include <QCoreApplication>
|
||||
#include <QLocale>
|
||||
|
||||
#include <utils/Logger.h>
|
||||
|
||||
#include "HyperionConfig.h"
|
||||
#include <commandline/Parser.h>
|
||||
|
||||
#ifdef ENABLE_MDNS
|
||||
// mDNS discover
|
||||
#include <mdns/MdnsBrowser.h>
|
||||
#include <mdns/MdnsServiceRegister.h>
|
||||
#else
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#endif
|
||||
#include <utils/NetUtils.h>
|
||||
|
||||
// hyperion-remote include
|
||||
#include "JsonConnection.h"
|
||||
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#include <utils/NetUtils.h>
|
||||
|
||||
#include <utils/DefaultSignalHandler.h>
|
||||
|
||||
// Constants
|
||||
namespace {
|
||||
|
||||
const char SERVICE_TYPE[] = "jsonapi";
|
||||
|
||||
} //End of constants
|
||||
|
||||
|
||||
using namespace commandline;
|
||||
|
||||
/// Count the number of true values in a list of booleans
|
||||
@@ -38,10 +54,10 @@ int count(std::initializer_list<bool> values)
|
||||
|
||||
void showHelp(Option & option){
|
||||
QString shortOption;
|
||||
QString longOption = QString("--%1").arg(option.names().last());
|
||||
QString longOption = QString("--%1").arg(option.names().constLast());
|
||||
|
||||
if(option.names().size() == 2){
|
||||
shortOption = QString("-%1").arg(option.names().first());
|
||||
shortOption = QString("-%1").arg(option.names().constFirst());
|
||||
}
|
||||
|
||||
qWarning() << qPrintable(QString("\t%1\t%2\t%3").arg(shortOption, longOption, option.description()));
|
||||
@@ -51,7 +67,7 @@ int getInstaneIdbyName(const QJsonObject & reply, const QString & name){
|
||||
if(reply.contains("instance")){
|
||||
QJsonArray list = reply.value("instance").toArray();
|
||||
|
||||
for (const QJsonValueRef entry : list) {
|
||||
for ( const auto &entry : qAsConst(list) ) {
|
||||
const QJsonObject obj = entry.toObject();
|
||||
if(obj["friendly_name"] == name && obj["running"].toBool())
|
||||
{
|
||||
@@ -65,10 +81,6 @@ int getInstaneIdbyName(const QJsonObject & reply, const QString & name){
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
#ifndef _WIN32
|
||||
setenv("AVAHI_COMPAT_NOWARN", "1", 1);
|
||||
#endif
|
||||
|
||||
Logger* log = Logger::getInstance("REMOTE");
|
||||
Logger::setLogLevel(Logger::INFO);
|
||||
|
||||
@@ -204,28 +216,34 @@ int main(int argc, char * argv[])
|
||||
showHelp(argYAdjust);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// server searching by ssdp
|
||||
QString address = argAddress.value(parser);
|
||||
if(address == "127.0.0.1" || address == "127.0.0.1:19444")
|
||||
{
|
||||
SSDPDiscover discover;
|
||||
address = discover.getFirstService(searchType::STY_JSONSERVER);
|
||||
if(address.isEmpty())
|
||||
{
|
||||
address = argAddress.value(parser);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve hostname and port (or use default port)
|
||||
QString host;
|
||||
quint16 port{ JSON_DEFAULT_PORT };
|
||||
QString serviceName{ QHostInfo::localHostName() };
|
||||
int port{ JSONAPI_DEFAULT_PORT };
|
||||
|
||||
if (!NetUtils::resolveHostPort(address, host, port))
|
||||
// Split hostname and port (or use default port)
|
||||
QString givenAddress = argAddress.value(parser);
|
||||
if (!NetUtils::resolveHostPort(givenAddress, host, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(address).toStdString());
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(givenAddress).toStdString());
|
||||
}
|
||||
|
||||
// Search available Hyperion services via mDNS, if default/localhost IP is given
|
||||
if (host == "127.0.0.1" || host == "::1")
|
||||
{
|
||||
#ifndef ENABLE_MDNS
|
||||
SSDPDiscover discover;
|
||||
host = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
#endif
|
||||
QHostAddress address;
|
||||
if (!NetUtils::resolveHostToAddress(log, host, address, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Address could not be resolved for hostname: %2").arg(QSTRING_CSTR(host)).toStdString());
|
||||
}
|
||||
host = address.toString();
|
||||
}
|
||||
|
||||
Info(log, "Connecting to Hyperion host: %s, port: %u using service: %s", QSTRING_CSTR(host), port, QSTRING_CSTR(serviceName));
|
||||
|
||||
// create the connection to the hyperion server
|
||||
JsonConnection connection(host, parser.isSet(argPrint), port);
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
project(hyperion-v4l2)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Network Widgets REQUIRED)
|
||||
@@ -28,12 +28,17 @@ target_link_libraries(${PROJECT_NAME}
|
||||
hyperion-utils
|
||||
flatbufconnect
|
||||
flatbuffers
|
||||
ssdp
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
Qt${QT_VERSION_MAJOR}::Widgets
|
||||
)
|
||||
|
||||
if(ENABLE_MDNS)
|
||||
target_link_libraries(${PROJECT_NAME} mdns)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} ssdp)
|
||||
endif()
|
||||
|
||||
if (ENABLE_AMLOGIC)
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
pcre16 dl z
|
||||
|
@@ -21,12 +21,25 @@
|
||||
#include "HyperionConfig.h"
|
||||
#include <commandline/Parser.h>
|
||||
|
||||
#ifdef ENABLE_MDNS
|
||||
// mDNS discover
|
||||
#include <mdns/MdnsBrowser.h>
|
||||
#include <mdns/MdnsServiceRegister.h>
|
||||
#else
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#endif
|
||||
#include <utils/NetUtils.h>
|
||||
|
||||
#include <utils/DefaultSignalHandler.h>
|
||||
|
||||
// Constants
|
||||
namespace {
|
||||
|
||||
const char SERVICE_TYPE[] = "flatbuffer";
|
||||
|
||||
} //End of constants
|
||||
|
||||
using namespace commandline;
|
||||
|
||||
int main(int argc, char** argv)
|
||||
@@ -231,27 +244,35 @@ int main(int argc, char** argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
// server searching by ssdp
|
||||
QString address = argAddress.value(parser);
|
||||
if(address == "127.0.0.1" || address == "127.0.0.1:19400")
|
||||
{
|
||||
SSDPDiscover discover;
|
||||
address = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
if(address.isEmpty())
|
||||
{
|
||||
address = argAddress.value(parser);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve hostname and port (or use default port)
|
||||
QString host;
|
||||
quint16 port{ FLATBUFFER_DEFAULT_PORT };
|
||||
QString serviceName{ QHostInfo::localHostName() };
|
||||
int port{ FLATBUFFER_DEFAULT_PORT };
|
||||
|
||||
if (!NetUtils::resolveHostPort(address, host, port))
|
||||
// Split hostname and port (or use default port)
|
||||
QString givenAddress = argAddress.value(parser);
|
||||
if (!NetUtils::resolveHostPort(givenAddress, host, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(address).toStdString());
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(givenAddress).toStdString());
|
||||
}
|
||||
|
||||
// Search available Hyperion services via mDNS, if default/localhost IP is given
|
||||
if (host == "127.0.0.1" || host == "::1")
|
||||
{
|
||||
#ifndef ENABLE_MDNS
|
||||
SSDPDiscover discover;
|
||||
host = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
#endif
|
||||
|
||||
QHostAddress address;
|
||||
if (!NetUtils::resolveHostToAddress(log, host, address, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Address could not be resolved for hostname: %2").arg(QSTRING_CSTR(host)).toStdString());
|
||||
}
|
||||
host = address.toString();
|
||||
}
|
||||
|
||||
Info(log, "Connecting to Hyperion host: %s, port: %u using service: %s", QSTRING_CSTR(host), port, QSTRING_CSTR(serviceName));
|
||||
|
||||
// Create the Flabuf-connection
|
||||
FlatBufferConnection flatbuf("V4L2 Standalone", host, argPriority.getInt(parser), parser.isSet(argSkipReply), port);
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
project(hyperion-x11)
|
||||
|
||||
find_package(X11 REQUIRED)
|
||||
@@ -35,7 +35,6 @@ target_link_libraries(${PROJECT_NAME}
|
||||
flatbufconnect
|
||||
flatbuffers
|
||||
x11-grabber
|
||||
ssdp
|
||||
${X11_LIBRARIES}
|
||||
${X11_Xrandr_LIB}
|
||||
${X11_Xrender_LIB}
|
||||
@@ -45,6 +44,12 @@ target_link_libraries(${PROJECT_NAME}
|
||||
Qt${QT_VERSION_MAJOR}::Widgets
|
||||
)
|
||||
|
||||
if(ENABLE_MDNS)
|
||||
target_link_libraries(${PROJECT_NAME} mdns)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} ssdp)
|
||||
endif()
|
||||
|
||||
install ( TARGETS ${PROJECT_NAME} DESTINATION "share/hyperion/bin" COMPONENT "hyperion_x11" )
|
||||
|
||||
if(CMAKE_HOST_UNIX)
|
||||
|
@@ -9,10 +9,23 @@
|
||||
#include "X11Wrapper.h"
|
||||
#include "HyperionConfig.h"
|
||||
|
||||
#ifdef ENABLE_MDNS
|
||||
// mDNS discover
|
||||
#include <mdns/MdnsBrowser.h>
|
||||
#include <mdns/MdnsServiceRegister.h>
|
||||
#else
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#endif
|
||||
#include <utils/NetUtils.h>
|
||||
|
||||
// Constants
|
||||
namespace {
|
||||
|
||||
const char SERVICE_TYPE[] = "flatbuffer";
|
||||
|
||||
} //End of constants
|
||||
|
||||
using namespace commandline;
|
||||
|
||||
// save the image as screenshot
|
||||
@@ -111,27 +124,35 @@ int main(int argc, char ** argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
// server searching by ssdp
|
||||
QString address = argAddress.value(parser);
|
||||
if(address == "127.0.0.1" || address == "127.0.0.1:19400")
|
||||
{
|
||||
SSDPDiscover discover;
|
||||
address = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
if(address.isEmpty())
|
||||
{
|
||||
address = argAddress.value(parser);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve hostname and port (or use default port)
|
||||
QString host;
|
||||
quint16 port{ FLATBUFFER_DEFAULT_PORT };
|
||||
QString serviceName{ QHostInfo::localHostName() };
|
||||
int port{ FLATBUFFER_DEFAULT_PORT };
|
||||
|
||||
if (!NetUtils::resolveHostPort(address, host, port))
|
||||
// Split hostname and port (or use default port)
|
||||
QString givenAddress = argAddress.value(parser);
|
||||
if (!NetUtils::resolveHostPort(givenAddress, host, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(address).toStdString());
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(givenAddress).toStdString());
|
||||
}
|
||||
|
||||
// Search available Hyperion services via mDNS, if default/localhost IP is given
|
||||
if (host == "127.0.0.1" || host == "::1")
|
||||
{
|
||||
#ifndef ENABLE_MDNS
|
||||
SSDPDiscover discover;
|
||||
host = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
#endif
|
||||
|
||||
QHostAddress address;
|
||||
if (!NetUtils::resolveHostToAddress(log, host, address, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Address could not be resolved for hostname: %2").arg(QSTRING_CSTR(host)).toStdString());
|
||||
}
|
||||
host = address.toString();
|
||||
}
|
||||
|
||||
Info(log, "Connecting to Hyperion host: %s, port: %u using service: %s", QSTRING_CSTR(host), port, QSTRING_CSTR(serviceName));
|
||||
|
||||
// Create the Flabuf-connection
|
||||
FlatBufferConnection flatbuf("X11 Standalone", host, argPriority.getInt(parser), parser.isSet(argSkipReply), port);
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
project(hyperion-xcb)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Network Widgets REQUIRED)
|
||||
@@ -28,12 +28,17 @@ target_link_libraries(${PROJECT_NAME}
|
||||
flatbufconnect
|
||||
flatbuffers
|
||||
xcb-grabber
|
||||
ssdp
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
Qt${QT_VERSION_MAJOR}::Widgets
|
||||
)
|
||||
|
||||
if(ENABLE_MDNS)
|
||||
target_link_libraries(${PROJECT_NAME} mdns)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} ssdp)
|
||||
endif()
|
||||
|
||||
install (TARGETS ${PROJECT_NAME} DESTINATION "share/hyperion/bin" COMPONENT "hyperion_xcb")
|
||||
|
||||
if(CMAKE_HOST_UNIX)
|
||||
|
@@ -9,10 +9,23 @@
|
||||
#include "XcbWrapper.h"
|
||||
#include "HyperionConfig.h"
|
||||
|
||||
#ifdef ENABLE_MDNS
|
||||
// mDNS discover
|
||||
#include <mdns/MdnsBrowser.h>
|
||||
#include <mdns/MdnsServiceRegister.h>
|
||||
#else
|
||||
// ssdp discover
|
||||
#include <ssdp/SSDPDiscover.h>
|
||||
#endif
|
||||
#include <utils/NetUtils.h>
|
||||
|
||||
// Constants
|
||||
namespace {
|
||||
|
||||
const char SERVICE_TYPE[] = "flatbuffer";
|
||||
|
||||
} //End of constants
|
||||
|
||||
using namespace commandline;
|
||||
|
||||
// save the image as screenshot
|
||||
@@ -111,27 +124,34 @@ int main(int argc, char ** argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
// server searching by ssdp
|
||||
QString address = argAddress.value(parser);
|
||||
if(address == "127.0.0.1" || address == "127.0.0.1:19400")
|
||||
{
|
||||
SSDPDiscover discover;
|
||||
address = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
if(address.isEmpty())
|
||||
{
|
||||
address = argAddress.value(parser);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve hostname and port (or use default port)
|
||||
QString host;
|
||||
quint16 port{ FLATBUFFER_DEFAULT_PORT };
|
||||
QString serviceName{ QHostInfo::localHostName() };
|
||||
int port{ FLATBUFFER_DEFAULT_PORT };
|
||||
|
||||
if (!NetUtils::resolveHostPort(address, host, port))
|
||||
// Split hostname and port (or use default port)
|
||||
QString givenAddress = argAddress.value(parser);
|
||||
if (!NetUtils::resolveHostPort(givenAddress, host, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(address).toStdString());
|
||||
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(givenAddress).toStdString());
|
||||
}
|
||||
|
||||
// Search available Hyperion services via mDNS, if default/localhost IP is given
|
||||
if (host == "127.0.0.1" || host == "::1")
|
||||
{
|
||||
#ifndef ENABLE_MDNS
|
||||
SSDPDiscover discover;
|
||||
host = discover.getFirstService(searchType::STY_FLATBUFSERVER);
|
||||
#endif
|
||||
QHostAddress address;
|
||||
if (!NetUtils::resolveHostToAddress(log, host, address, port))
|
||||
{
|
||||
throw std::runtime_error(QString("Address could not be resolved for hostname: %2").arg(QSTRING_CSTR(host)).toStdString());
|
||||
}
|
||||
host = address.toString();
|
||||
}
|
||||
|
||||
Info(log, "Connecting to Hyperion host: %s, port: %u using service: %s", QSTRING_CSTR(host), port, QSTRING_CSTR(serviceName));
|
||||
|
||||
// Create the Flabuf-connection
|
||||
FlatBufferConnection flatbuf("XCB Standalone", host, argPriority.getInt(parser), parser.isSet(argSkipReply), port);
|
||||
|
||||
|
@@ -78,10 +78,6 @@ if(ENABLE_PROTOBUF_SERVER)
|
||||
target_link_libraries(${PROJECT_NAME} protoserver)
|
||||
endif()
|
||||
|
||||
if (ENABLE_AVAHI)
|
||||
target_link_libraries(${PROJECT_NAME} bonjour)
|
||||
endif (ENABLE_AVAHI)
|
||||
|
||||
if (ENABLE_AMLOGIC)
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
#Qt${QT_VERSION_MAJOR}::Core
|
||||
@@ -137,18 +133,22 @@ if (ENABLE_CEC)
|
||||
target_link_libraries(${PROJECT_NAME} cechandler)
|
||||
endif (ENABLE_CEC)
|
||||
|
||||
if (ENABLE_MDNS)
|
||||
target_link_libraries(${PROJECT_NAME} mdns)
|
||||
endif()
|
||||
|
||||
if (APPLE)
|
||||
set_target_properties( ${PROJECT_NAME} PROPERTIES
|
||||
MACOSX_BUNDLE TRUE
|
||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/cmake/osxbundle/Info.plist.in
|
||||
MACOSX_BUNDLE_BUNDLE_NAME "Hyperion"
|
||||
MACOSX_BUNDLE_BUNDLE_VERSION ${HYPERION_VERSION}
|
||||
MACOSX_BUNDLE_COPYRIGHT "Copyright (c) 2014-2021 Hyperion Project"
|
||||
MACOSX_BUNDLE_COPYRIGHT "Copyright(c) 2014-2022 Hyperion Project"
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "com.hyperion-project.${PROJECT_NAME}"
|
||||
MACOSX_BUNDLE_ICON_FILE "Hyperion.icns"
|
||||
MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME} ${HYPERION_VERSION}"
|
||||
MACOSX_BUNDLE_LONG_VERSION_STRING ${HYPERION_VERSION}
|
||||
MACOSX_BUNDLE_SHORT_VERSION_STRING ${HYPERION_VERSION}
|
||||
MACOSX_BUNDLE_LONG_VERSION_STRING ${HYPERION_VERSION}
|
||||
)
|
||||
|
||||
install ( TARGETS ${PROJECT_NAME} DESTINATION . COMPONENT "Hyperion")
|
||||
@@ -195,7 +195,7 @@ if (WIN32)
|
||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${WINDEPLOYQT_EXECUTABLE} ${WINDEPLOYQT_PARAMS_RUNTIME} "$<TARGET_FILE:${PROJECT_NAME}>")
|
||||
endif()
|
||||
|
||||
find_package(OpenSSL REQUIRED)
|
||||
find_package(OpenSSL REQUIRED)
|
||||
if (OPENSSL_FOUND)
|
||||
string(REGEX MATCHALL "[0-9]+" openssl_versions "${OPENSSL_VERSION}")
|
||||
list(GET openssl_versions 0 openssl_version_major)
|
||||
|
@@ -20,10 +20,12 @@
|
||||
|
||||
#include <HyperionConfig.h> // Required to determine the cmake options
|
||||
|
||||
// bonjour browser
|
||||
#ifdef ENABLE_AVAHI
|
||||
#include <bonjour/bonjourbrowserwrapper.h>
|
||||
// mDNS
|
||||
#ifdef ENABLE_MDNS
|
||||
#include <mdns/MdnsProvider.h>
|
||||
#include <mdns/MdnsBrowser.h>
|
||||
#endif
|
||||
|
||||
#include <jsonserver/JsonServer.h>
|
||||
#include <webserver/WebServer.h>
|
||||
#include "hyperiond.h"
|
||||
@@ -65,36 +67,36 @@
|
||||
#include <cec/CECHandler.h>
|
||||
#endif
|
||||
|
||||
HyperionDaemon *HyperionDaemon::daemon = nullptr;
|
||||
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))
|
||||
#ifdef ENABLE_AVAHI
|
||||
, _bonjourBrowserWrapper(new BonjourBrowserWrapper())
|
||||
, _instanceManager(new HyperionIManager(rootPath, this, readonlyMode))
|
||||
, _authManager(new AuthManager(this, readonlyMode))
|
||||
#ifdef ENABLE_MDNS
|
||||
, _mDNSProvider(nullptr)
|
||||
#endif
|
||||
, _netOrigin(new NetOrigin(this))
|
||||
, _netOrigin(new NetOrigin(this))
|
||||
#if defined(ENABLE_EFFECTENGINE)
|
||||
, _pyInit(new PythonInit())
|
||||
, _pyInit(new PythonInit())
|
||||
#endif
|
||||
, _webserver(nullptr)
|
||||
, _sslWebserver(nullptr)
|
||||
, _jsonServer(nullptr)
|
||||
, _videoGrabber(nullptr)
|
||||
, _dispmanx(nullptr)
|
||||
, _x11Grabber(nullptr)
|
||||
, _xcbGrabber(nullptr)
|
||||
, _amlGrabber(nullptr)
|
||||
, _fbGrabber(nullptr)
|
||||
, _osxGrabber(nullptr)
|
||||
, _qtGrabber(nullptr)
|
||||
, _dxGrabber(nullptr)
|
||||
, _ssdp(nullptr)
|
||||
, _webserver(nullptr)
|
||||
, _sslWebserver(nullptr)
|
||||
, _jsonServer(nullptr)
|
||||
, _videoGrabber(nullptr)
|
||||
, _dispmanx(nullptr)
|
||||
, _x11Grabber(nullptr)
|
||||
, _xcbGrabber(nullptr)
|
||||
, _amlGrabber(nullptr)
|
||||
, _fbGrabber(nullptr)
|
||||
, _osxGrabber(nullptr)
|
||||
, _qtGrabber(nullptr)
|
||||
, _dxGrabber(nullptr)
|
||||
, _ssdp(nullptr)
|
||||
#ifdef ENABLE_CEC
|
||||
, _cecHandler(nullptr)
|
||||
, _cecHandler(nullptr)
|
||||
#endif
|
||||
, _currVideoMode(VideoMode::VIDEO_2D)
|
||||
, _currVideoMode(VideoMode::VIDEO_2D)
|
||||
{
|
||||
HyperionDaemon::daemon = this;
|
||||
|
||||
@@ -117,6 +119,11 @@ HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool lo
|
||||
|
||||
createCecHandler();
|
||||
|
||||
//Create MdnsBrowser singleton in main tread to ensure thread affinity during destruction
|
||||
#ifdef ENABLE_MDNS
|
||||
MdnsBrowser::getInstance();
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_EFFECTENGINE)
|
||||
// init EffectFileHandler
|
||||
EffectFileHandler* efh = new EffectFileHandler(rootPath, getSetting(settings::EFFECTS), this);
|
||||
@@ -135,7 +142,10 @@ HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool lo
|
||||
_instanceManager->startAll();
|
||||
|
||||
//Cleaning up Hyperion before quit
|
||||
connect(parent, SIGNAL(aboutToQuit()), this, SLOT(freeObjects()));
|
||||
connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, &HyperionDaemon::freeObjects);
|
||||
|
||||
//Handle services dependent on the on first instance's availability
|
||||
connect(_instanceManager, &HyperionIManager::instanceStateChanged, this, &HyperionDaemon::handleInstanceStateChange);
|
||||
|
||||
// pipe settings changes from HyperionIManager to Daemon
|
||||
connect(_instanceManager, &HyperionIManager::settingsChanged, this, &HyperionDaemon::settingsChanged);
|
||||
@@ -171,6 +181,62 @@ HyperionDaemon::~HyperionDaemon()
|
||||
#endif
|
||||
}
|
||||
|
||||
void HyperionDaemon::handleInstanceStateChange(InstanceState state, quint8 instance)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case InstanceState::H_STARTED:
|
||||
|
||||
if (instance == 0)
|
||||
{
|
||||
// Start Json server in own thread
|
||||
_jsonServer = new JsonServer(getSetting(settings::JSONSERVER));
|
||||
QThread* jsonThread = new QThread(this);
|
||||
jsonThread->setObjectName("JSONServerThread");
|
||||
_jsonServer->moveToThread(jsonThread);
|
||||
connect(jsonThread, &QThread::started, _jsonServer, &JsonServer::initServer);
|
||||
connect(jsonThread, &QThread::finished, _jsonServer, &JsonServer::deleteLater);
|
||||
connect(this, &HyperionDaemon::settingsChanged, _jsonServer, &JsonServer::handleSettingsUpdate);
|
||||
#ifdef ENABLE_MDNS
|
||||
connect(_jsonServer, &JsonServer::publishService, _mDNSProvider, &MdnsProvider::publishService);
|
||||
#endif
|
||||
jsonThread->start();
|
||||
|
||||
// Start Webserver in own thread
|
||||
QThread* wsThread = new QThread(this);
|
||||
wsThread->setObjectName("WebServerThread");
|
||||
_webserver->moveToThread(wsThread);
|
||||
connect(wsThread, &QThread::started, _webserver, &WebServer::initServer);
|
||||
connect(wsThread, &QThread::finished, _webserver, &WebServer::deleteLater);
|
||||
connect(this, &HyperionDaemon::settingsChanged, _webserver, &WebServer::handleSettingsUpdate);
|
||||
#ifdef ENABLE_MDNS
|
||||
connect(_webserver, &WebServer::publishService, _mDNSProvider, &MdnsProvider::publishService);
|
||||
#endif
|
||||
wsThread->start();
|
||||
|
||||
// Start SSL Webserver in own thread
|
||||
_sslWebserver = new WebServer(getSetting(settings::WEBSERVER), true);
|
||||
QThread* sslWsThread = new QThread(this);
|
||||
sslWsThread->setObjectName("SSLWebServerThread");
|
||||
_sslWebserver->moveToThread(sslWsThread);
|
||||
connect(sslWsThread, &QThread::started, _sslWebserver, &WebServer::initServer);
|
||||
connect(sslWsThread, &QThread::finished, _sslWebserver, &WebServer::deleteLater);
|
||||
connect(this, &HyperionDaemon::settingsChanged, _sslWebserver, &WebServer::handleSettingsUpdate);
|
||||
#ifdef ENABLE_MDNS
|
||||
connect(_sslWebserver, &WebServer::publishService, _mDNSProvider, &MdnsProvider::publishService);
|
||||
#endif
|
||||
sslWsThread->start();
|
||||
}
|
||||
break;
|
||||
|
||||
case InstanceState::H_STOPPED:
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void HyperionDaemon::setVideoMode(VideoMode mode)
|
||||
{
|
||||
if (_currVideoMode != mode)
|
||||
@@ -189,9 +255,25 @@ void HyperionDaemon::freeObjects()
|
||||
{
|
||||
Debug(_log, "Cleaning up Hyperion before quit.");
|
||||
|
||||
// destroy network first as a client might want to access hyperion
|
||||
delete _jsonServer;
|
||||
_jsonServer = nullptr;
|
||||
#ifdef ENABLE_MDNS
|
||||
if (_mDNSProvider != nullptr)
|
||||
{
|
||||
auto mDnsThread = _mDNSProvider->thread();
|
||||
mDnsThread->quit();
|
||||
mDnsThread->wait();
|
||||
delete mDnsThread;
|
||||
_mDNSProvider = nullptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (_jsonServer != nullptr)
|
||||
{
|
||||
auto jsonThread = _jsonServer->thread();
|
||||
jsonThread->quit();
|
||||
jsonThread->wait();
|
||||
delete jsonThread;
|
||||
_jsonServer = nullptr;
|
||||
}
|
||||
|
||||
#if defined(ENABLE_FLATBUF_SERVER)
|
||||
if (_flatBufferServer != nullptr)
|
||||
@@ -258,11 +340,6 @@ void HyperionDaemon::freeObjects()
|
||||
// stop Hyperions (non blocking)
|
||||
_instanceManager->stopAll();
|
||||
|
||||
#ifdef ENABLE_AVAHI
|
||||
delete _bonjourBrowserWrapper;
|
||||
_bonjourBrowserWrapper = nullptr;
|
||||
#endif
|
||||
|
||||
delete _amlGrabber;
|
||||
if (_dispmanx != nullptr)
|
||||
delete _dispmanx;
|
||||
@@ -273,19 +350,26 @@ void HyperionDaemon::freeObjects()
|
||||
delete _videoGrabber;
|
||||
|
||||
_videoGrabber = nullptr;
|
||||
_amlGrabber = nullptr;
|
||||
_dispmanx = nullptr;
|
||||
_fbGrabber = nullptr;
|
||||
_osxGrabber = nullptr;
|
||||
_qtGrabber = nullptr;
|
||||
_dxGrabber = nullptr;
|
||||
_amlGrabber = nullptr;
|
||||
_dispmanx = nullptr;
|
||||
_fbGrabber = nullptr;
|
||||
_osxGrabber = nullptr;
|
||||
_qtGrabber = nullptr;
|
||||
_dxGrabber = nullptr;
|
||||
}
|
||||
|
||||
void HyperionDaemon::startNetworkServices()
|
||||
{
|
||||
// Create Json server
|
||||
_jsonServer = new JsonServer(getSetting(settings::JSONSERVER));
|
||||
connect(this, &HyperionDaemon::settingsChanged, _jsonServer, &JsonServer::handleSettingsUpdate);
|
||||
// Create mDNS-Provider in thread to allow publishing other services
|
||||
#ifdef ENABLE_MDNS
|
||||
_mDNSProvider = new MdnsProvider();
|
||||
QThread* mDnsThread = new QThread(this);
|
||||
mDnsThread->setObjectName("mDNSProviderThread");
|
||||
_mDNSProvider->moveToThread(mDnsThread);
|
||||
connect(mDnsThread, &QThread::started, _mDNSProvider, &MdnsProvider::init);
|
||||
connect(mDnsThread, &QThread::finished, _mDNSProvider, &MdnsProvider::deleteLater);
|
||||
mDnsThread->start();
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_FLATBUF_SERVER)
|
||||
// Create FlatBuffer server in thread
|
||||
@@ -296,6 +380,9 @@ void HyperionDaemon::startNetworkServices()
|
||||
connect(fbThread, &QThread::started, _flatBufferServer, &FlatBufferServer::initServer);
|
||||
connect(fbThread, &QThread::finished, _flatBufferServer, &FlatBufferServer::deleteLater);
|
||||
connect(this, &HyperionDaemon::settingsChanged, _flatBufferServer, &FlatBufferServer::handleSettingsUpdate);
|
||||
#ifdef ENABLE_MDNS
|
||||
connect(_flatBufferServer, &FlatBufferServer::publishService, _mDNSProvider, &MdnsProvider::publishService);
|
||||
#endif
|
||||
fbThread->start();
|
||||
#endif
|
||||
|
||||
@@ -308,36 +395,22 @@ void HyperionDaemon::startNetworkServices()
|
||||
connect(pThread, &QThread::started, _protoServer, &ProtoServer::initServer);
|
||||
connect(pThread, &QThread::finished, _protoServer, &ProtoServer::deleteLater);
|
||||
connect(this, &HyperionDaemon::settingsChanged, _protoServer, &ProtoServer::handleSettingsUpdate);
|
||||
#ifdef ENABLE_MDNS
|
||||
connect(_protoServer, &ProtoServer::publishService, _mDNSProvider, &MdnsProvider::publishService);
|
||||
#endif
|
||||
pThread->start();
|
||||
#endif
|
||||
|
||||
// Create Webserver in thread
|
||||
// Create Webserver
|
||||
_webserver = new WebServer(getSetting(settings::WEBSERVER), false);
|
||||
QThread* wsThread = new QThread(this);
|
||||
wsThread->setObjectName("WebServerThread");
|
||||
_webserver->moveToThread(wsThread);
|
||||
connect(wsThread, &QThread::started, _webserver, &WebServer::initServer);
|
||||
connect(wsThread, &QThread::finished, _webserver, &WebServer::deleteLater);
|
||||
connect(this, &HyperionDaemon::settingsChanged, _webserver, &WebServer::handleSettingsUpdate);
|
||||
wsThread->start();
|
||||
|
||||
// Create SSL Webserver in thread
|
||||
_sslWebserver = new WebServer(getSetting(settings::WEBSERVER), true);
|
||||
QThread* sslWsThread = new QThread(this);
|
||||
sslWsThread->setObjectName("SSLWebServerThread");
|
||||
_sslWebserver->moveToThread(sslWsThread);
|
||||
connect(sslWsThread, &QThread::started, _sslWebserver, &WebServer::initServer);
|
||||
connect(sslWsThread, &QThread::finished, _sslWebserver, &WebServer::deleteLater);
|
||||
connect(this, &HyperionDaemon::settingsChanged, _sslWebserver, &WebServer::handleSettingsUpdate);
|
||||
sslWsThread->start();
|
||||
|
||||
// Create SSDP server in thread
|
||||
// Create SSDP server
|
||||
_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());
|
||||
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);
|
||||
@@ -387,11 +460,11 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
_grabber_cropTop = grabberConfig["cropTop"].toInt(0);
|
||||
_grabber_cropBottom = grabberConfig["cropBottom"].toInt(0);
|
||||
|
||||
#ifdef ENABLE_OSX
|
||||
#ifdef ENABLE_OSX
|
||||
QString type = grabberConfig["device"].toString("osx");
|
||||
#else
|
||||
#else
|
||||
QString type = grabberConfig["device"].toString("auto");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// auto eval of type
|
||||
if (type == "auto")
|
||||
@@ -408,7 +481,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
{
|
||||
type = "amlogic";
|
||||
|
||||
QString amlDevice ("/dev/amvideocap0");
|
||||
QString amlDevice("/dev/amvideocap0");
|
||||
if (!QFile::exists(amlDevice))
|
||||
{
|
||||
Error(_log, "grabber device '%s' for type amlogic not found!", QSTRING_CSTR(amlDevice));
|
||||
@@ -420,13 +493,13 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
QByteArray envDisplay = qgetenv("DISPLAY");
|
||||
if (!envDisplay.isEmpty())
|
||||
{
|
||||
#if defined(ENABLE_X11)
|
||||
#if defined(ENABLE_X11)
|
||||
type = "x11";
|
||||
#elif defined(ENABLE_XCB)
|
||||
#elif defined(ENABLE_XCB)
|
||||
type = "xcb";
|
||||
#else
|
||||
#else
|
||||
type = "qt";
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
// qt -> if nothing other applies
|
||||
else
|
||||
@@ -440,70 +513,70 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
if (_prevType != type)
|
||||
{
|
||||
// stop all capture interfaces
|
||||
#ifdef ENABLE_FB
|
||||
#ifdef ENABLE_FB
|
||||
if (_fbGrabber != nullptr)
|
||||
{
|
||||
_fbGrabber->stop();
|
||||
delete _fbGrabber;
|
||||
_fbGrabber = nullptr;
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_DISPMANX
|
||||
#endif
|
||||
#ifdef ENABLE_DISPMANX
|
||||
if (_dispmanx != nullptr)
|
||||
{
|
||||
_dispmanx->stop();
|
||||
delete _dispmanx;
|
||||
_dispmanx = nullptr;
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_AMLOGIC
|
||||
#endif
|
||||
#ifdef ENABLE_AMLOGIC
|
||||
if (_amlGrabber != nullptr)
|
||||
{
|
||||
_amlGrabber->stop();
|
||||
delete _amlGrabber;
|
||||
_amlGrabber = nullptr;
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_OSX
|
||||
#endif
|
||||
#ifdef ENABLE_OSX
|
||||
if (_osxGrabber != nullptr)
|
||||
{
|
||||
_osxGrabber->stop();
|
||||
delete _osxGrabber;
|
||||
_osxGrabber = nullptr;
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_X11
|
||||
#endif
|
||||
#ifdef ENABLE_X11
|
||||
if (_x11Grabber != nullptr)
|
||||
{
|
||||
_x11Grabber->stop();
|
||||
delete _x11Grabber;
|
||||
_x11Grabber = nullptr;
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_XCB
|
||||
#endif
|
||||
#ifdef ENABLE_XCB
|
||||
if (_xcbGrabber != nullptr)
|
||||
{
|
||||
_xcbGrabber->stop();
|
||||
delete _xcbGrabber;
|
||||
_xcbGrabber = nullptr;
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_QT
|
||||
#endif
|
||||
#ifdef ENABLE_QT
|
||||
if (_qtGrabber != nullptr)
|
||||
{
|
||||
_qtGrabber->stop();
|
||||
delete _qtGrabber;
|
||||
_qtGrabber = nullptr;
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_DX
|
||||
#endif
|
||||
#ifdef ENABLE_DX
|
||||
if (_dxGrabber != nullptr)
|
||||
{
|
||||
_dxGrabber->stop();
|
||||
delete _dxGrabber;
|
||||
_dxGrabber = nullptr;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// create/start capture interface
|
||||
if (type == "framebuffer")
|
||||
@@ -512,10 +585,10 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
{
|
||||
createGrabberFramebuffer(grabberConfig);
|
||||
}
|
||||
#ifdef ENABLE_FB
|
||||
_fbGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_fbGrabber->tryStart();
|
||||
#endif
|
||||
#ifdef ENABLE_FB
|
||||
_fbGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_fbGrabber->tryStart();
|
||||
#endif
|
||||
}
|
||||
else if (type == "dispmanx")
|
||||
{
|
||||
@@ -524,13 +597,13 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
createGrabberDispmanx(grabberConfig);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_DISPMANX
|
||||
#ifdef ENABLE_DISPMANX
|
||||
if (_dispmanx != nullptr)
|
||||
{
|
||||
_dispmanx->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_dispmanx->tryStart();
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
else if (type == "amlogic")
|
||||
{
|
||||
@@ -538,10 +611,10 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
{
|
||||
createGrabberAmlogic(grabberConfig);
|
||||
}
|
||||
#ifdef ENABLE_AMLOGIC
|
||||
_amlGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_amlGrabber->tryStart();
|
||||
#endif
|
||||
#ifdef ENABLE_AMLOGIC
|
||||
_amlGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_amlGrabber->tryStart();
|
||||
#endif
|
||||
}
|
||||
else if (type == "osx")
|
||||
{
|
||||
@@ -549,10 +622,10 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
{
|
||||
createGrabberOsx(grabberConfig);
|
||||
}
|
||||
#ifdef ENABLE_OSX
|
||||
_osxGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_osxGrabber->tryStart();
|
||||
#endif
|
||||
#ifdef ENABLE_OSX
|
||||
_osxGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_osxGrabber->tryStart();
|
||||
#endif
|
||||
}
|
||||
else if (type == "x11")
|
||||
{
|
||||
@@ -560,10 +633,10 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
{
|
||||
createGrabberX11(grabberConfig);
|
||||
}
|
||||
#ifdef ENABLE_X11
|
||||
_x11Grabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_x11Grabber->tryStart();
|
||||
#endif
|
||||
#ifdef ENABLE_X11
|
||||
_x11Grabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_x11Grabber->tryStart();
|
||||
#endif
|
||||
}
|
||||
else if (type == "xcb")
|
||||
{
|
||||
@@ -571,10 +644,10 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
{
|
||||
createGrabberXcb(grabberConfig);
|
||||
}
|
||||
#ifdef ENABLE_XCB
|
||||
_xcbGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_xcbGrabber->tryStart();
|
||||
#endif
|
||||
#ifdef ENABLE_XCB
|
||||
_xcbGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_xcbGrabber->tryStart();
|
||||
#endif
|
||||
}
|
||||
else if (type == "qt")
|
||||
{
|
||||
@@ -582,10 +655,10 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
{
|
||||
createGrabberQt(grabberConfig);
|
||||
}
|
||||
#ifdef ENABLE_QT
|
||||
_qtGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_qtGrabber->tryStart();
|
||||
#endif
|
||||
#ifdef ENABLE_QT
|
||||
_qtGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_qtGrabber->tryStart();
|
||||
#endif
|
||||
}
|
||||
else if (type == "dx")
|
||||
{
|
||||
@@ -593,10 +666,10 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
{
|
||||
createGrabberDx(grabberConfig);
|
||||
}
|
||||
#ifdef ENABLE_DX
|
||||
_dxGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_dxGrabber->tryStart();
|
||||
#endif
|
||||
#ifdef ENABLE_DX
|
||||
_dxGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
_dxGrabber->tryStart();
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -677,7 +750,7 @@ void HyperionDaemon::createGrabberAmlogic(const QJsonObject& /*grabberConfig*/)
|
||||
_amlGrabber = new AmlogicWrapper(
|
||||
_grabber_frequency,
|
||||
_grabber_pixelDecimation
|
||||
);
|
||||
);
|
||||
_amlGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||
|
||||
// connect to HyperionDaemon signal
|
||||
@@ -697,7 +770,7 @@ void HyperionDaemon::createGrabberX11(const QJsonObject& /*grabberConfig*/)
|
||||
_grabber_frequency,
|
||||
_grabber_pixelDecimation,
|
||||
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
||||
);
|
||||
);
|
||||
_x11Grabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||
|
||||
// connect to HyperionDaemon signal
|
||||
@@ -717,7 +790,7 @@ void HyperionDaemon::createGrabberXcb(const QJsonObject& /*grabberConfig*/)
|
||||
_grabber_frequency,
|
||||
_grabber_pixelDecimation,
|
||||
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
||||
);
|
||||
);
|
||||
_xcbGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||
|
||||
// connect to HyperionDaemon signal
|
||||
@@ -738,7 +811,7 @@ void HyperionDaemon::createGrabberQt(const QJsonObject& grabberConfig)
|
||||
grabberConfig["input"].toInt(0),
|
||||
_grabber_pixelDecimation,
|
||||
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
||||
);
|
||||
);
|
||||
|
||||
// connect to HyperionDaemon signal
|
||||
connect(this, &HyperionDaemon::videoMode, _qtGrabber, &QtWrapper::setVideoMode);
|
||||
@@ -758,7 +831,7 @@ void HyperionDaemon::createGrabberDx(const QJsonObject& grabberConfig)
|
||||
grabberConfig["display"].toInt(0),
|
||||
_grabber_pixelDecimation,
|
||||
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
||||
);
|
||||
);
|
||||
|
||||
// connect to HyperionDaemon signal
|
||||
connect(this, &HyperionDaemon::videoMode, _dxGrabber, &DirectXWrapper::setVideoMode);
|
||||
@@ -781,7 +854,7 @@ void HyperionDaemon::createGrabberFramebuffer(const QJsonObject& grabberConfig)
|
||||
_grabber_frequency,
|
||||
devicePath,
|
||||
_grabber_pixelDecimation
|
||||
);
|
||||
);
|
||||
_fbGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||
// connect to HyperionDaemon signal
|
||||
connect(this, &HyperionDaemon::videoMode, _fbGrabber, &FramebufferWrapper::setVideoMode);
|
||||
@@ -793,7 +866,7 @@ 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
|
||||
@@ -801,7 +874,7 @@ void HyperionDaemon::createGrabberFramebuffer(const QJsonObject& grabberConfig)
|
||||
_grabber_frequency,
|
||||
grabberConfig["input"].toInt(0),
|
||||
_grabber_pixelDecimation
|
||||
);
|
||||
);
|
||||
_osxGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||
|
||||
// connect to HyperionDaemon signal
|
||||
@@ -829,10 +902,11 @@ void HyperionDaemon::createCecHandler()
|
||||
{
|
||||
_videoGrabber->handleCecEvent(event);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Info(_log, "CEC handler created");
|
||||
#else
|
||||
Debug(_log, "The CEC handler is not supported on this platform");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -4,6 +4,8 @@
|
||||
#include <QObject>
|
||||
#include <QJsonObject>
|
||||
|
||||
#include <hyperion/HyperionIManager.h>
|
||||
|
||||
#ifdef ENABLE_DISPMANX
|
||||
#include <grabber/DispmanxWrapper.h>
|
||||
#else
|
||||
@@ -70,7 +72,9 @@
|
||||
class HyperionIManager;
|
||||
class SysTray;
|
||||
class JsonServer;
|
||||
class BonjourBrowserWrapper;
|
||||
#ifdef ENABLE_MDNS
|
||||
class MdnsProvider;
|
||||
#endif
|
||||
class WebServer;
|
||||
class SettingsManager;
|
||||
#if defined(ENABLE_EFFECTENGINE)
|
||||
@@ -154,6 +158,12 @@ private slots:
|
||||
///
|
||||
void setVideoMode(VideoMode mode);
|
||||
|
||||
/// @brief Handle whenever the state of a instance (HyperionIManager) changes according to enum instanceState
|
||||
/// @param instaneState A state from enum
|
||||
/// @param instance The index of instance
|
||||
///
|
||||
void handleInstanceStateChange(InstanceState state, quint8 instance);
|
||||
|
||||
private:
|
||||
void createGrabberDispmanx(const QJsonObject & grabberConfig);
|
||||
void createGrabberAmlogic(const QJsonObject & grabberConfig);
|
||||
@@ -168,7 +178,9 @@ private:
|
||||
Logger* _log;
|
||||
HyperionIManager* _instanceManager;
|
||||
AuthManager* _authManager;
|
||||
BonjourBrowserWrapper* _bonjourBrowserWrapper;
|
||||
#ifdef ENABLE_MDNS
|
||||
MdnsProvider* _mDNSProvider;
|
||||
#endif
|
||||
NetOrigin* _netOrigin;
|
||||
#if defined(ENABLE_EFFECTENGINE)
|
||||
PythonInit* _pyInit;
|
||||
|
@@ -130,9 +130,6 @@ QCoreApplication* createApplication(int &argc, char *argv[])
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
#ifndef _WIN32
|
||||
setenv("AVAHI_COMPAT_NOWARN", "1", 1);
|
||||
#endif
|
||||
// initialize main logger and set global log level
|
||||
Logger *log = Logger::getInstance("MAIN");
|
||||
Logger::setLogLevel(Logger::WARNING);
|
||||
|
@@ -1,5 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef Status
|
||||
#undef Status
|
||||
#endif
|
||||
|
||||
#include <QSystemTrayIcon>
|
||||
#include <QMenu>
|
||||
#include <QWidget>
|
||||
|
Reference in New Issue
Block a user