Merge branch 'master' of github.com:OpenELEC/OpenELEC.tv

This commit is contained in:
Stephan Raue 2012-09-04 23:11:49 +02:00
commit 5d4b402650
10 changed files with 540 additions and 6 deletions

View File

@ -28,4 +28,4 @@ mkdir -p $ADDON_BUILD/$PKG_ADDON_ID
cp -PR $PKG_DIR/config/dvr-config $ADDON_BUILD/$PKG_ADDON_ID/dvr-config
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin
cp -P $PKG_BUILD/build.linux/tvheadend $ADDON_BUILD/$PKG_ADDON_ID/bin/tvheadend
cp -P $PKG_BUILD/build.linux/tvheadend.bundle $ADDON_BUILD/$PKG_ADDON_ID/bin/tvheadend

View File

@ -34,7 +34,7 @@ cd $PKG_BUILD
--arch=$TARGET_ARCH \
--cpu=$TARGET_CPU \
--cc=$TARGET_CC \
--enable-bundle \
--release
make
make build.linux/tvheadend.bundle

View File

@ -1,5 +1,4 @@
2.1.4
- update to hts-tvheadend-7630970
2.1.5
- add an option to wait for more than 1 adapters to appear
2.1.3

View File

@ -19,8 +19,8 @@
################################################################################
PKG_NAME="hts-tvheadend"
PKG_VERSION="7630970"
PKG_REV="4"
PKG_VERSION="78213a0"
PKG_REV="5"
PKG_ARCH="any"
PKG_LICENSE="GPL"
PKG_SITE="http://www.lonelycoder.com/hts/tvheadend_overview.html"

View File

