From 598fc8723e00cbf20996cb2e85556fb748c1b9fc Mon Sep 17 00:00:00 2001 From: CvH Date: Thu, 24 Mar 2016 22:30:11 +0100 Subject: [PATCH 1/2] addons: add Tvheadend 4.2 - reworked settings - this is a pre version of Tvheadend 4.2 because it is not branched yet --- .../addons/service/tvheadend42/changelog.txt | 2 + .../addons/service/tvheadend42/icon/icon.png | Bin 0 -> 50992 bytes .../addons/service/tvheadend42/package.mk | 86 ++++++++++++++ .../tvheadend42/source/bin/tv_grab_file | 40 +++++++ .../tvheadend42/source/bin/tvheadend42.start | 107 ++++++++++++++++++ .../service/tvheadend42/source/default.py | 17 +++ .../tvheadend42/source/defaults/config | 12 ++ .../config/8d0f5b7ae354d956d7fe5db25f5d0d24 | 15 +++ .../source/defaults/epggrab/config | 16 +++ .../source/defaults/timeshift/config | 9 ++ .../tvheadend42/source/defaults/xmltv/config | 14 +++ .../resources/language/English/strings.xml | 18 +++ .../tvheadend42/source/resources/settings.xml | 22 ++++ .../tvheadend42/source/settings-default.xml | 10 ++ .../source/sleep.d/tvheadend.power | 44 +++++++ .../system.d/service.tvheadend42.service | 14 +++ 16 files changed, 426 insertions(+) create mode 100644 packages/addons/service/tvheadend42/changelog.txt create mode 100644 packages/addons/service/tvheadend42/icon/icon.png create mode 100644 packages/addons/service/tvheadend42/package.mk create mode 100755 packages/addons/service/tvheadend42/source/bin/tv_grab_file create mode 100755 packages/addons/service/tvheadend42/source/bin/tvheadend42.start create mode 100644 packages/addons/service/tvheadend42/source/default.py create mode 100644 packages/addons/service/tvheadend42/source/defaults/config create mode 100644 packages/addons/service/tvheadend42/source/defaults/dvr/config/8d0f5b7ae354d956d7fe5db25f5d0d24 create mode 100644 packages/addons/service/tvheadend42/source/defaults/epggrab/config create mode 100644 packages/addons/service/tvheadend42/source/defaults/timeshift/config create mode 100644 packages/addons/service/tvheadend42/source/defaults/xmltv/config create mode 100644 packages/addons/service/tvheadend42/source/resources/language/English/strings.xml create mode 100644 packages/addons/service/tvheadend42/source/resources/settings.xml create mode 100644 packages/addons/service/tvheadend42/source/settings-default.xml create mode 100755 packages/addons/service/tvheadend42/source/sleep.d/tvheadend.power create mode 100644 packages/addons/service/tvheadend42/source/system.d/service.tvheadend42.service diff --git a/packages/addons/service/tvheadend42/changelog.txt b/packages/addons/service/tvheadend42/changelog.txt new file mode 100644 index 0000000000..2907dab344 --- /dev/null +++ b/packages/addons/service/tvheadend42/changelog.txt @@ -0,0 +1,2 @@ +7.0.100 +- initial LibreELEC version \ No newline at end of file diff --git a/packages/addons/service/tvheadend42/icon/icon.png b/packages/addons/service/tvheadend42/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..846eb14b182e9e62d5cc94029fe31b47b6635d3e GIT binary patch literal 50992 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. +################################################################################ + +PKG_NAME="tvheadend42" +PKG_VERSION="a4afbee" +PKG_VERSION_NUMBER="4.1.1832" +PKG_REV="100" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.tvheadend.org" +PKG_URL="https://github.com/tvheadend/tvheadend/archive/$PKG_VERSION.tar.gz" +PKG_SOURCE_DIR="tvheadend-${PKG_VERSION}*" +PKG_DEPENDS_TARGET="toolchain curl libdvbcsa libiconv libressl Python:host yasm" +PKG_PRIORITY="optional" +PKG_SECTION="service" +PKG_SHORTDESC="Tvheadend: a TV streaming server for Linux" +PKG_LONGDESC="Tvheadend($PKG_VERSION_NUMBER): is a TV streaming server for Linux supporting DVB-S/S2, DVB-C, DVB-T/T2, IPTV, SAT>IP, ATSC and ISDB-T" + +PKG_IS_ADDON="yes" +PKG_ADDON_NAME="Tvheadend 4.2" +PKG_ADDON_TYPE="xbmc.service" +PKG_AUTORECONF="no" +PKG_ADDON_REPOVERSION="7.0" + +PKG_CONFIGURE_OPTS_TARGET="--prefix=/usr \ + --arch=$TARGET_ARCH \ + --cpu=$TARGET_CPU \ + --cc=$TARGET_CC \ + --disable-avahi \ + --enable-bundle \ + --disable-dbus_1 \ + --enable-dvbcsa \ + --disable-dvben50221 \ + --enable-hdhomerun_client \ + --enable-hdhomerun_static \ + --enable-epoll \ + --enable-inotify \ + --disable-nvenc \ + --disable-uriparser \ + --disable-libav \ + --disable-ffmpeg_static \ + --enable-tvhcsa \ + --nowerror \ + --python=$ROOT/$TOOLCHAIN/bin/python" + +post_unpack() { + sed -e 's/VER="0.0.0~unknown"/VER="'$PKG_VERSION_NUMBER' ~ LibreELEC Tvh-addon v'$PKG_ADDON_REPOVERSION'.'$PKG_REV'"/g' -i $PKG_BUILD/support/version +} + +pre_configure_target() { +# fails to build in subdirs + cd $ROOT/$PKG_BUILD + rm -rf .$TARGET_NAME + + export CROSS_COMPILE=$TARGET_PREFIX + export CFLAGS="$CFLAGS -I$SYSROOT_PREFIX/usr/include/iconv -L$SYSROOT_PREFIX/usr/lib/iconv" +} + +post_make_target() { + $CC -O -fbuiltin -fomit-frame-pointer -fPIC -shared -o capmt_ca.so src/extra/capmt_ca.c -ldl +} + +makeinstall_target() { + : # nothing to do here +} + +addon() { + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -P $PKG_BUILD/build.linux/tvheadend $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -P $PKG_BUILD/capmt_ca.so $ADDON_BUILD/$PKG_ADDON_ID/bin +} diff --git a/packages/addons/service/tvheadend42/source/bin/tv_grab_file b/packages/addons/service/tvheadend42/source/bin/tv_grab_file new file mode 100755 index 0000000000..68f466879c --- /dev/null +++ b/packages/addons/service/tvheadend42/source/bin/tv_grab_file @@ -0,0 +1,40 @@ +#!/bin/sh + +################################################################################ +# This file is part of LibreELEC - https://LibreELEC.tv +# Copyright (C) 2016 Team LibreELEC +# +# 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 + +ADDON_HOME="$HOME/.kodi/userdata/addon_data/service.tvheadend42" +ADDON_SETTINGS="$ADDON_HOME/settings.xml" +XMLTV_TYPE=`grep XMLTV_TYPE $ADDON_SETTINGS | awk '{print $3 }' | sed -e "s,value=,," -e "s,\",,g"` +XMLTV_LOCATION_FILE=`grep XMLTV_LOCATION_FILE $ADDON_SETTINGS | awk '{print $3 }' | sed -e "s,value=,," -e "s,\",,g"` +XMLTV_LOCATION_WEB=`grep XMLTV_LOCATION_WEB $ADDON_SETTINGS | awk '{print $3 }' | sed -e "s,value=,," -e "s,\",,g"` +XMLTV_LOCATION_SCRIPT=`grep XMLTV_LOCATION_SCRIPT $ADDON_SETTINGS | awk '{print $3 }' | sed -e "s,value=,," -e "s,\",,g"` + +if [ "$XMLTV_TYPE" = "FILE" ]; then + cat "$XMLTV_LOCATION_FILE" + exit 0 +elif [ "$XMLTV_TYPE" = "SCRIPT" ]; then + if [ -e "$XMLTV_LOCATION_SCRIPT" ] ; then + exec "$XMLTV_LOCATION_SCRIPT" + fi +elif [ "$XMLTV_TYPE" = "WEB" ]; then + wget -qO - "$XMLTV_LOCATION_WEB" + exit 0 +fi diff --git a/packages/addons/service/tvheadend42/source/bin/tvheadend42.start b/packages/addons/service/tvheadend42/source/bin/tvheadend42.start new file mode 100755 index 0000000000..5a5067c04b --- /dev/null +++ b/packages/addons/service/tvheadend42/source/bin/tvheadend42.start @@ -0,0 +1,107 @@ +#!/bin/sh + +################################################################################ +# This file is part of LibreELEC - https://LibreELEC.tv +# Copyright (C) 2016 Team LibreELEC +# +# 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.tvheadend42 + +ADDON_SETTINGS="$ADDON_HOME/settings.xml" + +DVR_SETTINGS_DIR="$ADDON_HOME/dvr/config" +DVR_SETTINGS_FILE="$DVR_SETTINGS_DIR/8d0f5b7ae354d956d7fe5db25f5d0d24" + +EPGGRAB_SETTINGS_DIR="$ADDON_HOME/epggrab" +EPGGRAB_SETTINGS_FILE="$EPGGRAB_SETTINGS_DIR/config" + +TIMESHIFT_SETTINGS_DIR="$ADDON_HOME/timeshift" +TIMESHIFT_SETTINGS_FILE="$TIMESHIFT_SETTINGS_DIR/config" + +TVH_SETTINGS_DIR="$ADDON_HOME" +TVH_SETTINGS_FILE="$TVH_SETTINGS_DIR/config" + +XMLTV_SETTINGS_DIR="$ADDON_HOME/xmltv" +XMLTV_SETTINGS_FILE="$XMLTV_SETTINGS_DIR/config" + +TIMESHIFT_DIR="$ADDON_HOME/cache/timeshift" +XMLTV_FILE="$ADDON_DIR/bin/tv_grab_file" + +chmod a+x $ADDON_DIR/bin/* + +# copy config files to userdata +if [ ! -f "$DVR_SETTINGS_FILE" ]; then + mkdir -p $DVR_SETTINGS_DIR + cp $ADDON_DIR/defaults/dvr/config/8d0f5b7ae354d956d7fe5db25f5d0d24 $DVR_SETTINGS_FILE +fi + +if [ ! -f "$EPGGRAB_SETTINGS_FILE" ]; then + mkdir -p $EPGGRAB_SETTINGS_DIR + cp $ADDON_DIR/defaults/epggrab/config $EPGGRAB_SETTINGS_FILE +fi + +if [ ! -f "$TIMESHIFT_SETTINGS_FILE" ]; then + mkdir -p $TIMESHIFT_DIR + mkdir -p $TIMESHIFT_SETTINGS_DIR + cp $ADDON_DIR/defaults/timeshift/config $TIMESHIFT_SETTINGS_FILE +fi + +if [ ! -f "$TVH_SETTINGS_FILE" ]; then + mkdir -p $TVH_SETTINGS_DIR + cp $ADDON_DIR/defaults/config $TVH_SETTINGS_FILE +fi + +if [ ! -f "$XMLTV_SETTINGS_FILE" ]; then + mkdir -p $XMLTV_SETTINGS_DIR + cp $ADDON_DIR/defaults/xmltv/config $XMLTV_SETTINGS_FILE +fi + +# options +if [ "$WORKAROUND_SLEEP" == "true" ] ; then + sleep $WORKAROUND_SLEEP_TIME +fi + +if [ "$DEBUG" = "yes" ]; then + TVHEADEND_ARG="-B -C -s -u root -g video -c $ADDON_HOME" +else + TVHEADEND_ARG="-B -C -u root -g video -c $ADDON_HOME" +fi + +# start userspace DVB driver/addon +for driver_dvb in $(find /storage/.kodi/addons/driver.dvb.*/bin/userspace-driver.sh -type f 2>/dev/null); do + driver_dvb_name=$(echo $driver_dvb | awk 'BEGIN {FS="/"} {printf("%s", $5)}') + logger -t Tvheadend "### Loading userspace DVB driver: $driver_dvb_name ###" + # use ". " because of variable export + . $driver_dvb +done + +if [ "$WAIT_FOR_FEINIT" == "true" ] ; then + while [ true ] ; do + if [ -e /dev/dvb/adapter$((NUM_ADAPTERS-1))/frontend0 ] ; then + break + fi + sleep 1 + done +fi + +if [ "$PRELOAD_CAPMT_CA" == "true" ] ; then + logger -t Tvheadend "### Preloading capmt_ca.so library ###" + LD_PRELOAD="$ADDON_DIR/bin/capmt_ca.so $LD_PRELOAD" exec $ADDON_DIR/bin/tvheadend $TVHEADEND_ARG &>$ADDON_LOG_FILE +else + exec $ADDON_DIR/bin/tvheadend $TVHEADEND_ARG &>$ADDON_LOG_FILE +fi diff --git a/packages/addons/service/tvheadend42/source/default.py b/packages/addons/service/tvheadend42/source/default.py new file mode 100644 index 0000000000..c6dfcce9f2 --- /dev/null +++ b/packages/addons/service/tvheadend42/source/default.py @@ -0,0 +1,17 @@ +################################################################################ +# This file is part of LibreELEC - https://LibreELEC.tv +# Copyright (C) 2016 Team LibreELEC +# +# 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 . +################################################################################ diff --git a/packages/addons/service/tvheadend42/source/defaults/config b/packages/addons/service/tvheadend42/source/defaults/config new file mode 100644 index 0000000000..4d6fa4c747 --- /dev/null +++ b/packages/addons/service/tvheadend42/source/defaults/config @@ -0,0 +1,12 @@ +{ + "uilevel": 1, + "uilevel_nochange": false, + "ui_quicktips": true, + "cookie_expires": 14, + "epg_compress": true, + "prefer_picon": true, + "chiconpath": "file:///storage/picons/tvh/%C.png", + "chiconscheme": 2, + "piconpath": "file:///storage/picons/vdr/", + "piconscheme": 1 +} diff --git a/packages/addons/service/tvheadend42/source/defaults/dvr/config/8d0f5b7ae354d956d7fe5db25f5d0d24 b/packages/addons/service/tvheadend42/source/defaults/dvr/config/8d0f5b7ae354d956d7fe5db25f5d0d24 new file mode 100644 index 0000000000..26b820aaa4 --- /dev/null +++ b/packages/addons/service/tvheadend42/source/defaults/dvr/config/8d0f5b7ae354d956d7fe5db25f5d0d24 @@ -0,0 +1,15 @@ +{ + "storage": "/storage/recordings", + "retention-days": 31, + "pre-extra-time": 0, + "post-extra-time": 0, + "day-dir": 0, + "channel-dir": 0, + "channel-in-title": 0, + "date-in-title": 0, + "time-in-title": 0, + "whitespace-in-title": 0, + "title-dir": 0, + "episode-in-title": 0, + "tag-files": 1 +} diff --git a/packages/addons/service/tvheadend42/source/defaults/epggrab/config b/packages/addons/service/tvheadend42/source/defaults/epggrab/config new file mode 100644 index 0000000000..35c5f70d5e --- /dev/null +++ b/packages/addons/service/tvheadend42/source/defaults/epggrab/config @@ -0,0 +1,16 @@ +{ + "channel_rename": true, + "channel_renumber": false, + "channel_reicon": false, + "epgdb_periodicsave": 2, + "ota_initial": true, + "modules": { + "eit": { + "class": "epggrab_mod_ota", + "name": "EIT: DVB Grabber", + "type": "Over-the-air", + "enabled": true, + "priority": 1 + } + } +} diff --git a/packages/addons/service/tvheadend42/source/defaults/timeshift/config b/packages/addons/service/tvheadend42/source/defaults/timeshift/config new file mode 100644 index 0000000000..1ac8f3f116 --- /dev/null +++ b/packages/addons/service/tvheadend42/source/defaults/timeshift/config @@ -0,0 +1,9 @@ +{ + "enabled": 0, + "ondemand": 0, + "path": "/storage/.kodi/userdata/addon_data/service.tvheadend42/cache/timeshift", + "unlimited_period": 0, + "max_period": 3600, + "unlimited_size": 0, + "max_size": 3072 +} diff --git a/packages/addons/service/tvheadend42/source/defaults/xmltv/config b/packages/addons/service/tvheadend42/source/defaults/xmltv/config new file mode 100644 index 0000000000..8093bd3531 --- /dev/null +++ b/packages/addons/service/tvheadend42/source/defaults/xmltv/config @@ -0,0 +1,14 @@ +{ + "grabbers": [ + { + "path": "/storage/.kodi/addons/service.tvheadend42/bin/tv_grab_file", + "description": "tv_grag_file is a simple grabber that just read the ~/.xmltv/tv_grab_file.xmltv file", + "version": "0.1\n", + "mtime": 1318774706, + "capabilities": 1 + } + ], + "grab-interval": 12, + "grab-enabled": 1, + "current-grabber": "/storage/.kodi/addons/service.tvheadend42/bin/tv_grab_file" +} diff --git a/packages/addons/service/tvheadend42/source/resources/language/English/strings.xml b/packages/addons/service/tvheadend42/source/resources/language/English/strings.xml new file mode 100644 index 0000000000..fc94d15dfd --- /dev/null +++ b/packages/addons/service/tvheadend42/source/resources/language/English/strings.xml @@ -0,0 +1,18 @@ + + + + XMLTV + DVB + XMLTV configuration + XMLTV source type + XMLTV File location + XMLTV Web location + XMLTV Script location + DVB Configuration + Unload DVB mudules before suspend + Wait for frontend initialization + Number of adapters to wait for + Preload capmt_ca.so library + Delay the start of Tvheadend + time (s) + diff --git a/packages/addons/service/tvheadend42/source/resources/settings.xml b/packages/addons/service/tvheadend42/source/resources/settings.xml new file mode 100644 index 0000000000..6f6ddc37b4 --- /dev/null +++ b/packages/addons/service/tvheadend42/source/resources/settings.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/addons/service/tvheadend42/source/settings-default.xml b/packages/addons/service/tvheadend42/source/settings-default.xml new file mode 100644 index 0000000000..0f47b8e232 --- /dev/null +++ b/packages/addons/service/tvheadend42/source/settings-default.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/addons/service/tvheadend42/source/sleep.d/tvheadend.power b/packages/addons/service/tvheadend42/source/sleep.d/tvheadend.power new file mode 100755 index 0000000000..ca66f083ff --- /dev/null +++ b/packages/addons/service/tvheadend42/source/sleep.d/tvheadend.power @@ -0,0 +1,44 @@ +#!/bin/sh + +################################################################################ +# This file is part of LibreELEC - https://LibreELEC.tv +# Copyright (C) 2016 Team LibreELEC +# +# 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.tvheadend42 + +SERVICE="service.tvheadend42" + +case "$1" in + pre) + if systemctl is-active "$SERVICE" &>/dev/null ; then + systemctl stop "$SERVICE" + for module in $REMOVE_MODULES ; do + rmmod $module + done + fi + ;; + post) + if systemctl is-enabled "$SERVICE" &>/dev/null ; then + for module in $REMOVE_MODULES ; do + modprobe $module + done + systemctl start "$SERVICE" + fi + ;; +esac diff --git a/packages/addons/service/tvheadend42/source/system.d/service.tvheadend42.service b/packages/addons/service/tvheadend42/source/system.d/service.tvheadend42.service new file mode 100644 index 0000000000..e92c783ee8 --- /dev/null +++ b/packages/addons/service/tvheadend42/source/system.d/service.tvheadend42.service @@ -0,0 +1,14 @@ +[Unit] +Description=TVHeadend42 Service +After=network-online.service +Requires=network-online.service + +[Service] +ExecStart=/bin/sh -c "exec sh /storage/.kodi/addons/service.tvheadend42/bin/tvheadend42.start" +TimeoutStopSec=2 +Restart=always +RestartSec=2 +StartLimitInterval=0 + +[Install] +WantedBy=kodi.target From 14f61dfb5e3ceb337872e8b8dc8d0c6fea149b62 Mon Sep 17 00:00:00 2001 From: CvH Date: Wed, 6 Apr 2016 21:02:24 +0200 Subject: [PATCH 2/2] tvheadend: add transcoding for x86_64 --- .../addons/service/tvheadend42/package.mk | 27 +++++- .../patches/tvheadend42-01_makefile.patch | 89 +++++++++++++++++++ .../tvheadend42-02_makefile_ffmpeg.patch | 82 +++++++++++++++++ 3 files changed, 194 insertions(+), 4 deletions(-) create mode 100644 packages/addons/service/tvheadend42/patches/tvheadend42-01_makefile.patch create mode 100644 packages/addons/service/tvheadend42/patches/tvheadend42-02_makefile_ffmpeg.patch diff --git a/packages/addons/service/tvheadend42/package.mk b/packages/addons/service/tvheadend42/package.mk index 6c88cf7c10..d7448ce784 100644 --- a/packages/addons/service/tvheadend42/package.mk +++ b/packages/addons/service/tvheadend42/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="tvheadend42" -PKG_VERSION="a4afbee" -PKG_VERSION_NUMBER="4.1.1832" +PKG_VERSION="616413f" +PKG_VERSION_NUMBER="4.1.1892" PKG_REV="100" PKG_ARCH="any" PKG_LICENSE="GPL" @@ -37,6 +37,14 @@ PKG_ADDON_TYPE="xbmc.service" PKG_AUTORECONF="no" PKG_ADDON_REPOVERSION="7.0" +# transcoding only for generic +if [ "$TARGET_ARCH" = x86_64 ]; then + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET libva-intel-driver" + TVH_TRANSCODING="--enable-ffmpeg_static --enable-libav --enable-libfdkaac --disable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --disable-qsv" +else + TVH_TRANSCODING="--disable-ffmpeg_static --disable-libav" +fi + PKG_CONFIGURE_OPTS_TARGET="--prefix=/usr \ --arch=$TARGET_ARCH \ --cpu=$TARGET_CPU \ @@ -52,8 +60,7 @@ PKG_CONFIGURE_OPTS_TARGET="--prefix=/usr \ --enable-inotify \ --disable-nvenc \ --disable-uriparser \ - --disable-libav \ - --disable-ffmpeg_static \ + $TVH_TRANSCODING \ --enable-tvhcsa \ --nowerror \ --python=$ROOT/$TOOLCHAIN/bin/python" @@ -67,10 +74,22 @@ pre_configure_target() { cd $ROOT/$PKG_BUILD rm -rf .$TARGET_NAME +# transcoding + if [ "$TARGET_ARCH" = x86_64 ]; then + export AS=$ROOT/$TOOLCHAIN/bin/yasm + fi + export CROSS_COMPILE=$TARGET_PREFIX export CFLAGS="$CFLAGS -I$SYSROOT_PREFIX/usr/include/iconv -L$SYSROOT_PREFIX/usr/lib/iconv" } +# transcoding link tvheadend with g++ +if [ "$TARGET_ARCH" = x86_64 ]; then + pre_make_target() { + export CXX=$TARGET_CXX + } +fi + post_make_target() { $CC -O -fbuiltin -fomit-frame-pointer -fPIC -shared -o capmt_ca.so src/extra/capmt_ca.c -ldl } diff --git a/packages/addons/service/tvheadend42/patches/tvheadend42-01_makefile.patch b/packages/addons/service/tvheadend42/patches/tvheadend42-01_makefile.patch new file mode 100644 index 0000000000..710d1b91fe --- /dev/null +++ b/packages/addons/service/tvheadend42/patches/tvheadend42-01_makefile.patch @@ -0,0 +1,89 @@ +From: Team LibreELEC - https://LibreELEC.tv +Subject: adjust Tvheadend ffmpeg build to work with LibreELEC (transcoding) 06.04.2016 + +--- + +diff --git a/Makefile b/Makefile +--- a/Makefile ++++ b/Makefile +@@ -91,50 +91,65 @@ FFMPEG_CONFIG := \ + PKG_CONFIG_LIBDIR=$(FFMPEG_LIBDIR)/pkgconfig $(PKG_CONFIG) \ + --define-variable=prefix=$(FFMPEG_PREFIX) --static + ++CFLAGS += -I${FFMPEG_PREFIX}/include ++LDFLAGS += ${FFMPEG_LIBDIR}/libavfilter.a ++LDFLAGS += ${FFMPEG_LIBDIR}/libswresample.a ++LDFLAGS += ${FFMPEG_LIBDIR}/libavresample.a ++LDFLAGS += ${FFMPEG_LIBDIR}/libswscale.a ++LDFLAGS += ${FFMPEG_LIBDIR}/libavformat.a ++LDFLAGS += ${FFMPEG_LIBDIR}/libavcodec.a ++LDFLAGS += ${FFMPEG_LIBDIR}/libavutil.a ++ + ifeq ($(CONFIG_LIBX264_STATIC),yes) + FFMPEG_DEPS += libx264 ++LDFLAGS += ${FFMPEG_LIBDIR}/libx264.a + endif + + ifeq ($(CONFIG_LIBX265_STATIC),yes) + FFMPEG_DEPS += libx265 ++LDFLAGS += ${FFMPEG_LIBDIR}/libx265.a + endif + + ifeq ($(CONFIG_LIBVPX_STATIC),yes) + FFMPEG_DEPS += libvpx ++LDFLAGS += ${FFMPEG_LIBDIR}/libvpx.a + endif + + ifeq ($(CONFIG_LIBOGG_STATIC),yes) + FFMPEG_DEPS += libogg ++LDFLAGS += ${FFMPEG_LIBDIR}/libogg.a + endif + + ifeq ($(CONFIG_LIBTHEORA_STATIC),yes) + FFMPEG_DEPS += libtheoraenc libtheoradec libtheora ++LDFLAGS += ${FFMPEG_LIBDIR}/libtheora.a ++LDFLAGS += ${FFMPEG_LIBDIR}/libtheoradec.a ++LDFLAGS += ${FFMPEG_LIBDIR}/libtheoraenc.a + endif + + ifeq ($(CONFIG_LIBVORBIS_STATIC),yes) + FFMPEG_DEPS += libvorbisfile libvorbisenc libvorbis ++LDFLAGS += ${FFMPEG_LIBDIR}/libvorbis.a ++LDFLAGS += ${FFMPEG_LIBDIR}/libvorbisenc.a ++LDFLAGS += ${FFMPEG_LIBDIR}/libvorbisfile.a + endif + + ifeq ($(CONFIG_LIBFDKAAC_STATIC),yes) + FFMPEG_DEPS += libfdk-aac ++LDFLAGS += ${FFMPEG_LIBDIR}/libfdk-aac.a + endif + + ifeq ($(CONFIG_LIBMFX_STATIC),yes) + FFMPEG_DEPS += libmfx ++LDFLAGS += ${FFMPEG_LIBDIR}/libmfx.a + endif + +-LDFLAGS += $(foreach lib,$(FFMPEG_LIBS),$(FFMPEG_LIBDIR)/$(lib).a) +-LDFLAGS += $(foreach lib,$(FFMPEG_DEPS),$(FFMPEG_LIBDIR)/$(lib).a) +- + else # !FFMPEG_STATIC + + FFMPEG_CONFIG := $(PKG_CONFIG) + + endif # FFMPEG_STATIC + +-CFLAGS += `$(FFMPEG_CONFIG) --cflags $(FFMPEG_LIBS)` +-LDFLAGS += `$(FFMPEG_CONFIG) --libs $(FFMPEG_LIBS)` +- + endif + + # LIBAV ######################################################################## +@@ -606,7 +606,7 @@ + + # Binary + ${PROG}: .config.mk make_webui $(OBJS) +- $(pCC) -o $@ $(OBJS) $(CFLAGS) $(LDFLAGS) ++ $(CXX) -o $@ $(OBJS) $(CFLAGS) $(LDFLAGS) + + # Object + ${BUILDDIR}/%.o: %.c diff --git a/packages/addons/service/tvheadend42/patches/tvheadend42-02_makefile_ffmpeg.patch b/packages/addons/service/tvheadend42/patches/tvheadend42-02_makefile_ffmpeg.patch new file mode 100644 index 0000000000..1f4db67b52 --- /dev/null +++ b/packages/addons/service/tvheadend42/patches/tvheadend42-02_makefile_ffmpeg.patch @@ -0,0 +1,82 @@ +From: Team LibreELEC - https://LibreELEC.tv +Subject: adjust Tvheadend ffmpeg build to work with LibreELEC (transcoding) 06.04.2016 + +--- + +diff --git a/Makefile.ffmpeg b/Makefile.ffmpeg +--- a/Makefile.ffmpeg ++++ b/Makefile.ffmpeg +@@ -24,6 +24,9 @@ + FFMPEG_TARGET := x86-linux-gcc + endif + ++FFMPEG_HOST := $(ARCH)-libreelec-linux-gnu ++FFMPEG_TARGET := $(ARCH)-libreelec-linux-gnu ++ + unexport CFLAGS + unexport LDFLAGS + +@@ -135,7 +141,7 @@ + + $(LIB_ROOT)/$(YASM)/.tvh_build: \ + $(LIB_ROOT)/$(YASM)/.tvh_download +- cd $(LIB_ROOT)/$(YASM) && $(CONFIGURE) ++ cd $(LIB_ROOT)/$(YASM) && $(CONFIGURE) CC=$(HOST_CC) + DESTDIR=$(EBUILDIR) \ + $(MAKE) -C $(LIB_ROOT)/$(YASM) install + @touch $@ +@@ -224,6 +226,7 @@ + cd $(LIB_ROOT)/$(LIBX265)/build/linux && cmake -G "Unix Makefiles" \ + -DCMAKE_INSTALL_PREFIX="/ffmpeg" \ + -DENABLE_SHARED:BOOL=OFF \ ++ -DEXTRA_LINK_FLAGS="-ldl" \ + ../../source + DESTDIR=$(EBUILDIR) \ + $(MAKE) -C $(LIB_ROOT)/$(LIBX265)/build/linux install +@@ -257,7 +260,7 @@ + ifeq (yes,$(CONFIG_LIBVPX_STATIC)) + + ifneq (,$(FFMPEG_TARGET)) +-LIBVPX_TARGET := --target=$(FFMPEG_TARGET) ++LIBVPX_TARGET := --target=generic-gnu + endif + + $(LIB_ROOT)/$(LIBVPX)/.tvh_download: +@@ -268,7 +271,7 @@ + $(LIB_ROOT)/$(LIBVPX)/.tvh_build: \ + $(LIB_ROOT)/$(YASM)/.tvh_build \ + $(LIB_ROOT)/$(LIBVPX)/.tvh_download +- cd $(LIB_ROOT)/$(LIBVPX) && $(CONFIGURE) \ ++ cd $(LIB_ROOT)/$(LIBVPX) && CROSS=$(FFMPEG_TARGET)- $(CONFIGURE) \ + --disable-examples \ + --disable-docs \ + --disable-unit-tests \ +@@ -342,7 +345,8 @@ + $(LIB_ROOT)/$(LIBOGG)/.tvh_build \ + $(LIB_ROOT)/$(LIBTHEORA)/.tvh_download + cd $(LIB_ROOT)/$(LIBTHEORA) && $(CONFIGURE) \ +- --with-ogg=$(EPREFIX) \ ++ OGG_CFLAGS=-I$(EPREFIX)/include \ ++ OGG_LIBS=-L$(EPREFIX)/lib \ + --disable-examples \ + $(LIBTHEORA_HOST) + DESTDIR=$(EBUILDIR) \ +@@ -387,7 +391,8 @@ + $(LIB_ROOT)/$(LIBOGG)/.tvh_build \ + $(LIB_ROOT)/$(LIBVORBIS)/.tvh_download + cd $(LIB_ROOT)/$(LIBVORBIS) && $(CONFIGURE) \ +- --with-ogg=$(EPREFIX) ++ OGG_CFLAGS=-I$(EPREFIX)/include \ ++ OGG_LIBS=-L$(EPREFIX)/lib + DESTDIR=$(EBUILDIR) \ + $(MAKE) -C $(LIB_ROOT)/$(LIBVORBIS) install + @touch $@ +@@ -538,6 +543,8 @@ + $(LIB_ROOT)/$(LIBMFX)/.tvh_build \ + $(LIB_ROOT)/$(FFMPEG)/.tvh_download + cd $(LIB_ROOT)/$(FFMPEG) && $(CONFIGURE) \ ++ --cc=$(FFMPEG_HOST)-gcc \ ++ --cxx=$(FFMPEG_HOST)-g++ \ + --disable-all \ + --enable-gpl \ + --extra-cflags="$(ECFLAGS)" \