From 2eecb31fda22300c8f08ccecca68dcd639143bd8 Mon Sep 17 00:00:00 2001 From: Gujs Date: Sun, 16 Oct 2011 17:15:22 +0200 Subject: [PATCH 1/4] hts-tvheadend addon: Add XMLTV support and add some patches until they are included into main tvheadend source --- .../service/multimedia/hts-tvheadend/addon | 4 + .../multimedia/hts-tvheadend/changelog.txt | 6 + .../hts-tvheadend/config/settings.xml | 4 + .../hts-tvheadend/config/xmltv-config | 14 +++ .../service/multimedia/hts-tvheadend/meta | 2 +- ...a646-deliver_raw_teletext_to_clients.patch | 112 ++++++++++++++++++ ...646-fix_memory_leak_queue_protection.patch | 26 ++++ .../hts-tvheadend/source/bin/tv_grab_file | 59 +++++++++ .../source/bin/tvheadend.service | 17 +++ .../resources/language/English/strings.xml | 10 ++ .../source/resources/settings.xml | 11 ++ 11 files changed, 264 insertions(+), 1 deletion(-) create mode 100644 packages/addons/service/multimedia/hts-tvheadend/config/settings.xml create mode 100644 packages/addons/service/multimedia/hts-tvheadend/config/xmltv-config create mode 100644 packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-deliver_raw_teletext_to_clients.patch create mode 100644 packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-fix_memory_leak_queue_protection.patch create mode 100644 packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file create mode 100644 packages/addons/service/multimedia/hts-tvheadend/source/resources/language/English/strings.xml create mode 100644 packages/addons/service/multimedia/hts-tvheadend/source/resources/settings.xml diff --git a/packages/addons/service/multimedia/hts-tvheadend/addon b/packages/addons/service/multimedia/hts-tvheadend/addon index 3e0ab9a67c..ad2c079534 100755 --- a/packages/addons/service/multimedia/hts-tvheadend/addon +++ b/packages/addons/service/multimedia/hts-tvheadend/addon @@ -22,5 +22,9 @@ . config/options $1 +mkdir -p $ADDON_BUILD/$PKG_ADDON_ID + cp -PR $PKG_DIR/config/settings.xml* $ADDON_BUILD/$PKG_ADDON_ID/settings-default.xml + cp -PR $PKG_DIR/config/xmltv-config* $ADDON_BUILD/$PKG_ADDON_ID/xmltv-config + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin cp -P $PKG_BUILD/build.Linux/tvheadend $ADDON_BUILD/$PKG_ADDON_ID/bin diff --git a/packages/addons/service/multimedia/hts-tvheadend/changelog.txt b/packages/addons/service/multimedia/hts-tvheadend/changelog.txt index 5487c925c2..8309cda3dc 100644 --- a/packages/addons/service/multimedia/hts-tvheadend/changelog.txt +++ b/packages/addons/service/multimedia/hts-tvheadend/changelog.txt @@ -1,3 +1,9 @@ +1.00.0 +- add XMLTV tv_file_grab support +- add XMLTV configuration support +- add teletext support patch +- add fix memory leak patch + 0.99.8 - add suspend/wakeup script diff --git a/packages/addons/service/multimedia/hts-tvheadend/config/settings.xml b/packages/addons/service/multimedia/hts-tvheadend/config/settings.xml new file mode 100644 index 0000000000..6be91dac2a --- /dev/null +++ b/packages/addons/service/multimedia/hts-tvheadend/config/settings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/packages/addons/service/multimedia/hts-tvheadend/config/xmltv-config b/packages/addons/service/multimedia/hts-tvheadend/config/xmltv-config new file mode 100644 index 0000000000..7439a5de59 --- /dev/null +++ b/packages/addons/service/multimedia/hts-tvheadend/config/xmltv-config @@ -0,0 +1,14 @@ +{ + "grabbers": [ + { + "path": "/storage/.xbmc/addons/service.multimedia.hts-tvheadend/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/.xbmc/addons/service.multimedia.hts-tvheadend/bin/tv_grab_file" +} diff --git a/packages/addons/service/multimedia/hts-tvheadend/meta b/packages/addons/service/multimedia/hts-tvheadend/meta index a2e0000e5b..869e5f621f 100644 --- a/packages/addons/service/multimedia/hts-tvheadend/meta +++ b/packages/addons/service/multimedia/hts-tvheadend/meta @@ -20,7 +20,7 @@ PKG_NAME="hts-tvheadend" PKG_VERSION="c88a646" -PKG_REV="8" +PKG_REV="0" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.lonelycoder.com/hts/tvheadend_overview.html" diff --git a/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-deliver_raw_teletext_to_clients.patch b/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-deliver_raw_teletext_to_clients.patch new file mode 100644 index 0000000000..614e54df3a --- /dev/null +++ b/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-deliver_raw_teletext_to_clients.patch @@ -0,0 +1,112 @@ +From 3b407aa2053b1db3316873acd05c64319676eb34 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jernej=20Fija=C4=8Dko?= +Date: Fri, 30 Sep 2011 12:56:01 +0200 +Subject: [PATCH] Deliver raw teletext to clients that are able to display it (e.g. XBMC) + +--- + src/parsers.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/tsdemux.c | 7 +++---- + 2 files changed, 58 insertions(+), 4 deletions(-) + +diff --git a/src/parsers.c b/src/parsers.c +index 9b7337d..68c7996 100644 +--- a/src/parsers.c ++++ b/src/parsers.c +@@ -102,6 +102,9 @@ static void parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data + static void parse_subtitles(service_t *t, elementary_stream_t *st, + const uint8_t *data, int len, int start); + ++static void parse_teletext(service_t *t, elementary_stream_t *st, ++ const uint8_t *data, int len, int start); ++ + static int parse_mpa(service_t *t, elementary_stream_t *st, size_t len, + uint32_t next_startcode, int sc_offset); + +@@ -158,6 +161,10 @@ parse_mpeg_ts(service_t *t, elementary_stream_t *st, const uint8_t *data, + parse_aac(t, st, data, len, start); + break; + ++ case SCT_TELETEXT: ++ parse_teletext(t, st, data, len, start); ++ break; ++ + default: + break; + } +@@ -1232,6 +1239,54 @@ parse_subtitles(service_t *t, elementary_stream_t *st, const uint8_t *data, + } + } + ++/** ++ * Teletext parser ++ */ ++static void ++parse_teletext(service_t *t, elementary_stream_t *st, const uint8_t *data, ++ int len, int start) ++{ ++ th_pkt_t *pkt; ++ int psize, hlen; ++ const uint8_t *buf; ++ const uint8_t *d; ++ if(start) { ++ st->es_parser_state = 1; ++ st->es_buf.sb_err = 0; ++ st->es_parser_ptr = 0; ++ sbuf_reset(&st->es_buf); ++ } ++ ++ if(st->es_parser_state == 0) ++ return; ++ ++ sbuf_append(&st->es_buf, data, len); ++ ++ if(st->es_buf.sb_ptr < 6) ++ return; ++ d = st->es_buf.sb_data; ++ ++ psize = d[4] << 8 | d[5]; ++ ++ if(st->es_buf.sb_ptr != psize + 6) ++ return; ++ ++ st->es_parser_state = 0; ++ ++ hlen = parse_pes_header(t, st, d + 6, st->es_buf.sb_ptr - 6); ++ if(hlen < 0) ++ return; ++ ++ psize -= hlen; ++ buf = d + 6 + hlen; ++ ++ if(psize >= 46) { ++ ++ pkt = pkt_alloc(buf, psize, st->es_curpts, st->es_curdts); ++ pkt->pkt_commercial = t->s_tt_commercial_advice; ++ parser_deliver(t, st, pkt); ++ } ++} + + /** + * +diff --git a/src/tsdemux.c b/src/tsdemux.c +index 897fe1d..5fdaf8b 100644 +--- a/src/tsdemux.c ++++ b/src/tsdemux.c +@@ -110,11 +110,10 @@ ts_recv_packet0(service_t *t, elementary_stream_t *st, const uint8_t *tsb) + got_section, st); + break; + +- case SCT_TELETEXT: +- teletext_input(t, st, tsb); +- break; +- + default: ++ if(st->es_type == SCT_TELETEXT) ++ teletext_input(t, st, tsb); ++ + if(off > 188) + break; + +-- +1.7.3.1 + diff --git a/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-fix_memory_leak_queue_protection.patch b/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-fix_memory_leak_queue_protection.patch new file mode 100644 index 0000000000..79632e6c4c --- /dev/null +++ b/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-fix_memory_leak_queue_protection.patch @@ -0,0 +1,26 @@ +From 60e5a1014c52e926fb7dbb12392f60a473e44d2c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jernej=20Fija=C4=8Dko?= +Date: Fri, 30 Sep 2011 13:23:46 +0200 +Subject: [PATCH] Fix memory leak in queue size protection + +--- + src/htsp.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/src/htsp.c b/src/htsp.c +index 8bb803b..f786a88 100644 +--- a/src/htsp.c ++++ b/src/htsp.c +@@ -1508,6 +1508,9 @@ htsp_stream_deliver(htsp_subscription_t *hs, th_pkt_t *pkt) + + hs->hs_dropstats[pkt->pkt_frametype]++; + ++ // destroy the already created htsmsg to avoid memory leaks ++ htsmsg_destroy(m); ++ + /* Queue size protection */ + pkt_ref_dec(pkt); + return; +-- +1.7.3.1 + diff --git a/packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file new file mode 100644 index 0000000000..49a63ae2ee --- /dev/null +++ b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file @@ -0,0 +1,59 @@ +#!/bin/sh + +ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.multimedia.hts-tvheadend" +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=`grep XMLTV_LOCATION $ADDON_SETTINGS | awk '{print $3 }' | sed -e "s,value=,," -e "s,\",,g"` + +dflag= +vflag= +cflag= + +if [[ $# -lt 1 ]]; then + if [ "$XMLTV_TYPE" = "FILE" ]; then + cat "$XMLTV_LOCATION" + exit 0 + elif [ "$XMLTV_TYPE" = "WEB" ]; then + wget -qO - "$XMLTV_LOCATION" + exit 0 + fi +fi + +for arg; do + delim="" + case "$arg" in + #translate --gnu-long-options to -g (short options) + --description) args="${args}-d ";; + --version) args="${args}-v ";; + --capabilities) args="${args}-c ";; + #pass through anything else + *) [[ "${arg:0:1}" == "-" ]] || delim="\"" + args="${args}${delim}${arg}${delim} ";; + esac +done + +#Reset the positional parameters to the short options +eval set -- $args + +while getopts "dvc" option; do + case $option in + d) dflag=1;; + v) vflag=1;; + c) cflag=1;; + \?) printf "unknown option: -%s\n" $OPTARG + printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0) + exit 2 + ;; + esac >&2 +done + +if [ "$dflag" ]; then + printf "tv_grab_file is a simple grabber that just read the local or web XMLTV formated file\n" +fi +if [ "$vflag" ]; then + printf "0.1\n" +fi +if [ "$cflag" ]; then + printf "baseline\n" +fi + diff --git a/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service index d365232e51..9c2ea0d222 100755 --- a/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service +++ b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service @@ -23,6 +23,23 @@ ADDON_DIR="$HOME/.xbmc/addons/service.multimedia.hts-tvheadend" ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.multimedia.hts-tvheadend" LOG_FILE="$ADDON_HOME/service.log" +ADDON_SETTINGS="$ADDON_HOME/settings.xml" +XMLTV_FILE="$ADDON_DIR/bin/tv_grab_file" +XMLTV_SETTINGS_DIR="$ADDON_HOME/xmltv" +XMLTV_SETTINGS_FILE="$XMLTV_SETTINGS_DIR/config" + +if [ ! -f "$ADDON_SETTINGS" ]; then + cp $ADDON_DIR/settings-default.xml $ADDON_SETTINGS +fi + +if [ ! -f "$XMLTV_SETTINGS_DIR" ]; then + mkdir -p $XMLTV_SETTINGS_DIR + cp $ADDON_DIR/xmltv-config $XMLTV_SETTINGS_FILE +fi + +if [ ! -f "$XMLTV_FILE" ]; then + chmod +x $XMLTV_FILE +fi TVHEADEND_ARG="-f -C -s -u root -g root -c $ADDON_HOME" diff --git a/packages/addons/service/multimedia/hts-tvheadend/source/resources/language/English/strings.xml b/packages/addons/service/multimedia/hts-tvheadend/source/resources/language/English/strings.xml new file mode 100644 index 0000000000..6eeb22a953 --- /dev/null +++ b/packages/addons/service/multimedia/hts-tvheadend/source/resources/language/English/strings.xml @@ -0,0 +1,10 @@ + + + + + XMLTV + XMLTV configuration + XMLTV source type + XMLTV location + + diff --git a/packages/addons/service/multimedia/hts-tvheadend/source/resources/settings.xml b/packages/addons/service/multimedia/hts-tvheadend/source/resources/settings.xml new file mode 100644 index 0000000000..c8771ebbd6 --- /dev/null +++ b/packages/addons/service/multimedia/hts-tvheadend/source/resources/settings.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + From 3e6236519757f82fef63d4f9d96b891e77e79a2f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 17 Oct 2011 21:07:35 +0200 Subject: [PATCH 2/4] xbmc: fix internet connection check on various locations Signed-off-by: Stephan Raue --- ...10.1-Dharma-457-fix_connection_check-0.1.patch | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 packages/mediacenter/xbmc/patches/xbmc-10.1-Dharma-457-fix_connection_check-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-10.1-Dharma-457-fix_connection_check-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-10.1-Dharma-457-fix_connection_check-0.1.patch new file mode 100644 index 0000000000..06304e56ae --- /dev/null +++ b/packages/mediacenter/xbmc/patches/xbmc-10.1-Dharma-457-fix_connection_check-0.1.patch @@ -0,0 +1,15 @@ +diff -Naur xbmc-10.1-Dharma/xbmc/FileSystem/FileCurl.cpp xbmc-10.1-Dharma.patch/xbmc/FileSystem/FileCurl.cpp +--- xbmc-10.1-Dharma/xbmc/FileSystem/FileCurl.cpp 2011-03-08 02:49:14.000000000 +0100 ++++ xbmc-10.1-Dharma.patch/xbmc/FileSystem/FileCurl.cpp 2011-10-17 19:21:04.180783870 +0200 +@@ -803,9 +803,9 @@ + // Detect whether we are "online" or not! Very simple and dirty! + bool CFileCurl::IsInternet(bool checkDNS /* = true */) + { +- CStdString strURL = "http://www.google.com"; ++ CStdString strURL = "http://www.openelec.tv"; + if (!checkDNS) +- strURL = "http://74.125.19.103"; // www.google.com ip ++ strURL = "http://212.101.13.10"; // www.openelec.tv ip + + bool found = Exists(strURL); + Close(); From 5c9fe6b4ec79a23ee2450a6ac2892d82e843d34b Mon Sep 17 00:00:00 2001 From: Gujs Date: Tue, 18 Oct 2011 00:10:14 +0200 Subject: [PATCH 3/4] hts-tvheadend: fix xmltv settins file check --- .../multimedia/hts-tvheadend/source/bin/tvheadend.service | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service index 9c2ea0d222..c680b8d0dd 100755 --- a/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service +++ b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service @@ -32,7 +32,7 @@ if [ ! -f "$ADDON_SETTINGS" ]; then cp $ADDON_DIR/settings-default.xml $ADDON_SETTINGS fi -if [ ! -f "$XMLTV_SETTINGS_DIR" ]; then +if [ ! -f "$XMLTV_SETTINGS_FILE" ]; then mkdir -p $XMLTV_SETTINGS_DIR cp $ADDON_DIR/xmltv-config $XMLTV_SETTINGS_FILE fi @@ -46,4 +46,4 @@ TVHEADEND_ARG="-f -C -s -u root -g root -c $ADDON_HOME" mkdir -p $ADDON_HOME if [ ! $(pidof tvheadend) ];then tvheadend $TVHEADEND_ARG &>$LOG_FILE - fi \ No newline at end of file + fi From 4c588b1862048900dccba1f937697c543aac774d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 18 Oct 2011 01:48:36 +0200 Subject: [PATCH 4/4] hts-tvheadend: cosmetics Signed-off-by: Stephan Raue --- packages/addons/service/multimedia/hts-tvheadend/changelog.txt | 1 - .../service/multimedia/hts-tvheadend/source/bin/tv_grab_file | 1 - 2 files changed, 2 deletions(-) mode change 100644 => 100755 packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file diff --git a/packages/addons/service/multimedia/hts-tvheadend/changelog.txt b/packages/addons/service/multimedia/hts-tvheadend/changelog.txt index 4479aff7a5..59409030eb 100644 --- a/packages/addons/service/multimedia/hts-tvheadend/changelog.txt +++ b/packages/addons/service/multimedia/hts-tvheadend/changelog.txt @@ -1,4 +1,3 @@ - 1.0.1 - add XMLTV tv_file_grab support - add XMLTV configuration support diff --git a/packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file old mode 100644 new mode 100755 index 49a63ae2ee..76b9e64eb6 --- a/packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file +++ b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file @@ -56,4 +56,3 @@ fi if [ "$cflag" ]; then printf "baseline\n" fi -