mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
remove kodiVideoChecker (#475)
This commit is contained in:
parent
0f9f3a17e7
commit
fa75143dbf
@ -22,7 +22,6 @@ The main features of Hyperion are:
|
||||
* Json interface which allows easy integration into scripts
|
||||
* A command line utility to for testing and integration in automated environment
|
||||
* Priority channels are not coupled to a specific led data provider which means that a provider can post led data and leave without the need to maintain a connection to Hyperion. This is ideal for a remote application (like our Android app).
|
||||
* Kodi-checker which checks the playing status of Kodi and decides whether or not to capture the screen.
|
||||
* Black border detector.
|
||||
* A scriptable (Python) effect engine
|
||||
* A web ui to configure and remote control hyperion
|
||||
|
@ -1,14 +0,0 @@
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-play-circle-o fa-fw"></i><span data-i18n="conf_kodi_label_title">Kodi Watch</span></h3>
|
||||
<div class="alert alert-info" role="alert">
|
||||
<strong>HINT 1:</strong> In any case you need to enable the remote control for Kodi. Please checkout Wiki for instructions. LINK<br>
|
||||
<strong>HINT 2:</strong> If you just use a USB-Grabber you could enable the Kodi Watch for this separately at the USB-Grabber page.
|
||||
</div>
|
||||
<div class="row" id="conf_cont"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/js/content_kodi.js"></script>
|
@ -17,7 +17,6 @@
|
||||
"general_access_expert" : "Experte",
|
||||
"general_comp_SMOOTHING" : "Glättung",
|
||||
"general_comp_BLACKBORDER" : "Schwarze Balken Erkennung",
|
||||
"general_comp_KODICHECKER" : "Kodi Überwachung",
|
||||
"general_comp_FORWARDER" : "Weiterleitung",
|
||||
"general_comp_UDPLISTENER" : "UDP Listener",
|
||||
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
|
||||
@ -72,7 +71,6 @@
|
||||
"main_menu_grabber_conf_token" : "Aufnahme Hardware",
|
||||
"main_menu_effect_conf_token" : "Effekte",
|
||||
"main_menu_colors_conf_token" : "Bildverarbeitung",
|
||||
"main_menu_kodiwatch_token" : "Kodi Überwachung",
|
||||
"main_menu_network_conf_token" : "Netzwerk",
|
||||
"main_menu_remotecontrol_token" : "Fernbedienung",
|
||||
"main_menu_effectsconfigurator_token" : "Effekt Konfigurator",
|
||||
@ -168,8 +166,6 @@
|
||||
"conf_network_bobl_intro" : "Boblight Empfänger",
|
||||
"conf_network_udpl_intro" : "UDP Empfänger",
|
||||
"conf_network_forw_intro" : "Leite alles an eine zweite Hyperion Instanz weiter, diese kann dann mit einer anderen LED Steuerung genutzt werden",
|
||||
"conf_kodi_label_title" : "Kodi Überwachung",
|
||||
"conf_kodi_intro" : "Die Kodi Überwachung ermöglicht es dir abhängig vom Kodi Status dein ambient light an oder abzuschalten. Dies ist nicht limitiert auf das selbe Gerät. Du kannst jedes Kodi in deinem lokalen Netzwerk überwachen lassen.",
|
||||
"conf_logging_label_intro" : "Überprüfe die Meldungen im Prokotoll um zu erfahren was Hyperion gerade beschäftigt. Je nach eingestellter Protokoll-Stufe siehst du mehr oder weniger Informationen.",
|
||||
"conf_logging_btn_pbupload" : "Bericht für Supportanfrage hochladen",
|
||||
"conf_logging_btn_autoscroll" : "Automatisch scrollen",
|
||||
@ -497,8 +493,6 @@
|
||||
"edt_conf_v4l2_frameDecimation_expl" : "Der Faktor der Bildverkleinerung",
|
||||
"edt_conf_v4l2_sizeDecimation_title" : "Größenänderung",
|
||||
"edt_conf_v4l2_sizeDecimation_expl" : "Der Faktor der Größenänderung",
|
||||
"edt_conf_v4l2_useKodiChecker_title" : "Nutze Kodi Überwachung",
|
||||
"edt_conf_v4l2_useKodiChecker_expl" : "Starte/Stoppe Aufnahme mithilfe der Kodi Überwachung.",
|
||||
"edt_conf_v4l2_cropLeft_title" : "Entferne links",
|
||||
"edt_conf_v4l2_cropLeft_expl" : "Anzahl der Pixel auf der linken Seite die vom Bild entfernt werden.",
|
||||
"edt_conf_v4l2_cropRight_title" : "Entferne rechts",
|
||||
@ -554,25 +548,6 @@
|
||||
"edt_conf_bb_blurRemoveCnt_expl" : "Anzahl an Pixeln, die zusätzlich vom Rand abgeschnitten werden.",
|
||||
"edt_conf_bb_mode_title" : "Modus",
|
||||
"edt_conf_bb_mode_expl" : "Algorithmus zur Auswertung. (siehe Wiki)",
|
||||
"edt_conf_kodic_heading_title" : "Kodi Überwachung",
|
||||
"edt_conf_kodic_kodiAddress_title" : "Kodi IP Adresse",
|
||||
"edt_conf_kodic_kodiAddress_expl" : "Die IP Adresse von Kodi.",
|
||||
"edt_conf_kodic_kodiTcpPort_title" : "Kodi TCP Port",
|
||||
"edt_conf_kodic_kodiTcpPort_expl" : "Der Kodi TCP Port. Nutze nicht den Webserver Port!",
|
||||
"edt_conf_kodic_grabVideo_title" : "Video",
|
||||
"edt_conf_kodic_grabVideo_expl" : "Wenn aktiviert, ist die Aufnahme aktiv während ein Video abgespielt werden.",
|
||||
"edt_conf_kodic_grabPictures_title" : "Bilder",
|
||||
"edt_conf_kodic_grabPictures_expl" : "Wenn aktiviert, ist die Aufnahme aktiv während Bilder angezeigt werden.",
|
||||
"edt_conf_kodic_grabAudio_title" : "Audio",
|
||||
"edt_conf_kodic_grabAudio_expl" : "Wenn aktiviert, ist die Aufnahme aktiv während Musik abgespielt wird.",
|
||||
"edt_conf_kodic_grabMenu_title" : "Menü",
|
||||
"edt_conf_kodic_grabMenu_expl" : "Wenn aktiviert, ist die Aufnahme aktiv während du dich im Kodi Menü oder Nutzerauswahl befindest.",
|
||||
"edt_conf_kodic_grabPause_title" : "Pause",
|
||||
"edt_conf_kodic_grabPause_expl" : "Wenn aktiviert, ist die Aufnahme aktiv während Kodi pausiert (Video, Musik, Diashow).",
|
||||
"edt_conf_kodic_grabScreensaver_title" : "Bildschirmschoner",
|
||||
"edt_conf_kodic_grabScreensaver_expl" : "Wenn aktiviert, ist die Aufnahme aktiv während Kodi pausiert (Video, Musik, Diashow).",
|
||||
"edt_conf_kodic_enable3DDetection_title" : "Erkenne 3D",
|
||||
"edt_conf_kodic_enable3DDetection_expl" : "Wenn aktiviert, erkenne und wende den passenden 3D Modus an. (kein MVC und nicht für USB Aufnahme)",
|
||||
"edt_conf_fge_heading_title" : "Start Effekt/Farbe",
|
||||
"edt_conf_fge_type_title" : "Typ",
|
||||
"edt_conf_fge_type_expl" : "Wähle zwischen einem Effekt oder einer Farbe.",
|
||||
|
@ -17,7 +17,6 @@
|
||||
"general_access_expert" : "Expert",
|
||||
"general_comp_SMOOTHING" : "Smoothing",
|
||||
"general_comp_BLACKBORDER" : "Blackbar Detection",
|
||||
"general_comp_KODICHECKER" : "Kodi Watch",
|
||||
"general_comp_FORWARDER" : "Forwarder",
|
||||
"general_comp_UDPLISTENER" : "UDP Listener",
|
||||
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
|
||||
@ -72,7 +71,6 @@
|
||||
"main_menu_grabber_conf_token" : "Capturing Hardware",
|
||||
"main_menu_effect_conf_token" : "Effects",
|
||||
"main_menu_colors_conf_token" : "Image Processing",
|
||||
"main_menu_kodiwatch_token" : "Kodi Watch",
|
||||
"main_menu_network_conf_token" : "Network Services",
|
||||
"main_menu_remotecontrol_token" : "Remote Control",
|
||||
"main_menu_effectsconfigurator_token" : "Effects Configurator",
|
||||
@ -168,8 +166,6 @@
|
||||
"conf_network_bobl_intro" : "Receiver for Boblight",
|
||||
"conf_network_udpl_intro" : "Receiver for UDP",
|
||||
"conf_network_forw_intro" : "Forward all input to a second Hyperion instance which could be driven with another led controller",
|
||||
"conf_kodi_label_title" : "Kodi Watch",
|
||||
"conf_kodi_intro" : "The Kodi Watcher enables you to enable and disable the screencapture depending on Kodi state. This is not limited to the same machine, you could observe also a Kodi on any other device at your network.",
|
||||
"conf_logging_label_intro" : "Area to check log messages, depending on loglevel setting you see more or less information.",
|
||||
"conf_logging_btn_pbupload" : "Upload report for support request",
|
||||
"conf_logging_btn_autoscroll" : "Auto scrolling",
|
||||
@ -498,8 +494,6 @@
|
||||
"edt_conf_v4l2_frameDecimation_expl" : "The factor of frame decimation",
|
||||
"edt_conf_v4l2_sizeDecimation_title" : "Size decimation",
|
||||
"edt_conf_v4l2_sizeDecimation_expl" : "The factor of size decimation",
|
||||
"edt_conf_v4l2_useKodiChecker_title" : "Use Kodi Watch",
|
||||
"edt_conf_v4l2_useKodiChecker_expl" : "Start/stop capturing with Kodi Watch results.",
|
||||
"edt_conf_v4l2_cropLeft_title" : "Crop left",
|
||||
"edt_conf_v4l2_cropLeft_expl" : "Count of pixels on the left side that are removed from the picture.",
|
||||
"edt_conf_v4l2_cropRight_title" : "Crop right",
|
||||
@ -555,25 +549,6 @@
|
||||
"edt_conf_bb_blurRemoveCnt_expl" : "Number of pixels that get removed from the detected border to cut away blur.",
|
||||
"edt_conf_bb_mode_title" : "Mode",
|
||||
"edt_conf_bb_mode_expl" : "Algorithm for processing. (see Wiki)",
|
||||
"edt_conf_kodic_heading_title" : "Kodi Watch",
|
||||
"edt_conf_kodic_kodiAddress_title" : "Kodi IP address",
|
||||
"edt_conf_kodic_kodiAddress_expl" : "The IP address of Kodi.",
|
||||
"edt_conf_kodic_kodiTcpPort_title" : "Kodi TCP port",
|
||||
"edt_conf_kodic_kodiTcpPort_expl" : "The TCP port of Kodi. Don't use the webserver port!",
|
||||
"edt_conf_kodic_grabVideo_title" : "Video",
|
||||
"edt_conf_kodic_grabVideo_expl" : "If checked, the capturing is enabled during video playback, else it's disabled.",
|
||||
"edt_conf_kodic_grabPictures_title" : "Pictures",
|
||||
"edt_conf_kodic_grabPictures_expl" : "If checked, the capturing is enabled on picture playback, else it's disabled.",
|
||||
"edt_conf_kodic_grabAudio_title" : "Audio",
|
||||
"edt_conf_kodic_grabAudio_expl" : "If checked, the capturing is enabled during audio playback, else it's disabled.",
|
||||
"edt_conf_kodic_grabMenu_title" : "Menu",
|
||||
"edt_conf_kodic_grabMenu_expl" : "If checked, the capturing is enabled in menu and login screen, else it's disabled.",
|
||||
"edt_conf_kodic_grabPause_title" : "Pause",
|
||||
"edt_conf_kodic_grabPause_expl" : "If checked, the capturing is enabled in pause mode (Music, Video, Diashow), else it's disabled.",
|
||||
"edt_conf_kodic_grabScreensaver_title" : "Screensaver",
|
||||
"edt_conf_kodic_grabScreensaver_expl" : "If checked, the capturing is enabled during screensaver, else it's disabled.",
|
||||
"edt_conf_kodic_enable3DDetection_title" : "Detect 3D",
|
||||
"edt_conf_kodic_enable3DDetection_expl" : "Detect which 3D mode Kodi is running. (no MVC and not for USB capture)",
|
||||
"edt_conf_fge_heading_title" : "Boot Effect/Color",
|
||||
"edt_conf_fge_type_title" : "Type",
|
||||
"edt_conf_fge_type_expl" : "Choose between a color or effect.",
|
||||
|
@ -17,7 +17,7 @@
|
||||
<meta name="msapplication-TileImage" content="/mstile-144x144.png">
|
||||
<link rel="apple-touch-icon-precomposed" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" href="/favicon.png" sizes="32x32">
|
||||
|
||||
|
||||
<title data-i18n="general_webui_title">Hyperion - Web Configuration</title>
|
||||
|
||||
<!-- jQuery -->
|
||||
@ -26,7 +26,7 @@
|
||||
<!-- Hyperion -->
|
||||
<script src="js/hyperion.js"></script>
|
||||
<script src="js/ui_utils.js"></script>
|
||||
|
||||
|
||||
<!-- Colorpicker -->
|
||||
<script src="js/lib/bootstrap-colorpicker.min.js"></script>
|
||||
<link href="css/bootstrap-colorpicker.min.css" rel="stylesheet">
|
||||
@ -41,7 +41,7 @@
|
||||
<script src="js/lib/jquery.i18n.parser.js"></script>
|
||||
<script src="js/lib/jquery.i18n.emitter.js"></script>
|
||||
<script src="js/lib/jquery.i18n.language.js"></script>
|
||||
|
||||
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
@ -71,7 +71,7 @@
|
||||
</div>
|
||||
<style type="text/css"> #loading_overlay, #wrapper{ display: none } </style>
|
||||
</noscript>
|
||||
|
||||
|
||||
<div id="loading_overlay" class="overlay"></div>
|
||||
<div id="wrapper">
|
||||
|
||||
@ -91,12 +91,12 @@
|
||||
|
||||
<ul class="nav navbar-top-links navbar-right">
|
||||
<li class="dropdown" id="btn_instanceswitch" style="display:none">
|
||||
<a>
|
||||
<a>
|
||||
<i class="fa fa-exchange fa-fw"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="dropdown" id="btn_open_ledsim">
|
||||
<a>
|
||||
<a>
|
||||
<i class="fa fa-television fa-fw"></i>
|
||||
</a>
|
||||
</li>
|
||||
@ -165,7 +165,6 @@
|
||||
<li> <a class="inactive mnava" href="#conf_grabber"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span></a> </li>
|
||||
<li> <a class="inactive mnava" href="#conf_effect"><i class="fa fa-spinner fa-fw"></i><span data-i18n="main_menu_effect_conf_token">Effects</span></a> </li>
|
||||
<li> <a class="inactive mnava" href="#conf_colors"><i class="fa fa-photo fa-fw"></i><span data-i18n="main_menu_colors_conf_token">Image Processing</span></a> </li>
|
||||
<li> <a class="inactive mnava" href="#conf_kodi"><i class="fa fa-play-circle-o fa-fw"></i><span data-i18n="main_menu_kodiwatch_token">Kodi Watch</span></a> </li>
|
||||
<li> <a class="inactive mnava" href="#conf_network"><i class="fa fa-sitemap fa-fw"></i><span data-i18n="main_menu_network_conf_token">Network</span></a> </li>
|
||||
</ul>
|
||||
</li>
|
||||
@ -212,7 +211,7 @@
|
||||
|
||||
<div id="container_connection_lost" style="display:none"></div>
|
||||
<div id="container_restart" style="display:none"></div>
|
||||
|
||||
|
||||
<!-- infoDialog -->
|
||||
<div id="modal_dialog" class="modal fade" role="dialog" style="z-index:9999">
|
||||
<div class="modal-dialog">
|
||||
@ -224,7 +223,7 @@
|
||||
</center>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- wizardDialog -->
|
||||
<div id="wizard_modal" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
@ -258,7 +257,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- ledsimDialog -->
|
||||
<div id="ledsim_dialog" style="display:none; z-index:9998">
|
||||
<div data-role="body" style="padding:0px;">
|
||||
@ -284,18 +283,18 @@
|
||||
<script src="js/content_index.js"></script>
|
||||
<script src="js/settings.js"></script>
|
||||
<script src="js/wizard.js"></script>
|
||||
|
||||
|
||||
<!--gijgo dialog-->
|
||||
<script src="js/lib/draggable.min.js"></script>
|
||||
<script src="js/lib/dialog.min.js"></script>
|
||||
<script src="js/ledsim.js"></script>
|
||||
|
||||
|
||||
<!--Client-side download-->
|
||||
<script src='js/lib/download.min.js'></script>
|
||||
|
||||
|
||||
<!--JsonAceEditor-->
|
||||
<script src='js/lib/jsonaceeditor.min.js'></script>
|
||||
<link href="css/jsonaceeditor.min.css" rel="stylesheet" type="text/css">
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,29 +0,0 @@
|
||||
$(document).ready( function() {
|
||||
var conf_editor = null;
|
||||
performTranslation();
|
||||
|
||||
$('#conf_cont').append(createOptPanel('fa-play-circle-o', $.i18n("conf_kodi_label_title"), 'editor_container', 'btn_submit'));
|
||||
if(showOptHelp)
|
||||
{
|
||||
$('#conf_cont').append(createHelpTable(schema.kodiVideoChecker.properties, $.i18n("conf_kodi_label_title")));
|
||||
}
|
||||
|
||||
conf_editor = createJsonEditor('editor_container', {
|
||||
kodiVideoChecker: schema.kodiVideoChecker
|
||||
}, true, true);
|
||||
|
||||
conf_editor.on('change',function() {
|
||||
conf_editor.validate().length ? $('#btn_submit').attr('disabled', true) : $('#btn_submit').attr('disabled', false);
|
||||
});
|
||||
|
||||
$('#btn_submit').off().on('click',function() {
|
||||
requestWriteConfig(conf_editor.getValue());
|
||||
});
|
||||
|
||||
//create introduction
|
||||
if(showOptHelp)
|
||||
createHint("intro", $.i18n('conf_kodi_intro'), "editor_container");
|
||||
|
||||
removeOverlay();
|
||||
});
|
||||
|
@ -108,7 +108,6 @@
|
||||
/// * frameDecimation : Frame decimation factor [default=2]
|
||||
/// * sizeDecimation : Size decimation factor [default=8]
|
||||
/// * priority : Hyperion priority channel [default=900]
|
||||
/// * useKodiChecker : Enable/disable V4L2 according kodichecker sate if set to true [default=false]
|
||||
/// * cropLeft : Cropping from the left [default=0]
|
||||
/// * cropRight : Cropping from the right [default=0]
|
||||
/// * cropTop : Cropping from the top [default=0]
|
||||
@ -133,7 +132,6 @@
|
||||
"frameDecimation" : 2,
|
||||
"sizeDecimation" : 8,
|
||||
"priority" : 240,
|
||||
"useKodiChecker" : false,
|
||||
"cropLeft" : 0,
|
||||
"cropRight" : 0,
|
||||
"cropTop" : 0,
|
||||
@ -201,31 +199,6 @@
|
||||
"mode" : "default"
|
||||
},
|
||||
|
||||
/// The configuration of the Kodi connection used to enable and disable the frame-grabber. Contains the following fields:
|
||||
/// * enable : enable/disable Kodi-Checker
|
||||
/// * kodiAddress : The IP address of the Kodi-host
|
||||
/// * kodiTcpPort : The TCP-port of the Kodi-server
|
||||
/// * grabVideo : Flag indicating that the frame-grabber is on(true) during video playback
|
||||
/// * grabPictures : Flag indicating that the frame-grabber is on(true) during picture show
|
||||
/// * grabAudio : Flag indicating that the frame-grabber is on(true) during audio playback
|
||||
/// * grabMenu : Flag indicating that the frame-grabber is on(true) at the Kodi menu
|
||||
/// * grabPause : Flag indicating that the frame-grabber is on(true) at player state "pause"
|
||||
/// * grabScreensaver : Flag indicating that the frame-grabber is on(true) when Kodi is on screensaver
|
||||
/// * enable3DDetection : Flag indicating that the frame-grabber should switch to a 3D compatible modus if a 3D video is playing
|
||||
"kodiVideoChecker" :
|
||||
{
|
||||
"enable" : true,
|
||||
"kodiAddress" : "127.0.0.1",
|
||||
"kodiTcpPort" : 9090,
|
||||
"grabVideo" : true,
|
||||
"grabPictures" : true,
|
||||
"grabAudio" : true,
|
||||
"grabMenu" : false,
|
||||
"grabPause" : false,
|
||||
"grabScreensaver" : false,
|
||||
"enable3DDetection" : false
|
||||
},
|
||||
|
||||
/// foregroundEffect sets a "booteffect" or "bootcolor" during startup for a given period in ms (duration_ms)
|
||||
/// * enable : if true, foreground effect is enabled
|
||||
/// * type : choose between "color" or "effect"
|
||||
@ -242,7 +215,7 @@
|
||||
"duration_ms" : 3000
|
||||
},
|
||||
|
||||
/// backgroundEffect sets a background effect or color. It is used when all capture devices are stopped (with the help of the kodiVideChecker or manual via remote). Could be also selected via priorities selection.
|
||||
/// backgroundEffect sets a background effect or color. It is used when all capture devices are stopped (manual via remote). Could be also selected via priorities selection.
|
||||
/// * enable : if true, background effect is enabled
|
||||
/// * type : choose between "color" or "effect"
|
||||
/// * color : if type is color, a color is used (RGB) (example: [255,134,0])
|
||||
|
@ -67,7 +67,6 @@
|
||||
"frameDecimation" : 2,
|
||||
"sizeDecimation" : 8,
|
||||
"priority" : 240,
|
||||
"useKodiChecker" : false,
|
||||
"cropLeft" : 0,
|
||||
"cropRight" : 0,
|
||||
"cropTop" : 0,
|
||||
@ -112,20 +111,6 @@
|
||||
"mode" : "default"
|
||||
},
|
||||
|
||||
"kodiVideoChecker" :
|
||||
{
|
||||
"enable" : false,
|
||||
"kodiAddress" : "localhost",
|
||||
"kodiTcpPort" : 9090,
|
||||
"grabVideo" : true,
|
||||
"grabPictures" : true,
|
||||
"grabAudio" : true,
|
||||
"grabMenu" : false,
|
||||
"grabPause" : false,
|
||||
"grabScreensaver" : false,
|
||||
"enable3DDetection" : false
|
||||
},
|
||||
|
||||
"foregroundEffect" :
|
||||
{
|
||||
"enable" : true,
|
||||
|
@ -19,8 +19,7 @@ public:
|
||||
double redSignalThreshold,
|
||||
double greenSignalThreshold,
|
||||
double blueSignalThreshold,
|
||||
const int priority,
|
||||
bool useGrabbingMode);
|
||||
const int priority);
|
||||
virtual ~V4L2Wrapper() {};
|
||||
|
||||
bool getSignalDetectionEnable();
|
||||
|
@ -6,7 +6,6 @@
|
||||
#include <utils/ColorRgb.h>
|
||||
#include <utils/Image.h>
|
||||
#include <utils/VideoMode.h>
|
||||
#include <utils/GrabbingMode.h>
|
||||
#include <utils/ImageResampler.h>
|
||||
#include <utils/Logger.h>
|
||||
|
||||
@ -26,7 +25,7 @@ public:
|
||||
virtual void setVideoMode(VideoMode mode);
|
||||
|
||||
virtual void setCropping(unsigned cropLeft, unsigned cropRight, unsigned cropTop, unsigned cropBottom);
|
||||
|
||||
|
||||
/// gets resulting height of image
|
||||
virtual const int getImageWidth() { return _width; };
|
||||
|
||||
@ -39,13 +38,13 @@ protected:
|
||||
ImageResampler _imageResampler;
|
||||
|
||||
bool _useImageResampler;
|
||||
|
||||
|
||||
/// the selected VideoMode
|
||||
VideoMode _videoMode;
|
||||
|
||||
/// With of the captured snapshot [pixels]
|
||||
int _width;
|
||||
|
||||
|
||||
/// Height of the captured snapshot [pixels]
|
||||
int _height;
|
||||
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
#include <utils/Logger.h>
|
||||
#include <utils/Components.h>
|
||||
#include <utils/GrabbingMode.h>
|
||||
#include <hyperion/Hyperion.h>
|
||||
#include <hyperion/ImageProcessor.h>
|
||||
#include <utils/Image.h>
|
||||
@ -21,11 +20,11 @@ class DispmanxFrameGrabber;
|
||||
class GrabberWrapper : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
public:
|
||||
GrabberWrapper(QString grabberName, Grabber * ggrabber, unsigned width, unsigned height, const unsigned updateRate_Hz, const int priority, hyperion::Components grabberComponentId=hyperion::COMP_GRABBER);
|
||||
|
||||
|
||||
virtual ~GrabberWrapper();
|
||||
|
||||
|
||||
///
|
||||
/// Starts the grabber wich produces led values with the specified update rate
|
||||
///
|
||||
@ -63,10 +62,10 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public slots:
|
||||
void componentStateChanged(const hyperion::Components component, bool enable);
|
||||
|
||||
|
||||
///
|
||||
/// virtual method, should perform single frame grab and computes the led-colors
|
||||
///
|
||||
@ -74,12 +73,6 @@ public slots:
|
||||
|
||||
void actionWrapper();
|
||||
|
||||
///
|
||||
/// Set the grabbing mode
|
||||
/// @param[in] mode The new grabbing mode
|
||||
///
|
||||
void setGrabbingMode(const GrabbingMode mode);
|
||||
|
||||
///
|
||||
/// Set the video mode (2D/3D)
|
||||
/// @param[in] mode The new video mode
|
||||
@ -94,9 +87,9 @@ signals:
|
||||
protected:
|
||||
|
||||
void setColors(const std::vector<ColorRgb> &ledColors, const int timeout_ms);
|
||||
|
||||
|
||||
QString _grabberName;
|
||||
|
||||
|
||||
/// Pointer to Hyperion for writing led values
|
||||
Hyperion * _hyperion;
|
||||
|
||||
@ -114,7 +107,7 @@ protected:
|
||||
|
||||
/// The Logger instance
|
||||
Logger * _log;
|
||||
|
||||
|
||||
// forwarding enabled
|
||||
bool _forward;
|
||||
|
||||
@ -122,7 +115,7 @@ protected:
|
||||
ImageProcessor * _processor;
|
||||
|
||||
hyperion::Components _grabberComponentId;
|
||||
|
||||
|
||||
Grabber *_ggrabber;
|
||||
|
||||
/// The image used for grabbing frames
|
||||
@ -130,7 +123,6 @@ protected:
|
||||
|
||||
/// The list with computed led colors
|
||||
std::vector<ColorRgb> _ledColors;
|
||||
|
||||
|
||||
bool _imageProcessorEnabled;
|
||||
};
|
||||
|
||||
|
@ -22,7 +22,6 @@
|
||||
#include <utils/Logger.h>
|
||||
#include <utils/Components.h>
|
||||
#include <utils/VideoMode.h>
|
||||
#include <utils/GrabbingMode.h>
|
||||
|
||||
// Hyperion includes
|
||||
#include <hyperion/LedString.h>
|
||||
@ -36,8 +35,7 @@
|
||||
#include <effectengine/ActiveEffectDefinition.h>
|
||||
#include <effectengine/EffectSchema.h>
|
||||
|
||||
// KodiVideoChecker includes
|
||||
#include <kodivideochecker/KODIVideoChecker.h>
|
||||
// bonjour includes
|
||||
#include <bonjour/bonjourservicebrowser.h>
|
||||
#include <bonjour/bonjourserviceresolver.h>
|
||||
|
||||
@ -48,7 +46,6 @@ class RgbTransform;
|
||||
class EffectEngine;
|
||||
class RgbChannelAdjustment;
|
||||
class MultiColorAdjustment;
|
||||
class KODIVideoChecker;
|
||||
|
||||
///
|
||||
/// The main class of Hyperion. This gives other 'users' access to the attached LedDevice through
|
||||
@ -186,7 +183,7 @@ public:
|
||||
///
|
||||
/// Enable/Disable components during runtime
|
||||
///
|
||||
/// @param component The component [SMOOTHING, BLACKBORDER, KODICHECKER, FORWARDER, UDPLISTENER, BOBLIGHT_SERVER, GRABBER]
|
||||
/// @param component The component [SMOOTHING, BLACKBORDER, FORWARDER, UDPLISTENER, BOBLIGHT_SERVER, GRABBER]
|
||||
/// @param state The state of the component [true | false]
|
||||
///
|
||||
void setComponentState(const hyperion::Components component, const bool state);
|
||||
@ -215,7 +212,6 @@ public:
|
||||
unsigned addSmoothingConfig(int settlingTime_ms, double ledUpdateFrequency_hz=25.0, unsigned updateDelay=0);
|
||||
|
||||
VideoMode getCurrentVideoMode() { return _videoMode; };
|
||||
GrabbingMode getCurrentGrabbingMode() { return _grabbingMode; };
|
||||
|
||||
public slots:
|
||||
///
|
||||
@ -311,13 +307,6 @@ public slots:
|
||||
///
|
||||
void setVideoMode(VideoMode mode);
|
||||
|
||||
///
|
||||
/// Set the grabbing mode
|
||||
/// @param[in] mode The new grabbing mode
|
||||
///
|
||||
void setGrabbingMode(const GrabbingMode mode);
|
||||
|
||||
|
||||
public:
|
||||
static Hyperion *_hyperion;
|
||||
|
||||
@ -365,8 +354,6 @@ signals:
|
||||
/// Signal emitted when a 3D movie is detected
|
||||
void videoMode(VideoMode mode);
|
||||
|
||||
void grabbingMode(GrabbingMode mode);
|
||||
|
||||
private slots:
|
||||
///
|
||||
/// Updates the priority muxer with the current time and (re)writes the led color with applied
|
||||
@ -478,5 +465,4 @@ private:
|
||||
QTimer _fsi_blockTimer;
|
||||
|
||||
VideoMode _videoMode;
|
||||
GrabbingMode _grabbingMode;
|
||||
};
|
||||
|
@ -1,172 +0,0 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
// system includes
|
||||
#include <cstdint>
|
||||
|
||||
// QT includes
|
||||
#include <QTimer>
|
||||
#include <QString>
|
||||
#include <QTcpSocket>
|
||||
#include <QByteArray>
|
||||
|
||||
// Hyperion includes
|
||||
#include <hyperion/Hyperion.h>
|
||||
|
||||
// Utils includes
|
||||
#include <utils/GrabbingMode.h>
|
||||
#include <utils/VideoMode.h>
|
||||
#include <utils/Logger.h>
|
||||
#include <utils/Components.h>
|
||||
|
||||
///
|
||||
/// This class will check if KODI is playing something. When it does not, this class will send all black data to Hyperion.
|
||||
/// This allows grabbed screen data to be overriden while in the KODI menus.
|
||||
///
|
||||
/// Note: The json TCP server needs to be enabled manually in KODI in System/Settings/Network/Services
|
||||
///
|
||||
class KODIVideoChecker : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
static KODIVideoChecker* initInstance(const QString & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection);
|
||||
static KODIVideoChecker* getInstance();
|
||||
|
||||
~KODIVideoChecker();
|
||||
void setConfig(const QString & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection);
|
||||
|
||||
bool componentState() { return _active; }
|
||||
|
||||
public slots:
|
||||
///
|
||||
/// Start polling KODI
|
||||
///
|
||||
void start();
|
||||
|
||||
///
|
||||
/// Stop polling KODI
|
||||
///
|
||||
void stop();
|
||||
|
||||
void componentStateChanged(const hyperion::Components component, bool enable);
|
||||
|
||||
signals:
|
||||
/// Signal emitted when the grabbing mode changes
|
||||
void grabbingMode(GrabbingMode grabbingMode);
|
||||
|
||||
/// Signal emitted when a 3D movie is detected
|
||||
void videoMode(VideoMode videoMode);
|
||||
|
||||
private slots:
|
||||
/// Receive a reply from KODI
|
||||
void receiveReply();
|
||||
|
||||
/// Called when connected to KODI
|
||||
void connected();
|
||||
|
||||
/// Called when disconnected from KODI
|
||||
void disconnected();
|
||||
|
||||
/// reconnect to KODI
|
||||
void reconnect();
|
||||
|
||||
/// Called when a connection error was encountered
|
||||
void connectionError(QAbstractSocket::SocketError error);
|
||||
|
||||
private:
|
||||
///
|
||||
/// Constructor
|
||||
///
|
||||
/// @param address Network address of the KODI instance
|
||||
/// @param port Port number to use (KODI default = 9090)
|
||||
/// @param grabVideo Whether or not to grab when the KODI video player is playing
|
||||
/// @param grabPhoto Whether or not to grab when the KODI photo player is playing
|
||||
/// @param grabAudio Whether or not to grab when the KODI audio player is playing
|
||||
/// @param grabMenu Whether or not to grab when nothing is playing (in KODI menu)
|
||||
/// @param grabScreensaver Whether or not to grab when the KODI screensaver is activated
|
||||
/// @param enable3DDetection Wheter or not to enable the detection of 3D movies playing
|
||||
///
|
||||
KODIVideoChecker(const QString & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection);
|
||||
|
||||
/// Set the grabbing mode
|
||||
void setGrabbingMode(GrabbingMode grabbingMode);
|
||||
|
||||
/// Set the video mode
|
||||
void setVideoMode(VideoMode videoMode);
|
||||
|
||||
private:
|
||||
/// The network address of the KODI instance
|
||||
QString _address;
|
||||
|
||||
/// The port number of KODI
|
||||
uint16_t _port;
|
||||
|
||||
/// The JSON-RPC message to check the active player
|
||||
const QString _activePlayerRequest;
|
||||
|
||||
/// The JSON-RPC message to check the currently playing file
|
||||
const QString _currentPlayingItemRequest;
|
||||
|
||||
/// The JSON-RPC message to check the screensaver
|
||||
const QString _checkScreensaverRequest;
|
||||
|
||||
/// The JSON-RPC message to check the active stereoscopicmode
|
||||
const QString _getStereoscopicMode;
|
||||
|
||||
/// The JSON-RPC message to check the kodi version
|
||||
QString _getKodiVersion;
|
||||
|
||||
/// The JSON-RPC message to check the current Playback State
|
||||
const QString _getCurrentPlaybackState;
|
||||
|
||||
/// The QT TCP Socket with connection to KODI
|
||||
QTcpSocket _socket;
|
||||
|
||||
/// Flag indicating whether or not to grab when the KODI video player is playing
|
||||
bool _grabVideo;
|
||||
|
||||
/// Flag indicating whether or not to grab when the KODI photo player is playing
|
||||
bool _grabPhoto;
|
||||
|
||||
/// Flag indicating whether or not to grab when the KODI audio player is playing
|
||||
bool _grabAudio;
|
||||
|
||||
/// Flag indicating whether or not to grab when KODI is playing nothing (in menu)
|
||||
bool _grabMenu;
|
||||
|
||||
/// Flag indicating whether or not to grab when the KODI videoplayer is at pause state
|
||||
bool _grabPause;
|
||||
|
||||
/// Flag indicating whether or not to grab when the KODI screensaver is activated
|
||||
bool _grabScreensaver;
|
||||
|
||||
/// Flag indicating wheter or not to enable the detection of 3D movies playing
|
||||
bool _enable3DDetection;
|
||||
|
||||
/// Previous emitted grab mode
|
||||
GrabbingMode _previousGrabbingMode;
|
||||
|
||||
/// Previous emitted video mode
|
||||
VideoMode _previousVideoMode;
|
||||
|
||||
/// Current Playback State
|
||||
bool _currentPlaybackState;
|
||||
|
||||
/// Current Kodi PlayerID
|
||||
int _currentPlayerID;
|
||||
|
||||
/// KODI version number
|
||||
int _kodiVersion;
|
||||
|
||||
/// Logger Instance
|
||||
Logger * _log;
|
||||
|
||||
/// flag indicating state
|
||||
bool _active;
|
||||
|
||||
/// flag indicates if playbackState is valid
|
||||
bool _getCurrentPlaybackStateInitialized;
|
||||
|
||||
static KODIVideoChecker* _kodichecker;
|
||||
};
|
@ -11,7 +11,6 @@
|
||||
// hyperion util
|
||||
#include <utils/Image.h>
|
||||
#include <utils/ColorRgb.h>
|
||||
#include <utils/GrabbingMode.h>
|
||||
#include <utils/VideoMode.h>
|
||||
#include <utils/Logger.h>
|
||||
|
||||
@ -90,9 +89,8 @@ private slots:
|
||||
signals:
|
||||
|
||||
///
|
||||
/// KODI Video Checker Message
|
||||
/// emits when a new videoMode was requested from proto client
|
||||
///
|
||||
void setGrabbingMode(const GrabbingMode mode);
|
||||
void setVideoMode(const VideoMode videoMode);
|
||||
|
||||
private:
|
||||
@ -121,9 +119,9 @@ private:
|
||||
|
||||
QTimer _timer;
|
||||
QAbstractSocket::SocketState _prevSocketState;
|
||||
|
||||
|
||||
/// The buffer used for reading data from the socket
|
||||
QByteArray _receiveBuffer;
|
||||
|
||||
|
||||
Logger * _log;
|
||||
};
|
||||
|
@ -4,7 +4,6 @@
|
||||
// hyperion includes
|
||||
#include <utils/Image.h>
|
||||
#include <utils/ColorRgb.h>
|
||||
#include <utils/GrabbingMode.h>
|
||||
#include <utils/VideoMode.h>
|
||||
|
||||
// hyperion proto includes
|
||||
@ -18,12 +17,11 @@ class ProtoConnectionWrapper : public QObject
|
||||
public:
|
||||
ProtoConnectionWrapper(const QString &address, int priority, int duration_ms, bool skipProtoReply);
|
||||
virtual ~ProtoConnectionWrapper();
|
||||
|
||||
signals:
|
||||
|
||||
signals:
|
||||
///
|
||||
/// Forwarding KODI Video Checker Message
|
||||
/// Forwarding new videoMode
|
||||
///
|
||||
void setGrabbingMode(const GrabbingMode mode);
|
||||
void setVideoMode(const VideoMode videoMode);
|
||||
|
||||
public slots:
|
||||
|
@ -15,7 +15,6 @@
|
||||
// hyperion includes
|
||||
#include <utils/Image.h>
|
||||
#include <utils/ColorRgb.h>
|
||||
#include <utils/GrabbingMode.h>
|
||||
#include <utils/VideoMode.h>
|
||||
#include <utils/Logger.h>
|
||||
|
||||
@ -56,9 +55,8 @@ public slots:
|
||||
|
||||
signals:
|
||||
///
|
||||
/// Forwarding KODI Checker
|
||||
/// Forwarding videoMode
|
||||
///
|
||||
void grabbingMode(const GrabbingMode mode);
|
||||
void videoMode(const VideoMode VideoMode);
|
||||
|
||||
private slots:
|
||||
@ -91,7 +89,7 @@ private:
|
||||
|
||||
/// Logger instance
|
||||
Logger * _log;
|
||||
|
||||
|
||||
/// flag if forwarder is enabled
|
||||
bool _forwarder_enabled;
|
||||
};
|
||||
|
@ -11,7 +11,6 @@ enum Components
|
||||
COMP_INVALID,
|
||||
COMP_SMOOTHING,
|
||||
COMP_BLACKBORDER,
|
||||
COMP_KODICHECKER,
|
||||
COMP_FORWARDER,
|
||||
COMP_UDPLISTENER,
|
||||
COMP_BOBLIGHTSERVER,
|
||||
@ -29,7 +28,6 @@ inline const char* componentToString(Components c)
|
||||
{
|
||||
case COMP_SMOOTHING: return "Smoothing";
|
||||
case COMP_BLACKBORDER: return "Blackborder detector";
|
||||
case COMP_KODICHECKER: return "KodiVideoChecker";
|
||||
case COMP_FORWARDER: return "Json/Proto forwarder";
|
||||
case COMP_UDPLISTENER: return "UDP listener";
|
||||
case COMP_BOBLIGHTSERVER:return "Boblight server";
|
||||
@ -49,7 +47,6 @@ inline const char* componentToIdString(Components c)
|
||||
{
|
||||
case COMP_SMOOTHING: return "SMOOTHING";
|
||||
case COMP_BLACKBORDER: return "BLACKBORDER";
|
||||
case COMP_KODICHECKER: return "KODICHECKER";
|
||||
case COMP_FORWARDER: return "FORWARDER";
|
||||
case COMP_UDPLISTENER: return "UDPLISTENER";
|
||||
case COMP_BOBLIGHTSERVER:return "BOBLIGHTSERVER";
|
||||
@ -68,7 +65,6 @@ inline Components stringToComponent(QString component)
|
||||
component = component.toUpper();
|
||||
if (component == "SMOOTHING") return COMP_SMOOTHING;
|
||||
if (component == "BLACKBORDER") return COMP_BLACKBORDER;
|
||||
if (component == "KODICHECKER") return COMP_KODICHECKER;
|
||||
if (component == "FORWARDER") return COMP_FORWARDER;
|
||||
if (component == "UDPLISTENER") return COMP_UDPLISTENER;
|
||||
if (component == "BOBLIGHTSERVER")return COMP_BOBLIGHTSERVER;
|
||||
|
@ -1,35 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <QString>
|
||||
|
||||
/**
|
||||
* Enumeration of the possible modes in which frame-grabbing is performed.
|
||||
*/
|
||||
enum GrabbingMode
|
||||
{
|
||||
/** Frame grabbing is switched off */
|
||||
GRABBINGMODE_OFF,
|
||||
/** Frame grabbing during video */
|
||||
GRABBINGMODE_VIDEO,
|
||||
GRABBINGMODE_PAUSE,
|
||||
GRABBINGMODE_PHOTO,
|
||||
GRABBINGMODE_AUDIO,
|
||||
GRABBINGMODE_MENU,
|
||||
GRABBINGMODE_SCREENSAVER,
|
||||
GRABBINGMODE_INVALID
|
||||
};
|
||||
|
||||
inline QString grabbingMode2String(GrabbingMode mode)
|
||||
{
|
||||
switch(mode)
|
||||
{
|
||||
case GRABBINGMODE_OFF: return "OFF";
|
||||
case GRABBINGMODE_VIDEO: return "VIDEO";
|
||||
case GRABBINGMODE_PAUSE: return "PAUSE";
|
||||
case GRABBINGMODE_PHOTO: return "PHOTO";
|
||||
case GRABBINGMODE_AUDIO: return "AUDIO";
|
||||
case GRABBINGMODE_MENU: return "MENU";
|
||||
case GRABBINGMODE_SCREENSAVER: return "SCREENSAVER";
|
||||
default: return "INVALID";
|
||||
}
|
||||
}
|
@ -13,7 +13,6 @@ add_subdirectory(boblightserver)
|
||||
add_subdirectory(udplistener)
|
||||
add_subdirectory(leddevice)
|
||||
add_subdirectory(utils)
|
||||
add_subdirectory(kodivideochecker)
|
||||
add_subdirectory(effectengine)
|
||||
add_subdirectory(grabber)
|
||||
add_subdirectory(webconfig)
|
||||
|
@ -15,8 +15,7 @@ V4L2Wrapper::V4L2Wrapper(const QString &device,
|
||||
double redSignalThreshold,
|
||||
double greenSignalThreshold,
|
||||
double blueSignalThreshold,
|
||||
const int priority,
|
||||
bool useGrabbingMode)
|
||||
const int priority)
|
||||
: GrabberWrapper("V4L2:"+device, &_grabber, width, height, 8, priority, hyperion::COMP_V4L)
|
||||
, _grabber(device,
|
||||
input,
|
||||
@ -41,10 +40,6 @@ V4L2Wrapper::V4L2Wrapper(const QString &device,
|
||||
QObject::connect(&_grabber, SIGNAL(newFrame(Image<ColorRgb>)), this, SLOT(newFrame(Image<ColorRgb>)), Qt::DirectConnection);
|
||||
QObject::connect(&_grabber, SIGNAL(readError(const char*)), this, SLOT(readError(const char*)), Qt::DirectConnection);
|
||||
|
||||
if (!useGrabbingMode)
|
||||
{
|
||||
disconnect(_hyperion, SIGNAL(grabbingMode(GrabbingMode)), this, 0);
|
||||
}
|
||||
_timer.setInterval(500);
|
||||
}
|
||||
|
||||
@ -83,7 +78,7 @@ void V4L2Wrapper::readError(const char* err)
|
||||
Error(_log, "stop grabber, because reading device failed. (%s)", err);
|
||||
stop();
|
||||
}
|
||||
|
||||
|
||||
void V4L2Wrapper::checkSources()
|
||||
{
|
||||
if ( _hyperion->isCurrentPriority(_priority))
|
||||
|
@ -27,14 +27,13 @@ GrabberWrapper::GrabberWrapper(QString grabberName, Grabber * ggrabber, unsigned
|
||||
|
||||
_image.resize(width, height);
|
||||
_processor->setSize(width, height);
|
||||
|
||||
|
||||
_forward = _hyperion->getForwarder()->protoForwardingEnabled();
|
||||
_hyperion->getComponentRegister().componentStateChanged(hyperion::COMP_BLACKBORDER, _processor->blackBorderDetectorEnabled());
|
||||
qRegisterMetaType<hyperion::Components>("hyperion::Components");
|
||||
|
||||
connect(_hyperion, SIGNAL(imageToLedsMappingChanged(int)), _processor, SLOT(setLedMappingType(int)));
|
||||
connect(_hyperion, SIGNAL(imageToLedsMappingChanged(int)), _processor, SLOT(setLedMappingType(int)));
|
||||
connect(_hyperion, SIGNAL(componentStateChanged(hyperion::Components,bool)), this, SLOT(componentStateChanged(hyperion::Components,bool)));
|
||||
connect(_hyperion, SIGNAL(grabbingMode(GrabbingMode)), this, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
connect(_hyperion, SIGNAL(videoMode(VideoMode)), this, SLOT(setVideoMode(VideoMode)));
|
||||
connect(this, SIGNAL(emitImage(int, const Image<ColorRgb>&, const int)), _hyperion, SLOT(setImage(int, const Image<ColorRgb>&, const int)) );
|
||||
connect(&_timer, SIGNAL(timeout()), this, SLOT(actionWrapper()));
|
||||
@ -104,18 +103,6 @@ void GrabberWrapper::componentStateChanged(const hyperion::Components component,
|
||||
}
|
||||
}
|
||||
|
||||
void GrabberWrapper::setGrabbingMode(const GrabbingMode mode)
|
||||
{
|
||||
if (mode == GRABBINGMODE_OFF)
|
||||
{
|
||||
stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
start();
|
||||
}
|
||||
}
|
||||
|
||||
void GrabberWrapper::setColors(const std::vector<ColorRgb> &ledColors, const int timeout_ms)
|
||||
{
|
||||
_hyperion->setColors(_priority, ledColors, timeout_ms, true, _grabberComponentId);
|
||||
@ -171,4 +158,3 @@ void GrabberWrapper::setImageProcessorEnabled(bool enable)
|
||||
{
|
||||
_imageProcessorEnabled = enable;
|
||||
}
|
||||
|
||||
|
@ -402,7 +402,6 @@ Hyperion::Hyperion(const QJsonObject &qjsonConfig, const QString configFile, con
|
||||
, _bonjourBrowser(this)
|
||||
, _bonjourResolver(this)
|
||||
, _videoMode(VIDEO_2D)
|
||||
, _grabbingMode(GRABBINGMODE_INVALID)
|
||||
{
|
||||
|
||||
if (!_raw2ledAdjustment->verifyAdjustments())
|
||||
@ -814,12 +813,6 @@ void Hyperion::setVideoMode(VideoMode mode)
|
||||
emit videoMode(mode);
|
||||
}
|
||||
|
||||
void Hyperion::setGrabbingMode(GrabbingMode mode)
|
||||
{
|
||||
_grabbingMode = mode;
|
||||
emit grabbingMode(mode);
|
||||
}
|
||||
|
||||
|
||||
void Hyperion::hyperionStateChanged()
|
||||
{
|
||||
|
@ -35,10 +35,6 @@
|
||||
{
|
||||
"$ref": "schema-blackborderdetector.json"
|
||||
},
|
||||
"kodiVideoChecker" :
|
||||
{
|
||||
"$ref": "schema-kodiVideoChecker.json"
|
||||
},
|
||||
"foregroundEffect" :
|
||||
{
|
||||
"$ref": "schema-foregroundEffect.json"
|
||||
|
@ -11,7 +11,6 @@
|
||||
<file alias="schema-grabberV4L2.json">schema/schema-grabberV4L2.json</file>
|
||||
<file alias="schema-framegrabber.json">schema/schema-framegrabber.json</file>
|
||||
<file alias="schema-blackborderdetector.json">schema/schema-blackborderdetector.json</file>
|
||||
<file alias="schema-kodiVideoChecker.json">schema/schema-kodiVideoChecker.json</file>
|
||||
<file alias="schema-foregroundEffect.json">schema/schema-foregroundEffect.json</file>
|
||||
<file alias="schema-backgroundEffect.json">schema/schema-backgroundEffect.json</file>
|
||||
<file alias="schema-forwarder.json">schema/schema-forwarder.json</file>
|
||||
|
@ -96,14 +96,6 @@
|
||||
"required" : true,
|
||||
"propertyOrder" : 9
|
||||
},
|
||||
"useKodiChecker" :
|
||||
{
|
||||
"type" : "boolean",
|
||||
"title" : "edt_conf_v4l2_useKodiChecker_title",
|
||||
"default" : false,
|
||||
"required" : true,
|
||||
"propertyOrder" : 10
|
||||
},
|
||||
"cropLeft" :
|
||||
{
|
||||
"type" : "integer",
|
||||
|
@ -1,80 +0,0 @@
|
||||
{
|
||||
"type" : "object",
|
||||
"title" : "edt_conf_kodic_heading_title",
|
||||
"properties" :
|
||||
{
|
||||
"enable" :
|
||||
{
|
||||
"type" : "boolean",
|
||||
"title" : "edt_conf_general_enable_title",
|
||||
"default" : false,
|
||||
"propertyOrder" : 1
|
||||
},
|
||||
"kodiAddress" :
|
||||
{
|
||||
"type" : "string",
|
||||
"title" : "edt_conf_kodic_kodiAddress_title",
|
||||
"default" : "127.0.0.1",
|
||||
"propertyOrder" : 2
|
||||
},
|
||||
"kodiTcpPort" :
|
||||
{
|
||||
"type" : "integer",
|
||||
"title" : "edt_conf_kodic_kodiTcpPort_title",
|
||||
"minimum" : 0,
|
||||
"maximum" : 65535,
|
||||
"default" : 9090,
|
||||
"propertyOrder" : 3
|
||||
},
|
||||
"grabVideo" :
|
||||
{
|
||||
"type" : "boolean",
|
||||
"title" : "edt_conf_kodic_grabVideo_title",
|
||||
"default" : true,
|
||||
"propertyOrder" : 4
|
||||
},
|
||||
"grabPictures" :
|
||||
{
|
||||
"type" : "boolean",
|
||||
"title" : "edt_conf_kodic_grabPictures_title",
|
||||
"default" : true,
|
||||
"propertyOrder" : 5
|
||||
},
|
||||
"grabAudio" :
|
||||
{
|
||||
"type" : "boolean",
|
||||
"title" : "edt_conf_kodic_grabAudio_title",
|
||||
"default" : true,
|
||||
"propertyOrder" : 6
|
||||
},
|
||||
"grabMenu" :
|
||||
{
|
||||
"type" : "boolean",
|
||||
"title" : "edt_conf_kodic_grabMenu_title",
|
||||
"default" : false,
|
||||
"propertyOrder" : 7
|
||||
},
|
||||
"grabPause" :
|
||||
{
|
||||
"type" : "boolean",
|
||||
"title" : "edt_conf_kodic_grabPause_title",
|
||||
"default" : false,
|
||||
"propertyOrder" : 8
|
||||
},
|
||||
"grabScreensaver" :
|
||||
{
|
||||
"type" : "boolean",
|
||||
"title" : "edt_conf_kodic_grabScreensaver_title",
|
||||
"default" : false,
|
||||
"propertyOrder" : 9
|
||||
},
|
||||
"enable3DDetection" :
|
||||
{
|
||||
"type" : "boolean",
|
||||
"title" : "edt_conf_kodic_enable3DDetection_title",
|
||||
"default" : false,
|
||||
"propertyOrder" : 10
|
||||
}
|
||||
},
|
||||
"additionalProperties" : false
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
|
||||
# Define the current source locations
|
||||
SET(CURRENT_HEADER_DIR ${CMAKE_SOURCE_DIR}/include/kodivideochecker)
|
||||
SET(CURRENT_SOURCE_DIR ${CMAKE_SOURCE_DIR}/libsrc/kodivideochecker)
|
||||
|
||||
FILE ( GLOB KODIVideoChecker_SOURCES "${CURRENT_HEADER_DIR}/*.h" "${CURRENT_SOURCE_DIR}/*.h" "${CURRENT_SOURCE_DIR}/*.cpp" )
|
||||
|
||||
add_library(kodivideochecker ${KODIVideoChecker_SOURCES} )
|
||||
|
||||
target_link_libraries(kodivideochecker
|
||||
hyperion
|
||||
${QT_LIBRARIES})
|
@ -1,507 +0,0 @@
|
||||
// Qt includes
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
|
||||
#include <kodivideochecker/KODIVideoChecker.h>
|
||||
#include <hyperion/Hyperion.h>
|
||||
|
||||
using namespace hyperion;
|
||||
|
||||
KODIVideoChecker* KODIVideoChecker::_kodichecker = nullptr;
|
||||
|
||||
KODIVideoChecker* KODIVideoChecker::initInstance(const QString & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection)
|
||||
{
|
||||
if ( KODIVideoChecker::_kodichecker != nullptr )
|
||||
throw std::runtime_error("KODIVideoChecker::initInstance can be called only one time");
|
||||
KODIVideoChecker::_kodichecker = new KODIVideoChecker(address, port, grabVideo, grabPhoto, grabAudio, grabMenu, grabPause, grabScreensaver, enable3DDetection);
|
||||
|
||||
return KODIVideoChecker::_kodichecker;
|
||||
}
|
||||
|
||||
KODIVideoChecker* KODIVideoChecker::getInstance()
|
||||
{
|
||||
return KODIVideoChecker::_kodichecker;
|
||||
}
|
||||
|
||||
|
||||
// Request player example:
|
||||
// {"jsonrpc":"2.0","method":"Player.GetActivePlayers", "id":666}
|
||||
// {"id":666,"jsonrpc":"2.0","result":[{"playerid":1,"type":"video"}]}
|
||||
|
||||
// Request playing item example:
|
||||
// {"id":667,"jsonrpc":"2.0","method":"Player.GetItem","params":{"playerid":1,"properties":["file"]}}
|
||||
// {"id":667,"jsonrpc":"2.0","result":{"item":{"file":"smb://xbmc:xbmc@192.168.53.12/video/Movies/Avatar (2009)/Avatar.mkv","label":"Avatar","type":"unknown"}}}
|
||||
|
||||
// Request if screensaver is on
|
||||
// {"id":668,"jsonrpc":"2.0","method":"XBMC.GetInfoBooleans","params":{"booleans":["System.ScreenSaverActive"]}}
|
||||
// {"id":668,"jsonrpc":"2.0","result":{"System.ScreenSaverActive":false}}
|
||||
|
||||
// Request stereoscopicmode example:
|
||||
// {"jsonrpc":"2.0","method":"GUI.GetProperties","params":{"properties":["stereoscopicmode"]},"id":669}
|
||||
// {"id":669,"jsonrpc":"2.0","result":{"stereoscopicmode":{"label":"Nebeneinander","mode":"split_vertical"}}}
|
||||
|
||||
KODIVideoChecker::KODIVideoChecker(const QString & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection)
|
||||
: QObject()
|
||||
, _address(address)
|
||||
, _port(port)
|
||||
, _activePlayerRequest(R"({"jsonrpc":"2.0","method":"Player.GetActivePlayers", "id":666})")
|
||||
, _currentPlayingItemRequest(R"({"id":667,"jsonrpc":"2.0","method":"Player.GetItem","params":{"playerid":%1,"properties":["file"]}})")
|
||||
, _checkScreensaverRequest(R"({"id":668,"jsonrpc":"2.0","method":"XBMC.GetInfoBooleans","params":{"booleans":["System.ScreenSaverActive"]}})")
|
||||
, _getStereoscopicMode(R"({"jsonrpc":"2.0","method":"GUI.GetProperties","params":{"properties":["stereoscopicmode"]},"id":669})")
|
||||
, _getKodiVersion(R"({"jsonrpc":"2.0","method":"Application.GetProperties","params":{"properties":["version"]},"id":670})")
|
||||
, _getCurrentPlaybackState(R"({"id":671,"jsonrpc":"2.0","method":"Player.GetProperties","params":{"playerid":%1,"properties":["speed"]}})")
|
||||
, _socket()
|
||||
, _grabVideo(grabVideo)
|
||||
, _grabPhoto(grabPhoto)
|
||||
, _grabAudio(grabAudio)
|
||||
, _grabMenu(grabMenu)
|
||||
, _grabPause(grabPause)
|
||||
, _grabScreensaver(grabScreensaver)
|
||||
, _enable3DDetection(enable3DDetection)
|
||||
, _previousGrabbingMode(GRABBINGMODE_INVALID)
|
||||
, _previousVideoMode(VIDEO_2D)
|
||||
, _currentPlaybackState(false)
|
||||
, _currentPlayerID(0)
|
||||
, _kodiVersion(0)
|
||||
, _log(Logger::getInstance("KODI"))
|
||||
, _active(false)
|
||||
, _getCurrentPlaybackStateInitialized(false)
|
||||
{
|
||||
// setup socket
|
||||
connect(&_socket, SIGNAL(readyRead()), this, SLOT(receiveReply()));
|
||||
connect(&_socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
|
||||
connect(&_socket, SIGNAL(connected()), this, SLOT(connected()));
|
||||
connect(&_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(connectionError(QAbstractSocket::SocketError)));
|
||||
}
|
||||
|
||||
KODIVideoChecker::~KODIVideoChecker()
|
||||
{
|
||||
stop();
|
||||
}
|
||||
|
||||
|
||||
void KODIVideoChecker::setConfig(const QString & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection)
|
||||
{
|
||||
_address = address;
|
||||
_port = port;
|
||||
_grabVideo = grabVideo;
|
||||
_grabPhoto = grabPhoto;
|
||||
_grabAudio = grabAudio;
|
||||
_grabMenu = grabMenu;
|
||||
_grabPause = grabPause;
|
||||
_grabScreensaver = grabScreensaver;
|
||||
_enable3DDetection = enable3DDetection;
|
||||
_previousGrabbingMode = GRABBINGMODE_INVALID;
|
||||
_previousVideoMode = VIDEO_2D;
|
||||
_kodiVersion = 0;
|
||||
|
||||
// restart if active
|
||||
if (_active)
|
||||
{
|
||||
stop();
|
||||
QTimer::singleShot(2000, this, SLOT(()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void KODIVideoChecker::start()
|
||||
{
|
||||
Info(_log, "started");
|
||||
_active = true;
|
||||
reconnect();
|
||||
}
|
||||
|
||||
void KODIVideoChecker::stop()
|
||||
{
|
||||
Info(_log, "stopped");
|
||||
_active = false;
|
||||
_socket.close();
|
||||
}
|
||||
|
||||
void KODIVideoChecker::componentStateChanged(const hyperion::Components component, bool enable)
|
||||
{
|
||||
if (component == COMP_KODICHECKER)
|
||||
{
|
||||
if (_active != enable)
|
||||
{
|
||||
if (enable) start();
|
||||
else stop();
|
||||
Info(_log, "change state to %s", (_active ? "enabled" : "disabled") );
|
||||
}
|
||||
Hyperion::getInstance()->getComponentRegister().componentStateChanged(component, _active);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void KODIVideoChecker::receiveReply()
|
||||
{
|
||||
QJsonParseError error;
|
||||
QByteArray qtreply = _socket.readAll();
|
||||
QJsonDocument doc = QJsonDocument::fromJson(qtreply, &error);
|
||||
|
||||
if (error.error == QJsonParseError::NoError)
|
||||
{
|
||||
if (doc.isObject())
|
||||
{
|
||||
Debug(_log, "message: %s", doc.toJson(QJsonDocument::Compact).constData());
|
||||
|
||||
// Reply
|
||||
if (doc.object().contains("id"))
|
||||
{
|
||||
|
||||
int id = doc.object()["id"].toInt();
|
||||
switch (id)
|
||||
{
|
||||
case 666:
|
||||
{
|
||||
if (doc.object()["result"].isArray())
|
||||
{
|
||||
QJsonArray resultArray = doc.object()["result"].toArray();
|
||||
|
||||
if (!resultArray.isEmpty())
|
||||
{
|
||||
// always start a new video in 2D mode
|
||||
emit videoMode(VIDEO_2D);
|
||||
|
||||
QString type = resultArray[0].toObject()["type"].toString();
|
||||
|
||||
int prevCurrentPlayerID = _currentPlayerID;
|
||||
_currentPlayerID = resultArray[0].toObject()["playerid"].toInt();
|
||||
|
||||
// set initial player state
|
||||
if (! _getCurrentPlaybackStateInitialized && prevCurrentPlayerID == 0 && _currentPlayerID != 0)
|
||||
{
|
||||
_socket.write(_getCurrentPlaybackState.arg(_currentPlayerID).toUtf8());
|
||||
_getCurrentPlaybackStateInitialized = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "video")
|
||||
{
|
||||
if (_currentPlaybackState)
|
||||
{
|
||||
// video is playing
|
||||
setGrabbingMode(_grabVideo ? GRABBINGMODE_VIDEO : GRABBINGMODE_OFF);
|
||||
}
|
||||
else
|
||||
{
|
||||
setGrabbingMode(_grabPause ? GRABBINGMODE_PAUSE : GRABBINGMODE_OFF);
|
||||
}
|
||||
|
||||
// request info of the playing item
|
||||
_socket.write(_currentPlayingItemRequest.arg(_currentPlayerID).toUtf8());
|
||||
}
|
||||
else if (type == "picture")
|
||||
{
|
||||
if (_currentPlaybackState)
|
||||
{
|
||||
// picture is playing
|
||||
setGrabbingMode(_grabPhoto ? GRABBINGMODE_PHOTO : GRABBINGMODE_OFF);
|
||||
}
|
||||
else
|
||||
{
|
||||
setGrabbingMode(_grabPause ? GRABBINGMODE_PAUSE : GRABBINGMODE_OFF);
|
||||
}
|
||||
}
|
||||
else if (type == "audio")
|
||||
{
|
||||
// audio is playing
|
||||
if (_currentPlaybackState)
|
||||
{
|
||||
// audio is playing
|
||||
setGrabbingMode(_grabAudio ? GRABBINGMODE_AUDIO : GRABBINGMODE_OFF);
|
||||
}
|
||||
else
|
||||
{
|
||||
setGrabbingMode(_grabPause ? GRABBINGMODE_PAUSE : GRABBINGMODE_OFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Nothing is playing.
|
||||
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 667:
|
||||
{
|
||||
if (_kodiVersion >= 13)
|
||||
{
|
||||
// check of active stereoscopicmode
|
||||
_socket.write(_getStereoscopicMode.toUtf8());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (doc.object()["result"].toObject()["item"].toObject().contains("file"))
|
||||
{
|
||||
QString filename = doc.object()["result"].toObject()["item"].toObject()["file"].toString();
|
||||
if (filename.contains("3DSBS", Qt::CaseInsensitive) || filename.contains("HSBS", Qt::CaseInsensitive))
|
||||
setVideoMode(VIDEO_3DSBS);
|
||||
else if (filename.contains("3DTAB", Qt::CaseInsensitive) || filename.contains("HTAB", Qt::CaseInsensitive))
|
||||
setVideoMode(VIDEO_3DTAB);
|
||||
else
|
||||
setVideoMode(VIDEO_2D);
|
||||
}
|
||||
else
|
||||
{
|
||||
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 668:
|
||||
{
|
||||
if (doc.object()["result"].toObject().contains("System.ScreenSaverActive"))
|
||||
{
|
||||
// result of System.ScreenSaverActive
|
||||
if (doc.object()["result"].toObject()["System.ScreenSaverActive"].toBool())
|
||||
setGrabbingMode(_grabScreensaver ? GRABBINGMODE_SCREENSAVER : GRABBINGMODE_OFF);
|
||||
else
|
||||
_socket.write(_activePlayerRequest.toUtf8());
|
||||
|
||||
// check here kodi version
|
||||
if (_socket.state() == QTcpSocket::ConnectedState)
|
||||
{
|
||||
if (_kodiVersion == 0)
|
||||
{
|
||||
_socket.write(_getKodiVersion.toUtf8());
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 669:
|
||||
{
|
||||
if (doc.object()["result"].toObject()["stereoscopicmode"].toObject().contains("mode"))
|
||||
{
|
||||
// result of stereoscopicmode
|
||||
QString mode = doc.object()["result"].toObject()["stereoscopicmode"].toObject()["mode"].toString();
|
||||
if (mode == "split_vertical")
|
||||
setVideoMode(VIDEO_3DSBS);
|
||||
else if (mode == "split_horizontal")
|
||||
setVideoMode(VIDEO_3DTAB);
|
||||
}
|
||||
else
|
||||
{
|
||||
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 670:
|
||||
{
|
||||
if (doc.object()["result"].toObject()["version"].toObject().contains("major"))
|
||||
{
|
||||
// kodi major version
|
||||
_kodiVersion = doc.object()["result"].toObject()["version"].toObject()["major"].toInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 671:
|
||||
{
|
||||
if (doc.object()["result"].toObject().contains("speed"))
|
||||
{
|
||||
// result of Player.PlayPause
|
||||
_currentPlaybackState = static_cast<bool>(doc.object()["result"].toObject()["speed"].toInt());
|
||||
}
|
||||
else
|
||||
{
|
||||
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Notification
|
||||
else if (doc.object().contains("method"))
|
||||
{
|
||||
QString method = doc.object()["method"].toString();
|
||||
if (method == "Player.OnPlay")
|
||||
{
|
||||
if (doc.object()["params"].toObject()["data"].toObject()["player"].toObject().contains("speed"))
|
||||
{
|
||||
_getCurrentPlaybackStateInitialized = true;
|
||||
_currentPlaybackState = static_cast<bool>(doc.object()["params"].toObject()["data"].toObject()["player"].toObject()["speed"].toInt());
|
||||
}
|
||||
// send a request for the current player state
|
||||
_socket.write(_activePlayerRequest.toUtf8());
|
||||
return;
|
||||
}
|
||||
else if (method == "Player.OnStop")
|
||||
{
|
||||
// the player has stopped
|
||||
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||
setVideoMode(VIDEO_2D);
|
||||
}
|
||||
else if (method == "Player.OnPause")
|
||||
{
|
||||
if (doc.object()["params"].toObject()["data"].toObject()["player"].toObject().contains("speed"))
|
||||
{
|
||||
_getCurrentPlaybackStateInitialized = true;
|
||||
_currentPlaybackState = static_cast<bool>(doc.object()["params"].toObject()["data"].toObject()["player"].toObject()["speed"].toInt());
|
||||
}
|
||||
// player at pause
|
||||
setGrabbingMode(_grabPause ? GRABBINGMODE_PAUSE : GRABBINGMODE_OFF);
|
||||
}
|
||||
else if (method == "GUI.OnScreensaverActivated")
|
||||
setGrabbingMode(_grabScreensaver ? GRABBINGMODE_SCREENSAVER : GRABBINGMODE_OFF);
|
||||
else if (method == "GUI.OnScreensaverDeactivated")
|
||||
_socket.write(_activePlayerRequest.toUtf8());
|
||||
else if (method == "Playlist.OnAdd" &&
|
||||
(doc.object()["params"]
|
||||
.toObject()["data"]
|
||||
.toObject()["item"]
|
||||
.toObject()["type"]) == QString("picture"))
|
||||
{
|
||||
// picture viewer is playing
|
||||
setGrabbingMode(_grabPhoto ? GRABBINGMODE_PHOTO : GRABBINGMODE_OFF);
|
||||
}
|
||||
else if (method == "Input.OnInputFinished")
|
||||
{
|
||||
// This Event is fired when Kodi Login
|
||||
_socket.write(_activePlayerRequest.toUtf8());
|
||||
_socket.write(_checkScreensaverRequest.toUtf8());
|
||||
if (_currentPlayerID != 0)
|
||||
_socket.write(_getCurrentPlaybackState.arg(_currentPlayerID).toUtf8());
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug(_log, "Incomplete data");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KODIVideoChecker::connected()
|
||||
{
|
||||
Info(_log, "Connected");
|
||||
_getCurrentPlaybackStateInitialized = false;
|
||||
// send a request for the current player state
|
||||
_socket.write(_activePlayerRequest.toUtf8());
|
||||
_socket.write(_checkScreensaverRequest.toUtf8());
|
||||
}
|
||||
|
||||
void KODIVideoChecker::disconnected()
|
||||
{
|
||||
Info(_log, "Disconnected");
|
||||
_previousGrabbingMode = GRABBINGMODE_INVALID;
|
||||
_previousVideoMode = VIDEO_2D;
|
||||
_kodiVersion = 0;
|
||||
reconnect();
|
||||
}
|
||||
|
||||
void KODIVideoChecker::reconnect()
|
||||
{
|
||||
if (_socket.state() == QTcpSocket::ConnectedState || ! _active )
|
||||
{
|
||||
return;
|
||||
}
|
||||
Debug(_log, "try reconnect");
|
||||
|
||||
// try to connect
|
||||
switch (_socket.state())
|
||||
{
|
||||
case QTcpSocket::ConnectingState:
|
||||
// Somehow when KODI restarts we get stuck in connecting state
|
||||
// If we get here we tried to connect already for 5 seconds. abort and try again in 1 second.
|
||||
_socket.reset();
|
||||
_socket.waitForDisconnected(50);
|
||||
QTimer::singleShot(1000, this, SLOT(reconnect()));
|
||||
break;
|
||||
case QTcpSocket::UnconnectedState:
|
||||
_socket.connectToHost(_address, _port);
|
||||
QTimer::singleShot(10000, this, SLOT(reconnect()));
|
||||
break;
|
||||
default:
|
||||
QTimer::singleShot(10000, this, SLOT(reconnect()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void KODIVideoChecker::connectionError(QAbstractSocket::SocketError error)
|
||||
{
|
||||
Error(_log,"Connection error (%s)", _socket.errorString().toStdString().c_str());
|
||||
|
||||
// close the socket
|
||||
_socket.close();
|
||||
}
|
||||
|
||||
void KODIVideoChecker::setGrabbingMode(GrabbingMode newGrabbingMode)
|
||||
{
|
||||
if (newGrabbingMode == _previousGrabbingMode)
|
||||
{
|
||||
// no change
|
||||
return;
|
||||
}
|
||||
|
||||
switch (newGrabbingMode)
|
||||
{
|
||||
case GRABBINGMODE_VIDEO:
|
||||
Info(_log, "switching to VIDEO mode");
|
||||
break;
|
||||
case GRABBINGMODE_PHOTO:
|
||||
Info(_log, "switching to PHOTO mode");
|
||||
break;
|
||||
case GRABBINGMODE_AUDIO:
|
||||
Info(_log, "switching to AUDIO mode");
|
||||
break;
|
||||
case GRABBINGMODE_MENU:
|
||||
Info(_log, "switching to MENU mode");
|
||||
break;
|
||||
case GRABBINGMODE_PAUSE:
|
||||
Info(_log, "switching to PAUSE mode");
|
||||
break;
|
||||
case GRABBINGMODE_OFF:
|
||||
Info(_log, "switching to OFF mode");
|
||||
break;
|
||||
case GRABBINGMODE_SCREENSAVER:
|
||||
Info(_log, "switching to SCREENSAVER mode");
|
||||
break;
|
||||
default:
|
||||
Warning(_log, "switching to INVALID mode");
|
||||
break;
|
||||
}
|
||||
|
||||
emit grabbingMode(newGrabbingMode);
|
||||
_previousGrabbingMode = newGrabbingMode;
|
||||
}
|
||||
|
||||
void KODIVideoChecker::setVideoMode(VideoMode newVideoMode)
|
||||
{
|
||||
if (newVideoMode == _previousVideoMode)
|
||||
{
|
||||
// no change
|
||||
return;
|
||||
}
|
||||
|
||||
switch (newVideoMode)
|
||||
{
|
||||
case VIDEO_2D:
|
||||
Info(_log, "switching to 2D mode");
|
||||
break;
|
||||
case VIDEO_3DSBS:
|
||||
Info(_log, "switching to 3D SBS mode");
|
||||
break;
|
||||
case VIDEO_3DTAB:
|
||||
Info(_log, "switching to 3D TAB mode");
|
||||
break;
|
||||
}
|
||||
|
||||
emit videoMode(newVideoMode);
|
||||
_previousVideoMode = newVideoMode;
|
||||
}
|
@ -34,7 +34,7 @@ ProtoClientConnection::ProtoClientConnection(QTcpSocket *socket)
|
||||
// connect internal signals and slots
|
||||
connect(_socket, SIGNAL(disconnected()), this, SLOT(socketClosed()));
|
||||
connect(_socket, SIGNAL(readyRead()), this, SLOT(readData()));
|
||||
connect(_hyperion, SIGNAL(imageToLedsMappingChanged(int)), _imageProcessor, SLOT(setLedMappingType(int)));
|
||||
connect(_hyperion, SIGNAL(imageToLedsMappingChanged(int)), _imageProcessor, SLOT(setLedMappingType(int)));
|
||||
}
|
||||
|
||||
ProtoClientConnection::~ProtoClientConnection()
|
||||
@ -85,27 +85,14 @@ void ProtoClientConnection::socketClosed()
|
||||
emit connectionClosed(this);
|
||||
}
|
||||
|
||||
void ProtoClientConnection::setGrabbingMode(const GrabbingMode mode)
|
||||
{
|
||||
int grabbing_mode = (int)mode;
|
||||
proto::HyperionReply gMode;
|
||||
|
||||
// create proto message
|
||||
gMode.set_type(proto::HyperionReply::GRABBING);
|
||||
gMode.set_grabbing(grabbing_mode);
|
||||
|
||||
// send message
|
||||
sendMessage(gMode);
|
||||
}
|
||||
|
||||
void ProtoClientConnection::setVideoMode(const VideoMode videoMode)
|
||||
{
|
||||
int video_Mode = (int)videoMode;
|
||||
proto::HyperionReply vMode;
|
||||
|
||||
|
||||
// create proto message
|
||||
vMode.set_type(proto::HyperionReply::VIDEO);
|
||||
vMode.set_grabbing(video_Mode);
|
||||
vMode.set_video(video_Mode);
|
||||
|
||||
// send message
|
||||
sendMessage(vMode);
|
||||
@ -149,7 +136,7 @@ void ProtoClientConnection::handleMessage(const proto::HyperionRequest & message
|
||||
default:
|
||||
handleNotImplemented();
|
||||
}
|
||||
|
||||
|
||||
if (prevPriority != _priority)
|
||||
{
|
||||
_hyperion->registerPriority(_priorityChannelName, _priority);
|
||||
|
@ -13,7 +13,6 @@
|
||||
#include <hyperion/Hyperion.h>
|
||||
|
||||
//Utils includes
|
||||
#include <utils/GrabbingMode.h>
|
||||
#include <utils/VideoMode.h>
|
||||
|
||||
// proto includes
|
||||
@ -41,12 +40,11 @@ public:
|
||||
/// Destructor
|
||||
///
|
||||
~ProtoClientConnection();
|
||||
|
||||
|
||||
public slots:
|
||||
///
|
||||
/// Send KODI Video Checker message to connected client
|
||||
/// Send video mode message to connected client
|
||||
///
|
||||
void setGrabbingMode(const GrabbingMode mode);
|
||||
void setVideoMode(const VideoMode videoMode);
|
||||
|
||||
signals:
|
||||
@ -138,9 +136,9 @@ private:
|
||||
|
||||
/// The buffer used for reading data from the socket
|
||||
QByteArray _receiveBuffer;
|
||||
|
||||
|
||||
int _priority;
|
||||
|
||||
|
||||
QString _priorityChannelName;
|
||||
|
||||
/// address of client
|
||||
|
@ -47,7 +47,7 @@ ProtoConnection::~ProtoConnection()
|
||||
}
|
||||
|
||||
void ProtoConnection::readData()
|
||||
{
|
||||
{
|
||||
_receiveBuffer += _socket.readAll();
|
||||
|
||||
// check if we can read a message size
|
||||
@ -68,18 +68,18 @@ void ProtoConnection::readData()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// read a message
|
||||
proto::HyperionReply reply;
|
||||
|
||||
|
||||
if (!reply.ParseFromArray(_receiveBuffer.data() + 4, messageSize))
|
||||
{
|
||||
Error(_log, "Unable to parse message");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
parseReply(reply);
|
||||
|
||||
|
||||
// remove message data from buffer
|
||||
_receiveBuffer = _receiveBuffer.mid(messageSize + 4);
|
||||
}
|
||||
@ -139,7 +139,7 @@ void ProtoConnection::clearAll()
|
||||
|
||||
void ProtoConnection::connectToHost()
|
||||
{
|
||||
// try connection only when
|
||||
// try connection only when
|
||||
if (_socket.state() == QAbstractSocket::UnconnectedState)
|
||||
{
|
||||
_socket.connectToHost(_host, _port);
|
||||
@ -201,7 +201,7 @@ void ProtoConnection::sendMessage(const proto::HyperionRequest &message)
|
||||
bool ProtoConnection::parseReply(const proto::HyperionReply &reply)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
|
||||
switch (reply.type())
|
||||
{
|
||||
case proto::HyperionReply::REPLY:
|
||||
@ -226,13 +226,6 @@ bool ProtoConnection::parseReply(const proto::HyperionReply &reply)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case proto::HyperionReply::GRABBING:
|
||||
{
|
||||
int grabbing = reply.has_grabbing() ? reply.grabbing() : 7;
|
||||
GrabbingMode gMode = (GrabbingMode)grabbing;
|
||||
emit setGrabbingMode(gMode);
|
||||
break;
|
||||
}
|
||||
case proto::HyperionReply::VIDEO:
|
||||
{
|
||||
int video = reply.has_video() ? reply.video() : 0;
|
||||
@ -241,6 +234,6 @@ bool ProtoConnection::parseReply(const proto::HyperionReply &reply)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return success;
|
||||
}
|
||||
|
@ -10,7 +10,6 @@ ProtoConnectionWrapper::ProtoConnectionWrapper(const QString &address,
|
||||
, _connection(address)
|
||||
{
|
||||
_connection.setSkipReply(skipProtoReply);
|
||||
connect(&_connection, SIGNAL(setGrabbingMode(GrabbingMode)), this, SIGNAL(setGrabbingMode(GrabbingMode)));
|
||||
connect(&_connection, SIGNAL(setVideoMode(VideoMode)), this, SIGNAL(setVideoMode(VideoMode)));
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ ProtoServer::~ProtoServer()
|
||||
foreach (ProtoClientConnection * connection, _openConnections) {
|
||||
delete connection;
|
||||
}
|
||||
|
||||
|
||||
while (!_proxy_connections.isEmpty())
|
||||
delete _proxy_connections.takeFirst();
|
||||
}
|
||||
@ -68,11 +68,9 @@ void ProtoServer::newConnection()
|
||||
// register slot for cleaning up after the connection closed
|
||||
connect(connection, SIGNAL(connectionClosed(ProtoClientConnection*)), this, SLOT(closedConnection(ProtoClientConnection*)));
|
||||
connect(connection, SIGNAL(newMessage(const proto::HyperionRequest*)), this, SLOT(newMessage(const proto::HyperionRequest*)));
|
||||
|
||||
// register forward signal for kodi checker
|
||||
connect(this, SIGNAL(grabbingMode(GrabbingMode)), connection, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
connect(this, SIGNAL(videoMode(VideoMode)), connection, SLOT(setVideoMode(VideoMode)));
|
||||
|
||||
// register forward signal for video mode
|
||||
connect(this, SIGNAL(videoMode(VideoMode)), connection, SLOT(setVideoMode(VideoMode)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -63,22 +63,18 @@ message ClearRequest {
|
||||
message HyperionReply {
|
||||
enum Type {
|
||||
REPLY = 1;
|
||||
GRABBING = 2;
|
||||
VIDEO = 3;
|
||||
VIDEO = 2;
|
||||
}
|
||||
|
||||
|
||||
// Identifies which field is filled in.
|
||||
required Type type = 1;
|
||||
|
||||
|
||||
// flag indication success or failure
|
||||
optional bool success = 2;
|
||||
|
||||
// string indicating the reason for failure (if applicable)
|
||||
optional string error = 3;
|
||||
|
||||
// KODI Video Checker Proto Messages for Grabbing mode
|
||||
optional int32 grabbing = 4;
|
||||
|
||||
// KODI Video Checker Proto Messages for Video mode
|
||||
optional int32 video = 5;
|
||||
// Proto Messages for video mode
|
||||
optional int32 video = 4;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
"component":
|
||||
{
|
||||
"type" : "string",
|
||||
"enum" : ["ALL", "SMOOTHING", "BLACKBORDER", "KODICHECKER", "FORWARDER", "UDPLISTENER", "BOBLIGHTSERVER", "GRABBER", "V4L", "LEDDEVICE"],
|
||||
"enum" : ["ALL", "SMOOTHING", "BLACKBORDER", "FORWARDER", "UDPLISTENER", "BOBLIGHTSERVER", "GRABBER", "V4L", "LEDDEVICE"],
|
||||
"required": true
|
||||
},
|
||||
"state":
|
||||
|
@ -101,7 +101,7 @@ public:
|
||||
///
|
||||
/// Enable/Disable components during runtime
|
||||
///
|
||||
/// @param component The component [SMOOTHING, BLACKBORDER, KODICHECKER, FORWARDER, UDPLISTENER, BOBLIGHT_SERVER, GRABBER]
|
||||
/// @param component The component [SMOOTHING, BLACKBORDER, FORWARDER, UDPLISTENER, BOBLIGHT_SERVER, GRABBER]
|
||||
/// @param state The state of the component [true | false]
|
||||
///
|
||||
void setComponentState(const QString & component, const bool state);
|
||||
|
@ -73,8 +73,8 @@ int main(int argc, char * argv[])
|
||||
BooleanOption & argSysInfo = parser.add<BooleanOption>('s', "sysinfo" , "show system info");
|
||||
BooleanOption & argClear = parser.add<BooleanOption>('x', "clear" , "Clear data for the priority channel provided by the -p option");
|
||||
BooleanOption & argClearAll = parser.add<BooleanOption>(0x0, "clearall" , "Clear data for all active priority channels");
|
||||
Option & argEnableComponent = parser.add<Option> ('E', "enable" , "Enable the Component with the given name. Available Components are [SMOOTHING, BLACKBORDER, KODICHECKER, FORWARDER, UDPLISTENER, BOBLIGHT_SERVER, GRABBER, V4L, LEDDEVICE]");
|
||||
Option & argDisableComponent = parser.add<Option> ('D', "disable" , "Disable the Component with the given name. Available Components are [SMOOTHING, BLACKBORDER, KODICHECKER, FORWARDER, UDPLISTENER, BOBLIGHT_SERVER, GRABBER, V4L, LEDDEVICE]");
|
||||
Option & argEnableComponent = parser.add<Option> ('E', "enable" , "Enable the Component with the given name. Available Components are [SMOOTHING, BLACKBORDER, FORWARDER, UDPLISTENER, BOBLIGHT_SERVER, GRABBER, V4L, LEDDEVICE]");
|
||||
Option & argDisableComponent = parser.add<Option> ('D', "disable" , "Disable the Component with the given name. Available Components are [SMOOTHING, BLACKBORDER, FORWARDER, UDPLISTENER, BOBLIGHT_SERVER, GRABBER, V4L, LEDDEVICE]");
|
||||
Option & argId = parser.add<Option> ('q', "qualifier" , "Identifier(qualifier) of the adjustment to set");
|
||||
IntOption & argBrightness = parser.add<IntOption> ('L', "brightness" , "Set the brightness gain of the leds");
|
||||
IntOption & argBrightnessC = parser.add<IntOption> (0x0, "brightnessCompensation" , "Set the brightness compensation");
|
||||
@ -114,9 +114,9 @@ int main(int argc, char * argv[])
|
||||
bool colorAdjust = parser.isSet(argRAdjust) || parser.isSet(argGAdjust) || parser.isSet(argBAdjust) || parser.isSet(argCAdjust) || parser.isSet(argMAdjust)
|
||||
|| parser.isSet(argYAdjust) || parser.isSet(argWAdjust) || parser.isSet(argbAdjust) || parser.isSet(argGamma)|| parser.isSet(argBrightness)|| parser.isSet(argBrightnessC)
|
||||
|| parser.isSet(argBacklightThreshold) || parser.isSet(argBacklightColored);
|
||||
|
||||
|
||||
// check that exactly one command was given
|
||||
int commandCount = count({ parser.isSet(argColor), parser.isSet(argImage), parser.isSet(argEffect), parser.isSet(argCreateEffect), parser.isSet(argDeleteEffect),
|
||||
int commandCount = count({ parser.isSet(argColor), parser.isSet(argImage), parser.isSet(argEffect), parser.isSet(argCreateEffect), parser.isSet(argDeleteEffect),
|
||||
parser.isSet(argServerInfo), parser.isSet(argSysInfo),parser.isSet(argClear), parser.isSet(argClearAll), parser.isSet(argEnableComponent), parser.isSet(argDisableComponent), colorAdjust,
|
||||
parser.isSet(argSource), parser.isSet(argSourceAuto), parser.isSet(argOff), parser.isSet(argOn), parser.isSet(argConfigGet), parser.isSet(argSchemaGet), parser.isSet(argConfigSet),
|
||||
parser.isSet(argMapping),parser.isSet(argVideoMode) });
|
||||
|
@ -40,25 +40,6 @@ void X11Wrapper::capture()
|
||||
emit sig_screenshot(_screenshot);
|
||||
}
|
||||
|
||||
void X11Wrapper::setGrabbingMode(const GrabbingMode mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case GRABBINGMODE_VIDEO:
|
||||
case GRABBINGMODE_PAUSE:
|
||||
case GRABBINGMODE_AUDIO:
|
||||
case GRABBINGMODE_PHOTO:
|
||||
case GRABBINGMODE_MENU:
|
||||
case GRABBINGMODE_SCREENSAVER:
|
||||
case GRABBINGMODE_INVALID:
|
||||
start();
|
||||
break;
|
||||
case GRABBINGMODE_OFF:
|
||||
stop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void X11Wrapper::setVideoMode(const VideoMode mode)
|
||||
{
|
||||
_grabber.setVideoMode(mode);
|
||||
|
@ -6,7 +6,6 @@
|
||||
#include <grabber/X11Grabber.h>
|
||||
|
||||
//Utils includes
|
||||
#include <utils/GrabbingMode.h>
|
||||
#include <utils/VideoMode.h>
|
||||
|
||||
class X11Wrapper : public QObject
|
||||
@ -23,19 +22,13 @@ public:
|
||||
void start();
|
||||
|
||||
void stop();
|
||||
|
||||
|
||||
bool displayInit();
|
||||
|
||||
signals:
|
||||
void sig_screenshot(const Image<ColorRgb> & screenshot);
|
||||
|
||||
public slots:
|
||||
///
|
||||
/// Set the grabbing mode
|
||||
/// @param[in] mode The new grabbing mode
|
||||
///
|
||||
void setGrabbingMode(const GrabbingMode mode);
|
||||
|
||||
///
|
||||
/// Set the video mode (2D/3D)
|
||||
/// @param[in] mode The new video mode
|
||||
@ -55,6 +48,6 @@ private:
|
||||
|
||||
/// The grabber for creating screenshots
|
||||
X11Grabber _grabber;
|
||||
|
||||
|
||||
Image<ColorRgb> _screenshot;
|
||||
};
|
||||
|
@ -66,7 +66,7 @@ int main(int argc, char ** argv)
|
||||
parser.isSet(argCropBottom) ? argCropBottom.getInt(parser) : argCropHeight.getInt(parser),
|
||||
argSizeDecimation.getInt(parser), // horizontal decimation
|
||||
argSizeDecimation.getInt(parser)); // vertical decimation
|
||||
|
||||
|
||||
if (!x11Wrapper.displayInit())
|
||||
return -1;
|
||||
|
||||
@ -83,9 +83,8 @@ int main(int argc, char ** argv)
|
||||
|
||||
// Connect the screen capturing to the proto processing
|
||||
QObject::connect(&x11Wrapper, SIGNAL(sig_screenshot(const Image<ColorRgb> &)), &protoWrapper, SLOT(receiveImage(Image<ColorRgb>)));
|
||||
|
||||
// Connect the KODI Video Checker to the proto processing
|
||||
QObject::connect(&protoWrapper, SIGNAL(setGrabbingMode(GrabbingMode)), &x11Wrapper, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
|
||||
// Connect the vodeMode to the proto processing
|
||||
QObject::connect(&protoWrapper, SIGNAL(setVideoMode(VideoMode)), &x11Wrapper, SLOT(setVideoMode(VideoMode)));
|
||||
|
||||
// Start the capturing
|
||||
|
@ -10,7 +10,6 @@ add_executable(hyperiond
|
||||
target_link_libraries(hyperiond
|
||||
commandline
|
||||
hyperion
|
||||
kodivideochecker
|
||||
effectengine
|
||||
jsonserver
|
||||
boblightserver
|
||||
|
@ -39,7 +39,6 @@
|
||||
HyperionDaemon::HyperionDaemon(QString configFile, const QString rootPath, QObject *parent)
|
||||
: QObject(parent)
|
||||
, _log(Logger::getInstance("MAIN"))
|
||||
, _kodiVideoChecker(nullptr)
|
||||
, _jsonServer(nullptr)
|
||||
, _protoServer(nullptr)
|
||||
, _boblightServer(nullptr)
|
||||
@ -99,7 +98,6 @@ void HyperionDaemon::freeObjects()
|
||||
{
|
||||
delete grabber;
|
||||
}
|
||||
delete _kodiVideoChecker;
|
||||
delete _jsonServer;
|
||||
delete _protoServer;
|
||||
delete _boblightServer;
|
||||
@ -111,7 +109,6 @@ void HyperionDaemon::freeObjects()
|
||||
_dispmanx = nullptr;
|
||||
_fbGrabber = nullptr;
|
||||
_osxGrabber = nullptr;
|
||||
_kodiVideoChecker = nullptr;
|
||||
_jsonServer = nullptr;
|
||||
_protoServer = nullptr;
|
||||
_boblightServer = nullptr;
|
||||
@ -121,8 +118,6 @@ void HyperionDaemon::freeObjects()
|
||||
|
||||
void HyperionDaemon::run()
|
||||
{
|
||||
createKODIVideoChecker();
|
||||
|
||||
// ---- network services -----
|
||||
startNetworkServices();
|
||||
|
||||
@ -266,39 +261,8 @@ void HyperionDaemon::startInitialEffect()
|
||||
#undef BGCONFIG_ARRAY
|
||||
}
|
||||
|
||||
|
||||
// create KODI video checker if the _configuration is present
|
||||
void HyperionDaemon::createKODIVideoChecker()
|
||||
{
|
||||
bool kodiCheckerConfigured = _qconfig.contains("kodiVideoChecker");
|
||||
|
||||
const QJsonObject & videoCheckerConfig = _qconfig["kodiVideoChecker"].toObject();
|
||||
_kodiVideoChecker = KODIVideoChecker::initInstance(
|
||||
videoCheckerConfig["kodiAddress"].toString("127.0.0.1"),
|
||||
videoCheckerConfig["kodiTcpPort"].toInt(9090),
|
||||
videoCheckerConfig["grabVideo"].toBool(true),
|
||||
videoCheckerConfig["grabPictures"].toBool(true),
|
||||
videoCheckerConfig["grabAudio"].toBool(true),
|
||||
videoCheckerConfig["grabMenu"].toBool(false),
|
||||
videoCheckerConfig["grabPause"].toBool(true),
|
||||
videoCheckerConfig["grabScreensaver"].toBool(false),
|
||||
videoCheckerConfig["enable3DDetection"].toBool(true));
|
||||
Debug(_log, "KODI checker created ");
|
||||
|
||||
if( kodiCheckerConfigured && videoCheckerConfig["enable"].toBool(true))
|
||||
{
|
||||
_kodiVideoChecker->start();
|
||||
}
|
||||
_hyperion->getComponentRegister().componentStateChanged(hyperion::COMP_KODICHECKER, _kodiVideoChecker->componentState());
|
||||
QObject::connect( _hyperion, SIGNAL(componentStateChanged(hyperion::Components,bool)), _kodiVideoChecker, SLOT(componentStateChanged(hyperion::Components,bool)));
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(videoMode(VideoMode)), _hyperion, SLOT(setVideoMode(VideoMode)));
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _hyperion, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
}
|
||||
|
||||
void HyperionDaemon::startNetworkServices()
|
||||
{
|
||||
KODIVideoChecker* kodiVideoChecker = KODIVideoChecker::getInstance();
|
||||
|
||||
// Create Stats
|
||||
_stats = new Stats();
|
||||
|
||||
@ -324,11 +288,7 @@ void HyperionDaemon::startNetworkServices()
|
||||
}
|
||||
|
||||
_protoServer = new ProtoServer(protoPort);
|
||||
if (kodiVideoChecker != nullptr)
|
||||
{
|
||||
QObject::connect(kodiVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _protoServer, SIGNAL(grabbingMode(GrabbingMode)));
|
||||
QObject::connect(kodiVideoChecker, SIGNAL(videoMode(VideoMode)), _protoServer, SIGNAL(videoMode(VideoMode)));
|
||||
}
|
||||
QObject::connect(_hyperion, SIGNAL(videoMode(VideoMode)), _protoServer, SLOT(setVideoMode(VideoMode)));
|
||||
Info(_log, "Proto server created and started on port %d", _protoServer->getPort());
|
||||
|
||||
// Create Boblight server if configuration is present
|
||||
@ -473,7 +433,6 @@ void HyperionDaemon::createGrabberDispmanx()
|
||||
_dispmanx = new DispmanxWrapper(_grabber_width, _grabber_height, _grabber_frequency, _grabber_priority);
|
||||
_dispmanx->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _dispmanx, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
QObject::connect(_hyperion, SIGNAL(videoMode(VideoMode)), _dispmanx, SLOT(setVideoMode(VideoMode)));
|
||||
QObject::connect(_dispmanx, SIGNAL(emitImage(int, const Image<ColorRgb>&, const int)), _protoServer, SLOT(sendImageToProtoSlaves(int, const Image<ColorRgb>&, const int)) );
|
||||
QObject::connect(_dispmanx, SIGNAL(emitImage(int, const Image<ColorRgb>&, const int)), _hyperion, SLOT(setImage(int, const Image<ColorRgb>&, const int)) );
|
||||
@ -590,8 +549,7 @@ void HyperionDaemon::createGrabberV4L2()
|
||||
grabberConfig["redSignalThreshold"].toDouble(0.0)/100.0,
|
||||
grabberConfig["greenSignalThreshold"].toDouble(0.0)/100.0,
|
||||
grabberConfig["blueSignalThreshold"].toDouble(0.0)/100.0,
|
||||
grabberConfig["priority"].toInt(890),
|
||||
grabberConfig["useKodiChecker"].toBool(false));
|
||||
grabberConfig["priority"].toInt(890));
|
||||
grabber->setCropping(
|
||||
grabberConfig["cropLeft"].toInt(0),
|
||||
grabberConfig["cropRight"].toInt(0),
|
||||
|
@ -41,7 +41,6 @@
|
||||
|
||||
#include <utils/Logger.h>
|
||||
|
||||
#include <kodivideochecker/KODIVideoChecker.h>
|
||||
#include <jsonserver/JsonServer.h>
|
||||
#include <protoserver/ProtoServer.h>
|
||||
#include <boblightserver/BoblightServer.h>
|
||||
@ -65,7 +64,6 @@ public:
|
||||
void run();
|
||||
|
||||
void startInitialEffect();
|
||||
void createKODIVideoChecker();
|
||||
void startNetworkServices();
|
||||
|
||||
// grabber creators
|
||||
@ -84,7 +82,6 @@ private:
|
||||
|
||||
Logger* _log;
|
||||
QJsonObject _qconfig;
|
||||
KODIVideoChecker* _kodiVideoChecker;
|
||||
JsonServer* _jsonServer;
|
||||
ProtoServer* _protoServer;
|
||||
BoblightServer* _boblightServer;
|
||||
|
Loading…
Reference in New Issue
Block a user