mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
- New Media Foundation grabber
- JsonAPI available grabber fix - commented json config removed
This commit is contained in:
@@ -12,7 +12,7 @@ find_package(Qt5Widgets REQUIRED)
|
||||
if (WIN32)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/win/win_rc.cmake)
|
||||
generate_win_rc_file(hyperiond)
|
||||
endif()
|
||||
endif(WIN32)
|
||||
|
||||
add_executable(hyperiond
|
||||
console.h
|
||||
@@ -27,7 +27,7 @@ add_executable(hyperiond
|
||||
# promote hyperiond as GUI app
|
||||
if (WIN32)
|
||||
target_link_options(hyperiond PUBLIC /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup)
|
||||
endif()
|
||||
endif(WIN32)
|
||||
|
||||
target_link_libraries(hyperiond
|
||||
commandline
|
||||
@@ -52,14 +52,14 @@ endif()
|
||||
|
||||
if (ENABLE_AVAHI)
|
||||
target_link_libraries(hyperiond bonjour)
|
||||
endif ()
|
||||
endif (ENABLE_AVAHI)
|
||||
|
||||
if (ENABLE_AMLOGIC)
|
||||
target_link_libraries(hyperiond
|
||||
Qt5::Core
|
||||
pcre16 dl z
|
||||
)
|
||||
endif()
|
||||
endif(ENABLE_AMLOGIC)
|
||||
|
||||
if (ENABLE_DISPMANX)
|
||||
IF ( "${PLATFORM}" MATCHES rpi)
|
||||
@@ -70,47 +70,51 @@ if (ENABLE_DISPMANX)
|
||||
SET(BCM_LIBRARIES "")
|
||||
ENDIF()
|
||||
target_link_libraries(hyperiond dispmanx-grabber)
|
||||
endif ()
|
||||
endif (ENABLE_DISPMANX)
|
||||
|
||||
if (ENABLE_FB)
|
||||
target_link_libraries(hyperiond framebuffer-grabber)
|
||||
endif ()
|
||||
endif (ENABLE_FB)
|
||||
|
||||
if (ENABLE_OSX)
|
||||
target_link_libraries(hyperiond osx-grabber)
|
||||
endif ()
|
||||
endif (ENABLE_OSX)
|
||||
|
||||
if (ENABLE_V4L2)
|
||||
target_link_libraries(hyperiond v4l2-grabber)
|
||||
endif ()
|
||||
|
||||
if (ENABLE_MF)
|
||||
target_link_libraries(hyperiond mf-grabber)
|
||||
endif (ENABLE_MF)
|
||||
|
||||
if (ENABLE_AMLOGIC)
|
||||
target_link_libraries(hyperiond amlogic-grabber)
|
||||
endif ()
|
||||
endif (ENABLE_AMLOGIC)
|
||||
|
||||
if (ENABLE_X11)
|
||||
if(APPLE)
|
||||
include_directories("/opt/X11/include")
|
||||
endif(APPLE)
|
||||
target_link_libraries(hyperiond x11-grabber)
|
||||
endif ()
|
||||
endif (ENABLE_X11)
|
||||
|
||||
if (ENABLE_XCB)
|
||||
target_link_libraries(hyperiond xcb-grabber)
|
||||
endif ()
|
||||
endif (ENABLE_XCB)
|
||||
|
||||
if (ENABLE_QT)
|
||||
target_link_libraries(hyperiond qt-grabber)
|
||||
endif ()
|
||||
endif (ENABLE_QT)
|
||||
|
||||
if (ENABLE_DX)
|
||||
include_directories(${DIRECTX9_INCLUDE_DIRS})
|
||||
target_link_libraries(hyperiond directx-grabber)
|
||||
endif ()
|
||||
endif (ENABLE_DX)
|
||||
|
||||
if (ENABLE_CEC)
|
||||
target_link_libraries(hyperiond cechandler)
|
||||
endif ()
|
||||
endif (ENABLE_CEC)
|
||||
|
||||
if(NOT WIN32)
|
||||
install ( TARGETS hyperiond DESTINATION "share/hyperion/bin" COMPONENT "Hyperion" )
|
||||
|
@@ -74,6 +74,7 @@ HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool lo
|
||||
, _sslWebserver(nullptr)
|
||||
, _jsonServer(nullptr)
|
||||
, _v4l2Grabber(nullptr)
|
||||
, _mfGrabber(nullptr)
|
||||
, _dispmanx(nullptr)
|
||||
, _x11Grabber(nullptr)
|
||||
, _xcbGrabber(nullptr)
|
||||
@@ -145,7 +146,7 @@ HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool lo
|
||||
// init system capture (framegrabber)
|
||||
handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||
|
||||
// init v4l2 capture
|
||||
// init v4l2 && media foundation capture
|
||||
handleSettingsUpdate(settings::V4L2, getSetting(settings::V4L2));
|
||||
|
||||
// ---- network services -----
|
||||
@@ -253,15 +254,16 @@ void HyperionDaemon::freeObjects()
|
||||
delete _qtGrabber;
|
||||
delete _dxGrabber;
|
||||
delete _v4l2Grabber;
|
||||
delete _mfGrabber;
|
||||
|
||||
_v4l2Grabber = nullptr;
|
||||
|
||||
_amlGrabber = nullptr;
|
||||
_dispmanx = nullptr;
|
||||
_fbGrabber = nullptr;
|
||||
_osxGrabber = nullptr;
|
||||
_qtGrabber = nullptr;
|
||||
_dxGrabber = nullptr;
|
||||
_mfGrabber = nullptr;
|
||||
_amlGrabber = nullptr;
|
||||
_dispmanx = nullptr;
|
||||
_fbGrabber = nullptr;
|
||||
_osxGrabber = nullptr;
|
||||
_qtGrabber = nullptr;
|
||||
_dxGrabber = nullptr;
|
||||
}
|
||||
|
||||
void HyperionDaemon::startNetworkServices()
|
||||
@@ -579,7 +581,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
else if (settingsType == settings::V4L2)
|
||||
{
|
||||
|
||||
#if defined(ENABLE_CEC) || defined(ENABLE_V4L2)
|
||||
#if defined(ENABLE_CEC) || defined(ENABLE_V4L2) || defined(ENABLE_MF)
|
||||
const QJsonObject& grabberConfig = config.object();
|
||||
#endif
|
||||
|
||||
@@ -594,6 +596,62 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_MF)
|
||||
if (_mfGrabber == nullptr)
|
||||
{
|
||||
_mfGrabber = new MFWrapper(
|
||||
grabberConfig["device"].toString("auto"),
|
||||
grabberConfig["width"].toInt(0),
|
||||
grabberConfig["height"].toInt(0),
|
||||
grabberConfig["fps"].toInt(15),
|
||||
grabberConfig["input"].toInt(-1),
|
||||
grabberConfig["sizeDecimation"].toInt(8));
|
||||
|
||||
// Image cropping
|
||||
_mfGrabber->setCropping(
|
||||
grabberConfig["cropLeft"].toInt(0),
|
||||
grabberConfig["cropRight"].toInt(0),
|
||||
grabberConfig["cropTop"].toInt(0),
|
||||
grabberConfig["cropBottom"].toInt(0));
|
||||
|
||||
// Software frame decimation
|
||||
_mfGrabber->setFpsSoftwareDecimation(grabberConfig["fpsSoftwareDecimation"].toInt(1));
|
||||
|
||||
// Hardware encoding format
|
||||
_mfGrabber->setEncoding(grabberConfig["encoding"].toString("NONE"));
|
||||
|
||||
// Signal detection
|
||||
_mfGrabber->setSignalDetectionOffset(
|
||||
grabberConfig["sDHOffsetMin"].toDouble(0.25),
|
||||
grabberConfig["sDVOffsetMin"].toDouble(0.25),
|
||||
grabberConfig["sDHOffsetMax"].toDouble(0.75),
|
||||
grabberConfig["sDVOffsetMax"].toDouble(0.75));
|
||||
_mfGrabber->setSignalThreshold(
|
||||
grabberConfig["redSignalThreshold"].toDouble(0.0) / 100.0,
|
||||
grabberConfig["greenSignalThreshold"].toDouble(0.0) / 100.0,
|
||||
grabberConfig["blueSignalThreshold"].toDouble(0.0) / 100.0,
|
||||
grabberConfig["noSignalCounterThreshold"].toInt(50) );
|
||||
_mfGrabber->setSignalDetectionEnable(grabberConfig["signalDetection"].toBool(true));
|
||||
|
||||
// CEC Standby
|
||||
_mfGrabber->setCecDetectionEnable(grabberConfig["cecDetection"].toBool(true));
|
||||
|
||||
// Brightness, Contrast, Saturation, Hue
|
||||
_mfGrabber->setBrightnessContrastSaturationHue(grabberConfig["hardware_brightness"].toInt(0),
|
||||
grabberConfig["hardware_contrast"].toInt(0),
|
||||
grabberConfig["hardware_saturation"].toInt(0),
|
||||
grabberConfig["hardware_hue"].toInt(0));
|
||||
|
||||
Debug(_log, "Media Foundation grabber created");
|
||||
|
||||
// connect to HyperionDaemon signal
|
||||
connect(this, &HyperionDaemon::videoMode, _mfGrabber, &MFWrapper::setVideoMode);
|
||||
connect(this, &HyperionDaemon::settingsChanged, _mfGrabber, &MFWrapper::handleSettingsUpdate);
|
||||
}
|
||||
#elif !defined(ENABLE_V4L2)
|
||||
Warning(_log, "The Media Foundation grabber can not be instantiated, because it has been left out from the build");
|
||||
#endif
|
||||
|
||||
if (_v4l2Grabber != nullptr)
|
||||
{
|
||||
return;
|
||||
@@ -632,7 +690,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
||||
// connect to HyperionDaemon signal
|
||||
connect(this, &HyperionDaemon::videoMode, _v4l2Grabber, &V4L2Wrapper::setVideoMode);
|
||||
connect(this, &HyperionDaemon::settingsChanged, _v4l2Grabber, &V4L2Wrapper::handleSettingsUpdate);
|
||||
#else
|
||||
#elif !defined(ENABLE_MF)
|
||||
Debug(_log, "The v4l2 grabber is not supported on this platform");
|
||||
#endif
|
||||
}
|
||||
|
@@ -16,6 +16,12 @@
|
||||
typedef QObject V4L2Wrapper;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_MF
|
||||
#include <grabber/MFWrapper.h>
|
||||
#else
|
||||
typedef QObject MFWrapper;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_FB
|
||||
#include <grabber/FramebufferWrapper.h>
|
||||
#else
|
||||
@@ -171,6 +177,7 @@ private:
|
||||
WebServer* _sslWebserver;
|
||||
JsonServer* _jsonServer;
|
||||
V4L2Wrapper* _v4l2Grabber;
|
||||
MFWrapper* _mfGrabber;
|
||||
DispmanxWrapper* _dispmanx;
|
||||
X11Wrapper* _x11Grabber;
|
||||
XcbWrapper* _xcbGrabber;
|
||||
|
Reference in New Issue
Block a user