Merge branch 'master' of github.com:OpenELEC/OpenELEC.tv into openelec-next

This commit is contained in:
Stephan Raue 2011-10-18 02:11:20 +02:00
commit 6f4449ea66
11 changed files with 278 additions and 1 deletions

View File

@ -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

View File

@ -1,3 +1,9 @@
1.0.1
- add XMLTV tv_file_grab support
- add XMLTV configuration support
- add teletext support patch
- add fix memory leak patch
1.0.0
- prepare for OpenELEC-1.0 release

View File

@ -0,0 +1,4 @@
<settings>
<setting id="XMLTV_LOCATION" value="" />
<setting id="XMLTV_TYPE" value="NONE" />
</settings>

View File

@ -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"
}

View File

@ -0,0 +1,112 @@
From 3b407aa2053b1db3316873acd05c64319676eb34 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jernej=20Fija=C4=8Dko?= <jernej@jernej-ThinkCentre-M91p.(none)>
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

View File

@ -0,0 +1,26 @@
From 60e5a1014c52e926fb7dbb12392f60a473e44d2c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jernej=20Fija=C4=8Dko?= <jernej@jernej-ThinkCentre-M91p.(none)>
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

View File

@ -0,0 +1,58 @@
#!/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

View File

@ -23,10 +23,27 @@
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_FILE" ]; 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"
mkdir -p $ADDON_HOME
if [ ! $(pidof tvheadend) ];then
tvheadend $TVHEADEND_ARG &>$LOG_FILE
fi
fi

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<!-- SABnzbd-Suite -->
<string id="1000">XMLTV</string>
<string id="1011">XMLTV configuration</string>
<string id="1011">XMLTV source type</string>
<string id="1012">XMLTV location</string>
</strings>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<settings>
<!-- HTS TVHEADEND -->
<category label="1000">
<setting label="1010" type="lsep"/>
<setting type="sep" />
<setting id="XMLTV_TYPE" type="labelenum" label="1011" values="NONE|FILE|WEB" sort="yes" default="NONE"/>
<setting id="XMLTV_LOCATION" type="text" label="1012" default="" enable="!eq(-1,1)"/>
</category>
</settings>

View File

@ -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();