From ff27133bf2785d10f8b75879f3feab214a7580b8 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 18 Mar 2016 19:05:01 +0200 Subject: [PATCH 1/3] qt: initial package --- packages/addons/addon-depends/qt/package.mk | 107 ++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 packages/addons/addon-depends/qt/package.mk diff --git a/packages/addons/addon-depends/qt/package.mk b/packages/addons/addon-depends/qt/package.mk new file mode 100644 index 0000000000..e89eaa9005 --- /dev/null +++ b/packages/addons/addon-depends/qt/package.mk @@ -0,0 +1,107 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2009-2016 Lukas Rusak (lrusak@libreelec.tv) +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="qt" +PKG_VERSION="4.8.7" +PKG_LICENSE="OSS" +PKG_SITE="http://qt-project.org" +PKG_URL="http://download.qt-project.org/official_releases/qt/4.8/${PKG_VERSION}/qt-everywhere-opensource-src-${PKG_VERSION}.tar.gz" +PKG_SOURCE_DIR="qt-everywhere-opensource-src-${PKG_VERSION}" +PKG_DEPENDS_TARGET="toolchain Python zlib:host zlib" +PKG_SHORTDESC="Qt GUI toolkit" +PKG_LONGDESC="Qt GUI toolkit" + +QMAKE_CONF_DIR="mkspecs/qws/linux-openelec-g++" +QMAKE_CONF="${QMAKE_CONF_DIR}/qmake.conf" + + +PKG_CONFIGURE_OPTS_TARGET="-prefix /usr \ + -hostprefix $SYSROOT_PREFIX \ + -xplatform qws/linux-openelec-g++ \ + -make libs \ + -force-pkg-config \ + -release \ + -opensource -confirm-license \ + -static \ + -fast \ + -no-accessibility \ + -no-sql-mysql -no-sql-sqlite \ + -no-qt3support \ + -no-xmlpatterns \ + -no-multimedia \ + -no-audio-backend \ + -no-phonon -no-phonon-backend \ + -no-svg \ + -no-webkit \ + -no-javascript-jit \ + -no-script \ + -no-scripttools \ + -no-declarative -no-declarative-debug \ + -no-neon \ + -system-zlib \ + -no-gif \ + -no-libtiff \ + -no-libpng \ + -no-libmng \ + -no-libjpeg \ + -no-openssl \ + -no-rpath \ + -silent \ + -optimized-qmake \ + -no-nis \ + -no-cups \ + -no-pch \ + -no-dbus \ + -reduce-relocations \ + -reduce-exports \ + -no-separate-debug-info \ + -no-fontconfig \ + -no-glib \ + -embedded $TARGET_ARCH" + +configure_target() { + cd .. + mkdir -p $QMAKE_CONF_DIR + echo "include(../../common/linux.conf)" > $QMAKE_CONF + echo "include(../../common/gcc-base-unix.conf)" >> $QMAKE_CONF + echo "include(../../common/g++-unix.conf)" >> $QMAKE_CONF + echo "include(../../common/qws.conf)" >> $QMAKE_CONF + echo "QMAKE_CC = $CC" >> $QMAKE_CONF + echo "QMAKE_CXX = $CXX" >> $QMAKE_CONF + echo "QMAKE_LINK = $CXX" >> $QMAKE_CONF + echo "QMAKE_LINK_SHLIB = $CXX" >> $QMAKE_CONF + echo "QMAKE_AR = $AR cqs" >> $QMAKE_CONF + echo "QMAKE_OBJCOPY = $OBJCOPY" >> $QMAKE_CONF + echo "QMAKE_STRIP = $STRIP" >> $QMAKE_CONF + echo "QMAKE_CFLAGS = $CFLAGS" >> $QMAKE_CONF + echo "QMAKE_CXXFLAGS = $CXXFLAGS" >> $QMAKE_CONF + echo "QMAKE_LFLAGS = $LDFLAGS" >> $QMAKE_CONF + echo "load(qt_config)" >> $QMAKE_CONF + echo '#include "../../linux-g++/qplatformdefs.h"' >> $QMAKE_CONF_DIR/qplatformdefs.h + + CC="" CXX="" LD="" RANLIB="" AR="" AS="" CPPFLAGS="" CFLAGS="" LDFLAGS="" CXXFLAGS="" \ + PKG_CONFIG_SYSROOT_DIR="$SYSROOT_PREFIX" \ + PKG_CONFIG="$ROOT/$TOOLCHAIN/bin/pkg-config" \ + PKG_CONFIG_PATH="$SYSROOT_PREFIX/usr/lib/pkgconfig" \ + ./configure $PKG_CONFIGURE_OPTS_TARGET +} + +post_makeinstall_target() { + mkdir -p $ROOT/$TOOLCHAIN/bin + cp -P $ROOT/$PKG_BUILD/bin/qmake $ROOT/$TOOLCHAIN/bin +} From 49411fd61e4a07fcc7768a60ffcc7f8208e758a6 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 18 Mar 2016 19:05:36 +0200 Subject: [PATCH 2/3] hyperion: initial add-on --- .../addons/service/hyperion/icon/icon.png | Bin 0 -> 52084 bytes packages/addons/service/hyperion/package.mk | 94 ++++++++++++++++++ .../patches/hyperion-01_std-isnan.patch | 17 ++++ .../hyperion/source/bin/hyperiond.start | 24 +++++ .../addons/service/hyperion/source/default.py | 22 ++++ .../source/system.d/service.hyperion.service | 14 +++ tools/mkpkg/mkpkg_hyperion | 41 ++++++++ 7 files changed, 212 insertions(+) create mode 100644 packages/addons/service/hyperion/icon/icon.png create mode 100644 packages/addons/service/hyperion/package.mk create mode 100644 packages/addons/service/hyperion/patches/hyperion-01_std-isnan.patch create mode 100644 packages/addons/service/hyperion/source/bin/hyperiond.start create mode 100644 packages/addons/service/hyperion/source/default.py create mode 100644 packages/addons/service/hyperion/source/system.d/service.hyperion.service create mode 100755 tools/mkpkg/mkpkg_hyperion diff --git a/packages/addons/service/hyperion/icon/icon.png b/packages/addons/service/hyperion/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c9e07286e1931c24dec5df046a083fc6b1a97435 GIT binary patch literal 52084 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. +################################################################################ + +PKG_NAME="hyperion" +PKG_VERSION="f64b6eb" +PKG_REV="0" +PKG_LICENSE="GPL" +PKG_SITE="https://github.com/tvdzwan/hyperion" +PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" +PKG_DEPENDS_TARGET="toolchain Python libusb qt" +PKG_SECTION="service" +PKG_SHORTDESC="hyperion: an ambilight controller" +PKG_LONGDESC="$PKG_NAME-$PKG_VERSION\nHyperion is an opensource 'AmbiLight' implementation" + +PKG_IS_ADDON="yes" +PKG_ADDON_NAME="Hyperion" +PKG_ADDON_TYPE="xbmc.service" + +PKG_MAINTAINER="Lukas Rusak (lrusak@libreelec.tv)" + +AMLOGIC_SUPPORT="-DENABLE_AMLOGIC=0" +DISPMANX_SUPPORT="-DENABLE_DISPMANX=0" +FB_SUPPORT="-DENABLE_FB=1" +X11_SUPPORT="-DENABLE_X11=0" + +if [ "$KODIPLAYER_DRIVER" = "libamcodec" ]; then + AMLOGIC_SUPPORT="-DENABLE_AMLOGIC=1" +elif [ "$KODIPLAYER_DRIVER" = "bcm2835-driver" ]; then + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET bcm2835-driver" + DISPMANX_SUPPORT="-DENABLE_DISPMANX=1" + FB_SUPPORT="-DENABLE_FB=0" +elif [ "$DISPLAYSERVER" = "x11" ]; then + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET xorg-server" + X11_SUPPORT="-DENABLE_X11=1" +fi + +configure_target() { + echo "" > ../cmake/FindGitVersion.cmake + cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_PREFIX_PATH=$SYSROOT_PREFIX/usr \ + -DQT_QMAKE_EXECUTABLE=$ROOT/$TOOLCHAIN/bin/qmake \ + -DHYPERION_VERSION_ID="$PKG_VERSION" \ + $AMLOGIC_SUPPORT \ + $DISPMANX_SUPPORT \ + $FB_SUPPORT \ + -DENABLE_OSX=0 \ + -DENABLE_PROTOBUF=0 \ + -DENABLE_SPIDEV=1 \ + -DENABLE_TINKERFORGE=0 \ + -DENABLE_V4L2=0 \ + -DENABLE_WS2812BPWM=0 \ + -DENABLE_WS281XPWM=1 \ + $X11_SUPPORT \ + -DENABLE_QT5=0 \ + -DENABLE_TESTS=0 \ + -Wno-dev \ + .. +} + +makeinstall_target() { + : # nothing to do here +} + +addon() { + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -P $PKG_BUILD/.$TARGET_NAME/bin/hyperiond $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -P $PKG_BUILD/.$TARGET_NAME/bin/hyperion-remote $ADDON_BUILD/$PKG_ADDON_ID/bin + + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/config + cp -P $PKG_BUILD/config/hyperion.config.json $ADDON_BUILD/$PKG_ADDON_ID/config/hyperion.config.json.sample + sed -i -e "s,/opt/hyperion/effects,/storage/.kodi/addons/service.hyperion/effects,g" \ + $ADDON_BUILD/$PKG_ADDON_ID/config/hyperion.config.json.sample + + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/effects + cp -PR $PKG_BUILD/effects/* $ADDON_BUILD/$PKG_ADDON_ID/effects + + debug_strip $ADDON_BUILD/$PKG_ADDON_ID/bin +} diff --git a/packages/addons/service/hyperion/patches/hyperion-01_std-isnan.patch b/packages/addons/service/hyperion/patches/hyperion-01_std-isnan.patch new file mode 100644 index 0000000000..44e06c17b8 --- /dev/null +++ b/packages/addons/service/hyperion/patches/hyperion-01_std-isnan.patch @@ -0,0 +1,17 @@ +diff --git a/libsrc/leddevice/LedDevicePhilipsHue.cpp b/libsrc/leddevice/LedDevicePhilipsHue.cpp +index 332176a..81f421b 100755 +--- a/libsrc/leddevice/LedDevicePhilipsHue.cpp ++++ b/libsrc/leddevice/LedDevicePhilipsHue.cpp +@@ -105,10 +105,10 @@ CiColor PhilipsHueLight::rgbToCiColor(float red, float green, float blue) { + // Convert to x,y space. + float cx = X / (X + Y + Z); + float cy = Y / (X + Y + Z); +- if (isnan(cx)) { ++ if (std::isnan(cx)) { + cx = 0.0f; + } +- if (isnan(cy)) { ++ if (std::isnan(cy)) { + cy = 0.0f; + } + // Brightness is simply Y in the XYZ space. diff --git a/packages/addons/service/hyperion/source/bin/hyperiond.start b/packages/addons/service/hyperion/source/bin/hyperiond.start new file mode 100644 index 0000000000..3ee44186b0 --- /dev/null +++ b/packages/addons/service/hyperion/source/bin/hyperiond.start @@ -0,0 +1,24 @@ +#!/bin/sh +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2009-2016 Lukas Rusak (lrusak@libreelec.tv) +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +. /etc/profile + +oe_setup_addon service.hyperion + +exec hyperiond $ADDON_HOME/hyperion.config.json diff --git a/packages/addons/service/hyperion/source/default.py b/packages/addons/service/hyperion/source/default.py new file mode 100644 index 0000000000..54274cd0ed --- /dev/null +++ b/packages/addons/service/hyperion/source/default.py @@ -0,0 +1,22 @@ +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2009-2016 Lukas Rusak (lrusak@libreelec.tv) +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +import xbmc + +monitor = xbmc.Monitor() +monitor.waitForAbort() diff --git a/packages/addons/service/hyperion/source/system.d/service.hyperion.service b/packages/addons/service/hyperion/source/system.d/service.hyperion.service new file mode 100644 index 0000000000..64f875e980 --- /dev/null +++ b/packages/addons/service/hyperion/source/system.d/service.hyperion.service @@ -0,0 +1,14 @@ +[Unit] +Description=Hyperion service +After=graphical.target +ConditionPathExists=/storage/.kodi/userdata/addon_data/service.hyperion/hyperion.config.json + +[Service] +ExecStart=/bin/sh -c "exec sh /storage/.kodi/addons/service.hyperion/bin/hyperiond.start" +TimeoutStopSec=2 +Restart=always +RestartSec=10 +StartLimitInterval=0 + +[Install] +WantedBy=default.target diff --git a/tools/mkpkg/mkpkg_hyperion b/tools/mkpkg/mkpkg_hyperion new file mode 100755 index 0000000000..6586a6b620 --- /dev/null +++ b/tools/mkpkg/mkpkg_hyperion @@ -0,0 +1,41 @@ +#!/bin/sh +################################################################################ +# This file is part of LibreELEC - http://www.libreelec.tv +# Copyright (C) 2009-2016 Lukas Rusak (lrusak@libreelec.tv) +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +echo "getting sources..." + if [ ! -d hyperion.git ]; then + git clone --depth 1 --recursive https://github.com/tvdzwan/hyperion hyperion.git + fi + + cd hyperion.git + git pull + GIT_REV=`git log -n1 --format=%h` + cd .. + +echo "copying sources..." + rm -rf hyperion-$GIT_REV + cp -R hyperion.git hyperion-$GIT_REV + +echo "cleaning sources..." + rm -rf hyperion-$GIT_REV/.git + +echo "packing sources..." + tar cvJf hyperion-$GIT_REV.tar.xz hyperion-$GIT_REV + +echo "remove temporary sourcedir..." + rm -rf hyperion-$GIT_REV From ce7e57ef24e4c4d8929ea000ceafa8e83fbcaa9a Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Sat, 19 Mar 2016 23:43:37 +0200 Subject: [PATCH 3/3] WeTek_Core/WeTek_Play: set video state to disabled on boot right after boot, if a hardware decoded video is not yet played, asking /dev/amvideocap0 for a frame results in -EAGAIN after a short delay. hyperion is doing AMSTREAM_IOC_GET_VIDEO_DISABLE ioctl on /dev/amvideo to check if video is playing. if initial state is not set, hyperion gets confused, resulting in leds lagging until a hw decoded video is started. this allows hyperion's regular framegrabber and amlgrabber to co-exist nicely --- projects/WeTek_Core/initramfs/platform_init | 3 +++ projects/WeTek_Play/initramfs/platform_init | 3 +++ 2 files changed, 6 insertions(+) diff --git a/projects/WeTek_Core/initramfs/platform_init b/projects/WeTek_Core/initramfs/platform_init index 13a2303373..c83a0f5b76 100755 --- a/projects/WeTek_Core/initramfs/platform_init +++ b/projects/WeTek_Core/initramfs/platform_init @@ -48,6 +48,9 @@ echo 1 > /sys/class/graphics/fb1/blank # Disable framebuffer scaling echo 0 > /sys/class/graphics/fb0/free_scale +# set initial video state +echo 1 > /sys/class/video/disable_video + # Set framebuffer geometry to match the resolution case "$hdmimode" in 720*) diff --git a/projects/WeTek_Play/initramfs/platform_init b/projects/WeTek_Play/initramfs/platform_init index 5e32a6847f..f1adf38fe3 100755 --- a/projects/WeTek_Play/initramfs/platform_init +++ b/projects/WeTek_Play/initramfs/platform_init @@ -46,6 +46,9 @@ echo 0 > /sys/class/graphics/fb0/blank # Disable framebuffer scaling echo 0 > /sys/class/graphics/fb0/free_scale +# set initial video state +echo 1 > /sys/class/video/disable_video + # Set framebuffer geometry to match the resolution case "$hdmimode" in 720*)