From ca24450618cda5763fcaacd23a57483f173ac508 Mon Sep 17 00:00:00 2001 From: penfold42 Date: Sat, 13 Feb 2016 23:00:31 +1100 Subject: [PATCH 1/3] added configurable latchtime for 2801 SPI driver Former-commit-id: a10b0bd24a85580b021c735b30ebd2635180a514 --- libsrc/leddevice/LedDeviceFactory.cpp | 3 ++- libsrc/leddevice/LedDeviceWs2801.cpp | 9 ++++++++- libsrc/leddevice/LedDeviceWs2801.h | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libsrc/leddevice/LedDeviceFactory.cpp b/libsrc/leddevice/LedDeviceFactory.cpp index 6e7b3da8..1a0e1709 100755 --- a/libsrc/leddevice/LedDeviceFactory.cpp +++ b/libsrc/leddevice/LedDeviceFactory.cpp @@ -128,8 +128,9 @@ LedDevice * LedDeviceFactory::construct(const Json::Value & deviceConfig) { const std::string output = deviceConfig["output"].asString(); const unsigned rate = deviceConfig["rate"].asInt(); + const unsigned latchtime = deviceConfig.get("latchtime",500000).asInt(); - LedDeviceWs2801* deviceWs2801 = new LedDeviceWs2801(output, rate); + LedDeviceWs2801* deviceWs2801 = new LedDeviceWs2801(output, rate, latchtime); deviceWs2801->open(); device = deviceWs2801; diff --git a/libsrc/leddevice/LedDeviceWs2801.cpp b/libsrc/leddevice/LedDeviceWs2801.cpp index 31bb43cd..b36d2f49 100644 --- a/libsrc/leddevice/LedDeviceWs2801.cpp +++ b/libsrc/leddevice/LedDeviceWs2801.cpp @@ -11,13 +11,20 @@ // hyperion local includes #include "LedDeviceWs2801.h" -LedDeviceWs2801::LedDeviceWs2801(const std::string& outputDevice, const unsigned baudrate) : +LedDeviceWs2801::LedDeviceWs2801(const std::string& outputDevice, const unsigned baudrate ) : LedSpiDevice(outputDevice, baudrate, 500000), mLedCount(0) { // empty } +LedDeviceWs2801::LedDeviceWs2801(const std::string& outputDevice, const unsigned baudrate, const unsigned latchTime) : + LedSpiDevice(outputDevice, baudrate, latchTime), + mLedCount(0) +{ + // empty +} + int LedDeviceWs2801::write(const std::vector &ledValues) { mLedCount = ledValues.size(); diff --git a/libsrc/leddevice/LedDeviceWs2801.h b/libsrc/leddevice/LedDeviceWs2801.h index e7ff6998..c2231cd7 100644 --- a/libsrc/leddevice/LedDeviceWs2801.h +++ b/libsrc/leddevice/LedDeviceWs2801.h @@ -21,6 +21,10 @@ public: LedDeviceWs2801(const std::string& outputDevice, const unsigned baudrate); + LedDeviceWs2801(const std::string& outputDevice, + const unsigned baudrate, + const unsigned latchTime); + /// /// Writes the led color values to the led-device /// From 3be4ebe6dcfb4d5cfbf8b2cc83ca40d92259580f Mon Sep 17 00:00:00 2001 From: penfold42 Date: Thu, 25 Feb 2016 22:33:13 +1100 Subject: [PATCH 2/3] clean up formatting Former-commit-id: dc3a3c7597af42b8fb37f09011d52ebacffd8959 --- libsrc/leddevice/LedDeviceWs2801.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/leddevice/LedDeviceWs2801.cpp b/libsrc/leddevice/LedDeviceWs2801.cpp index b36d2f49..aaee8cf6 100644 --- a/libsrc/leddevice/LedDeviceWs2801.cpp +++ b/libsrc/leddevice/LedDeviceWs2801.cpp @@ -11,7 +11,7 @@ // hyperion local includes #include "LedDeviceWs2801.h" -LedDeviceWs2801::LedDeviceWs2801(const std::string& outputDevice, const unsigned baudrate ) : +LedDeviceWs2801::LedDeviceWs2801(const std::string& outputDevice, const unsigned baudrate) : LedSpiDevice(outputDevice, baudrate, 500000), mLedCount(0) { From 02d055b75c54ca1777e4000deced9fd9d3eda7ab Mon Sep 17 00:00:00 2001 From: brindosch Date: Tue, 8 Mar 2016 18:20:09 +0100 Subject: [PATCH 3/3] Add the service files and new hyperion conf Former-commit-id: 2083ce117791e6ad22037f91618af917fe99d40b --- bin/create_release.sh | 4 + bin/hyperion.init.sh | 11 +- bin/hyperion.initctl.sh | 17 ++ bin/hyperion.systemd.sh | 15 ++ bin/remove_hyperion.sh | 105 ++++++++++ config/hyperion.config.json | 372 ++++++++++++++++++------------------ 6 files changed, 341 insertions(+), 183 deletions(-) create mode 100644 bin/hyperion.initctl.sh create mode 100644 bin/hyperion.systemd.sh create mode 100644 bin/remove_hyperion.sh diff --git a/bin/create_release.sh b/bin/create_release.sh index d6b9bf66..c44fb5c5 100644 --- a/bin/create_release.sh +++ b/bin/create_release.sh @@ -24,6 +24,8 @@ tar --create --verbose --gzip --absolute-names --show-transformed-names --ignore --transform "s:$repodir/effects/:hyperion/effects/:" \ --transform "s:$repodir/config/:hyperion/config/:" \ --transform "s:$repodir/bin/hyperion.init.sh:hyperion/init.d/hyperion.init.sh:" \ + --transform "s:$repodir/bin/hyperion.systemd.sh:hyperion/init.d/hyperion.systemd.sh:" \ + --transform "s:$repodir/bin/hyperion.initctl.sh:hyperion/init.d/hyperion.initctl.sh:" \ --transform "s://:/:g" \ "$builddir/bin/hyperiond" \ "$builddir/bin/hyperion-remote" \ @@ -32,5 +34,7 @@ tar --create --verbose --gzip --absolute-names --show-transformed-names --ignore "$builddir/bin/dispmanx2png" \ "$repodir/effects/"* \ "$repodir/bin/hyperion.init.sh" \ + "$repodir/bin/hyperion.systemd.sh" \ + "$repodir/bin/hyperion.initctl.sh" \ "$repodir/config/hyperion.config.json" diff --git a/bin/hyperion.init.sh b/bin/hyperion.init.sh index d83bdb28..fbae0156 100644 --- a/bin/hyperion.init.sh +++ b/bin/hyperion.init.sh @@ -1,7 +1,16 @@ #!/bin/bash -# Hyperion daemon +# Hyperion daemon service # description: Hyperion daemon # processname: hyperiond +### BEGIN INIT INFO +# Provides: Hyperion +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Hyperion Ambilight init.d Service. +# Description: Hyperion Ambilight init.d Service. +### END INIT INFO DAEMON=hyperiond DAEMONOPTS="/etc/hyperion.config.json" diff --git a/bin/hyperion.initctl.sh b/bin/hyperion.initctl.sh new file mode 100644 index 00000000..e533b14a --- /dev/null +++ b/bin/hyperion.initctl.sh @@ -0,0 +1,17 @@ +## Hyperion daemon initctl script + +description "hyperion" +author "poljvd & tvdzwan" + +start on (runlevel [2345]) +stop on (runlevel [!2345]) + +respawn + +pre-start script +#comment out the following 2 lines for x32/64 +modprobe spidev +/usr/bin/gpio2spi +end script + +exec /usr/bin/hyperiond /etc/hyperion.config.json \ No newline at end of file diff --git a/bin/hyperion.systemd.sh b/bin/hyperion.systemd.sh new file mode 100644 index 00000000..005c0c14 --- /dev/null +++ b/bin/hyperion.systemd.sh @@ -0,0 +1,15 @@ +[Unit] +Description=Hyperion Systemd service + +[Service] +Type=simple +User=root +Group=root +UMask=007 +ExecStart=/opt/hyperion/bin/hyperiond /etc/hyperion.config.json +ExecReload=/bin/kill -HUP $MAINPID +Restart=on-failure +TimeoutStopSec=10 + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/bin/remove_hyperion.sh b/bin/remove_hyperion.sh new file mode 100644 index 00000000..2b0c2788 --- /dev/null +++ b/bin/remove_hyperion.sh @@ -0,0 +1,105 @@ +#!/bin/sh +# Script to remove Hyperion and all services + +# Make sure /sbin is on the path (for service to find sub scripts) +PATH="/sbin:$PATH" + +#Check if HyperCon is logged in as root +if [ $(id -u) != 0 ] && [ "$1" = "HyperConRemove" ]; then + echo '---> Critical Error: Please connect as user "root" through HyperCon' + echo '---> We need admin privileges to remove your Hyperion! -> abort' + exit 1 +fi + +#Check, if script is running as root +if [ $(id -u) != 0 ]; then + echo '---> Critical Error: Please run the script as root (sudo sh ./remove_hyperion.sh)' + exit 1 +fi + +#Welcome message +echo '*******************************************************************************' +echo 'This script will remove Hyperion and itīs services' +echo '-----> Please BACKUP your hyperion.config.json if necessary <-----' +echo '*******************************************************************************' + +#Skip the prompt if HyperCon Remove +if [ "$1" = "" ]; then +#Prompt for confirmation to proceed +while true +do +echo -n "---> Do you really want to remove Hyperion and itīs services? (y or n) :" +read CONFIRM +case $CONFIRM in +y|Y|YES|yes|Yes) break ;; +n|N|no|NO|No) +echo "---> Aborting - you entered \"$CONFIRM\"" +exit +;; +*) echo "-> Please enter only y or n" +esac +done +echo "---> You entered \"$CONFIRM\". Remove Hyperion!" +fi +# Find out if we are on OpenElec +OS_OPENELEC=`grep -m1 -c OpenELEC /etc/issue` + +# check which init script we should use +USE_SYSTEMD=`grep -m1 -c systemd /proc/1/comm` +USE_INITCTL=`which /sbin/initctl | wc -l` +USE_SERVICE=`which /usr/sbin/service | wc -l` + +# Stop hyperion daemon if it is running +echo '---> Stop Hyperion, if necessary' +if [ $OS_OPENELEC -eq 1 ]; then + killall hyperiond 2>/dev/null +elif [ $USE_INITCTL -eq 1 ]; then + /sbin/initctl stop hyperion 2>/dev/null +elif [ $USE_SERVICE -eq 1 ]; then + /usr/sbin/service hyperion stop 2>/dev/null +elif [ $USE_SYSTEMD -eq 1 ]; then + service hyperion stop 2>/dev/null +fi + +#Disabling and delete service files +if [ $USE_INITCTL -eq 1 ]; then + echo '---> Delete and disable Hyperion initctl script' + rm -v /etc/init/hyperion 2>/dev/null + initctl reload-configuration +elif [ $OS_OPENELEC -eq 1 ]; then + # Remove Hyperion from OpenELEC autostart.sh + echo "---> Remove Hyperion from OpenELEC autostart.sh" + sed -i "/hyperiond/d" /storage/.config/autostart.sh 2>/dev/null +elif [ $USE_SYSTEMD -eq 1 ]; then + # Delete and disable Hyperion systemd script + echo '---> Delete and disable Hyperion systemd script' + systemctl disable hyperion.service + rm -v /etc/systemd/system/hyperion.service 2>/dev/null +elif [ $USE_SERVICE -eq 1 ]; then + # Delete and disable Hyperion init.d script + echo '---> Delete and disable Hyperion init.d script' + update-rc.d -f hyperion remove + rm /etc/init.d/hyperion 2>/dev/null +fi + +# Delete Hyperion binaries +if [ $OS_OPENELEC -eq 1 ]; then + # Remove OpenELEC Hyperion binaries and configs + echo '---> Remove the OpenELEC Hyperion binaries and hyperion.config.json' + rm -rv /storage/hyperion 2>/dev/null + rm -v /storage/.config/hyperion.config.json 2>/dev/null +else + #Remove binaries on all distributions/systems (not OpenELEC) + echo "---> Remove links to the binaries" + rm -v /usr/bin/hyperiond 2>/dev/null + rm -v /usr/bin/hyperion-remote 2>/dev/null + rm -v /usr/bin/hyperion-v4l2 2>/dev/null + rm -v /etc/hyperion.config.json 2>/dev/null + echo "---> Remove binaries" + rm -rv /opt/hyperion 2>/dev/null +fi +echo '*******************************************************************************' +echo 'Hyperion successful removed!' +echo '*******************************************************************************' +exit 0 + \ No newline at end of file diff --git a/config/hyperion.config.json b/config/hyperion.config.json index 291086db..5bc313c3 100644 --- a/config/hyperion.config.json +++ b/config/hyperion.config.json @@ -4,39 +4,19 @@ { /// Device configuration contains the following fields: /// * 'name' : The user friendly name of the device (only used for display purposes) - /// * 'type' : The type of the device or leds (known types for now are 'ws2801', 'ldp8806', - /// 'lpd6803', 'sedu', 'adalight', 'lightpack', 'philipshue', 'test' and 'none') - /// * 'output' : The output specification depends on selected device. This can for example be the - /// device specifier, device serial number, or the output file name - /// * 'rate' : The baudrate of the output to the device + /// * 'type' : The type of the device or leds (known types for now are + /// APA102, Adalight, AmbiLed, Atmo, Hyperion-USBASP-WS2801, Hyperion-USBASP-WS2812, Lightberry, Lightpack, LPD6803, LPD8806, Multi-Lightpack, P9813, Paintpack, PhilipsHUE, PiBlaster, SEDU, Test, ThinkerForge, TPM2, WS2801, WS2812b, None) + /// * [device type specific configuration] /// * 'colorOrder' : The order of the color bytes ('rgb', 'rbg', 'bgr', etc.). - /// Specific of Philips Hue: - /// * 'username' : The name of user registred on the Philips Hue Bridge - /// * 'switchOffOnBlack' : Define if Hue light switch off when black is detected - /// * 'transitiontime' : Set the time of transition between color of Hue light "device" : { "name" : "MyPi", "type" : "ws2801", "output" : "/dev/spidev0.0", - "rate" : 250000, + "rate" : 1000000, "colorOrder" : "rgb" }, - /// Configuration for message forwarding to other hyperions - /// protobuffer and json remote interface are forwarded to configured hosts - /// 'proto' is mostly used for video streams and 'json' for effects - /// - /// ** pay attention which port you use. use correct ports for protols ** - /// - /// * 'proto' : list of host in form of : - /// * 'json' : list of host in form of : -/// "forwarder" : -/// { -/// "proto" : [ "127.0.0.1:19445","192.168.178.88:19445" ], -/// "json" : [ "127.0.0.1:19444","192.168.178.88:19444" ] -/// }, - /// Color manipulation configuration used to tune the output colors to specific surroundings. /// The configuration contains a list of color-transforms. Each transform contains the /// following fields: @@ -59,6 +39,7 @@ /// - 'type' The type of smoothing algorithm ('linear' or 'none') /// - 'time_ms' The time constant for smoothing algorithm in milliseconds /// - 'updateFrequency' The update frequency of the leds in Hz + /// - 'updateDelay' The delay of the output to leds (in periods of smoothing) "color" : { "transform" : @@ -96,13 +77,156 @@ ], "smoothing" : { - "type" : "none", + "type" : "linear", "time_ms" : 200, "updateFrequency" : 20.0000, "updateDelay" : 0 } }, + /// The black border configuration, contains the following items: + /// * enable : true if the detector should be activated + /// * threshold : Value below which a pixel is regarded as black (value between 0.0 and 1.0) + /// * unknownFrameCnt : Number of frames without any detection before the border is set to 0 (default 600) + /// * borderFrameCnt : Number of frames before a consistent detected border gets set (default 50) + /// * maxInconsistentCnt : Number of inconsistent frames that are ignored before a new border gets a chance to proof consistency + /// * blurRemoveCnt : Number of pixels that get removed from the detected border to cut away blur (default 1) + /// * mode : Border detection mode (values=default,classic,osd) + "blackborderdetector" : + { + "enable" : true, + "threshold" : 0.0, + "unknownFrameCnt" : 600, + "borderFrameCnt" : 50, + "maxInconsistentCnt" : 10, + "blurRemoveCnt" : 1, + "mode" : "default" + }, + + /// The configuration of the effect engine, contains the following items: + /// * paths : An array with absolute location(s) of directories with effects + /// * color : Set static color after boot -> set effect to "" (empty) and input the values [R,G,B] and set duration_ms NOT to 0 (use 1) instead + /// * effect : The effect selected as 'boot sequence' + /// * duration_ms : The duration of the selected effect (0=endless) + /// * priority : The priority of the selected effect/static color (default=0) + "effects" : + { + "paths" : + [ + "/opt/hyperion/effects" + ] + }, + + "bootsequence" : + { + "color" : [0,0,0], + "effect" : "Rainbow swirl fast", + "duration_ms" : 3000, + "priority" : 990 + }, + + /// The configuration of the Json/Proto forwarder. Forward messages to multiple instances of Hyperion on same and/or other hosts + /// 'proto' is mostly used for video streams and 'json' for effects + /// * proto : Proto server adress and port of your target. Syntax:[IP:PORT] -> ["127.0.0.1:19447"] or more instances to forward ["127.0.0.1:19447","192.168.0.24:19449"] + /// * json : Json server adress and port of your target. Syntax:[IP:PORT] -> ["127.0.0.1:19446"] or more instances to forward ["127.0.0.1:19446","192.168.0.24:19448"] + /// HINT: If you redirect to "127.0.0.1" (localhost) you could start a second hyperion with another device/led config! + /// Be sure your client(s) is/are listening on the configured ports. The second Hyperion (if used) also needs to be configured! (HyperCon -> External -> Json Server/Proto Server) +// "forwarder" : +// { +// "proto" : ["127.0.0.1:19447"], +// "json" : ["127.0.0.1:19446"] +// }, + + /// The configuration for the frame-grabber, contains the following items: + /// * width : The width of the grabbed frames [pixels] + /// * height : The height of the grabbed frames [pixels] + /// * frequency_Hz : The frequency of the frame grab [Hz] + "framegrabber" : + { + "width" : 80, + "height" : 45, + "frequency_Hz" : 10.0 + }, + + /// The configuration of the Kodi connection used to enable and disable the frame-grabber. Contains the following fields: + /// * xbmcAddress : The IP address of the Kodi-host + /// * xbmcTcpPort : 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 + /// * 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 +// "xbmcVideoChecker" : +// { +// "xbmcAddress" : "127.0.0.1", +// "xbmcTcpPort" : 9090, +// "grabVideo" : true, +// "grabPictures" : true, +// "grabAudio" : true, +// "grabMenu" : false, +// "grabScreensaver" : true, +// "enable3DDetection" : true +// }, + + /// The configuration of the Json server which enables the json remote interface + /// * port : Port at which the json server is started + "jsonServer" : + { + "port" : 19444 + }, + + /// The configuration of the Proto server which enables the protobuffer remote interface + /// * port : Port at which the protobuffer server is started + "protoServer" : + { + "port" : 19445 + }, + + /// The configuration of the boblight server which enables the boblight remote interface + /// * port : Port at which the boblight server is started +// "boblightServer" : +// { +// "port" : 19333 +// }, + + /// Configuration for the embedded V4L2 grabber + /// * device : V4L2 Device to use [default="/dev/video0"] + /// * input : V4L2 input to use [default=0] + /// * standard : Video standard (no-change/PAL/NTSC) [default="no-change"] + /// * width : V4L2 width to set [default=-1] + /// * height : V4L2 height to set [default=-1] + /// * frameDecimation : Frame decimation factor [default=2] + /// * sizeDecimation : Size decimation factor [default=8] + /// * priority : Hyperion priority channel [default=800] + /// * mode : 3D mode to use 2D/3DSBS/3DTAB (note: no autodetection) [default="2D"] + /// * cropLeft : Cropping from the left [default=0] + /// * cropRight : Cropping from the right [default=0] + /// * cropTop : Cropping from the top [default=0] + /// * cropBottom : Cropping from the bottom [default=0] + /// * redSignalThreshold : Signal threshold for the red channel between 0.0 and 1.0 [default=0.0] + /// * greenSignalThreshold : Signal threshold for the green channel between 0.0 and 1.0 [default=0.0] + /// * blueSignalThreshold : Signal threshold for the blue channel between 0.0 and 1.0 [default=0.0] +// "grabber-v4l2" : +// { +// "device" : "/dev/video0", +// "input" : 0, +// "standard" : "no-change", +// "width" : -1, +// "height" : -1, +// "frameDecimation" : 2, +// "sizeDecimation" : 8, +// "priority" : 800, +// "mode" : "2D", +// "cropLeft" : 0, +// "cropRight" : 0, +// "cropTop" : 0, +// "cropBottom" : 0, +// "redSignalThreshold" : 0.0, +// "greenSignalThreshold" : 0.0, +// "blueSignalThreshold" : 0.0 +// }, + /// The configuration for each individual led. This contains the specification of the area /// averaged of an input image for each led to determine its color. Each item in the list /// contains the following fields: @@ -116,47 +240,47 @@ [ { "index" : 0, - "hscan" : { "minimum" : 0.4375, "maximum" : 0.5000 }, + "hscan" : { "minimum" : 0.5000, "maximum" : 0.5625 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { "index" : 1, - "hscan" : { "minimum" : 0.3750, "maximum" : 0.4375 }, + "hscan" : { "minimum" : 0.4375, "maximum" : 0.5000 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { "index" : 2, - "hscan" : { "minimum" : 0.3125, "maximum" : 0.3750 }, + "hscan" : { "minimum" : 0.3750, "maximum" : 0.4375 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { "index" : 3, - "hscan" : { "minimum" : 0.2500, "maximum" : 0.3125 }, + "hscan" : { "minimum" : 0.3125, "maximum" : 0.3750 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { "index" : 4, - "hscan" : { "minimum" : 0.1875, "maximum" : 0.2500 }, + "hscan" : { "minimum" : 0.2500, "maximum" : 0.3125 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { "index" : 5, - "hscan" : { "minimum" : 0.1250, "maximum" : 0.1875 }, + "hscan" : { "minimum" : 0.1875, "maximum" : 0.2500 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { "index" : 6, - "hscan" : { "minimum" : 0.0625, "maximum" : 0.1250 }, + "hscan" : { "minimum" : 0.1250, "maximum" : 0.1875 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { "index" : 7, - "hscan" : { "minimum" : 0.0000, "maximum" : 0.0625 }, + "hscan" : { "minimum" : 0.0625, "maximum" : 0.1250 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { "index" : 8, - "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, + "hscan" : { "minimum" : 0.0000, "maximum" : 0.0625 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { @@ -196,271 +320,155 @@ }, { "index" : 16, - "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, - "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } - }, - { - "index" : 17, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0625 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { - "index" : 18, + "index" : 17, "hscan" : { "minimum" : 0.0625, "maximum" : 0.1250 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { - "index" : 19, + "index" : 18, "hscan" : { "minimum" : 0.1250, "maximum" : 0.1875 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { - "index" : 20, + "index" : 19, "hscan" : { "minimum" : 0.1875, "maximum" : 0.2500 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { - "index" : 21, + "index" : 20, "hscan" : { "minimum" : 0.2500, "maximum" : 0.3125 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { - "index" : 22, + "index" : 21, "hscan" : { "minimum" : 0.3125, "maximum" : 0.3750 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { - "index" : 23, + "index" : 22, "hscan" : { "minimum" : 0.3750, "maximum" : 0.4375 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { - "index" : 24, + "index" : 23, "hscan" : { "minimum" : 0.4375, "maximum" : 0.5000 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { - "index" : 25, + "index" : 24, "hscan" : { "minimum" : 0.5000, "maximum" : 0.5625 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, + { + "index" : 25, + "hscan" : { "minimum" : 0.5625, "maximum" : 0.6250 }, + "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } + }, { "index" : 26, - "hscan" : { "minimum" : 0.5625, "maximum" : 0.6250 }, + "hscan" : { "minimum" : 0.6250, "maximum" : 0.6875 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { "index" : 27, - "hscan" : { "minimum" : 0.6250, "maximum" : 0.6875 }, + "hscan" : { "minimum" : 0.6875, "maximum" : 0.7500 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { "index" : 28, - "hscan" : { "minimum" : 0.6875, "maximum" : 0.7500 }, + "hscan" : { "minimum" : 0.7500, "maximum" : 0.8125 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { "index" : 29, - "hscan" : { "minimum" : 0.7500, "maximum" : 0.8125 }, + "hscan" : { "minimum" : 0.8125, "maximum" : 0.8750 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { "index" : 30, - "hscan" : { "minimum" : 0.8125, "maximum" : 0.8750 }, + "hscan" : { "minimum" : 0.8750, "maximum" : 0.9375 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { "index" : 31, - "hscan" : { "minimum" : 0.8750, "maximum" : 0.9375 }, + "hscan" : { "minimum" : 0.9375, "maximum" : 1.0000 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } }, { "index" : 32, - "hscan" : { "minimum" : 0.9375, "maximum" : 1.0000 }, - "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } - }, - { - "index" : 33, - "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, - "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } - }, - { - "index" : 34, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "vscan" : { "minimum" : 0.0000, "maximum" : 0.1429 } }, { - "index" : 35, + "index" : 33, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "vscan" : { "minimum" : 0.1429, "maximum" : 0.2857 } }, { - "index" : 36, + "index" : 34, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "vscan" : { "minimum" : 0.2857, "maximum" : 0.4286 } }, { - "index" : 37, + "index" : 35, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "vscan" : { "minimum" : 0.4286, "maximum" : 0.5714 } }, { - "index" : 38, + "index" : 36, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "vscan" : { "minimum" : 0.5714, "maximum" : 0.7143 } }, { - "index" : 39, + "index" : 37, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "vscan" : { "minimum" : 0.7143, "maximum" : 0.8571 } }, { - "index" : 40, + "index" : 38, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "vscan" : { "minimum" : 0.8571, "maximum" : 1.0000 } }, { - "index" : 41, - "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, - "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } - }, - { - "index" : 42, + "index" : 39, "hscan" : { "minimum" : 0.9375, "maximum" : 1.0000 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { - "index" : 43, + "index" : 40, "hscan" : { "minimum" : 0.8750, "maximum" : 0.9375 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { - "index" : 44, + "index" : 41, "hscan" : { "minimum" : 0.8125, "maximum" : 0.8750 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { - "index" : 45, + "index" : 42, "hscan" : { "minimum" : 0.7500, "maximum" : 0.8125 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { - "index" : 46, + "index" : 43, "hscan" : { "minimum" : 0.6875, "maximum" : 0.7500 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { - "index" : 47, + "index" : 44, "hscan" : { "minimum" : 0.6250, "maximum" : 0.6875 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } }, { - "index" : 48, + "index" : 45, "hscan" : { "minimum" : 0.5625, "maximum" : 0.6250 }, "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } - }, - { - "index" : 49, - "hscan" : { "minimum" : 0.5000, "maximum" : 0.5625 }, - "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } } ], - /// The black border configuration, contains the following items: - /// * enable : true if the detector should be activated - /// * threshold : Value below which a pixel is regarded as black (value between 0.0 and 1.0) - /// * unknownFrameCnt : Number of frames without any detection before the border is set to 0 (default 600) - optional - /// * borderFrameCnt : Number of frames before a consistent detected border gets set (default 50) - optional - /// * maxInconsistentCnt : Number of inconsistent frames that are ignored before a new border gets a chance to proof consistency - optional - /// * blurRemoveCnt : Number of pixels that get removed from the detected border to cut away blur (default 1) - optional - /// * mode : Border detection mode (values "default","classic","osd") - optional - - "blackborderdetector" : - { - "enable" : true, - "threshold" : 0.01, - "unknownFrameCnt": 600, - "borderFrameCnt" : 50, - "maxInconsistentCnt" : 10, - "blurRemoveCnt": 1, - "mode" : "default" - }, - - /// The configuration of the effect engine, contains the following items: - /// * paths : An array with absolute location(s) of directories with effects - /// * bootsequence : The effect selected as 'boot sequence' - /// * effect : name of the effect you want to start. Set to empty if no effect wanted - /// * color : switch to static color after effect is done - /// * duration_ms : duration of boot effect in ms. 0 means effect stays forever - /// * priority : priority of boot effect and static color - "effects" : - { - "paths" : - [ - "/opt/hyperion/effects" - ] - }, - - "bootsequence" : - { - "color" : [0,0,0], - "effect" : "Rainbow swirl fast", - "duration_ms" : 3000, - "priority" : 0 - }, - - /// The configuration for the frame-grabber, contains the following items: - /// * width : The width of the grabbed frames [pixels] - /// * height : The height of the grabbed frames [pixels] - /// * frequency_Hz : The frequency of the frame grab [Hz] - "framegrabber" : - { - "width" : 64, - "height" : 64, - "frequency_Hz" : 10.0 - }, - - /// The configuration of the XBMC connection used to enable and disable the frame-grabber. Contains the following fields: - /// * xbmcAddress : The IP address of the XBMC-host - /// * xbmcTcpPort : The TCP-port of the XBMC-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) in the XBMC menu - /// * grabScreensaver : Flag indicating that the frame-grabber is on(true) when XBMC is on screensaver - /// * enable3DDetection : Flag indicating that the frame-grabber should switch to a 3D compatible modus if a 3D video is playing - "xbmcVideoChecker" : - { - "xbmcAddress" : "127.0.0.1", - "xbmcTcpPort" : 9090, - "grabVideo" : true, - "grabPictures" : true, - "grabAudio" : true, - "grabMenu" : false, - "grabScreensaver" : true, - "enable3DDetection" : true - }, - - /// The configuration of the Json server which enables the json remote interface - /// * port : Port at which the json server is started - "jsonServer" : - { - "port" : 19444 - }, - - /// The configuration of the Proto server which enables the protobuffer remote interface - /// * port : Port at which the protobuffer server is started - "protoServer" : - { - "port" : 19445 - }, - - /// The configuration of the boblight server which enables the boblight remote interface - /// * port : Port at which the boblight server is started -// "boblightServer" : -// { -// "port" : 19333 -// }, - "endOfJson" : "endOfJson" }