@ -0,0 +1,55 @@
diff -Naur hts-tvheadend-c88a646/src/linuxtv_muxes.h hts-tvheadend-c88a646.patch/src/linuxtv_muxes.h
--- hts-tvheadend-c88a646/src/linuxtv_muxes.h 2011-09-26 20:18:12.000000000 +0200
+++ hts-tvheadend-c88a646.patch/src/linuxtv_muxes.h 2011-10-18 13:40:37.768853992 +0200
@@ -12001,6 +12001,39 @@
{ .freq = 573000000, .symrate = 5217000, .fec = 0, .constellation = 5},
};
+static const struct mux muxes_DVBC_ch_GA_Weissenstein[] = {
+ { .freq = 450000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 506000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 514000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 522000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 530000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 538000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 554000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 562000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 570000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 578000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 586000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 594000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 602000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 610000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 618000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 626000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 634000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 642000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 650000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 658000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 666000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 674000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 682000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 690000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 698000000, .symrate = 6900000, .fec = 0, .constellation = 3},
+ { .freq = 698000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 706000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 714000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 722000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+ { .freq = 730000000, .symrate = 6900000, .fec = 0, .constellation = 5},
+};
+
static const struct mux muxes_DVBC_ch_Rega_Sense[] = {
{ .freq = 434000000, .symrate = 6900000, .fec = 0, .constellation = 3},
{ .freq = 714000000, .symrate = 6900000, .fec = 0, .constellation = 3},
@@ -12881,6 +12914,11 @@
static const struct network networks_DVBC_ch[] = {
{
+ .name = "GA-Weissenstein",
+ .muxes = muxes_DVBC_ch_GA_Weissenstein,
+ .nmuxes = sizeof(muxes_DVBC_ch_GA_Weissenstein) / sizeof(struct mux),
+ },
+ {
.name = "Rega-Sense",
.muxes = muxes_DVBC_ch_Rega_Sense,
.nmuxes = sizeof(muxes_DVBC_ch_Rega_Sense) / sizeof(struct mux),

View File

@ -0,0 +1,146 @@
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 1/2] 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 @@ static int parse_pes_header(service_t *t, elementary_stream_t *st,
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 @@ static int parse_pes_header(service_t *t, elementary_stream_t *st,
}
}
+/**
+ * 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 @@
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.5.4
From a8026cd5b412c5096b0904f060ad5ffccdb883cf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jernej=20Fija=C4=8Dko?= <jernej@jernej-ThinkCentre-M91p.(none)>
Date: Thu, 17 Nov 2011 08:25:31 +0100
Subject: [PATCH 2/2] Disable teletext recording to prevent issues with other
elementary streams. Temporary until a better solution
is found.
---
src/plumbing/globalheaders.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/src/plumbing/globalheaders.c b/src/plumbing/globalheaders.c
index 703591b..7f183d4 100644
--- a/src/plumbing/globalheaders.c
+++ b/src/plumbing/globalheaders.c
@@ -202,6 +202,12 @@
pkt->pkt_componentindex);
assert(ssc != NULL);
+ if(ssc->ssc_type == SCT_TELETEXT) {
+ free(sm);
+ ssc->ssc_disabled = 1;
+ break;
+ }
+
pkt = convertpkt(ssc, pkt);
apply_header(ssc, pkt);
--
1.7.5.4

View File

@ -0,0 +1,257 @@
From bb048589ab4e09e69b2fba3f639e8287ea9cc7c3 Mon Sep 17 00:00:00 2001
From: Tadej Novak <tadej@tano.si>
Date: Thu, 26 Jan 2012 18:39:09 +0100
Subject: [PATCH 1/2] IPTV Radio support
Added service type for IPTV and IPTV radio for easier access in
some software (like XBMC).
---
src/iptv_input.c | 6 ++++++
src/service.c | 9 +++++++--
src/service.h | 2 ++
src/webui/extjs.c | 10 +++++++++-
src/webui/static/app/iptv.js | 11 +++++++++--
5 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/src/iptv_input.c b/src/iptv_input.c
index 0bfc311..361a151 100644
--- a/src/iptv_input.c
+++ b/src/iptv_input.c
@@ -428,6 +428,7 @@
inet_ntop(AF_INET6, &t->s_iptv_group6, abuf6, sizeof(abuf6));
htsmsg_add_str(m, "group", abuf6);
}
+ htsmsg_add_u32(m, "radio", t->s_servicetype == ST_IPTV_RADIO);
if(t->s_ch != NULL) {
htsmsg_add_str(m, "channelname", t->s_ch->ch_name);
htsmsg_add_u32(m, "mapped", 1);
@@ -591,6 +592,11 @@
if(!htsmsg_get_u32(c, "port", &u32))
t->s_iptv_port = u32;
+ if(!htsmsg_get_u32(c, "radio", &u32) && u32)
+ t->s_servicetype = ST_IPTV_RADIO;
+ else
+ t->s_servicetype = ST_IPTV;
+
pthread_mutex_lock(&t->s_stream_mutex);
service_make_nicename(t);
psi_load_service_settings(c, t);
diff --git a/src/service.c b/src/service.c
index 1a405d1..6899e2e 100644
--- a/src/service.c
+++ b/src/service.c
@@ -732,6 +732,8 @@
{ "HDTV", ST_HDTV },
{ "SDTV-AC", ST_AC_SDTV },
{ "HDTV-AC", ST_AC_HDTV },
+ { "IPTV", ST_IPTV },
+ { "IPTV Radio", ST_IPTV_RADIO },
};
const char *
@@ -750,7 +752,8 @@
t->s_servicetype == ST_SDTV ||
t->s_servicetype == ST_HDTV ||
t->s_servicetype == ST_AC_SDTV ||
- t->s_servicetype == ST_AC_HDTV;
+ t->s_servicetype == ST_AC_HDTV ||
+ t->s_servicetype == ST_IPTV;
}
/**
@@ -759,7 +762,9 @@
int
service_is_radio(service_t *t)
{
- return t->s_servicetype == ST_RADIO;
+ return
+ t->s_servicetype == ST_RADIO ||
+ t->s_servicetype == ST_IPTV_RADIO;
}
/**
diff --git a/src/service.h b/src/service.h
index 2185e42..186278d 100644
--- a/src/service.h
+++ b/src/service.h
@@ -318,6 +318,8 @@ typedef void (pid_section_callback_t)(struct service *t,
ST_HDTV = 0x11, /* HDTV (MPEG2) */
ST_AC_SDTV = 0x16, /* Advanced codec SDTV */
ST_AC_HDTV = 0x19, /* Advanced codec HDTV */
+ ST_IPTV = 0x30, /* IPTV */
+ ST_IPTV_RADIO = 0x31, /* Radio over IPTV */
} s_servicetype;
diff --git a/src/webui/extjs.c b/src/webui/extjs.c
index 3ed9f8b..4596005 100644
--- a/src/webui/extjs.c
+++ b/src/webui/extjs.c
@@ -1313,7 +1313,14 @@
}
save = 1;
}
-
+ if(!htsmsg_get_u32(c, "radio", &u32)) {
+ if(u32)
+ t->s_servicetype = ST_IPTV_RADIO;
+ else
+ t->s_servicetype = ST_IPTV;
+ save = 1;
+ }
+
save |= tvh_str_update(&t->s_iptv_iface, htsmsg_get_str(c, "interface"));
if(save)
@@ -1347,6 +1354,7 @@
}
htsmsg_add_u32(r, "port", t->s_iptv_port);
+ htsmsg_add_u32(r, "radio", t->s_servicetype == ST_IPTV_RADIO);
htsmsg_add_u32(r, "enabled", t->s_enabled);
return r;
}
diff --git a/src/webui/static/app/iptv.js b/src/webui/static/app/iptv.js
index acdbfc0..b29e0b9 100644
--- a/src/webui/static/app/iptv.js
+++ b/src/webui/static/app/iptv.js
@@ -11,6 +11,12 @@ tvheadend.iptv = function(adapterId) {
width: 45
});
+ var radioColumn = new Ext.grid.CheckColumn({
+ header: "Radio",
+ dataIndex: 'radio',
+ width: 45
+ });
+
var actions = new Ext.ux.grid.RowActions({
header:'',
dataIndex: 'actions',
@@ -82,6 +88,7 @@ tvheadend.iptv = function(adapterId) {
maxValue: 65535
})
},
+ radioColumn,
{
header: "Service ID",
dataIndex: 'sid',
@@ -105,7 +112,7 @@ tvheadend.iptv = function(adapterId) {
cm.defaultSortable = true;
var rec = Ext.data.Record.create([
- 'id', 'enabled', 'channelname', 'interface', 'group', 'port',
+ 'id', 'enabled', 'channelname', 'interface', 'group', 'port', 'radio',
'sid', 'pmt', 'pcr'
]);
@@ -246,7 +253,7 @@ tvheadend.iptv = function(adapterId) {
stripeRows: true,
title: 'IPTV',
iconCls: 'iptv',
- plugins: [enabledColumn, actions],
+ plugins: [enabledColumn, radioColumn, actions],
store: store,
clicksToEdit: 2,
cm: cm,
--
1.7.5.4
From 18473dd11d983aecb6db6e49b454a5d6bb1a329f Mon Sep 17 00:00:00 2001
From: Tadej Novak <tadej@tano.si>
Date: Mon, 30 Jan 2012 16:55:25 +0100
Subject: [PATCH 2/2] Use the same service type for all radio types
Tvheadend now uses same radio type ST_RADIO for DVB and IPTV radios.
Otherwise IPTV streams have ST_IPTV type.
---
src/iptv_input.c | 4 ++--
src/service.c | 5 +----
src/service.h | 1 -
src/webui/extjs.c | 4 ++--
4 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/src/iptv_input.c b/src/iptv_input.c
index 361a151..aeb0ab2 100644
--- a/src/iptv_input.c
+++ b/src/iptv_input.c
@@ -428,7 +428,7 @@
inet_ntop(AF_INET6, &t->s_iptv_group6, abuf6, sizeof(abuf6));
htsmsg_add_str(m, "group", abuf6);
}
- htsmsg_add_u32(m, "radio", t->s_servicetype == ST_IPTV_RADIO);
+ htsmsg_add_u32(m, "radio", t->s_servicetype == ST_RADIO);
if(t->s_ch != NULL) {
htsmsg_add_str(m, "channelname", t->s_ch->ch_name);
htsmsg_add_u32(m, "mapped", 1);
@@ -593,7 +593,7 @@
t->s_iptv_port = u32;
if(!htsmsg_get_u32(c, "radio", &u32) && u32)
- t->s_servicetype = ST_IPTV_RADIO;
+ t->s_servicetype = ST_RADIO;
else
t->s_servicetype = ST_IPTV;
diff --git a/src/service.c b/src/service.c
index 6899e2e..015cd46 100644
--- a/src/service.c
+++ b/src/service.c
@@ -733,7 +733,6 @@
{ "SDTV-AC", ST_AC_SDTV },
{ "HDTV-AC", ST_AC_HDTV },
{ "IPTV", ST_IPTV },
- { "IPTV Radio", ST_IPTV_RADIO },
};
const char *
@@ -762,9 +761,7 @@
int
service_is_radio(service_t *t)
{
- return
- t->s_servicetype == ST_RADIO ||
- t->s_servicetype == ST_IPTV_RADIO;
+ return t->s_servicetype == ST_RADIO;
}
/**
diff --git a/src/service.h b/src/service.h
index 186278d..40d1174 100644
--- a/src/service.h
+++ b/src/service.h
@@ -319,7 +319,6 @@ typedef void (pid_section_callback_t)(struct service *t,
ST_AC_SDTV = 0x16, /* Advanced codec SDTV */
ST_AC_HDTV = 0x19, /* Advanced codec HDTV */
ST_IPTV = 0x30, /* IPTV */
- ST_IPTV_RADIO = 0x31, /* Radio over IPTV */
} s_servicetype;
diff --git a/src/webui/extjs.c b/src/webui/extjs.c
index 4596005..4487deb 100644
--- a/src/webui/extjs.c
+++ b/src/webui/extjs.c
@@ -1315,7 +1315,7 @@
}
if(!htsmsg_get_u32(c, "radio", &u32)) {
if(u32)
- t->s_servicetype = ST_IPTV_RADIO;
+ t->s_servicetype = ST_RADIO;
else
t->s_servicetype = ST_IPTV;
save = 1;
@@ -1354,7 +1354,7 @@
}
htsmsg_add_u32(r, "port", t->s_iptv_port);
- htsmsg_add_u32(r, "radio", t->s_servicetype == ST_IPTV_RADIO);
+ htsmsg_add_u32(r, "radio", t->s_servicetype == ST_RADIO);
htsmsg_add_u32(r, "enabled", t->s_enabled);
return r;
}
--
1.7.5.4

View File

@ -0,0 +1,18 @@
Author: Adam Sutton <dev@adamsutton.me.uk>
Date: Sun Jul 29 20:37:00 2012 +0100
Fix false trigger of uninit var, detected using gcc v4.7.1 (compiling openelec tvh add-on), reported by seo.
diff --git a/src/htsp.c b/src/htsp.c
index b9fc3e1..ae5bd51 100644
--- a/src/htsp.c
+++ b/src/htsp.c
@@ -1160,7 +1160,7 @@ htsp_read_message(htsp_connection_t *htsp, htsmsg_t **mp, int timeout)
static int
htsp_read_loop(htsp_connection_t *htsp)
{
- htsmsg_t *m, *reply;
+ htsmsg_t *m = NULL, *reply;
int r, i;
const char *method;

View File

@ -0,0 +1,59 @@
From cca7718a9902a4d5cffbf158b5853980a08ef930 Mon Sep 17 00:00:00 2001
From: Alexandre Lissy <alexandrelissy@free.fr>
Date: Sun, 2 Sep 2012 20:35:20 +0200
Subject: [PATCH] fix: iMon Knob event interpretation issues
Events for the iMon Knob pad where not correctly interpreted, resulting
in buggy mouse movements (cursor going straight out of the screen), key
pad only generating KEY_RIGHT and KEY_DOWN events. A reproducer is:
int main(int argc, char ** argv)
{
char rel_x = 0x00; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
rel_x = 0x0f; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
rel_x |= ~0x0f; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
return 0;
}
(running on x86 or amd64)
$ ./test
rel_x:0 @test.c:6
rel_x:15 @test.c:7
rel_x:-1 @test.c:8
(running on armv6)
rel_x:0 @test.c:6
rel_x:15 @test.c:7
rel_x:255 @test.c:8
Forcing the rel_x and rel_y variables as signed char fixes the issue.
---
drivers/media/rc/imon.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
index 5dd0386..9d30ca9 100644
--- a/drivers/media/rc/imon.c
+++ b/drivers/media/rc/imon.c
@@ -1225,7 +1225,7 @@ static u32 imon_panel_key_lookup(u64 code)
static bool imon_mouse_event(struct imon_context *ictx,
unsigned char *buf, int len)
{
- char rel_x = 0x00, rel_y = 0x00;
+ signed char rel_x = 0x00, rel_y = 0x00;
u8 right_shift = 1;
bool mouse_input = true;
int dir = 0;
@@ -1301,7 +1301,7 @@ static void imon_touch_event(struct imon_context *ictx, unsigned char *buf)
static void imon_pad_to_keys(struct imon_context *ictx, unsigned char *buf)
{
int dir = 0;
- char rel_x = 0x00, rel_y = 0x00;
+ signed char rel_x = 0x00, rel_y = 0x00;
u16 timeout, threshold;
u32 scancode = KEY_RESERVED;
unsigned long flags;
--
1.7.9.5