mirror of
https://github.com/LibreELEC/LibreELEC.tv
synced 2025-09-24 19:46:01 +07:00
Compare commits
286 Commits
libreelec-
...
3.0.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
795f71cbad | ||
|
|
81635ae19d | ||
|
|
5006bd2073 | ||
|
|
eca2593537 | ||
|
|
b912dd770c | ||
|
|
8838df80b6 | ||
|
|
50fd321948 | ||
|
|
cdd64e47c8 | ||
|
|
ea9308930e | ||
|
|
bb62afa663 | ||
|
|
df92530dfb | ||
|
|
2b3943fbc2 | ||
|
|
311d48675e | ||
|
|
1d33ed7aa0 | ||
|
|
435afa1adb | ||
|
|
535c7f9fba | ||
|
|
76794512f4 | ||
|
|
d34ffbf7ea | ||
|
|
f27bf3e7e8 | ||
|
|
654a08308a | ||
|
|
67d100e1a2 | ||
|
|
620388d307 | ||
|
|
5dd496de25 | ||
|
|
31d8790e15 | ||
|
|
bf38c48586 | ||
|
|
b7a9574ea6 | ||
|
|
e4344663a9 | ||
|
|
851fe8b7bc | ||
|
|
bc5cf335ff | ||
|
|
8b86f57c74 | ||
|
|
6b19a24e64 | ||
|
|
73be075895 | ||
|
|
859c0415b6 | ||
|
|
0bf97f0da1 | ||
|
|
c0d9bb6e09 | ||
|
|
aa6dd8cd1f | ||
|
|
93bfe834f5 | ||
|
|
0ca38238e8 | ||
|
|
fde2bb4da8 | ||
|
|
f26d79510e | ||
|
|
1bab87b42c | ||
|
|
ce57af41e9 | ||
|
|
70e55e654f | ||
|
|
be38ef930c | ||
|
|
79b5bff431 | ||
|
|
ab80a96630 | ||
|
|
22b467f01f | ||
|
|
14cc7b928d | ||
|
|
d87146752e | ||
|
|
0d4e0bb4ce | ||
|
|
2ab36dd62f | ||
|
|
913f85678f | ||
|
|
10d81af0f0 | ||
|
|
fd79dec84b | ||
|
|
252550cd0c | ||
|
|
605e379208 | ||
|
|
a0587ea002 | ||
|
|
baa988b2d5 | ||
|
|
b1d5e175fd | ||
|
|
216e47043b | ||
|
|
a0147f6a12 | ||
|
|
fc24b8019c | ||
|
|
7b32a97b27 | ||
|
|
398df5af31 | ||
|
|
54250b65b6 | ||
|
|
9de9b5e196 | ||
|
|
b9d2270148 | ||
|
|
5bef57fd04 | ||
|
|
a406469e03 | ||
|
|
e65d9950a7 | ||
|
|
9e303b9aa1 | ||
|
|
c9dbfb1a4b | ||
|
|
421e703840 | ||
|
|
5cb0cf883b | ||
|
|
3e7c7806ab | ||
|
|
7c01aa5598 | ||
|
|
073cac2232 | ||
|
|
412141f521 | ||
|
|
8423ab495e | ||
|
|
e2ff29aaba | ||
|
|
654f7f915e | ||
|
|
1871b22418 | ||
|
|
bfd530f8ae | ||
|
|
c0c146e966 | ||
|
|
adcfc51319 | ||
|
|
8bed71f6bd | ||
|
|
4f38d9317a | ||
|
|
1c9e03a7ae | ||
|
|
75b3c30417 | ||
|
|
bc28e915ea | ||
|
|
672e2beddb | ||
|
|
8d449ea3e9 | ||
|
|
802ccf6c06 | ||
|
|
7c53c9ce79 | ||
|
|
08d1947761 | ||
|
|
b587105ecf | ||
|
|
ca9779eed8 | ||
|
|
8534be20a7 | ||
|
|
4ef3138874 | ||
|
|
a7bcd79166 | ||
|
|
327474361b | ||
|
|
463dc63cf3 | ||
|
|
ea8d106ae5 | ||
|
|
e13e9c0dda | ||
|
|
9eb0eccb11 | ||
|
|
b2685567c3 | ||
|
|
dce8242e8f | ||
|
|
dfe2becd18 | ||
|
|
1c57a2c647 | ||
|
|
4d4bbf5c5c | ||
|
|
fabe07ab99 | ||
|
|
14c9ae2284 | ||
|
|
c9af0900b4 | ||
|
|
ff9995e982 | ||
|
|
16442f04bb | ||
|
|
95c0a28bed | ||
|
|
1f6d6dac80 | ||
|
|
ed466a366a | ||
|
|
d885625d24 | ||
|
|
7de221797a | ||
|
|
e84cf14798 | ||
|
|
77aa1eb581 | ||
|
|
51e8121f67 | ||
|
|
e7db42d3c6 | ||
|
|
05a6bab1ef | ||
|
|
34251ce19e | ||
|
|
7bec817c62 | ||
|
|
558aaffd5a | ||
|
|
86724c9b87 | ||
|
|
46a1abc03c | ||
|
|
6308070ac2 | ||
|
|
8c476b3056 | ||
|
|
30d5dda637 | ||
|
|
f85652573f | ||
|
|
1db6430a0c | ||
|
|
5bd4e7e1bb | ||
|
|
10e3f72ede | ||
|
|
6efdba41f7 | ||
|
|
449394cfd6 | ||
|
|
ff6f06149f | ||
|
|
919d71078b | ||
|
|
2a2a8cda2c | ||
|
|
f55a83afcb | ||
|
|
3ce4418833 | ||
|
|
cf2f80badf | ||
|
|
307cf64bfb | ||
|
|
0e5e0a9e04 | ||
|
|
83688801c7 | ||
|
|
fcaac62c5f | ||
|
|
b96a7982ac | ||
|
|
74881c1fd2 | ||
|
|
593b769300 | ||
|
|
477ade7b16 | ||
|
|
036bcad109 | ||
|
|
473b14446a | ||
|
|
ce45d89896 | ||
|
|
321b9dcd34 | ||
|
|
950033c06e | ||
|
|
a18834178b | ||
|
|
14c18a2de5 | ||
|
|
9553f6c11c | ||
|
|
22b62bed59 | ||
|
|
d1ff72f766 | ||
|
|
32502a5cf6 | ||
|
|
6fa2333414 | ||
|
|
152ceec969 | ||
|
|
6fbb705947 | ||
|
|
0e0a7de92f | ||
|
|
f02dead4a7 | ||
|
|
ed1cb4be13 | ||
|
|
29092e2ce5 | ||
|
|
114a9fb370 | ||
|
|
9d21adb6f3 | ||
|
|
a36921fbe6 | ||
|
|
c8f3e6708b | ||
|
|
6256e166aa | ||
|
|
a3c3fa5cce | ||
|
|
573e184cf5 | ||
|
|
fe325e7aed | ||
|
|
b088522f57 | ||
|
|
12f55ac1c6 | ||
|
|
b70a270365 | ||
|
|
a1a9217f8e | ||
|
|
91aa5ed603 | ||
|
|
f298846adb | ||
|
|
767ec892e2 | ||
|
|
07063e9a40 | ||
|
|
0121c1e36b | ||
|
|
7262ed18e4 | ||
|
|
3771c8eb3a | ||
|
|
bc003a1070 | ||
|
|
5c23e3fabc | ||
|
|
15505f80ca | ||
|
|
b7852952ba | ||
|
|
1a97097a30 | ||
|
|
58aaa9f266 | ||
|
|
ffc8962357 | ||
|
|
6069dd14c4 | ||
|
|
7b4edccf81 | ||
|
|
44bc649684 | ||
|
|
c5dbf3d94f | ||
|
|
fa51bfcf57 | ||
|
|
c546b5979a | ||
|
|
aa4fbd7ab1 | ||
|
|
82eb3158ae | ||
|
|
06461b6e7e | ||
|
|
6d16dc9399 | ||
|
|
efa8c1d95a | ||
|
|
a0c977ddfe | ||
|
|
945a7f338f | ||
|
|
0849a34c75 | ||
|
|
77f8e89bfe | ||
|
|
8db2e6705e | ||
|
|
4448113a7b | ||
|
|
bb5c5509f1 | ||
|
|
160ce21140 | ||
|
|
792e217186 | ||
|
|
4ed7faeba3 | ||
|
|
59c41e76a1 | ||
|
|
3f3e198c9b | ||
|
|
ccc1b39a15 | ||
|
|
ad1115e98e | ||
|
|
d9111f52a8 | ||
|
|
9c410eaeef | ||
|
|
e646610990 | ||
|
|
31001afd23 | ||
|
|
80c6730a0f | ||
|
|
004a391f18 | ||
|
|
6e9af9e243 | ||
|
|
f7c8509269 | ||
|
|
b768e322ed | ||
|
|
9029c645b0 | ||
|
|
b14d6da9cb | ||
|
|
96f52fc97f | ||
|
|
d4b844a7ed | ||
|
|
60744990c3 | ||
|
|
ef5d518eb9 | ||
|
|
e61360c9d3 | ||
|
|
2e24540df2 | ||
|
|
caeb39c657 | ||
|
|
a603e3bf18 | ||
|
|
9cb02d21a7 | ||
|
|
e5fa75cf69 | ||
|
|
28fe3c1b40 | ||
|
|
7e1f181168 | ||
|
|
708a34555a | ||
|
|
5e72c74419 | ||
|
|
b3011069c5 | ||
|
|
4f48a19924 | ||
|
|
86538ccb74 | ||
|
|
cd452f8288 | ||
|
|
7c1531f70d | ||
|
|
70064630d8 | ||
|
|
1405b245ea | ||
|
|
cf7af733c3 | ||
|
|
105ede1d39 | ||
|
|
917724673c | ||
|
|
768b7660e0 | ||
|
|
00221bea95 | ||
|
|
2af93e2b15 | ||
|
|
414abbc9e9 | ||
|
|
4d2ca4a68b | ||
|
|
2bf67bb4b0 | ||
|
|
7bccac2c21 | ||
|
|
991521fbbf | ||
|
|
20c48e1fe8 | ||
|
|
5a79bc7598 | ||
|
|
ba633c0e65 | ||
|
|
68391a604e | ||
|
|
b439e9450a | ||
|
|
e84de340b6 | ||
|
|
bc365bd295 | ||
|
|
21c2e30c78 | ||
|
|
2d59aa423e | ||
|
|
1e1dad760a | ||
|
|
80bcd9ba72 | ||
|
|
d0a3988215 | ||
|
|
4db0e6a9e4 | ||
|
|
3c1ef9bd37 | ||
|
|
7f01de9350 | ||
|
|
a9fd32bf62 | ||
|
|
26e29e2ef1 | ||
|
|
8e18629276 | ||
|
|
63cc19754c | ||
|
|
be0fd9c615 | ||
|
|
ee042d786f |
21
CHANGELOG
21
CHANGELOG
@@ -1,20 +1,5 @@
|
||||
OpenELEC (Version 2.1)
|
||||
OpenELEC (Version 3.0)
|
||||
|
||||
Changelog OpenELEC-2.0 to OpenELEC-2.1
|
||||
for a detailed Changelog from OpenELEC-2.0 to OpenELEC-3.0 see:
|
||||
https://github.com/OpenELEC/OpenELEC.tv/compare/2.0.0...3.0.0
|
||||
|
||||
Added packages:
|
||||
- add package 'ppp'
|
||||
- add package 'pptp'
|
||||
|
||||
Package updates:
|
||||
- update linux to linux-3.5
|
||||
- update dialog to dialog-1.1-20120215
|
||||
- update connman to connman-1.4
|
||||
|
||||
Added functions:
|
||||
- sshd can be enabled via OpenELEC Settings addon
|
||||
- add PPTP support
|
||||
|
||||
Changed functions:
|
||||
|
||||
Removed functions:
|
||||
|
||||
@@ -233,7 +233,7 @@ dashes="==========================="
|
||||
show_config() {
|
||||
dashes="==========================="
|
||||
config_message="$config_message\n $dashes$dashes$dashes"
|
||||
config_message="$config_message\n Configuration for $DISTRONAME"
|
||||
config_message="$config_message\n Configuration for $DISTRONAME ($([ "$OFFICIAL" = "yes" ] && echo "official" || echo "unofficial"))"
|
||||
config_message="$config_message\n $dashes$dashes$dashes"
|
||||
|
||||
# Build options
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# VERSION: set full version, use "devel" for development version
|
||||
OPENELEC_VERSION="devel"
|
||||
OPENELEC_VERSION="3.0.3"
|
||||
|
||||
# OS_VERSION: OS Version
|
||||
OS_VERSION="3.0"
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
3.0.7
|
||||
- update to TVHeadend 3.3.511
|
||||
|
||||
3.0.6
|
||||
- update to TVHeadend 3.3.491
|
||||
- disable avahi support
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="tvheadend"
|
||||
PKG_VERSION="3.3.491"
|
||||
PKG_REV="6"
|
||||
PKG_VERSION="3.3.511"
|
||||
PKG_REV="7"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.lonelycoder.com/hts/tvheadend_overview.html"
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
From 30517cb122d0991f0ba51155c9afff6bdc2d8899 Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Saraev <stefan@saraev.ca>
|
||||
Date: Wed, 13 Mar 2013 21:30:55 +0200
|
||||
Subject: [PATCH] cwc: syslog: move some log messages to debug
|
||||
|
||||
---
|
||||
src/capmt.c | 4 ++--
|
||||
src/cwc.c | 2 +-
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/capmt.c b/src/capmt.c
|
||||
index ac507bd..9e12e86 100644
|
||||
--- a/src/capmt.c
|
||||
+++ b/src/capmt.c
|
||||
@@ -547,7 +547,7 @@ handle_ca0(capmt_t* capmt) {
|
||||
#endif
|
||||
|
||||
if(ct->ct_keystate != CT_RESOLVED)
|
||||
- tvhlog(LOG_INFO, "capmt", "Obtained key for service \"%s\"",t->s_svcname);
|
||||
+ tvhlog(LOG_DEBUG, "capmt", "Obtained key for service \"%s\"",t->s_svcname);
|
||||
|
||||
ct->ct_keystate = CT_RESOLVED;
|
||||
}
|
||||
@@ -851,7 +851,7 @@ capmt_table_input(struct th_descrambler *td, struct service *t,
|
||||
cce->cce_ecmsize = len;
|
||||
|
||||
if(ct->ct_keystate != CT_RESOLVED)
|
||||
- tvhlog(LOG_INFO, "capmt",
|
||||
+ tvhlog(LOG_DEBUG, "capmt",
|
||||
"Trying to obtain key for service \"%s\"",t->s_svcname);
|
||||
|
||||
buf[9] = pmtversion;
|
||||
diff --git a/src/cwc.c b/src/cwc.c
|
||||
index ebafd4f..904213f 100644
|
||||
--- a/src/cwc.c
|
||||
+++ b/src/cwc.c
|
||||
@@ -873,7 +873,7 @@ forbid:
|
||||
}
|
||||
|
||||
if(ct->cs_keystate != CS_RESOLVED)
|
||||
- tvhlog(LOG_INFO, "cwc",
|
||||
+ tvhlog(LOG_DEBUG, "cwc",
|
||||
"Obtained key for service \"%s\" in %"PRId64" ms, from %s:%i",
|
||||
t->s_svcname, delay, ct->cs_cwc->cwc_hostname,
|
||||
ct->cs_cwc->cwc_port);
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
From 07cdfdaf6af06ae08a779ccc9082a517757c6fd3 Mon Sep 17 00:00:00 2001
|
||||
From: Adam Sutton <dev@adamsutton.me.uk>
|
||||
Date: Tue, 12 Mar 2013 15:35:21 +0000
|
||||
Subject: [PATCH] Fix #1660 - dvb: stop constant updating of dvb mux
|
||||
configuration files
|
||||
|
||||
---
|
||||
src/dvb/dvb_multiplex.c | 23 ++++++++++++++---------
|
||||
1 file changed, 14 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/dvb/dvb_multiplex.c b/src/dvb/dvb_multiplex.c
|
||||
index ff61558..692ebf1 100644
|
||||
--- a/src/dvb/dvb_multiplex.c
|
||||
+++ b/src/dvb/dvb_multiplex.c
|
||||
@@ -58,9 +58,6 @@
|
||||
{ "OK", TDMI_FE_OK },
|
||||
};
|
||||
|
||||
-static void tdmi_set_enable(th_dvb_mux_instance_t *tdmi, int enabled);
|
||||
-
|
||||
-
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@@ -856,6 +853,9 @@ int dvb_mux_str2hier(const char *str)
|
||||
if (!networkname || !*networkname)
|
||||
return;
|
||||
|
||||
+ if (!strcmp(tdmi->tdmi_network ?: "", networkname))
|
||||
+ return;
|
||||
+
|
||||
free(tdmi->tdmi_network);
|
||||
tdmi->tdmi_network = strdup(networkname);
|
||||
dvb_mux_save(tdmi);
|
||||
@@ -879,8 +879,9 @@ int dvb_mux_str2hier(const char *str)
|
||||
if (tdmi->tdmi_transport_stream_id != 0xFFFF || tsid == 0xFFFF)
|
||||
return;
|
||||
|
||||
- tdmi->tdmi_transport_stream_id = tsid;
|
||||
-
|
||||
+ if (tdmi->tdmi_transport_stream_id == tsid)
|
||||
+ return;
|
||||
+
|
||||
dvb_mux_save(tdmi);
|
||||
|
||||
m = htsmsg_create_map();
|
||||
@@ -900,6 +901,9 @@ int dvb_mux_str2hier(const char *str)
|
||||
if (force)
|
||||
if (tdmi->tdmi_network_id != 0 || onid == 0)
|
||||
return;
|
||||
+
|
||||
+ if (tdmi->tdmi_network_id == onid)
|
||||
+ return;
|
||||
|
||||
tdmi->tdmi_network_id = onid;
|
||||
|
||||
@@ -915,13 +919,13 @@ int dvb_mux_str2hier(const char *str)
|
||||
/**
|
||||
*
|
||||
*/
|
||||
-static void
|
||||
+static int
|
||||
tdmi_set_enable(th_dvb_mux_instance_t *tdmi, int enabled)
|
||||
{
|
||||
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
|
||||
|
||||
if(tdmi->tdmi_enabled == enabled)
|
||||
- return;
|
||||
+ return 0;
|
||||
|
||||
if(tdmi->tdmi_enabled) {
|
||||
|
||||
@@ -940,6 +944,7 @@ int dvb_mux_str2hier(const char *str)
|
||||
mux_link_initial(tda, tdmi);
|
||||
|
||||
subscription_reschedule();
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -948,8 +953,8 @@ int dvb_mux_str2hier(const char *str)
|
||||
void
|
||||
dvb_mux_set_enable(th_dvb_mux_instance_t *tdmi, int enabled)
|
||||
{
|
||||
- tdmi_set_enable(tdmi, enabled);
|
||||
- dvb_mux_save(tdmi);
|
||||
+ if (tdmi_set_enable(tdmi, enabled))
|
||||
+ dvb_mux_save(tdmi);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="alsa-lib"
|
||||
PKG_VERSION="1.0.26"
|
||||
PKG_VERSION="1.0.27"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
From: Takashi Iwai <tiwai <at> suse.de>
|
||||
Subject: [PATCH RFC 1/2] control: Simplify using snd_config_get_bool()
|
||||
Newsgroups: gmane.linux.alsa.devel
|
||||
Date: 2012-10-12 15:25:23 GMT (17 weeks, 8 hours and 26 minutes ago)
|
||||
snd_config_get_bool() was improved to parse also ASCII strings now,
|
||||
so we don't have to open-code the boolean parser in
|
||||
src/control/setup.c any longer.
|
||||
|
||||
Signed-off-by: Takashi Iwai <tiwai <at> suse.de>
|
||||
---
|
||||
src/control/setup.c | 37 ++++++-------------------------------
|
||||
1 file changed, 6 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/src/control/setup.c b/src/control/setup.c
|
||||
index eecda45..bd3599d 100644
|
||||
--- a/src/control/setup.c
|
||||
+++ b/src/control/setup.c
|
||||
@@ -400,7 +400,6 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da
|
||||
{
|
||||
snd_config_t *conf;
|
||||
snd_config_iterator_t i, next;
|
||||
- char *tmp;
|
||||
int iface = SND_CTL_ELEM_IFACE_MIXER;
|
||||
const char *name = NULL;
|
||||
long index = 0;
|
||||
@@ -464,33 +463,17 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da
|
||||
continue;
|
||||
}
|
||||
if (strcmp(id, "lock") == 0) {
|
||||
- if ((err = snd_config_get_ascii(n, &tmp)) < 0) {
|
||||
- SNDERR("field %s has an invalid type", id);
|
||||
- goto _err;
|
||||
- }
|
||||
- err = snd_config_get_bool_ascii(tmp);
|
||||
- if (err < 0) {
|
||||
- SNDERR("field %s is not a boolean", id);
|
||||
- free(tmp);
|
||||
+ err = snd_config_get_bool(n);
|
||||
+ if (err < 0)
|
||||
goto _err;
|
||||
- }
|
||||
lock = err;
|
||||
- free(tmp);
|
||||
continue;
|
||||
}
|
||||
if (strcmp(id, "preserve") == 0) {
|
||||
- if ((err = snd_config_get_ascii(n, &tmp)) < 0) {
|
||||
- SNDERR("field %s has an invalid type", id);
|
||||
- goto _err;
|
||||
- }
|
||||
- err = snd_config_get_bool_ascii(tmp);
|
||||
- if (err < 0) {
|
||||
- SNDERR("field %s is not a boolean", id);
|
||||
- free(tmp);
|
||||
+ err = snd_config_get_bool(n);
|
||||
+ if (err < 0)
|
||||
goto _err;
|
||||
- }
|
||||
preserve = err;
|
||||
- free(tmp);
|
||||
continue;
|
||||
}
|
||||
if (strcmp(id, "value") == 0) {
|
||||
@@ -502,18 +485,10 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da
|
||||
continue;
|
||||
}
|
||||
if (strcmp(id, "optional") == 0) {
|
||||
- if ((err = snd_config_get_ascii(n, &tmp)) < 0) {
|
||||
- SNDERR("field %s has an invalid type", id);
|
||||
- goto _err;
|
||||
- }
|
||||
- err = snd_config_get_bool_ascii(tmp);
|
||||
- if (err < 0) {
|
||||
- SNDERR("field %s is not a boolean", id);
|
||||
- free(tmp);
|
||||
+ err = snd_config_get_bool(n);
|
||||
+ if (err < 0)
|
||||
goto _err;
|
||||
- }
|
||||
optional = err;
|
||||
- free(tmp);
|
||||
continue;
|
||||
}
|
||||
SNDERR("Unknown field %s", id);
|
||||
--
|
||||
1.7.12.2
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
From 91e42790dd0a9489a94e3784d220d76ad2d98b36 Mon Sep 17 00:00:00 2001
|
||||
From: Takashi Iwai <tiwai@suse.de>
|
||||
Date: Sat, 16 Feb 2013 18:29:59 +0200
|
||||
Subject: [PATCH] Add workaround for conflicting IEC958 controls for HD-audio
|
||||
|
||||
When both an SPDIF and an HDMI output are present on HD-audio, both
|
||||
try to access IEC958 controls with index=0 although one of them must
|
||||
be wrong. For avoiding this conflict, the recent kernel code (3.9 and
|
||||
3.8 stable) moves the IEC958 controls of an SPDIF with index=16 once
|
||||
when the conflict happens.
|
||||
|
||||
In this patch, the corresponding support is added in alsa-lib side.
|
||||
The new "skip_rest" boolean flag is added to the hooked element
|
||||
definition which indicates that the rest of element array will be
|
||||
ignored once when this element is present and evaluated. With this
|
||||
new flag, the HD-audio config takes device=1 primarily, then take
|
||||
device=0 as fallback.
|
||||
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
src/conf/cards/HDA-Intel.conf | 16 ++++++++++++++++
|
||||
src/control/setup.c | 19 ++++++++++++++++---
|
||||
2 files changed, 32 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/conf/cards/HDA-Intel.conf b/src/conf/cards/HDA-Intel.conf
|
||||
index d4f2667..3957c12 100644
|
||||
--- a/src/conf/cards/HDA-Intel.conf
|
||||
+++ b/src/conf/cards/HDA-Intel.conf
|
||||
@@ -113,6 +113,22 @@ HDA-Intel.pcm.iec958.0 {
|
||||
hook_args [
|
||||
{
|
||||
name "IEC958 Playback Default"
|
||||
+ index 16
|
||||
+ optional true
|
||||
+ lock true
|
||||
+ preserve true
|
||||
+ value [ $AES0 $AES1 $AES2 $AES3 ]
|
||||
+ }
|
||||
+ {
|
||||
+ name "IEC958 Playback Switch"
|
||||
+ index 16
|
||||
+ optional true
|
||||
+ value true
|
||||
+ # if this element is present, skip the rest
|
||||
+ skip_rest true
|
||||
+ }
|
||||
+ {
|
||||
+ name "IEC958 Playback Default"
|
||||
lock true
|
||||
preserve true
|
||||
value [ $AES0 $AES1 $AES2 $AES3 ]
|
||||
diff --git a/src/control/setup.c b/src/control/setup.c
|
||||
index eecda45..72facb0 100644
|
||||
--- a/src/control/setup.c
|
||||
+++ b/src/control/setup.c
|
||||
@@ -396,7 +396,7 @@ static int snd_config_get_ctl_elem_value(snd_config_t *conf,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_data)
|
||||
+static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_data, int *quit)
|
||||
{
|
||||
snd_config_t *conf;
|
||||
snd_config_iterator_t i, next;
|
||||
@@ -409,6 +409,7 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da
|
||||
int lock = 0;
|
||||
int preserve = 0;
|
||||
int optional = 0;
|
||||
+ int skip_rest = 0;
|
||||
snd_config_t *value = NULL, *mask = NULL;
|
||||
snd_sctl_elem_t *elem = NULL;
|
||||
int err;
|
||||
@@ -516,6 +517,13 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da
|
||||
free(tmp);
|
||||
continue;
|
||||
}
|
||||
+ if (strcmp(id, "skip_rest") == 0) {
|
||||
+ err = snd_config_get_bool(n);
|
||||
+ if (err < 0)
|
||||
+ goto _err;
|
||||
+ skip_rest = err;
|
||||
+ continue;
|
||||
+ }
|
||||
SNDERR("Unknown field %s", id);
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -564,6 +572,9 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da
|
||||
if (! optional)
|
||||
SNDERR("Cannot obtain info for CTL elem (%s,'%s',%li,%li,%li): %s", snd_ctl_elem_iface_name(iface), name, index, device, subdevice, snd_strerror(err));
|
||||
goto _err;
|
||||
+ } else {
|
||||
+ if (skip_rest)
|
||||
+ *quit = 1;
|
||||
}
|
||||
snd_ctl_elem_value_set_id(elem->val, elem->id);
|
||||
snd_ctl_elem_value_set_id(elem->old, elem->id);
|
||||
@@ -619,7 +630,7 @@ int snd_sctl_build(snd_sctl_t **sctl, snd_ctl_t *handle, snd_config_t *conf, snd
|
||||
{
|
||||
snd_sctl_t *h;
|
||||
snd_config_iterator_t i, next;
|
||||
- int err;
|
||||
+ int err, quit = 0;
|
||||
|
||||
assert(sctl);
|
||||
assert(handle);
|
||||
@@ -639,11 +650,13 @@ int snd_sctl_build(snd_sctl_t **sctl, snd_ctl_t *handle, snd_config_t *conf, snd
|
||||
INIT_LIST_HEAD(&h->elems);
|
||||
snd_config_for_each(i, next, conf) {
|
||||
snd_config_t *n = snd_config_iterator_entry(i);
|
||||
- err = add_elem(h, n, private_data);
|
||||
+ err = add_elem(h, n, private_data, &quit);
|
||||
if (err < 0) {
|
||||
free_elems(h);
|
||||
return err;
|
||||
}
|
||||
+ if (quit)
|
||||
+ break;
|
||||
}
|
||||
*sctl = h;
|
||||
return 0;
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="alsa-plugins"
|
||||
PKG_VERSION="1.0.26"
|
||||
PKG_VERSION="1.0.27"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="alsa-utils"
|
||||
PKG_VERSION="1.0.26"
|
||||
PKG_VERSION="1.0.27"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
diff -Naur alsa-utils-1.0.26-old/configure.in alsa-utils-1.0.26-new/configure.in
|
||||
--- alsa-utils-1.0.26-old/configure.in 2012-09-06 01:45:44.000000000 -0700
|
||||
+++ alsa-utils-1.0.26-new/configure.in 2012-12-29 08:01:59.000000000 -0800
|
||||
@@ -290,7 +290,7 @@
|
||||
TESTSOUND="$dir/test.wav")
|
||||
AC_SUBST(TESTSOUND)
|
||||
|
||||
-AM_CONFIG_HEADER(include/aconfig.h)
|
||||
+AC_CONFIG_HEADERS(include/aconfig.h)
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="mysql"
|
||||
PKG_VERSION="5.1.67"
|
||||
PKG_VERSION="5.1.68"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="LGPL"
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
diff -Naur mysql-5.1.67-old/configure.in mysql-5.1.67-new/configure.in
|
||||
--- mysql-5.1.67-old/configure.in 2012-12-13 02:05:51.000000000 -0800
|
||||
+++ mysql-5.1.67-new/configure.in 2012-12-30 08:39:00.000000000 -0800
|
||||
@@ -22,7 +22,7 @@
|
||||
AM_INIT_AUTOMAKE([1.9 tar-ustar])
|
||||
AC_PROG_LIBTOOL
|
||||
|
||||
-AM_CONFIG_HEADER([include/config.h])
|
||||
+AC_CONFIG_HEADERS([include/config.h])
|
||||
|
||||
# Request support for automake silent-rules if available.
|
||||
# Default to verbose output. One can use the configure-time
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="sqlite"
|
||||
PKG_VERSION="autoconf-3071600"
|
||||
PKG_VERSION="autoconf-3071602"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="PublicDomain"
|
||||
|
||||
@@ -30,6 +30,9 @@ cd $PKG_BUILD
|
||||
make PREFIX=/usr \
|
||||
CC="$TARGET_CC" \
|
||||
AR="$TARGET_AR" \
|
||||
HOST=_LINUX \
|
||||
HARDWARE_NAME=$TARGET_ARCH \
|
||||
BITS=$ACPICA_BITS \
|
||||
YACC=$ROOT/$TOOLCHAIN/bin/bison \
|
||||
CWARNINGFLAGS="-O2 $TARGET_CFLAGS"
|
||||
|
||||
|
||||
@@ -19,12 +19,13 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="acpica-unix2"
|
||||
PKG_VERSION="20130117"
|
||||
PKG_VERSION="20130328"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="i386 x86_64"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.acpica.org/"
|
||||
PKG_URL="https://www.acpica.org/download/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
PKG_URL="https://acpica.org/sites/acpica/files/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS=""
|
||||
PKG_BUILD_DEPENDS="toolchain flex bison"
|
||||
PKG_PRIORITY="optional"
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
diff -uNr acpica-unix2-20130117-orig/generate/unix/Makefile.common acpica-unix2-20130117/generate/unix/Makefile.common
|
||||
--- acpica-unix2-20130117-orig/generate/unix/Makefile.common 2013-01-17 20:47:44.000000000 +0100
|
||||
+++ acpica-unix2-20130117/generate/unix/Makefile.common 2013-02-07 15:13:59.000000000 +0100
|
||||
@@ -6,7 +6,7 @@
|
||||
# Get the OS machine architecture. Anything with a "64" in the returned
|
||||
# string will be treated as a 64-bit OS. Otherwise, the default is 32-bit.
|
||||
#
|
||||
-HARDWARE_NAME := $(shell uname -m)
|
||||
+HARDWARE_NAME=$(BITS)
|
||||
BITS=0
|
||||
|
||||
#
|
||||
@@ -23,8 +23,15 @@
|
||||
. config/options $1
|
||||
|
||||
cd $PKG_BUILD
|
||||
make PREFIX=/usr \
|
||||
CC="$TARGET_CC" \
|
||||
AR="$TARGET_AR" \
|
||||
make CC="$TARGET_CC" \
|
||||
CFLAGS="$TARGET_CFLAGS -Wall -Wstrict-prototypes -Wdeclaration-after-statement -Os -s -D_LINUX -DDEFINE_ALTERNATE_TYPES -I../include" \
|
||||
CPPFLAGS="$TARGET_CPPFLAGS" \
|
||||
-C acpidump acpidump
|
||||
|
||||
make CC="$TARGET_CC" \
|
||||
CFLAGS="$TARGET_CFLAGS -Wall -Wstrict-prototypes -Wdeclaration-after-statement -Os -s -D_LINUX -DDEFINE_ALTERNATE_TYPES -I../include" \
|
||||
-C acpixtract acpixtract
|
||||
|
||||
make CC="$TARGET_CC" \
|
||||
CFLAGS="$TARGET_CFLAGS -Wall -Wstrict-prototypes -Wdeclaration-after-statement -Os -s -D_LINUX -DDEFINE_ALTERNATE_TYPES -I../include" \
|
||||
-C madt madt
|
||||
|
||||
|
||||
@@ -19,12 +19,12 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pmtools"
|
||||
PKG_VERSION="20071116"
|
||||
PKG_VERSION="20110323"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="i386 x86_64"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://lesswatts.org/projects/acpi/utilities.php"
|
||||
PKG_URL="https://lesswatts.org/patches/linux_acpi/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
PKG_URL="http://mirror.linux.org.au/linux/kernel/people/lenb/acpi/utils/$PKG_NAME-$PKG_VERSION.tar.bz2"
|
||||
PKG_DEPENDS=""
|
||||
PKG_BUILD_DEPENDS="toolchain"
|
||||
PKG_PRIORITY="optional"
|
||||
|
||||
25
packages/debug/pmtools/patches/pmtools-madt.patch
Normal file
25
packages/debug/pmtools/patches/pmtools-madt.patch
Normal file
@@ -0,0 +1,25 @@
|
||||
diff -Naur pmtools/madt/Makefile pmtools.patch/madt/Makefile
|
||||
--- pmtools/madt/Makefile 2005-11-11 18:07:04.000000000 +0100
|
||||
+++ pmtools.patch/madt/Makefile 2007-11-16 19:48:56.000000000 +0100
|
||||
@@ -1,6 +1,16 @@
|
||||
+PROG= madt
|
||||
+SRCS= madt.c
|
||||
+
|
||||
+all: madt
|
||||
+$(PROG) : $(SRCS)
|
||||
+ $(CC) $(CFLAGS) $(SRCS) -o $(PROG)
|
||||
+
|
||||
test: madt
|
||||
- ./madt < APIC
|
||||
-madt: madt.c acpi.h tables.c
|
||||
- cc -o madt madt.c
|
||||
-clean:
|
||||
- rm madt
|
||||
+ ./madt < example.APIC.dat
|
||||
+ ./madt < example.APIC.bad.dat
|
||||
+
|
||||
+CLEANFILES= $(PROG)
|
||||
+
|
||||
+clean :
|
||||
+ rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS)) *~
|
||||
+
|
||||
25
packages/debug/pmtools/unpack
Executable file
25
packages/debug/pmtools/unpack
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
|
||||
################################################################################
|
||||
# This file is part of OpenELEC - http://www.openelec.tv
|
||||
# Copyright (C) 2013 Dag Wieers (dag@wieers.com)
|
||||
#
|
||||
# This Program 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, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This Program 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 OpenELEC.tv; see the file COPYING. If not, write to
|
||||
# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
|
||||
# http://www.gnu.org/copyleft/gpl.html
|
||||
################################################################################
|
||||
|
||||
. config/options $1
|
||||
|
||||
mv $BUILD/$PKG_NAME $BUILD/$PKG_NAME-$PKG_VERSION
|
||||
@@ -22,10 +22,10 @@
|
||||
|
||||
. config/options $1
|
||||
|
||||
# wireless_tools fails to build on some systems with LTO enabled
|
||||
strip_lto
|
||||
|
||||
cd $PKG_BUILD
|
||||
|
||||
make PREFIX=/usr \
|
||||
CC="$TARGET_CC" \
|
||||
AR="$TARGET_AR" \
|
||||
CFLAGS="$TARGET_CFLAGS" \
|
||||
CPPFLAGS="$TARGET_CPPFLAGS" \
|
||||
make PREFIX=/usr CC="$CC" AR="$AR" \
|
||||
CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS"
|
||||
|
||||
@@ -19,12 +19,12 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="boost"
|
||||
PKG_VERSION="1_52_0"
|
||||
PKG_VERSION="1_53_0"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="OSS"
|
||||
PKG_SITE="http://www.boost.org/"
|
||||
PKG_URL="$SOURCEFORGE_SRC/boost/boost/1.52.0/${PKG_NAME}_${PKG_VERSION}.tar.bz2"
|
||||
PKG_URL="$SOURCEFORGE_SRC/boost/boost/1.53.0/${PKG_NAME}_${PKG_VERSION}.tar.bz2"
|
||||
PKG_DEPENDS="zlib bzip2"
|
||||
PKG_BUILD_DEPENDS="toolchain boost-jam Python-host zlib bzip2"
|
||||
PKG_PRIORITY="optional"
|
||||
|
||||
@@ -36,7 +36,6 @@ mkdir -p .objdir-target && cd .objdir-target
|
||||
--localstatedir=/var \
|
||||
--disable-static \
|
||||
--enable-shared \
|
||||
--disable-mpbsd \
|
||||
--disable-cxx \
|
||||
|
||||
make
|
||||
|
||||
@@ -19,12 +19,12 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="gmp"
|
||||
PKG_VERSION="5.0.5"
|
||||
PKG_VERSION="5.1.1"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="LGPL"
|
||||
PKG_SITE="http://gmplib.org/"
|
||||
PKG_URL="http://ftp.sunet.se/pub/gnu/gmp/$PKG_NAME-$PKG_VERSION.tar.bz2"
|
||||
PKG_URL="ftp://ftp.gmplib.org/pub/$PKG_NAME-$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
PKG_DEPENDS=""
|
||||
PKG_BUILD_DEPENDS="toolchain"
|
||||
PKG_PRIORITY="optional"
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
diff -Naur gmp-5.0.5/configure.in gmp-5.0.5.patch/configure.in
|
||||
--- gmp-5.0.5/configure.in 2012-05-06 13:19:49.000000000 +0200
|
||||
+++ gmp-5.0.5.patch/configure.in 2013-01-12 02:25:31.897257189 +0100
|
||||
@@ -65,8 +65,8 @@
|
||||
dnl Note that there's a copy of these options in the top-level Makefile.am,
|
||||
dnl so update there too if changing anything.
|
||||
dnl
|
||||
-AM_INIT_AUTOMAKE([1.8 gnu no-dependencies $(top_builddir)/ansi2knr])
|
||||
-AM_CONFIG_HEADER(config.h:config.in)
|
||||
+AM_INIT_AUTOMAKE([1.8 gnu no-dependencies])
|
||||
+AC_CONFIG_HEADERS(config.h:config.in)
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
|
||||
@@ -2228,9 +2228,6 @@
|
||||
echo " MPN_PATH=\"$path\""
|
||||
|
||||
|
||||
-# Automake ansi2knr support.
|
||||
-AM_C_PROTOTYPES
|
||||
-
|
||||
CL_AS_NOEXECSTACK
|
||||
|
||||
GMP_PROG_AR
|
||||
diff -Naur gmp-5.0.5/Makefile.am gmp-5.0.5.patch/Makefile.am
|
||||
--- gmp-5.0.5/Makefile.am 2012-05-06 13:19:49.000000000 +0200
|
||||
+++ gmp-5.0.5.patch/Makefile.am 2013-01-12 02:25:09.603364249 +0100
|
||||
@@ -25,7 +25,7 @@
|
||||
# Makefiles in subdirectories, but here we must omit it so automake gives
|
||||
# the actual ansi2knr build rule, not "cd $(top_builddir) && make ansi2knr".
|
||||
#
|
||||
-AUTOMAKE_OPTIONS = 1.8 gnu no-dependencies ansi2knr
|
||||
+AUTOMAKE_OPTIONS = 1.8 gnu no-dependencies
|
||||
|
||||
|
||||
# Libtool -version-info for libgmp.la and libmp.la. See "Versioning" in the
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="libcec"
|
||||
PKG_VERSION="2.1.1"
|
||||
PKG_VERSION="2.1.3"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
. config/options $1
|
||||
|
||||
cd $PKG_BUILD
|
||||
chmod +x ./configure ./preload/configure ./libcharset/configure
|
||||
|
||||
./configure --host=$TARGET_NAME \
|
||||
--build=$HOST_NAME \
|
||||
--prefix=/usr \
|
||||
|
||||
@@ -19,12 +19,13 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="libiconv"
|
||||
PKG_VERSION="1.14"
|
||||
PKG_VERSION="20130504"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.gnu.org/software/libiconv/"
|
||||
PKG_URL="http://ftp.gnu.org/pub/gnu/libiconv/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
# PKG_URL="http://ftp.gnu.org/pub/gnu/libiconv/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
PKG_DEPENDS=""
|
||||
PKG_BUILD_DEPENDS="toolchain"
|
||||
PKG_PRIORITY="optional"
|
||||
|
||||
98909
packages/devel/libiconv/patches/libiconv-20130504-gnulib.patch
Normal file
98909
packages/devel/libiconv/patches/libiconv-20130504-gnulib.patch
Normal file
File diff suppressed because it is too large
Load Diff
@@ -22,11 +22,7 @@
|
||||
#
|
||||
# runlevels: openelec
|
||||
|
||||
progress "set vll dir and run vcfiled service"
|
||||
progress "run vcfiled service"
|
||||
|
||||
/usr/sbin/vcfiled
|
||||
|
||||
mkdir -p /storage/.config/vlls
|
||||
|
||||
# seems to still not work
|
||||
# /usr/bin/vcgencmd set_vll_dir /storage/.config/vlls
|
||||
@@ -44,5 +44,3 @@ mkdir -p $INSTALL/usr/bin
|
||||
mkdir -p $INSTALL/opt/vc
|
||||
ln -sf /usr/lib $INSTALL/opt/vc/lib
|
||||
|
||||
mkdir -p $INSTALL/sd
|
||||
ln -sf /storage/.config/vlls $INSTALL/sd/vlls
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="bcm2835-driver"
|
||||
PKG_VERSION="2bcb2bc"
|
||||
PKG_VERSION="f53948f"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="nonfree"
|
||||
|
||||
@@ -39,4 +39,19 @@ mkdir -p .build-host && cd .build-host
|
||||
--enable-shared \
|
||||
|
||||
make
|
||||
make install
|
||||
|
||||
mkdir -p $ROOT/$TOOLCHAIN/lib
|
||||
cp -PR .libs/*.so* $ROOT/$TOOLCHAIN/lib
|
||||
ln -sf libpng15.so $ROOT/$TOOLCHAIN/lib/libpng.so
|
||||
|
||||
mkdir -p $ROOT/$TOOLCHAIN/lib/pkgconfig
|
||||
cp -PR libpng.pc $ROOT/$TOOLCHAIN/lib/pkgconfig/libpng15.pc
|
||||
ln -sf libpng15.pc $ROOT/$TOOLCHAIN/lib/pkgconfig/libpng.pc
|
||||
|
||||
mkdir -p $ROOT/$TOOLCHAIN/include/libpng15
|
||||
cp -PR ../png.h $ROOT/$TOOLCHAIN/include/libpng15
|
||||
cp -PR ../pngconf.h $ROOT/$TOOLCHAIN/include/libpng15
|
||||
cp -PR pnglibconf.h $ROOT/$TOOLCHAIN/include/libpng15
|
||||
ln -sf libpng15/png.h $ROOT/$TOOLCHAIN/include/png.h
|
||||
ln -sf libpng15/pngconf.h $ROOT/$TOOLCHAIN/include/pngconf.h
|
||||
ln -sf libpng15/pnglibconf.h $ROOT/$TOOLCHAIN/include/pnglibconf.h
|
||||
|
||||
@@ -42,4 +42,7 @@ $MAKEINSTALL
|
||||
$SED "s:\([\"'= ]\)/usr:\\1$SYSROOT_PREFIX/usr:g" \
|
||||
$SYSROOT_PREFIX/usr/bin/libpng*-config
|
||||
|
||||
$SED "s:libs=\"-lpng15\":libs=\"-lpng15 -lz\":g" \
|
||||
$SYSROOT_PREFIX/usr/bin/libpng*-config
|
||||
|
||||
cp -P $SYSROOT_PREFIX/usr/bin/libpng*-config $ROOT/$TOOLCHAIN/bin
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
################################################################################
|
||||
|
||||
# mount all needed special filesystems
|
||||
/bin/busybox mount -t devtmpfs none /dev
|
||||
/bin/busybox mount -t proc none /proc
|
||||
/bin/busybox mount -t sysfs none /sys
|
||||
/bin/busybox mount -t devtmpfs devtmpfs /dev
|
||||
/bin/busybox mount -t proc proc /proc
|
||||
/bin/busybox mount -t sysfs sysfs /sys
|
||||
|
||||
# set needed variables
|
||||
MODULE_DIR=/lib/modules
|
||||
@@ -88,9 +88,6 @@
|
||||
progress)
|
||||
PROGRESS=yes
|
||||
;;
|
||||
fastboot)
|
||||
FASTBOOT=yes
|
||||
;;
|
||||
nosplash)
|
||||
SPLASH=no
|
||||
;;
|
||||
@@ -106,10 +103,6 @@
|
||||
esac
|
||||
done
|
||||
|
||||
if test "$FASTBOOT" = "yes"; then
|
||||
IONICE="/bin/busybox ionice -c 1 -n 0"
|
||||
fi
|
||||
|
||||
if test "$DEBUG" = "yes"; then
|
||||
exec 3>&1
|
||||
else
|
||||
@@ -164,7 +157,7 @@
|
||||
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
|
||||
ERR_ENV=1
|
||||
|
||||
$IONICE /bin/busybox mount $MOUNT_OPTIONS $1 $2 >&$SILENT_OUT 2>&1
|
||||
/bin/busybox mount $MOUNT_OPTIONS $1 $2 >&$SILENT_OUT 2>&1
|
||||
[ "$?" -eq "0" ] && ERR_ENV=0 && break
|
||||
|
||||
/bin/busybox usleep 1000000
|
||||
@@ -253,7 +246,7 @@
|
||||
NBD_PORT="${1#*:}"
|
||||
NBD_DEV="/dev/nbd$NBD_DEVS"
|
||||
|
||||
$IONICE /bin/busybox nbd-client $NBD_SERVER $NBD_PORT $NBD_DEV >&$SILENT_OUT 2>&1 || \
|
||||
/bin/busybox nbd-client $NBD_SERVER $NBD_PORT $NBD_DEV >&$SILENT_OUT 2>&1 || \
|
||||
error "nbd-client" "Could not connect to NBD server $1"
|
||||
|
||||
mount_common "$NBD_DEV" "$2" "$3" "$4"
|
||||
@@ -307,13 +300,13 @@
|
||||
update() {
|
||||
if [ -f "$UPDATE_DIR/$2" -a -f "$3" ]; then
|
||||
echo "updating $1..."
|
||||
$IONICE /bin/busybox mount -o remount,rw /flash
|
||||
$IONICE /bin/busybox mv $UPDATE_DIR/$2 $3
|
||||
/bin/busybox mount -o remount,rw /flash
|
||||
/bin/busybox mv $UPDATE_DIR/$2 $3
|
||||
# loopback file needs writable /flash all the time
|
||||
if [ "${disk%%=*}" != "FILE" ]; then
|
||||
$IONICE /bin/busybox mount -o remount,ro /flash
|
||||
/bin/busybox mount -o remount,ro /flash
|
||||
fi
|
||||
$IONICE /bin/busybox sync
|
||||
/bin/busybox sync
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -327,8 +320,8 @@
|
||||
|
||||
if [ -f $SYSTEM_ROOT/usr/share/bootloader/update.sh ]; then
|
||||
echo "updating Bootloader..."
|
||||
$IONICE /bin/busybox sh $SYSTEM_ROOT/usr/share/bootloader/update.sh
|
||||
$IONICE /bin/busybox sync
|
||||
/bin/busybox sh $SYSTEM_ROOT/usr/share/bootloader/update.sh
|
||||
/bin/busybox sync
|
||||
fi
|
||||
|
||||
umount /sysroot
|
||||
@@ -408,7 +401,7 @@
|
||||
if [ "${disk%%=*}" = "FILE" ]; then
|
||||
target="${disk%%,*}"
|
||||
storage_loop_file="/flash/${target#*=}"
|
||||
$IONICE /bin/busybox mount -o remount,rw /flash
|
||||
/bin/busybox mount -o remount,rw /flash
|
||||
|
||||
if [ ! -f "$storage_loop_file" ]; then
|
||||
echo "Creating storage loopback file: $storage_loop_file..."
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="dvb-firmware"
|
||||
PKG_VERSION="0.0.31"
|
||||
PKG_VERSION="0.0.35"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="Free-to-use"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="wlan-firmware"
|
||||
PKG_VERSION="0.0.10"
|
||||
PKG_VERSION="0.0.12"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="Free-to-use"
|
||||
|
||||
@@ -29,9 +29,6 @@ else
|
||||
KERNEL_IMAGE="bzImage"
|
||||
fi
|
||||
|
||||
# dont build parallel
|
||||
MAKEFLAGS=-j1
|
||||
|
||||
cd $(kernel_path)
|
||||
rm -rf modules
|
||||
mkdir -p modules
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/ene_ir.c linux-3.6.11.patch/drivers/media/rc/ene_ir.c
|
||||
--- linux-3.6.11/drivers/media/rc/ene_ir.c 2012-12-17 18:27:45.000000000 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/ene_ir.c 2012-12-28 22:52:22.571974437 +0100
|
||||
@@ -1000,7 +1000,7 @@
|
||||
dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
|
||||
rdev = rc_allocate_device();
|
||||
if (!dev || !rdev)
|
||||
- goto error1;
|
||||
+ goto failure;
|
||||
|
||||
/* validate resources */
|
||||
error = -ENODEV;
|
||||
@@ -1011,10 +1011,10 @@
|
||||
|
||||
if (!pnp_port_valid(pnp_dev, 0) ||
|
||||
pnp_port_len(pnp_dev, 0) < ENE_IO_SIZE)
|
||||
- goto error;
|
||||
+ goto failure;
|
||||
|
||||
if (!pnp_irq_valid(pnp_dev, 0))
|
||||
- goto error;
|
||||
+ goto failure;
|
||||
|
||||
spin_lock_init(&dev->hw_lock);
|
||||
|
||||
@@ -1030,7 +1030,7 @@
|
||||
/* detect hardware version and features */
|
||||
error = ene_hw_detect(dev);
|
||||
if (error)
|
||||
- goto error;
|
||||
+ goto failure;
|
||||
|
||||
if (!dev->hw_learning_and_tx_capable && txsim) {
|
||||
dev->hw_learning_and_tx_capable = true;
|
||||
@@ -1075,30 +1075,27 @@
|
||||
/* claim the resources */
|
||||
error = -EBUSY;
|
||||
if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
|
||||
- dev->hw_io = -1;
|
||||
- dev->irq = -1;
|
||||
- goto error;
|
||||
+ goto failure;
|
||||
}
|
||||
|
||||
dev->irq = pnp_irq(pnp_dev, 0);
|
||||
if (request_irq(dev->irq, ene_isr,
|
||||
IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) {
|
||||
- dev->irq = -1;
|
||||
- goto error;
|
||||
+ goto failure2;
|
||||
}
|
||||
|
||||
error = rc_register_device(rdev);
|
||||
if (error < 0)
|
||||
- goto error;
|
||||
+ goto failure3;
|
||||
|
||||
pr_notice("driver has been successfully loaded\n");
|
||||
return 0;
|
||||
-error:
|
||||
- if (dev && dev->irq >= 0)
|
||||
- free_irq(dev->irq, dev);
|
||||
- if (dev && dev->hw_io >= 0)
|
||||
- release_region(dev->hw_io, ENE_IO_SIZE);
|
||||
-error1:
|
||||
+
|
||||
+failure3:
|
||||
+ free_irq(dev->irq, dev);
|
||||
+failure2:
|
||||
+ release_region(dev->hw_io, ENE_IO_SIZE);
|
||||
+failure:
|
||||
rc_free_device(rdev);
|
||||
kfree(dev);
|
||||
return error;
|
||||
@@ -70,141 +70,7 @@ diff -Naur linux-3.6.11/drivers/media/rc/ati_remote.c linux-3.6.11.patch/drivers
|
||||
return err;
|
||||
}
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/ene_ir.c linux-3.6.11.patch/drivers/media/rc/ene_ir.c
|
||||
--- linux-3.6.11/drivers/media/rc/ene_ir.c 2012-12-28 22:53:15.840572260 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/ene_ir.c 2012-12-28 22:53:29.114472156 +0100
|
||||
@@ -1000,7 +1000,7 @@
|
||||
dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
|
||||
rdev = rc_allocate_device();
|
||||
if (!dev || !rdev)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
/* validate resources */
|
||||
error = -ENODEV;
|
||||
@@ -1011,10 +1011,10 @@
|
||||
|
||||
if (!pnp_port_valid(pnp_dev, 0) ||
|
||||
pnp_port_len(pnp_dev, 0) < ENE_IO_SIZE)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
if (!pnp_irq_valid(pnp_dev, 0))
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
spin_lock_init(&dev->hw_lock);
|
||||
|
||||
@@ -1030,7 +1030,7 @@
|
||||
/* detect hardware version and features */
|
||||
error = ene_hw_detect(dev);
|
||||
if (error)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
if (!dev->hw_learning_and_tx_capable && txsim) {
|
||||
dev->hw_learning_and_tx_capable = true;
|
||||
@@ -1075,27 +1075,27 @@
|
||||
/* claim the resources */
|
||||
error = -EBUSY;
|
||||
if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
dev->irq = pnp_irq(pnp_dev, 0);
|
||||
if (request_irq(dev->irq, ene_isr,
|
||||
IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) {
|
||||
- goto failure2;
|
||||
+ goto exit_release_hw_io;
|
||||
}
|
||||
|
||||
error = rc_register_device(rdev);
|
||||
if (error < 0)
|
||||
- goto failure3;
|
||||
+ goto exit_free_irq;
|
||||
|
||||
pr_notice("driver has been successfully loaded\n");
|
||||
return 0;
|
||||
|
||||
-failure3:
|
||||
+exit_free_irq:
|
||||
free_irq(dev->irq, dev);
|
||||
-failure2:
|
||||
+exit_release_hw_io:
|
||||
release_region(dev->hw_io, ENE_IO_SIZE);
|
||||
-failure:
|
||||
+exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(dev);
|
||||
return error;
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/fintek-cir.c linux-3.6.11.patch/drivers/media/rc/fintek-cir.c
|
||||
--- linux-3.6.11/drivers/media/rc/fintek-cir.c 2012-12-28 22:53:15.839572268 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/fintek-cir.c 2012-12-28 22:53:29.115472147 +0100
|
||||
@@ -495,18 +495,18 @@
|
||||
/* input device for IR remote (and tx) */
|
||||
rdev = rc_allocate_device();
|
||||
if (!rdev)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
ret = -ENODEV;
|
||||
/* validate pnp resources */
|
||||
if (!pnp_port_valid(pdev, 0)) {
|
||||
dev_err(&pdev->dev, "IR PNP Port not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
if (!pnp_irq_valid(pdev, 0)) {
|
||||
dev_err(&pdev->dev, "IR PNP IRQ not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
fintek->cir_addr = pnp_port_start(pdev, 0);
|
||||
@@ -523,7 +523,7 @@
|
||||
|
||||
ret = fintek_hw_detect(fintek);
|
||||
if (ret)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
/* Initialize CIR & CIR Wake Logical Devices */
|
||||
fintek_config_mode_enable(fintek);
|
||||
@@ -556,15 +556,15 @@
|
||||
/* now claim resources */
|
||||
if (!request_region(fintek->cir_addr,
|
||||
fintek->cir_port_len, FINTEK_DRIVER_NAME))
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
if (request_irq(fintek->cir_irq, fintek_cir_isr, IRQF_SHARED,
|
||||
FINTEK_DRIVER_NAME, (void *)fintek))
|
||||
- goto failure2;
|
||||
+ goto exit_free_cir_addr;
|
||||
|
||||
ret = rc_register_device(rdev);
|
||||
if (ret)
|
||||
- goto failure3;
|
||||
+ goto exit_free_irq;
|
||||
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
fintek->rdev = rdev;
|
||||
@@ -574,11 +574,11 @@
|
||||
|
||||
return 0;
|
||||
|
||||
-failure3:
|
||||
+exit_free_irq:
|
||||
free_irq(fintek->cir_irq, fintek);
|
||||
-failure2:
|
||||
+exit_free_cir_addr:
|
||||
release_region(fintek->cir_addr, fintek->cir_port_len);
|
||||
-failure:
|
||||
+exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(fintek);
|
||||
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/gpio-ir-recv.c linux-3.6.11.patch/drivers/media/rc/gpio-ir-recv.c
|
||||
--- linux-3.6.11/drivers/media/rc/gpio-ir-recv.c 2012-12-28 22:53:15.839572268 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/gpio-ir-recv.c 2012-12-28 22:53:29.115472147 +0100
|
||||
@@ -263,154 +129,4 @@ diff -Naur linux-3.6.11/drivers/media/rc/gpio-ir-recv.c linux-3.6.11.patch/drive
|
||||
return rc;
|
||||
}
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/ite-cir.c linux-3.6.11.patch/drivers/media/rc/ite-cir.c
|
||||
--- linux-3.6.11/drivers/media/rc/ite-cir.c 2012-12-28 22:53:15.840572260 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/ite-cir.c 2012-12-28 22:58:06.139364653 +0100
|
||||
@@ -1472,7 +1472,7 @@
|
||||
/* input device for IR remote (and tx) */
|
||||
rdev = rc_allocate_device();
|
||||
if (!rdev)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
itdev->rdev = rdev;
|
||||
|
||||
ret = -ENODEV;
|
||||
@@ -1498,12 +1498,12 @@
|
||||
if (!pnp_port_valid(pdev, io_rsrc_no) ||
|
||||
pnp_port_len(pdev, io_rsrc_no) != dev_desc->io_region_size) {
|
||||
dev_err(&pdev->dev, "IR PNP Port not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
if (!pnp_irq_valid(pdev, 0)) {
|
||||
dev_err(&pdev->dev, "PNP IRQ not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
/* store resource values */
|
||||
@@ -1595,25 +1595,26 @@
|
||||
/* now claim resources */
|
||||
if (!request_region(itdev->cir_addr,
|
||||
dev_desc->io_region_size, ITE_DRIVER_NAME))
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
+
|
||||
|
||||
if (request_irq(itdev->cir_irq, ite_cir_isr, IRQF_SHARED,
|
||||
ITE_DRIVER_NAME, (void *)itdev))
|
||||
- goto failure2;
|
||||
+ goto exit_release_cir_addr;
|
||||
|
||||
ret = rc_register_device(rdev);
|
||||
if (ret)
|
||||
- goto failure3;
|
||||
+ goto exit_free_irq;
|
||||
|
||||
ite_pr(KERN_NOTICE, "driver has been successfully loaded\n");
|
||||
|
||||
return 0;
|
||||
|
||||
-failure3:
|
||||
+exit_free_irq:
|
||||
free_irq(itdev->cir_irq, itdev);
|
||||
-failure2:
|
||||
+exit_release_cir_addr:
|
||||
release_region(itdev->cir_addr, itdev->params.io_region_size);
|
||||
-failure:
|
||||
+exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(itdev);
|
||||
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/nuvoton-cir.c linux-3.6.11.patch/drivers/media/rc/nuvoton-cir.c
|
||||
--- linux-3.6.11/drivers/media/rc/nuvoton-cir.c 2012-12-28 22:53:15.839572268 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/nuvoton-cir.c 2012-12-28 22:53:29.118472125 +0100
|
||||
@@ -986,25 +986,25 @@
|
||||
/* input device for IR remote (and tx) */
|
||||
rdev = rc_allocate_device();
|
||||
if (!rdev)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
ret = -ENODEV;
|
||||
/* validate pnp resources */
|
||||
if (!pnp_port_valid(pdev, 0) ||
|
||||
pnp_port_len(pdev, 0) < CIR_IOREG_LENGTH) {
|
||||
dev_err(&pdev->dev, "IR PNP Port not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
if (!pnp_irq_valid(pdev, 0)) {
|
||||
dev_err(&pdev->dev, "PNP IRQ not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
if (!pnp_port_valid(pdev, 1) ||
|
||||
pnp_port_len(pdev, 1) < CIR_IOREG_LENGTH) {
|
||||
dev_err(&pdev->dev, "Wake PNP Port not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
nvt->cir_addr = pnp_port_start(pdev, 0);
|
||||
@@ -1027,7 +1027,7 @@
|
||||
|
||||
ret = nvt_hw_detect(nvt);
|
||||
if (ret)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
/* Initialize CIR & CIR Wake Logical Devices */
|
||||
nvt_efm_enable(nvt);
|
||||
@@ -1070,23 +1070,23 @@
|
||||
/* now claim resources */
|
||||
if (!request_region(nvt->cir_addr,
|
||||
CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
if (request_irq(nvt->cir_irq, nvt_cir_isr, IRQF_SHARED,
|
||||
NVT_DRIVER_NAME, (void *)nvt))
|
||||
- goto failure2;
|
||||
+ goto exit_release_cir_addr;
|
||||
|
||||
if (!request_region(nvt->cir_wake_addr,
|
||||
CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
|
||||
- goto failure3;
|
||||
+ goto exit_free_irq;
|
||||
|
||||
if (request_irq(nvt->cir_wake_irq, nvt_cir_wake_isr, IRQF_SHARED,
|
||||
NVT_DRIVER_NAME, (void *)nvt))
|
||||
- goto failure4;
|
||||
+ goto exit_release_cir_wake_addr;
|
||||
|
||||
ret = rc_register_device(rdev);
|
||||
if (ret)
|
||||
- goto failure5;
|
||||
+ goto exit_free_wake_irq;
|
||||
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
nvt->rdev = rdev;
|
||||
@@ -1098,15 +1098,15 @@
|
||||
|
||||
return 0;
|
||||
|
||||
-failure5:
|
||||
+exit_free_wake_irq:
|
||||
free_irq(nvt->cir_wake_irq, nvt);
|
||||
-failure4:
|
||||
+exit_release_cir_wake_addr:
|
||||
release_region(nvt->cir_wake_addr, CIR_IOREG_LENGTH);
|
||||
-failure3:
|
||||
+exit_free_irq:
|
||||
free_irq(nvt->cir_irq, nvt);
|
||||
-failure2:
|
||||
+exit_release_cir_addr:
|
||||
release_region(nvt->cir_addr, CIR_IOREG_LENGTH);
|
||||
-failure:
|
||||
+exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(nvt);
|
||||
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/fintek-cir.c linux-3.6.11.patch/drivers/media/rc/fintek-cir.c
|
||||
--- linux-3.6.11/drivers/media/rc/fintek-cir.c 2012-12-28 22:59:21.808868854 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/fintek-cir.c 2012-12-28 22:59:37.532767678 +0100
|
||||
@@ -552,6 +552,8 @@
|
||||
/* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */
|
||||
rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD);
|
||||
|
||||
+ fintek->rdev = rdev;
|
||||
+
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
if (!request_region(fintek->cir_addr,
|
||||
@@ -567,7 +569,7 @@
|
||||
goto exit_free_irq;
|
||||
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
- fintek->rdev = rdev;
|
||||
+
|
||||
fit_pr(KERN_NOTICE, "driver has been successfully loaded\n");
|
||||
if (debug)
|
||||
cir_dump_regs(fintek);
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/ite-cir.c linux-3.6.11.patch/drivers/media/rc/ite-cir.c
|
||||
--- linux-3.6.11/drivers/media/rc/ite-cir.c 2012-12-28 22:59:21.808868854 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/ite-cir.c 2012-12-28 22:59:37.533767672 +0100
|
||||
@@ -1591,6 +1591,8 @@
|
||||
rdev->driver_name = ITE_DRIVER_NAME;
|
||||
rdev->map_name = RC_MAP_RC6_MCE;
|
||||
|
||||
+ itdev->rdev = rdev;
|
||||
+
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
if (!request_region(itdev->cir_addr,
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/nuvoton-cir.c linux-3.6.11.patch/drivers/media/rc/nuvoton-cir.c
|
||||
--- linux-3.6.11/drivers/media/rc/nuvoton-cir.c 2012-12-28 22:59:21.807868860 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/nuvoton-cir.c 2012-12-28 22:59:37.533767672 +0100
|
||||
@@ -1065,6 +1065,7 @@
|
||||
/* tx bits */
|
||||
rdev->tx_resolution = XYZ;
|
||||
#endif
|
||||
+ nvt->rdev = rdev;
|
||||
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
@@ -1089,7 +1090,7 @@
|
||||
goto exit_free_wake_irq;
|
||||
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
- nvt->rdev = rdev;
|
||||
+
|
||||
nvt_pr(KERN_NOTICE, "driver has been successfully loaded\n");
|
||||
if (debug) {
|
||||
cir_dump_regs(nvt);
|
||||
@@ -1,174 +0,0 @@
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/ene_ir.c linux-3.6.11.patch/drivers/media/rc/ene_ir.c
|
||||
--- linux-3.6.11/drivers/media/rc/ene_ir.c 2012-12-28 23:03:21.859277264 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/ene_ir.c 2012-12-28 23:03:33.651196525 +0100
|
||||
@@ -1072,10 +1072,14 @@
|
||||
device_set_wakeup_capable(&pnp_dev->dev, true);
|
||||
device_set_wakeup_enable(&pnp_dev->dev, true);
|
||||
|
||||
+ error = rc_register_device(rdev);
|
||||
+ if (error < 0)
|
||||
+ goto exit_free_dev_rdev;
|
||||
+
|
||||
/* claim the resources */
|
||||
error = -EBUSY;
|
||||
if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
|
||||
- goto exit_free_dev_rdev;
|
||||
+ goto exit_unregister_device;
|
||||
}
|
||||
|
||||
dev->irq = pnp_irq(pnp_dev, 0);
|
||||
@@ -1084,17 +1088,13 @@
|
||||
goto exit_release_hw_io;
|
||||
}
|
||||
|
||||
- error = rc_register_device(rdev);
|
||||
- if (error < 0)
|
||||
- goto exit_free_irq;
|
||||
-
|
||||
pr_notice("driver has been successfully loaded\n");
|
||||
return 0;
|
||||
|
||||
-exit_free_irq:
|
||||
- free_irq(dev->irq, dev);
|
||||
exit_release_hw_io:
|
||||
release_region(dev->hw_io, ENE_IO_SIZE);
|
||||
+exit_unregister_device:
|
||||
+ rc_unregister_device(rdev);
|
||||
exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(dev);
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/ite-cir.c linux-3.6.11.patch/drivers/media/rc/ite-cir.c
|
||||
--- linux-3.6.11/drivers/media/rc/ite-cir.c 2012-12-28 23:03:21.858277269 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/ite-cir.c 2012-12-28 23:06:45.772856073 +0100
|
||||
@@ -1593,29 +1593,29 @@
|
||||
|
||||
itdev->rdev = rdev;
|
||||
|
||||
+ ret = rc_register_device(rdev);
|
||||
+ if (ret)
|
||||
+ goto exit_free_dev_rdev;
|
||||
+
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
if (!request_region(itdev->cir_addr,
|
||||
dev_desc->io_region_size, ITE_DRIVER_NAME))
|
||||
- goto exit_free_dev_rdev;
|
||||
+ goto exit_unregister_device;
|
||||
|
||||
|
||||
if (request_irq(itdev->cir_irq, ite_cir_isr, IRQF_SHARED,
|
||||
ITE_DRIVER_NAME, (void *)itdev))
|
||||
goto exit_release_cir_addr;
|
||||
|
||||
- ret = rc_register_device(rdev);
|
||||
- if (ret)
|
||||
- goto exit_free_irq;
|
||||
-
|
||||
ite_pr(KERN_NOTICE, "driver has been successfully loaded\n");
|
||||
|
||||
return 0;
|
||||
|
||||
-exit_free_irq:
|
||||
- free_irq(itdev->cir_irq, itdev);
|
||||
exit_release_cir_addr:
|
||||
release_region(itdev->cir_addr, itdev->params.io_region_size);
|
||||
+exit_unregister_device:
|
||||
+ rc_unregister_device(rdev);
|
||||
exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(itdev);
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/nuvoton-cir.c linux-3.6.11.patch/drivers/media/rc/nuvoton-cir.c
|
||||
--- linux-3.6.11/drivers/media/rc/nuvoton-cir.c 2012-12-28 23:03:21.858277269 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/nuvoton-cir.c 2012-12-28 23:03:33.653196511 +0100
|
||||
@@ -1067,11 +1067,15 @@
|
||||
#endif
|
||||
nvt->rdev = rdev;
|
||||
|
||||
+ ret = rc_register_device(rdev);
|
||||
+ if (ret)
|
||||
+ goto exit_free_dev_rdev;
|
||||
+
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
if (!request_region(nvt->cir_addr,
|
||||
CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
|
||||
- goto exit_free_dev_rdev;
|
||||
+ goto exit_unregister_device;
|
||||
|
||||
if (request_irq(nvt->cir_irq, nvt_cir_isr, IRQF_SHARED,
|
||||
NVT_DRIVER_NAME, (void *)nvt))
|
||||
@@ -1085,10 +1089,6 @@
|
||||
NVT_DRIVER_NAME, (void *)nvt))
|
||||
goto exit_release_cir_wake_addr;
|
||||
|
||||
- ret = rc_register_device(rdev);
|
||||
- if (ret)
|
||||
- goto exit_free_wake_irq;
|
||||
-
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
|
||||
nvt_pr(KERN_NOTICE, "driver has been successfully loaded\n");
|
||||
@@ -1099,14 +1099,14 @@
|
||||
|
||||
return 0;
|
||||
|
||||
-exit_free_wake_irq:
|
||||
- free_irq(nvt->cir_wake_irq, nvt);
|
||||
exit_release_cir_wake_addr:
|
||||
release_region(nvt->cir_wake_addr, CIR_IOREG_LENGTH);
|
||||
exit_free_irq:
|
||||
free_irq(nvt->cir_irq, nvt);
|
||||
exit_release_cir_addr:
|
||||
release_region(nvt->cir_addr, CIR_IOREG_LENGTH);
|
||||
+exit_unregister_device:
|
||||
+ rc_unregister_device(rdev);
|
||||
exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(nvt);
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/winbond-cir.c linux-3.6.11.patch/drivers/media/rc/winbond-cir.c
|
||||
--- linux-3.6.11/drivers/media/rc/winbond-cir.c 2012-12-28 23:03:21.858277269 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/winbond-cir.c 2012-12-28 23:03:33.653196511 +0100
|
||||
@@ -1035,11 +1035,15 @@
|
||||
data->dev->timeout = MS_TO_NS(100);
|
||||
data->dev->allowed_protos = RC_TYPE_ALL;
|
||||
|
||||
+ err = rc_register_device(data->dev);
|
||||
+ if (err)
|
||||
+ goto exit_free_rc;
|
||||
+
|
||||
if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) {
|
||||
dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
|
||||
data->wbase, data->wbase + WAKEUP_IOMEM_LEN - 1);
|
||||
err = -EBUSY;
|
||||
- goto exit_free_rc;
|
||||
+ goto exit_unregister_device;
|
||||
}
|
||||
|
||||
if (!request_region(data->ebase, EHFUNC_IOMEM_LEN, DRVNAME)) {
|
||||
@@ -1064,24 +1068,20 @@
|
||||
goto exit_release_sbase;
|
||||
}
|
||||
|
||||
- err = rc_register_device(data->dev);
|
||||
- if (err)
|
||||
- goto exit_free_irq;
|
||||
-
|
||||
device_init_wakeup(&device->dev, 1);
|
||||
|
||||
wbcir_init_hw(data);
|
||||
|
||||
return 0;
|
||||
|
||||
-exit_free_irq:
|
||||
- free_irq(data->irq, device);
|
||||
exit_release_sbase:
|
||||
release_region(data->sbase, SP_IOMEM_LEN);
|
||||
exit_release_ebase:
|
||||
release_region(data->ebase, EHFUNC_IOMEM_LEN);
|
||||
exit_release_wbase:
|
||||
release_region(data->wbase, WAKEUP_IOMEM_LEN);
|
||||
+exit_unregister_device:
|
||||
+ rc_unregister_device(data->dev);
|
||||
exit_free_rc:
|
||||
rc_free_device(data->dev);
|
||||
exit_unregister_led:
|
||||
13
packages/linux/patches/3.6.11/linux-214-Add-Terratec-H5-Rev3.patch
vendored
Normal file
13
packages/linux/patches/3.6.11/linux-214-Add-Terratec-H5-Rev3.patch
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
|
||||
index 9fd8cc7..1b359ba 100644
|
||||
--- a/drivers/media/video/em28xx/em28xx-cards.c
|
||||
+++ b/drivers/media/video/em28xx/em28xx-cards.c
|
||||
@@ -2066,6 +2066,8 @@ struct usb_device_id em28xx_id_table[] = {
|
||||
.driver_info = EM2884_BOARD_TERRATEC_H5 },
|
||||
{ USB_DEVICE(0x0ccd, 0x10ad), /* H5 Rev. 2 */
|
||||
.driver_info = EM2884_BOARD_TERRATEC_H5 },
|
||||
+ { USB_DEVICE(0x0ccd, 0x10b6), /* H5 Rev. 3 */
|
||||
+ .driver_info = EM2884_BOARD_TERRATEC_H5 },
|
||||
{ USB_DEVICE(0x0ccd, 0x0084),
|
||||
.driver_info = EM2860_BOARD_TERRATEC_AV350 },
|
||||
{ USB_DEVICE(0x0ccd, 0x0096),
|
||||
12142
packages/linux/patches/3.6.11/linux-221-ngene-octopus.patch
vendored
12142
packages/linux/patches/3.6.11/linux-221-ngene-octopus.patch
vendored
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,45 +0,0 @@
|
||||
The array channel_allocations[] is an ordered list, add function to get
|
||||
correct order by ca_index.
|
||||
|
||||
Signed-off-by: Wang Xingchao <xingchao.wang at intel.com>
|
||||
---
|
||||
sound/pci/hda/patch_hdmi.c | 15 ++++++++++++++-
|
||||
1 file changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
|
||||
index d9439c5..6ac21d4 100644
|
||||
--- a/sound/pci/hda/patch_hdmi.c
|
||||
+++ b/sound/pci/hda/patch_hdmi.c
|
||||
@@ -469,6 +469,17 @@ static void init_channel_allocations(void)
|
||||
}
|
||||
}
|
||||
|
||||
+static int get_channel_allocation_order(int ca)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(channel_allocations); i++) {
|
||||
+ if (channel_allocations[i].ca_index == ca)
|
||||
+ break;
|
||||
+ }
|
||||
+ return i;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* The transformation takes two steps:
|
||||
*
|
||||
@@ -541,9 +552,11 @@ static void hdmi_setup_channel_mapping(struct hda_codec *codec,
|
||||
{
|
||||
int i;
|
||||
int err;
|
||||
+ int order;
|
||||
|
||||
+ order = get_channel_allocation_order(ca);
|
||||
if (hdmi_channel_mapping[ca][1] == 0) {
|
||||
- for (i = 0; i < channel_allocations[ca].channels; i++)
|
||||
+ for (i = 0; i < channel_allocations[order].channels; i++)
|
||||
hdmi_channel_mapping[ca][i] = i | (i << 4);
|
||||
for (; i < 8; i++)
|
||||
hdmi_channel_mapping[ca][i] = 0xf | (i << 4);
|
||||
--
|
||||
1.7.9.5
|
||||
@@ -1,130 +0,0 @@
|
||||
HDMI channel remapping apparently effects HBR packets on Intel's chips.
|
||||
For compressed non-PCM audio, use "straight-through" channel mapping.
|
||||
For uncompressed multi-channel pcm audio, use normal channel mapping.
|
||||
|
||||
Signed-off-by: Wang Xingchao <xingchao.wang at intel.com>
|
||||
---
|
||||
sound/pci/hda/patch_hdmi.c | 36 ++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 32 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
|
||||
index 6ac21d4..a87f8b2 100644
|
||||
--- a/sound/pci/hda/patch_hdmi.c
|
||||
+++ b/sound/pci/hda/patch_hdmi.c
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <sound/core.h>
|
||||
#include <sound/jack.h>
|
||||
+#include <sound/asoundef.h>
|
||||
#include "hda_codec.h"
|
||||
#include "hda_local.h"
|
||||
#include "hda_jack.h"
|
||||
@@ -60,6 +61,7 @@ struct hdmi_spec_per_cvt {
|
||||
u32 rates;
|
||||
u64 formats;
|
||||
unsigned int maxbps;
|
||||
+ bool non_pcm;
|
||||
};
|
||||
|
||||
struct hdmi_spec_per_pin {
|
||||
@@ -548,13 +550,17 @@ static void hdmi_debug_channel_mapping(struct hda_codec *codec,
|
||||
|
||||
static void hdmi_setup_channel_mapping(struct hda_codec *codec,
|
||||
hda_nid_t pin_nid,
|
||||
+ hda_nid_t cvt_nid,
|
||||
+ bool non_pcm,
|
||||
int ca)
|
||||
{
|
||||
int i;
|
||||
int err;
|
||||
int order;
|
||||
+ int non_pcm_mapping[8];
|
||||
|
||||
order = get_channel_allocation_order(ca);
|
||||
+
|
||||
if (hdmi_channel_mapping[ca][1] == 0) {
|
||||
for (i = 0; i < channel_allocations[order].channels; i++)
|
||||
hdmi_channel_mapping[ca][i] = i | (i << 4);
|
||||
@@ -562,10 +568,17 @@ static void hdmi_setup_channel_mapping(struct hda_codec *codec,
|
||||
hdmi_channel_mapping[ca][i] = 0xf | (i << 4);
|
||||
}
|
||||
|
||||
+ if (non_pcm) {
|
||||
+ for (i = 0; i < channel_allocations[order].channels; i++)
|
||||
+ non_pcm_mapping[i] = i | (i << 4);
|
||||
+ for (; i < 8; i++)
|
||||
+ non_pcm_mapping[i] = 0xf | (i << 4);
|
||||
+ }
|
||||
+
|
||||
for (i = 0; i < 8; i++) {
|
||||
err = snd_hda_codec_write(codec, pin_nid, 0,
|
||||
AC_VERB_SET_HDMI_CHAN_SLOT,
|
||||
- hdmi_channel_mapping[ca][i]);
|
||||
+ non_pcm ? non_pcm_mapping[i] : hdmi_channel_mapping[ca][i]);
|
||||
if (err) {
|
||||
snd_printdd(KERN_NOTICE
|
||||
"HDMI: channel mapping failed\n");
|
||||
@@ -699,15 +712,27 @@ static bool hdmi_infoframe_uptodate(struct hda_codec *codec, hda_nid_t pin_nid,
|
||||
}
|
||||
|
||||
static void hdmi_setup_audio_infoframe(struct hda_codec *codec, int pin_idx,
|
||||
- struct snd_pcm_substream *substream)
|
||||
+ hda_nid_t cvt_nid, struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct hdmi_spec *spec = codec->spec;
|
||||
struct hdmi_spec_per_pin *per_pin = &spec->pins[pin_idx];
|
||||
+ struct hdmi_spec_per_cvt *per_cvt;
|
||||
+ struct hda_spdif_out *spdif;
|
||||
hda_nid_t pin_nid = per_pin->pin_nid;
|
||||
int channels = substream->runtime->channels;
|
||||
struct hdmi_eld *eld;
|
||||
int ca;
|
||||
+ int cvt_idx;
|
||||
union audio_infoframe ai;
|
||||
+ bool non_pcm = false;
|
||||
+
|
||||
+ cvt_idx = cvt_nid_to_cvt_index(spec, cvt_nid);
|
||||
+ per_cvt = &spec->cvts[cvt_idx];
|
||||
+
|
||||
+ mutex_lock(&codec->spdif_mutex);
|
||||
+ spdif = snd_hda_spdif_out_of_nid(codec, cvt_nid);
|
||||
+ non_pcm = !!(spdif->status & IEC958_AES0_NONAUDIO);
|
||||
+ mutex_unlock(&codec->spdif_mutex);
|
||||
|
||||
eld = &spec->pins[pin_idx].sink_eld;
|
||||
if (!eld->monitor_present)
|
||||
@@ -750,12 +775,14 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, int pin_idx,
|
||||
"pin=%d channels=%d\n",
|
||||
pin_nid,
|
||||
channels);
|
||||
- hdmi_setup_channel_mapping(codec, pin_nid, ca);
|
||||
+ hdmi_setup_channel_mapping(codec, pin_nid, cvt_nid, non_pcm, ca);
|
||||
hdmi_stop_infoframe_trans(codec, pin_nid);
|
||||
hdmi_fill_audio_infoframe(codec, pin_nid,
|
||||
ai.bytes, sizeof(ai));
|
||||
hdmi_start_infoframe_trans(codec, pin_nid);
|
||||
}
|
||||
+
|
||||
+ per_cvt->non_pcm = non_pcm;
|
||||
}
|
||||
|
||||
|
||||
@@ -1077,6 +1104,7 @@ static int hdmi_add_cvt(struct hda_codec *codec, hda_nid_t cvt_nid)
|
||||
|
||||
per_cvt->cvt_nid = cvt_nid;
|
||||
per_cvt->channels_min = 2;
|
||||
+ per_cvt->non_pcm = false;
|
||||
if (chans <= 16)
|
||||
per_cvt->channels_max = chans;
|
||||
|
||||
@@ -1164,7 +1192,7 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
|
||||
|
||||
hdmi_set_channel_count(codec, cvt_nid, substream->runtime->channels);
|
||||
|
||||
- hdmi_setup_audio_infoframe(codec, pin_idx, substream);
|
||||
+ hdmi_setup_audio_infoframe(codec, pin_idx, cvt_nid, substream);
|
||||
|
||||
pinctl = snd_hda_codec_read(codec, pin_nid, 0,
|
||||
AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
|
||||
--
|
||||
1.7.9.5
|
||||
@@ -1,27 +0,0 @@
|
||||
For HBR stream test, use straight channel mapping way.
|
||||
when switched back to "speaker-test -c8", even the audio
|
||||
infoframe is up-to-date, there should be correct channel mapping setup.
|
||||
|
||||
Signed-off-by: Wang Xingchao <xingchao.wang at intel.com>
|
||||
---
|
||||
sound/pci/hda/patch_hdmi.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
|
||||
index a87f8b2..bcb0939 100644
|
||||
--- a/sound/pci/hda/patch_hdmi.c
|
||||
+++ b/sound/pci/hda/patch_hdmi.c
|
||||
@@ -780,6 +780,11 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, int pin_idx,
|
||||
hdmi_fill_audio_infoframe(codec, pin_nid,
|
||||
ai.bytes, sizeof(ai));
|
||||
hdmi_start_infoframe_trans(codec, pin_nid);
|
||||
+ } else {
|
||||
+ /* For non-pcm audio switch, setup new channel mapping
|
||||
+ * accordingly */
|
||||
+ if (per_cvt->non_pcm != non_pcm)
|
||||
+ hdmi_setup_channel_mapping(codec, pin_nid, cvt_nid, non_pcm, ca);
|
||||
}
|
||||
|
||||
per_cvt->non_pcm = non_pcm;
|
||||
--
|
||||
1.7.9.5
|
||||
@@ -1,29 +0,0 @@
|
||||
From: Francois Romieu <romieu@fr.zoreil.com>
|
||||
Date: Fri, 31 Aug 2012 21:06:17 +0000 (+0200)
|
||||
Subject: r8169: add D-Link DGE-560T identifiers.
|
||||
X-Git-Tag: v3.7-rc1~145^2~236
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fstable%2Flinux-stable.git;a=commitdiff_plain;h=2a35cfa591ac63f17815c2d9432b799e37527980;hp=da210f559019ba1cd4ebee2a28ad158bfb95bab2
|
||||
|
||||
r8169: add D-Link DGE-560T identifiers.
|
||||
|
||||
This one includes a 8168. Not to be confused with the sky2 driven
|
||||
one whose PCI vendor and device ID are the same.
|
||||
|
||||
Reported-by: Neyuki Inaya <in@joblog.ru>
|
||||
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
|
||||
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
|
||||
index b47d5b3..0c96604 100644
|
||||
--- a/drivers/net/ethernet/realtek/r8169.c
|
||||
+++ b/drivers/net/ethernet/realtek/r8169.c
|
||||
@@ -287,6 +287,8 @@ static DEFINE_PCI_DEVICE_TABLE(rtl8169_pci_tbl) = {
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8167), 0, 0, RTL_CFG_0 },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8168), 0, 0, RTL_CFG_1 },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8169), 0, 0, RTL_CFG_0 },
|
||||
+ { PCI_VENDOR_ID_DLINK, 0x4300,
|
||||
+ PCI_VENDOR_ID_DLINK, 0x4b10, 0, 0, RTL_CFG_1 },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4300), 0, 0, RTL_CFG_0 },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4302), 0, 0, RTL_CFG_0 },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AT, 0xc107), 0, 0, RTL_CFG_0 },
|
||||
11
packages/linux/patches/3.7.10/linux-214-Add-Terratec-H5-Rev3.patch
vendored
Normal file
11
packages/linux/patches/3.7.10/linux-214-Add-Terratec-H5-Rev3.patch
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
--- a/drivers/media/usb/em28xx/em28xx-cards.c 2013-04-25 19:43:52.636526510 +0200
|
||||
+++ b/drivers/media/usb/em28xx/em28xx-cards.c 2013-04-25 19:44:08.784390961 +0200
|
||||
@@ -2073,6 +2073,8 @@
|
||||
.driver_info = EM2884_BOARD_TERRATEC_H5 },
|
||||
{ USB_DEVICE(0x0ccd, 0x10ad), /* H5 Rev. 2 */
|
||||
.driver_info = EM2884_BOARD_TERRATEC_H5 },
|
||||
+ { USB_DEVICE(0x0ccd, 0x10b6), /* H5 Rev. 3 */
|
||||
+ .driver_info = EM2884_BOARD_TERRATEC_H5 },
|
||||
{ USB_DEVICE(0x0ccd, 0x0084),
|
||||
.driver_info = EM2860_BOARD_TERRATEC_AV350 },
|
||||
{ USB_DEVICE(0x0ccd, 0x0096),
|
||||
@@ -979,9 +979,9 @@ diff -Naur linux-3.7.2/drivers/net/ethernet/jme.c linux-3.7.2.patch/drivers/net/
|
||||
.ndo_start_xmit = jme_start_xmit,
|
||||
.ndo_set_mac_address = jme_set_macaddr,
|
||||
- .ndo_set_rx_mode = jme_set_multi,
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0)
|
||||
+ .ndo_set_multicast_list = jme_set_multi,
|
||||
+#endif
|
||||
+ .ndo_set_rx_mode = jme_set_multi,
|
||||
+
|
||||
+
|
||||
.ndo_change_mtu = jme_change_mtu,
|
||||
.ndo_tx_timeout = jme_tx_timeout,
|
||||
- .ndo_fix_features = jme_fix_features,
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
From 083e2330c09b7a5f905020c10e9f52b5c1e17979 Mon Sep 17 00:00:00 2001
|
||||
From: Mengdong Lin <mengdong.lin@intel.com>
|
||||
Date: Thu, 28 Mar 2013 09:20:22 +0000
|
||||
Subject: ALSA: hda - bug fix on return value when getting HDMI ELD info
|
||||
|
||||
commit 2ef5692efad330b67a234e2c49edad38538751e7 upstream.
|
||||
|
||||
In function snd_hdmi_get_eld(), the variable 'ret' should be initialized to 0.
|
||||
Otherwise it will be returned uninitialized as non-zero after ELD info is got
|
||||
successfully. Thus hdmi_present_sense() will always assume ELD info is invalid
|
||||
by mistake, and /proc file system cannot show the proper ELD info.
|
||||
|
||||
Signed-off-by: Mengdong Lin <mengdong.lin@intel.com>
|
||||
Acked-by: David Henningsson <david.henningsson@canonical.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
diff --git a/sound/pci/hda/hda_eld.c b/sound/pci/hda/hda_eld.c
|
||||
index 4c054f4..86f6468 100644
|
||||
--- a/sound/pci/hda/hda_eld.c
|
||||
+++ b/sound/pci/hda/hda_eld.c
|
||||
@@ -322,7 +322,7 @@ int snd_hdmi_get_eld(struct hdmi_eld *eld,
|
||||
struct hda_codec *codec, hda_nid_t nid)
|
||||
{
|
||||
int i;
|
||||
- int ret;
|
||||
+ int ret = 0;
|
||||
int size;
|
||||
unsigned char *buf;
|
||||
|
||||
--
|
||||
cgit v0.9.1
|
||||
40
packages/linux/patches/3.7.10/linux-990.12-hda-Enabling_Realtek_ALC671_codec.patch
vendored
Normal file
40
packages/linux/patches/3.7.10/linux-990.12-hda-Enabling_Realtek_ALC671_codec.patch
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
From 0187ab6184b36cc1f01424ef534648c198578dbe Mon Sep 17 00:00:00 2001
|
||||
From: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
|
||||
Date: Thu, 04 Apr 2013 06:40:38 +0000
|
||||
Subject: ALSA: hda - Enabling Realtek ALC 671 codec
|
||||
|
||||
commit 1d87caa69c04008e09f5ff47b5e6acb6116febc7 upstream.
|
||||
|
||||
* Added the device ID to the modalias list and assinged ALC662 patches
|
||||
for it
|
||||
* Added 4 port support for the device ID 0671 in alc662_parse_auto_config
|
||||
|
||||
Signed-off-by: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index 47fb18d..ee975a2 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -6720,7 +6720,8 @@ static int alc662_parse_auto_config(struct hda_codec *codec)
|
||||
const hda_nid_t *ssids;
|
||||
|
||||
if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 ||
|
||||
- codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670)
|
||||
+ codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670 ||
|
||||
+ codec->vendor_id == 0x10ec0671)
|
||||
ssids = alc663_ssids;
|
||||
else
|
||||
ssids = alc662_ssids;
|
||||
@@ -7173,6 +7174,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
|
||||
{ .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 },
|
||||
{ .id = 0x10ec0668, .name = "ALC668", .patch = patch_alc662 },
|
||||
{ .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 },
|
||||
+ { .id = 0x10ec0671, .name = "ALC671", .patch = patch_alc662 },
|
||||
{ .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 },
|
||||
{ .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 },
|
||||
{ .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 },
|
||||
--
|
||||
cgit v0.9.1
|
||||
30
packages/linux/patches/3.7.10/linux-990.13-hda-fix_typo_in_proc_output.patch
vendored
Normal file
30
packages/linux/patches/3.7.10/linux-990.13-hda-fix_typo_in_proc_output.patch
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
From 05c05ef21a1cf71d16189cd4d8060b47f504db2b Mon Sep 17 00:00:00 2001
|
||||
From: David Henningsson <david.henningsson@canonical.com>
|
||||
Date: Thu, 04 Apr 2013 09:47:13 +0000
|
||||
Subject: ALSA: hda - fix typo in proc output
|
||||
|
||||
commit aeb3a97222832e5457c4b72d72235098ce4bfe8d upstream.
|
||||
|
||||
Rename "Digitial In" to "Digital In". This function is only used for
|
||||
proc output, so should not cause any problems to change.
|
||||
|
||||
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
|
||||
index e46b6a3..622f726 100644
|
||||
--- a/sound/pci/hda/hda_codec.c
|
||||
+++ b/sound/pci/hda/hda_codec.c
|
||||
@@ -173,7 +173,7 @@ const char *snd_hda_get_jack_type(u32 cfg)
|
||||
"Line Out", "Speaker", "HP Out", "CD",
|
||||
"SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
|
||||
"Line In", "Aux", "Mic", "Telephony",
|
||||
- "SPDIF In", "Digitial In", "Reserved", "Other"
|
||||
+ "SPDIF In", "Digital In", "Reserved", "Other"
|
||||
};
|
||||
|
||||
return jack_types[(cfg & AC_DEFCFG_DEVICE)
|
||||
--
|
||||
cgit v0.9.1
|
||||
69
packages/linux/patches/3.7.10/linux-990.21-r8169-fix_auto_speed_down_issue.patch
vendored
Normal file
69
packages/linux/patches/3.7.10/linux-990.21-r8169-fix_auto_speed_down_issue.patch
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
From 77e2cc382c06a8be48f80e769991e9a4b36a03ce Mon Sep 17 00:00:00 2001
|
||||
From: hayeswang <hayeswang@realtek.com>
|
||||
Date: Sun, 31 Mar 2013 17:02:04 +0000
|
||||
Subject: r8169: fix auto speed down issue
|
||||
|
||||
commit e2409d83434d77874b461b78af6a19cd6e6a1280 upstream.
|
||||
|
||||
It would cause no link after suspending or shutdowning when the
|
||||
nic changes the speed to 10M and connects to a link partner which
|
||||
forces the speed to 100M.
|
||||
|
||||
Check the link partner ability to determine which speed to set.
|
||||
|
||||
Signed-off-by: Hayes Wang <hayeswang@realtek.com>
|
||||
Acked-by: Francois Romieu <romieu@fr.zoreil.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
|
||||
---
|
||||
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
|
||||
index 998974f..2d849da 100644
|
||||
--- a/drivers/net/ethernet/realtek/r8169.c
|
||||
+++ b/drivers/net/ethernet/realtek/r8169.c
|
||||
@@ -3819,6 +3819,30 @@ static void rtl_init_mdio_ops(struct rtl8169_private *tp)
|
||||
}
|
||||
}
|
||||
|
||||
+static void rtl_speed_down(struct rtl8169_private *tp)
|
||||
+{
|
||||
+ u32 adv;
|
||||
+ int lpa;
|
||||
+
|
||||
+ rtl_writephy(tp, 0x1f, 0x0000);
|
||||
+ lpa = rtl_readphy(tp, MII_LPA);
|
||||
+
|
||||
+ if (lpa & (LPA_10HALF | LPA_10FULL))
|
||||
+ adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full;
|
||||
+ else if (lpa & (LPA_100HALF | LPA_100FULL))
|
||||
+ adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
|
||||
+ ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full;
|
||||
+ else
|
||||
+ adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
|
||||
+ ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
|
||||
+ (tp->mii.supports_gmii ?
|
||||
+ ADVERTISED_1000baseT_Half |
|
||||
+ ADVERTISED_1000baseT_Full : 0);
|
||||
+
|
||||
+ rtl8169_set_speed(tp->dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL,
|
||||
+ adv);
|
||||
+}
|
||||
+
|
||||
static void rtl_wol_suspend_quirk(struct rtl8169_private *tp)
|
||||
{
|
||||
void __iomem *ioaddr = tp->mmio_addr;
|
||||
@@ -3849,9 +3873,7 @@ static bool rtl_wol_pll_power_down(struct rtl8169_private *tp)
|
||||
if (!(__rtl8169_get_wol(tp) & WAKE_ANY))
|
||||
return false;
|
||||
|
||||
- rtl_writephy(tp, 0x1f, 0x0000);
|
||||
- rtl_writephy(tp, MII_BMCR, 0x0000);
|
||||
-
|
||||
+ rtl_speed_down(tp);
|
||||
rtl_wol_suspend_quirk(tp);
|
||||
|
||||
return true;
|
||||
--
|
||||
cgit v0.9.1
|
||||
@@ -0,0 +1,42 @@
|
||||
From 19a993879bb86c801995f55702ab6beaa5485f5e Mon Sep 17 00:00:00 2001
|
||||
From: Tim Gardner <tim.gardner@canonical.com>
|
||||
Date: Mon, 18 Feb 2013 19:56:28 +0000
|
||||
Subject: rt2x00: rt2x00pci_regbusy_read() - only print register access failure once
|
||||
|
||||
commit 83589b30f1e1dc9898986293c9336b8ce1705dec upstream.
|
||||
|
||||
BugLink: http://bugs.launchpad.net/bugs/1128840
|
||||
|
||||
It appears that when this register read fails it never recovers, so
|
||||
I think there is no need to repeat the same error message ad infinitum.
|
||||
|
||||
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
|
||||
Cc: Ivo van Doorn <IvDoorn@gmail.com>
|
||||
Cc: Gertjan van Wingerde <gwingerde@gmail.com>
|
||||
Cc: Helmut Schaa <helmut.schaa@googlemail.com>
|
||||
Cc: "John W. Linville" <linville@tuxdriver.com>
|
||||
Cc: linux-wireless@vger.kernel.org
|
||||
Cc: users@rt2x00.serialmonkey.com
|
||||
Cc: netdev@vger.kernel.org
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c
|
||||
index a0c8cae..b1c673e 100644
|
||||
--- a/drivers/net/wireless/rt2x00/rt2x00pci.c
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
|
||||
@@ -52,8 +52,8 @@ int rt2x00pci_regbusy_read(struct rt2x00_dev *rt2x00dev,
|
||||
udelay(REGISTER_BUSY_DELAY);
|
||||
}
|
||||
|
||||
- ERROR(rt2x00dev, "Indirect register access failed: "
|
||||
- "offset=0x%.08x, value=0x%.08x\n", offset, *reg);
|
||||
+ printk_once(KERN_ERR "%s() Indirect register access failed: "
|
||||
+ "offset=0x%.08x, value=0x%.08x\n", __func__, offset, *reg);
|
||||
*reg = ~0;
|
||||
|
||||
return 0;
|
||||
--
|
||||
cgit v0.9.1
|
||||
1577
packages/linux/patches/3.7.10/linux-995-CX24120-13Z_frontend.patch
vendored
Executable file
1577
packages/linux/patches/3.7.10/linux-995-CX24120-13Z_frontend.patch
vendored
Executable file
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xbmc-addon-xvdr"
|
||||
PKG_VERSION="34070b5"
|
||||
PKG_VERSION="frodo-acd4e14"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xbmc-pvr-addons"
|
||||
PKG_VERSION="590f862"
|
||||
PKG_VERSION="frodo-d37ec1d"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xbmc-theme-Confluence"
|
||||
PKG_VERSION="12.1"
|
||||
PKG_VERSION="12.2.0"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
||||
@@ -181,7 +181,6 @@ fi
|
||||
|
||||
if [ "$SAMBA_CLIENT" = yes ]; then
|
||||
XBMC_SAMBA="--enable-samba"
|
||||
export LIBS="$LIBS -ltalloc -ltdb -lwbclient"
|
||||
else
|
||||
XBMC_SAMBA="--disable-samba"
|
||||
fi
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
<delay>175</delay>
|
||||
</refresh>
|
||||
</latency>
|
||||
<busydialogdelayms>750</busydialogdelayms>
|
||||
</video>
|
||||
<samba>
|
||||
<clienttimeout>30</clienttimeout>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xbmc"
|
||||
PKG_VERSION="12.1"
|
||||
PKG_VERSION="12.2.0"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
||||
107
packages/mediacenter/xbmc/patches/12.2.0/xbmc-601-add_multithread_support_for_hi10p-0.1.patch
vendored
Normal file
107
packages/mediacenter/xbmc/patches/12.2.0/xbmc-601-add_multithread_support_for_hi10p-0.1.patch
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
From ca0ddf0673dea966af5bf0bc562f9ff69a551cd9 Mon Sep 17 00:00:00 2001
|
||||
From: fritsch <peter.fruehberger@gmail.com>
|
||||
Date: Sat, 12 Jan 2013 13:03:50 +0100
|
||||
Subject: [PATCH] dvdplayer: Allow multithread decoding for hi10p content by
|
||||
default
|
||||
|
||||
This allows decoding of some hi10p material on e.g. AMD Fusion with
|
||||
both cores at the max. This introduces a new advancedsetting named
|
||||
disablehi10pmultithreading to disable hi10p decoded multithreaded.
|
||||
---
|
||||
.../DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp | 18 ++++++++++++++++--
|
||||
.../dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h | 1 +
|
||||
xbmc/settings/AdvancedSettings.cpp | 2 ++
|
||||
xbmc/settings/AdvancedSettings.h | 1 +
|
||||
4 files changed, 20 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
|
||||
index 8f81637..77ac6b1 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
|
||||
@@ -138,6 +138,7 @@ enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx
|
||||
m_iScreenHeight = 0;
|
||||
m_iOrientation = 0;
|
||||
m_bSoftware = false;
|
||||
+ m_isHi10p = false;
|
||||
m_pHardware = NULL;
|
||||
m_iLastKeyframe = 0;
|
||||
m_dts = DVD_NOPTS_VALUE;
|
||||
@@ -187,7 +188,10 @@ bool CDVDVideoCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options
|
||||
case FF_PROFILE_H264_HIGH_444_PREDICTIVE:
|
||||
case FF_PROFILE_H264_HIGH_444_INTRA:
|
||||
case FF_PROFILE_H264_CAVLC_444:
|
||||
+ // this is needed to not open the decoders
|
||||
m_bSoftware = true;
|
||||
+ // this we need to enable multithreading for hi10p via advancedsettings
|
||||
+ m_isHi10p = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -247,8 +251,18 @@ bool CDVDVideoCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options
|
||||
m_pCodecContext->codec_tag = hints.codec_tag;
|
||||
/* Only allow slice threading, since frame threading is more
|
||||
* sensitive to changes in frame sizes, and it causes crashes
|
||||
- * during HW accell */
|
||||
- m_pCodecContext->thread_type = FF_THREAD_SLICE;
|
||||
+ * during HW accell - so we unset it in this case.
|
||||
+ *
|
||||
+ * When we detect Hi10p and user did not disable hi10pmultithreading
|
||||
+ * via advancedsettings.xml we keep the ffmpeg default thread type.
|
||||
+ * */
|
||||
+ if(m_isHi10p && !g_advancedSettings.m_videoDisableHi10pMultithreading)
|
||||
+ {
|
||||
+ CLog::Log(LOGDEBUG,"CDVDVideoCodecFFmpeg::Open() Keep default threading for Hi10p: %d",
|
||||
+ m_pCodecContext->thread_type);
|
||||
+ }
|
||||
+ else
|
||||
+ m_pCodecContext->thread_type = FF_THREAD_SLICE;
|
||||
|
||||
#if defined(TARGET_DARWIN_IOS)
|
||||
// ffmpeg with enabled neon will crash and burn if this is enabled
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h
|
||||
index 61d0305..827b2d9 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h
|
||||
@@ -114,6 +114,7 @@ class CDVDVideoCodecFFmpeg : public CDVDVideoCodec
|
||||
|
||||
std::string m_name;
|
||||
bool m_bSoftware;
|
||||
+ bool m_isHi10p;
|
||||
IHardwareDecoder *m_pHardware;
|
||||
int m_iLastKeyframe;
|
||||
double m_dts;
|
||||
diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp
|
||||
index 16800b7..1e0f3e0 100644
|
||||
--- a/xbmc/settings/AdvancedSettings.cpp
|
||||
+++ b/xbmc/settings/AdvancedSettings.cpp
|
||||
@@ -112,6 +112,7 @@ void CAdvancedSettings::Initialize()
|
||||
m_DXVANoDeintProcForProgressive = false;
|
||||
m_videoFpsDetect = 1;
|
||||
m_videoDefaultLatency = 0.0;
|
||||
+ m_videoDisableHi10pMultithreading = false;
|
||||
|
||||
m_musicUseTimeSeeking = true;
|
||||
m_musicTimeSeekForward = 10;
|
||||
@@ -498,6 +499,7 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file)
|
||||
XMLUtils::GetBoolean(pElement,"enablehighqualityhwscalers", m_videoEnableHighQualityHwScalers);
|
||||
XMLUtils::GetFloat(pElement,"autoscalemaxfps",m_videoAutoScaleMaxFps, 0.0f, 1000.0f);
|
||||
XMLUtils::GetBoolean(pElement,"allowmpeg4vdpau",m_videoAllowMpeg4VDPAU);
|
||||
+ XMLUtils::GetBoolean(pElement,"disablehi10pmultithreading",m_videoDisableHi10pMultithreading);
|
||||
XMLUtils::GetBoolean(pElement,"allowmpeg4vaapi",m_videoAllowMpeg4VAAPI);
|
||||
XMLUtils::GetBoolean(pElement, "disablebackgrounddeinterlace", m_videoDisableBackgroundDeinterlace);
|
||||
XMLUtils::GetInt(pElement, "useocclusionquery", m_videoCaptureUseOcclusionQuery, -1, 1);
|
||||
diff --git a/xbmc/settings/AdvancedSettings.h b/xbmc/settings/AdvancedSettings.h
|
||||
index 27887d4..fc05e41 100644
|
||||
--- a/xbmc/settings/AdvancedSettings.h
|
||||
+++ b/xbmc/settings/AdvancedSettings.h
|
||||
@@ -164,6 +164,7 @@ class CAdvancedSettings
|
||||
bool m_DXVAForceProcessorRenderer;
|
||||
bool m_DXVANoDeintProcForProgressive;
|
||||
int m_videoFpsDetect;
|
||||
+ bool m_videoDisableHi10pMultithreading;
|
||||
|
||||
CStdString m_videoDefaultPlayer;
|
||||
CStdString m_videoDefaultDVDPlayer;
|
||||
--
|
||||
1.7.10
|
||||
|
||||
57
packages/mediacenter/xbmc/patches/12.2.0/xbmc-602-add_as.xml_busy_dialog_delay_control.patch
vendored
Normal file
57
packages/mediacenter/xbmc/patches/12.2.0/xbmc-602-add_as.xml_busy_dialog_delay_control.patch
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
diff -Naur xbmc-12.1.8/xbmc/cores/dvdplayer/DVDPlayer.cpp xbmc-12.1.8.patch/xbmc/cores/dvdplayer/DVDPlayer.cpp
|
||||
--- xbmc-12.1.8/xbmc/cores/dvdplayer/DVDPlayer.cpp 2013-04-24 23:38:36.000000000 +0200
|
||||
+++ xbmc-12.1.8.patch/xbmc/cores/dvdplayer/DVDPlayer.cpp 2013-04-26 00:49:07.732011721 +0200
|
||||
@@ -470,7 +470,7 @@
|
||||
#endif
|
||||
|
||||
Create();
|
||||
- if(!m_ready.WaitMSec(100))
|
||||
+ if(!m_ready.WaitMSec(g_advancedSettings.m_videoBusyDialogDelay_ms))
|
||||
{
|
||||
CGUIDialogBusy* dialog = (CGUIDialogBusy*)g_windowManager.GetWindow(WINDOW_DIALOG_BUSY);
|
||||
if(dialog)
|
||||
diff -Naur xbmc-12.1.8/xbmc/cores/omxplayer/OMXPlayer.cpp xbmc-12.1.8.patch/xbmc/cores/omxplayer/OMXPlayer.cpp
|
||||
--- xbmc-12.1.8/xbmc/cores/omxplayer/OMXPlayer.cpp 2013-04-24 23:38:36.000000000 +0200
|
||||
+++ xbmc-12.1.8.patch/xbmc/cores/omxplayer/OMXPlayer.cpp 2013-04-26 00:50:56.974691417 +0200
|
||||
@@ -474,7 +474,7 @@
|
||||
g_renderManager.PreInit();
|
||||
|
||||
Create();
|
||||
- if(!m_ready.WaitMSec(100))
|
||||
+ if(!m_ready.WaitMSec(g_advancedSettings.m_videoBusyDialogDelay_ms))
|
||||
{
|
||||
CGUIDialogBusy* dialog = (CGUIDialogBusy*)g_windowManager.GetWindow(WINDOW_DIALOG_BUSY);
|
||||
if(dialog)
|
||||
diff -Naur xbmc-12.1.8/xbmc/settings/AdvancedSettings.cpp xbmc-12.1.8.patch/xbmc/settings/AdvancedSettings.cpp
|
||||
--- xbmc-12.1.8/xbmc/settings/AdvancedSettings.cpp 2013-04-26 00:48:59.375036542 +0200
|
||||
+++ xbmc-12.1.8.patch/xbmc/settings/AdvancedSettings.cpp 2013-04-26 00:49:07.732011721 +0200
|
||||
@@ -111,6 +111,7 @@
|
||||
m_DXVAForceProcessorRenderer = true;
|
||||
m_DXVANoDeintProcForProgressive = false;
|
||||
m_videoFpsDetect = 1;
|
||||
+ m_videoBusyDialogDelay_ms = 100;
|
||||
m_videoDefaultLatency = 0.0;
|
||||
m_videoDisableHi10pMultithreading = false;
|
||||
|
||||
@@ -592,6 +593,10 @@
|
||||
//0 = disable fps detect, 1 = only detect on timestamps with uniform spacing, 2 detect on all timestamps
|
||||
XMLUtils::GetInt(pElement, "fpsdetect", m_videoFpsDetect, 0, 2);
|
||||
|
||||
+ // controls the delay, in milliseconds, until
|
||||
+ // the busy dialog is shown when starting video playback.
|
||||
+ XMLUtils::GetInt(pElement, "busydialogdelayms", m_videoBusyDialogDelay_ms, 0, 1000);
|
||||
+
|
||||
// Store global display latency settings
|
||||
TiXmlElement* pVideoLatency = pElement->FirstChildElement("latency");
|
||||
if (pVideoLatency)
|
||||
diff -Naur xbmc-12.1.8/xbmc/settings/AdvancedSettings.h xbmc-12.1.8.patch/xbmc/settings/AdvancedSettings.h
|
||||
--- xbmc-12.1.8/xbmc/settings/AdvancedSettings.h 2013-04-26 00:48:59.383036518 +0200
|
||||
+++ xbmc-12.1.8.patch/xbmc/settings/AdvancedSettings.h 2013-04-26 00:49:07.732011721 +0200
|
||||
@@ -165,6 +165,7 @@
|
||||
bool m_DXVANoDeintProcForProgressive;
|
||||
int m_videoFpsDetect;
|
||||
bool m_videoDisableHi10pMultithreading;
|
||||
+ int m_videoBusyDialogDelay_ms;
|
||||
|
||||
CStdString m_videoDefaultPlayer;
|
||||
CStdString m_videoDefaultDVDPlayer;
|
||||
184
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.07-PR2435.patch
vendored
Normal file
184
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.07-PR2435.patch
vendored
Normal file
@@ -0,0 +1,184 @@
|
||||
From 2da77839fbf972e8c6f09c56d25f8c7bf999f3fa Mon Sep 17 00:00:00 2001
|
||||
From: dezi <dezi@kappa-mm.de>
|
||||
Date: Mon, 18 Mar 2013 12:29:27 +0000
|
||||
Subject: [PATCH] Added hotplug support for Linux input devices.
|
||||
|
||||
---
|
||||
xbmc/input/linux/LinuxInputDevices.cpp | 80 ++++++++++++++++++++++++++++++++++
|
||||
xbmc/input/linux/LinuxInputDevices.h | 6 +++
|
||||
2 files changed, 86 insertions(+)
|
||||
|
||||
diff --git a/xbmc/input/linux/LinuxInputDevices.cpp b/xbmc/input/linux/LinuxInputDevices.cpp
|
||||
index 9d253bb..1d3d315 100644
|
||||
--- a/xbmc/input/linux/LinuxInputDevices.cpp
|
||||
+++ b/xbmc/input/linux/LinuxInputDevices.cpp
|
||||
@@ -338,6 +338,7 @@
|
||||
m_deviceMinKeyCode = 0;
|
||||
m_deviceMaxKeyCode = 0;
|
||||
m_deviceMaxAxis = 0;
|
||||
+ m_bUnplugged = false;
|
||||
|
||||
Open();
|
||||
}
|
||||
@@ -744,7 +745,15 @@ XBMC_Event CLinuxInputDevice::ReadEvent()
|
||||
readlen = read(m_fd, &levt, sizeof(levt));
|
||||
|
||||
if (readlen <= 0)
|
||||
+ {
|
||||
+ if (errno == ENODEV)
|
||||
+ {
|
||||
+ CLog::Log(LOGINFO,"input device was unplugged %s",m_deviceName);
|
||||
+ m_bUnplugged = true;
|
||||
+ }
|
||||
+
|
||||
break;
|
||||
+ }
|
||||
|
||||
//printf("read event readlen = %d device name %s m_fileName %s\n", readlen, m_deviceName, m_fileName.c_str());
|
||||
|
||||
@@ -963,6 +972,16 @@ void CLinuxInputDevice::GetInfo(int fd)
|
||||
//printf("pref: %d\n", m_devicePreferredId);
|
||||
}
|
||||
|
||||
+char* CLinuxInputDevice::GetDeviceName()
|
||||
+{
|
||||
+ return m_deviceName;
|
||||
+}
|
||||
+
|
||||
+bool CLinuxInputDevice::IsUnplugged()
|
||||
+{
|
||||
+ return m_bUnplugged;
|
||||
+}
|
||||
+
|
||||
bool CLinuxInputDevices::CheckDevice(const char *device)
|
||||
{
|
||||
int fd;
|
||||
@@ -1021,6 +1040,41 @@ void CLinuxInputDevices::InitAvailable()
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Check for hot plugged devices.
|
||||
+ */
|
||||
+void CLinuxInputDevices::CheckHotplugged()
|
||||
+{
|
||||
+ CSingleLock lock(m_devicesListLock);
|
||||
+
|
||||
+ int deviceId = m_devices.size();
|
||||
+
|
||||
+ /* No devices specified. Try to guess some. */
|
||||
+ for (int i = 0; i < MAX_LINUX_INPUT_DEVICES; i++)
|
||||
+ {
|
||||
+ char buf[32];
|
||||
+ bool ispresent = false;
|
||||
+
|
||||
+ snprintf(buf, 32, "/dev/input/event%d", i);
|
||||
+
|
||||
+ for (size_t j = 0; j < m_devices.size(); j++)
|
||||
+ {
|
||||
+ if (strcmp(m_devices[j]->GetDeviceName(),buf) == 0)
|
||||
+ {
|
||||
+ ispresent = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (!ispresent && CheckDevice(buf))
|
||||
+ {
|
||||
+ CLog::Log(LOGINFO, "Found input device %s", buf);
|
||||
+ m_devices.push_back(new CLinuxInputDevice(buf, deviceId));
|
||||
+ ++deviceId;
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* Open the device, fill out information about it,
|
||||
* allocate and fill private data, start input thread.
|
||||
*/
|
||||
@@ -1076,6 +1130,9 @@ bool CLinuxInputDevice::Open()
|
||||
{
|
||||
if (m_vt_fd < 0)
|
||||
m_vt_fd = open("/dev/tty0", O_RDWR | O_NOCTTY);
|
||||
+
|
||||
+ if (m_vt_fd < 0)
|
||||
+ m_vt_fd = open("/dev/tty1", O_RDWR | O_NOCTTY);
|
||||
|
||||
if (m_vt_fd < 0)
|
||||
CLog::Log(LOGWARNING, "no keymap support (requires /dev/tty0 - CONFIG_VT)");
|
||||
@@ -1195,6 +1252,23 @@ void CLinuxInputDevice::Close()
|
||||
|
||||
XBMC_Event CLinuxInputDevices::ReadEvent()
|
||||
{
|
||||
+ if (m_bReInitialize)
|
||||
+ {
|
||||
+ InitAvailable();
|
||||
+ m_bReInitialize = false;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ time_t now;
|
||||
+ time(&now);
|
||||
+
|
||||
+ if ((now - m_lastHotplugCheck) >= 10)
|
||||
+ {
|
||||
+ CheckHotplugged();
|
||||
+ m_lastHotplugCheck = now;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
CSingleLock lock(m_devicesListLock);
|
||||
|
||||
XBMC_Event event;
|
||||
@@ -1207,6 +1281,12 @@ XBMC_Event CLinuxInputDevices::ReadEvent()
|
||||
{
|
||||
break;
|
||||
}
|
||||
+
|
||||
+ if (m_devices[i]->IsUnplugged())
|
||||
+ {
|
||||
+ m_bReInitialize = true;
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
return event;
|
||||
diff --git a/xbmc/input/linux/LinuxInputDevices.h b/xbmc/input/linux/LinuxInputDevices.h
|
||||
index 18224a9..b7626f4 100644
|
||||
--- a/xbmc/input/linux/LinuxInputDevices.h
|
||||
+++ b/xbmc/input/linux/LinuxInputDevices.h
|
||||
@@ -41,6 +41,8 @@ class CLinuxInputDevice
|
||||
CLinuxInputDevice(const std::string fileName, int index);
|
||||
~CLinuxInputDevice();
|
||||
XBMC_Event ReadEvent();
|
||||
+ char* GetDeviceName();
|
||||
+ bool IsUnplugged();
|
||||
|
||||
private:
|
||||
void SetupKeyboardAutoRepeat(int fd);
|
||||
@@ -76,12 +78,14 @@ class CLinuxInputDevice
|
||||
int m_deviceMaxKeyCode;
|
||||
int m_deviceMaxAxis;
|
||||
bool m_bSkipNonKeyEvents;
|
||||
+ bool m_bUnplugged;
|
||||
};
|
||||
|
||||
class CLinuxInputDevices
|
||||
{
|
||||
public:
|
||||
void InitAvailable();
|
||||
+ void CheckHotplugged();
|
||||
XBMC_Event ReadEvent();
|
||||
bool IsRemoteLowBattery();
|
||||
bool IsRemoteNotPaired();
|
||||
@@ -89,6 +93,8 @@ class CLinuxInputDevices
|
||||
CCriticalSection m_devicesListLock;
|
||||
bool CheckDevice(const char *device);
|
||||
std::vector<CLinuxInputDevice*> m_devices;
|
||||
+ bool m_bReInitialize;
|
||||
+ time_t m_lastHotplugCheck;
|
||||
};
|
||||
|
||||
#endif /* LINUXINPUTDEVICES_H_ */
|
||||
--
|
||||
1.8.1.5
|
||||
|
||||
60
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.08-PR2637.patch
vendored
Normal file
60
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.08-PR2637.patch
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
From d4c34400b9bdebbb1a943603a54fdf207034ddd1 Mon Sep 17 00:00:00 2001
|
||||
From: Dag Wieers <dag@wieers.com>
|
||||
Date: Sat, 20 Apr 2013 02:59:47 +0200
|
||||
Subject: [PATCH] Increase USB and CEC rescan interval to 5 seconds
|
||||
|
||||
In one of my investigations to see why XBMC performance is so bad (even when idle) I found one of the threads (in my case PeripheralBusCEC) scan a big sysfs tree recursively. On the 1Ghz AppleTV 1 device this would be about 2% of the CPU *every* second. For the USB thread we luckily have Udev events, but for CEC it is using sysfs polling which is quite expensive. It would be better to make use of Udev as well for CEC (where available) however 5 seconds should be fine for everyone.
|
||||
|
||||
In my own builds I even brought it down to 30 seconds. Which means 29 seconds of reduced CPU usage.
|
||||
|
||||
The CEC polling probably should be more restricted to specific sysfs sections, or preferably use Udev as well, when available.
|
||||
|
||||
PS XBMC needs a special idle-state where it can turn down these expensive threads to make sure hardware can go into deeper sleep states. Especially for devices that doesn't do suspend for various reasons this is a requirement. (The ATV1 device for instance gets warm even when idle) If we can combine display-sleep with low-power states and a less expensive main-loop, that would be already quite an improvement without needing a complete refactoring of the code.
|
||||
---
|
||||
xbmc/peripherals/bus/PeripheralBus.cpp | 2 +-
|
||||
xbmc/peripherals/bus/PeripheralBus.h | 2 +-
|
||||
xbmc/peripherals/bus/virtual/PeripheralBusCEC.cpp | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/xbmc/peripherals/bus/PeripheralBus.cpp b/xbmc/peripherals/bus/PeripheralBus.cpp
|
||||
index 0e673ee..f0219f1 100644
|
||||
--- a/xbmc/peripherals/bus/PeripheralBus.cpp
|
||||
+++ b/xbmc/peripherals/bus/PeripheralBus.cpp
|
||||
@@ -27,7 +27,7 @@
|
||||
using namespace std;
|
||||
using namespace PERIPHERALS;
|
||||
|
||||
-#define PERIPHERAL_DEFAULT_RESCAN_INTERVAL 1000
|
||||
+#define PERIPHERAL_DEFAULT_RESCAN_INTERVAL 5000
|
||||
|
||||
CPeripheralBus::CPeripheralBus(CPeripherals *manager, PeripheralBusType type) :
|
||||
CThread("PeripheralBus"),
|
||||
diff --git a/xbmc/peripherals/bus/PeripheralBus.h b/xbmc/peripherals/bus/PeripheralBus.h
|
||||
index cc368ac..24e1524 100644
|
||||
--- a/xbmc/peripherals/bus/PeripheralBus.h
|
||||
+++ b/xbmc/peripherals/bus/PeripheralBus.h
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
/*!
|
||||
* @class CPeripheralBus
|
||||
- * This represents a bus on the system. By default, this bus instance will scan for changes every second.
|
||||
+ * This represents a bus on the system. By default, this bus instance will scan for changes every 5 seconds.
|
||||
* If this bus only has to be updated after a notification sent by the system, set m_bNeedsPolling to false
|
||||
* in the constructor, and implement the OnDeviceAdded(), OnDeviceChanged() and OnDeviceRemoved() methods.
|
||||
*
|
||||
diff --git a/xbmc/peripherals/bus/virtual/PeripheralBusCEC.cpp b/xbmc/peripherals/bus/virtual/PeripheralBusCEC.cpp
|
||||
index da169c1..0db7423 100644
|
||||
--- a/xbmc/peripherals/bus/virtual/PeripheralBusCEC.cpp
|
||||
+++ b/xbmc/peripherals/bus/virtual/PeripheralBusCEC.cpp
|
||||
@@ -57,7 +57,7 @@ class PERIPHERALS::DllLibCEC : public DllDynamic, DllLibCECInterface
|
||||
m_dll(new DllLibCEC),
|
||||
m_cecAdapter(NULL)
|
||||
{
|
||||
- m_iRescanTime = 1000;
|
||||
+ m_iRescanTime = 5000;
|
||||
if (!m_dll->Load() || !m_dll->IsLoaded())
|
||||
{
|
||||
delete m_dll;
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
32
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.09-PR2686.patch
vendored
Normal file
32
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.09-PR2686.patch
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
From 7ee7e59e858c7f1901c6879e39b30480c42ef126 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Mon, 29 Apr 2013 22:50:08 +0100
|
||||
Subject: [PATCH] [rbp] Remove unnecessary gl ifdef
|
||||
|
||||
I'm not sure why this was originally added.
|
||||
I couldn't think of a reason why the Pi would want things done differently here,
|
||||
so I tried without the ifdef. I can't see any difference in behaviour,
|
||||
so I think we're better off removing it.
|
||||
---
|
||||
xbmc/rendering/gles/RenderSystemGLES.cpp | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
diff --git a/xbmc/rendering/gles/RenderSystemGLES.cpp b/xbmc/rendering/gles/RenderSystemGLES.cpp
|
||||
index e7795fb..472f441 100644
|
||||
--- a/xbmc/rendering/gles/RenderSystemGLES.cpp
|
||||
+++ b/xbmc/rendering/gles/RenderSystemGLES.cpp
|
||||
@@ -138,11 +138,7 @@ bool CRenderSystemGLES::ResetRenderSystem(int width, int height, bool fullScreen
|
||||
g_matrices.MatrixMode(MM_PROJECTION);
|
||||
g_matrices.LoadIdentity();
|
||||
|
||||
-#ifdef TARGET_RASPBERRY_PI
|
||||
- g_matrices.Ortho(0.0f, width-1, height-1, 0.0f, +1.0f, 1.0f);
|
||||
-#else
|
||||
g_matrices.Ortho(0.0f, width-1, height-1, 0.0f, -1.0f, 1.0f);
|
||||
-#endif
|
||||
|
||||
g_matrices.MatrixMode(MM_MODELVIEW);
|
||||
g_matrices.LoadIdentity();
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
331
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.10-PR2713.patch
vendored
Normal file
331
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.10-PR2713.patch
vendored
Normal file
@@ -0,0 +1,331 @@
|
||||
From 1c12a2f021cceee0d7eee2de5df993d73d790aa5 Mon Sep 17 00:00:00 2001
|
||||
From: Cory Fields <theuni-nospam-@xbmc.org>
|
||||
Date: Thu, 9 May 2013 19:27:14 -0400
|
||||
Subject: [PATCH 1/2] texture: combine Load() and GetTexture() since they must
|
||||
be used together
|
||||
|
||||
---
|
||||
xbmc/guilib/GUITexture.cpp | 19 ++++++++--------
|
||||
xbmc/guilib/TextureManager.cpp | 51 ++++++++++++++++++++----------------------
|
||||
xbmc/guilib/TextureManager.h | 3 +--
|
||||
3 files changed, 34 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/xbmc/guilib/GUITexture.cpp b/xbmc/guilib/GUITexture.cpp
|
||||
index 9da2030..5896606 100644
|
||||
--- a/xbmc/guilib/GUITexture.cpp
|
||||
+++ b/xbmc/guilib/GUITexture.cpp
|
||||
@@ -301,11 +301,12 @@ bool CGUITextureBase::AllocResources()
|
||||
{ // we want to use the large image loader, but we first check for bundled textures
|
||||
if (!IsAllocated())
|
||||
{
|
||||
- int images = g_TextureManager.Load(m_info.filename, true);
|
||||
- if (images)
|
||||
+ CTextureArray texture;
|
||||
+ texture = g_TextureManager.Load(m_info.filename, true);
|
||||
+ if (texture.size())
|
||||
{
|
||||
m_isAllocated = NORMAL;
|
||||
- m_texture = g_TextureManager.GetTexture(m_info.filename);
|
||||
+ m_texture = texture;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
@@ -329,15 +330,14 @@ bool CGUITextureBase::AllocResources()
|
||||
}
|
||||
else if (!IsAllocated())
|
||||
{
|
||||
- int images = g_TextureManager.Load(m_info.filename);
|
||||
+ CTextureArray texture = g_TextureManager.Load(m_info.filename);
|
||||
|
||||
// set allocated to true even if we couldn't load the image to save
|
||||
// us hitting the disk every frame
|
||||
- m_isAllocated = images ? NORMAL : NORMAL_FAILED;
|
||||
- if (!images)
|
||||
+ m_isAllocated = texture.size() ? NORMAL : NORMAL_FAILED;
|
||||
+ if (!texture.size())
|
||||
return false;
|
||||
-
|
||||
- m_texture = g_TextureManager.GetTexture(m_info.filename);
|
||||
+ m_texture = texture;
|
||||
changed = true;
|
||||
}
|
||||
m_frameWidth = (float)m_texture.m_width;
|
||||
@@ -346,8 +346,7 @@ bool CGUITextureBase::AllocResources()
|
||||
// load the diffuse texture (if necessary)
|
||||
if (!m_info.diffuse.IsEmpty())
|
||||
{
|
||||
- g_TextureManager.Load(m_info.diffuse);
|
||||
- m_diffuse = g_TextureManager.GetTexture(m_info.diffuse);
|
||||
+ m_diffuse = g_TextureManager.Load(m_info.diffuse);
|
||||
}
|
||||
|
||||
CalculateSize();
|
||||
diff --git a/xbmc/guilib/TextureManager.cpp b/xbmc/guilib/TextureManager.cpp
|
||||
index 93fdcd1..6d6c4d9 100644
|
||||
--- a/xbmc/guilib/TextureManager.cpp
|
||||
+++ b/xbmc/guilib/TextureManager.cpp
|
||||
@@ -221,22 +221,6 @@ void CTextureMap::Add(CBaseTexture* texture, int delay)
|
||||
Cleanup();
|
||||
}
|
||||
|
||||
-const CTextureArray& CGUITextureManager::GetTexture(const CStdString& strTextureName)
|
||||
-{
|
||||
- static CTextureArray emptyTexture;
|
||||
- // CLog::Log(LOGINFO, " refcount++ for GetTexture(%s)\n", strTextureName.c_str());
|
||||
- for (int i = 0; i < (int)m_vecTextures.size(); ++i)
|
||||
- {
|
||||
- CTextureMap *pMap = m_vecTextures[i];
|
||||
- if (pMap->GetName() == strTextureName)
|
||||
- {
|
||||
- //CLog::Log(LOGDEBUG, "Total memusage %u", GetMemoryUsage());
|
||||
- return pMap->GetTexture();
|
||||
- }
|
||||
- }
|
||||
- return emptyTexture;
|
||||
-}
|
||||
-
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/************************************************************************/
|
||||
@@ -290,19 +274,32 @@ bool CGUITextureManager::HasTexture(const CStdString &textureName, CStdString *p
|
||||
return !fullPath.IsEmpty();
|
||||
}
|
||||
|
||||
-int CGUITextureManager::Load(const CStdString& strTextureName, bool checkBundleOnly /*= false */)
|
||||
+const CTextureArray& CGUITextureManager::Load(const CStdString& strTextureName, bool checkBundleOnly /*= false */)
|
||||
{
|
||||
CStdString strPath;
|
||||
+ static CTextureArray emptyTexture;
|
||||
int bundle = -1;
|
||||
int size = 0;
|
||||
if (!HasTexture(strTextureName, &strPath, &bundle, &size))
|
||||
- return 0;
|
||||
+ return emptyTexture;
|
||||
|
||||
if (size) // we found the texture
|
||||
- return size;
|
||||
+ {
|
||||
+ for (int i = 0; i < (int)m_vecTextures.size(); ++i)
|
||||
+ {
|
||||
+ CTextureMap *pMap = m_vecTextures[i];
|
||||
+ if (pMap->GetName() == strTextureName)
|
||||
+ {
|
||||
+ //CLog::Log(LOGDEBUG, "Total memusage %u", GetMemoryUsage());
|
||||
+ return pMap->GetTexture();
|
||||
+ }
|
||||
+ }
|
||||
+ // Whoops, not there.
|
||||
+ return emptyTexture;
|
||||
+ }
|
||||
|
||||
if (checkBundleOnly && bundle == -1)
|
||||
- return 0;
|
||||
+ return emptyTexture;
|
||||
|
||||
//Lock here, we will do stuff that could break rendering
|
||||
CSingleLock lock(g_graphicsContext);
|
||||
@@ -327,7 +324,7 @@ int CGUITextureManager::Load(const CStdString& strTextureName, bool checkBundleO
|
||||
CLog::Log(LOGERROR, "Texture manager unable to load bundled file: %s", strTextureName.c_str());
|
||||
delete [] pTextures;
|
||||
delete [] Delay;
|
||||
- return 0;
|
||||
+ return emptyTexture;
|
||||
}
|
||||
|
||||
pMap = new CTextureMap(strTextureName, width, height, nLoops);
|
||||
@@ -348,7 +345,7 @@ int CGUITextureManager::Load(const CStdString& strTextureName, bool checkBundleO
|
||||
CStdString rootPath = strPath.Left(g_SkinInfo->Path().GetLength());
|
||||
if (0 == rootPath.CompareNoCase(g_SkinInfo->Path()))
|
||||
CLog::Log(LOGERROR, "Texture manager unable to load file: %s", strPath.c_str());
|
||||
- return 0;
|
||||
+ return emptyTexture;
|
||||
}
|
||||
int iWidth = AnimatedGifSet.FrameWidth;
|
||||
int iHeight = AnimatedGifSet.FrameHeight;
|
||||
@@ -386,7 +383,7 @@ int CGUITextureManager::Load(const CStdString& strTextureName, bool checkBundleO
|
||||
#endif
|
||||
|
||||
m_vecTextures.push_back(pMap);
|
||||
- return 1;
|
||||
+ return pMap->GetTexture();
|
||||
} // of if (strPath.Right(4).ToLower()==".gif")
|
||||
|
||||
CBaseTexture *pTexture = NULL;
|
||||
@@ -396,19 +393,19 @@ int CGUITextureManager::Load(const CStdString& strTextureName, bool checkBundleO
|
||||
if (!m_TexBundle[bundle].LoadTexture(strTextureName, &pTexture, width, height))
|
||||
{
|
||||
CLog::Log(LOGERROR, "Texture manager unable to load bundled file: %s", strTextureName.c_str());
|
||||
- return 0;
|
||||
+ return emptyTexture;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pTexture = CBaseTexture::LoadFromFile(strPath);
|
||||
if (!pTexture)
|
||||
- return 0;
|
||||
+ return emptyTexture;
|
||||
width = pTexture->GetWidth();
|
||||
height = pTexture->GetHeight();
|
||||
}
|
||||
|
||||
- if (!pTexture) return 0;
|
||||
+ if (!pTexture) return emptyTexture;
|
||||
|
||||
CTextureMap* pMap = new CTextureMap(strTextureName, width, height, 0);
|
||||
pMap->Add(pTexture, 100);
|
||||
@@ -423,7 +420,7 @@ int CGUITextureManager::Load(const CStdString& strTextureName, bool checkBundleO
|
||||
OutputDebugString(temp);
|
||||
#endif
|
||||
|
||||
- return 1;
|
||||
+ return pMap->GetTexture();
|
||||
}
|
||||
|
||||
|
||||
diff --git a/xbmc/guilib/TextureManager.h b/xbmc/guilib/TextureManager.h
|
||||
index c982e6a..22fc192 100644
|
||||
--- a/xbmc/guilib/TextureManager.h
|
||||
+++ b/xbmc/guilib/TextureManager.h
|
||||
@@ -108,8 +108,7 @@ class CGUITextureManager
|
||||
|
||||
bool HasTexture(const CStdString &textureName, CStdString *path = NULL, int *bundle = NULL, int *size = NULL);
|
||||
bool CanLoad(const CStdString &texturePath) const; ///< Returns true if the texture manager can load this texture
|
||||
- int Load(const CStdString& strTextureName, bool checkBundleOnly = false);
|
||||
- const CTextureArray& GetTexture(const CStdString& strTextureName);
|
||||
+ const CTextureArray& Load(const CStdString& strTextureName, bool checkBundleOnly = false);
|
||||
void ReleaseTexture(const CStdString& strTextureName);
|
||||
void Cleanup();
|
||||
void Dump() const;
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
|
||||
From ece7ac520231ff144d7bc4d8393d1ca36f227927 Mon Sep 17 00:00:00 2001
|
||||
From: Cory Fields <theuni-nospam-@xbmc.org>
|
||||
Date: Tue, 30 Apr 2013 23:01:57 -0400
|
||||
Subject: [PATCH 2/2] texture: two texture speedups
|
||||
|
||||
1. Check to see if we have a texture loaded already before opening/uploading
|
||||
another instance of it.
|
||||
|
||||
2. Set a time-out for deleting textures. If they are needed again before the
|
||||
time-out expires, they are re-added to the loaded textures array and ready
|
||||
for use again. Otherwise, they are deleted after X msec. This helps to avoid
|
||||
doing _really_ nasty things, like re-loading the background image when
|
||||
moving from home to settings.
|
||||
---
|
||||
xbmc/Application.cpp | 2 +-
|
||||
xbmc/guilib/TextureManager.cpp | 30 +++++++++++++++++++++++++-----
|
||||
xbmc/guilib/TextureManager.h | 6 ++++--
|
||||
3 files changed, 30 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
|
||||
index 37d17e3..df456ec 100644
|
||||
--- a/xbmc/Application.cpp
|
||||
+++ b/xbmc/Application.cpp
|
||||
@@ -4953,7 +4953,7 @@ void CApplication::ProcessSlow()
|
||||
if (!IsPlayingVideo())
|
||||
g_largeTextureManager.CleanupUnusedImages();
|
||||
|
||||
- g_TextureManager.FreeUnusedTextures();
|
||||
+ g_TextureManager.FreeUnusedTextures(5000);
|
||||
|
||||
#ifdef HAS_DVD_DRIVE
|
||||
// checks whats in the DVD drive and tries to autostart the content (xbox games, dvd, cdda, avi files...)
|
||||
diff --git a/xbmc/guilib/TextureManager.cpp b/xbmc/guilib/TextureManager.cpp
|
||||
index 6d6c4d9..f214489 100644
|
||||
--- a/xbmc/guilib/TextureManager.cpp
|
||||
+++ b/xbmc/guilib/TextureManager.cpp
|
||||
@@ -29,6 +29,7 @@
|
||||
#ifdef _DEBUG
|
||||
#include "utils/TimeUtils.h"
|
||||
#endif
|
||||
+#include "threads/SystemClock.h"
|
||||
#include "filesystem/File.h"
|
||||
#include "filesystem/Directory.h"
|
||||
#include "URL.h"
|
||||
@@ -298,6 +299,17 @@ bool CGUITextureManager::HasTexture(const CStdString &textureName, CStdString *p
|
||||
return emptyTexture;
|
||||
}
|
||||
|
||||
+ for (ilistUnused i = m_unusedTextures.begin(); i != m_unusedTextures.end(); i++)
|
||||
+ {
|
||||
+ CTextureMap* pMap = i->first;
|
||||
+ if (pMap->GetName() == strTextureName)
|
||||
+ {
|
||||
+ m_vecTextures.push_back(pMap);
|
||||
+ m_unusedTextures.erase(i);
|
||||
+ return pMap->GetTexture();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (checkBundleOnly && bundle == -1)
|
||||
return emptyTexture;
|
||||
|
||||
@@ -439,7 +451,7 @@ void CGUITextureManager::ReleaseTexture(const CStdString& strTextureName)
|
||||
{
|
||||
//CLog::Log(LOGINFO, " cleanup:%s", strTextureName.c_str());
|
||||
// add to our textures to free
|
||||
- m_unusedTextures.push_back(pMap);
|
||||
+ m_unusedTextures.push_back(make_pair(pMap, XbmcThreads::SystemClockMillis()));
|
||||
i = m_vecTextures.erase(i);
|
||||
}
|
||||
return;
|
||||
@@ -449,12 +461,20 @@ void CGUITextureManager::ReleaseTexture(const CStdString& strTextureName)
|
||||
CLog::Log(LOGWARNING, "%s: Unable to release texture %s", __FUNCTION__, strTextureName.c_str());
|
||||
}
|
||||
|
||||
-void CGUITextureManager::FreeUnusedTextures()
|
||||
+void CGUITextureManager::FreeUnusedTextures(unsigned int timeDelay)
|
||||
{
|
||||
+ unsigned int currFrameTime = XbmcThreads::SystemClockMillis();
|
||||
CSingleLock lock(g_graphicsContext);
|
||||
- for (ivecTextures i = m_unusedTextures.begin(); i != m_unusedTextures.end(); ++i)
|
||||
- delete *i;
|
||||
- m_unusedTextures.clear();
|
||||
+ for (ilistUnused i = m_unusedTextures.begin(); i != m_unusedTextures.end();)
|
||||
+ {
|
||||
+ if (currFrameTime - i->second >= timeDelay)
|
||||
+ {
|
||||
+ delete i->first;
|
||||
+ i = m_unusedTextures.erase(i);
|
||||
+ }
|
||||
+ else
|
||||
+ i++;
|
||||
+ }
|
||||
|
||||
#if defined(HAS_GL) || defined(HAS_GLES)
|
||||
for (unsigned int i = 0; i < m_unusedHwTextures.size(); ++i)
|
||||
diff --git a/xbmc/guilib/TextureManager.h b/xbmc/guilib/TextureManager.h
|
||||
index 22fc192..2633c39d 100644
|
||||
--- a/xbmc/guilib/TextureManager.h
|
||||
+++ b/xbmc/guilib/TextureManager.h
|
||||
@@ -27,6 +27,7 @@
|
||||
#define GUILIB_TEXTUREMANAGER_H
|
||||
|
||||
#include <vector>
|
||||
+#include <list>
|
||||
#include "TextureBundle.h"
|
||||
#include "threads/CriticalSection.h"
|
||||
|
||||
@@ -121,13 +122,14 @@ class CGUITextureManager
|
||||
void SetTexturePath(const CStdString &texturePath); ///< Set a single path as the path to check when loading media (clear then add)
|
||||
void RemoveTexturePath(const CStdString &texturePath); ///< Remove a path from the paths to check when loading media
|
||||
|
||||
- void FreeUnusedTextures(); ///< Free textures (called from app thread only)
|
||||
+ void FreeUnusedTextures(unsigned int timeDelay = 0); ///< Free textures (called from app thread only)
|
||||
void ReleaseHwTexture(unsigned int texture);
|
||||
protected:
|
||||
std::vector<CTextureMap*> m_vecTextures;
|
||||
- std::vector<CTextureMap*> m_unusedTextures;
|
||||
+ std::list<std::pair<CTextureMap*, unsigned int> > m_unusedTextures;
|
||||
std::vector<unsigned int> m_unusedHwTextures;
|
||||
typedef std::vector<CTextureMap*>::iterator ivecTextures;
|
||||
+ typedef std::list<std::pair<CTextureMap*, unsigned int> >::iterator ilistUnused;
|
||||
// we have 2 texture bundles (one for the base textures, one for the theme)
|
||||
CTextureBundle m_TexBundle[2];
|
||||
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
77
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.11-PR2712.patch
vendored
Normal file
77
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.11-PR2712.patch
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
From 101fbc2d6869d6f02c4345a232854dbbb3f1a855 Mon Sep 17 00:00:00 2001
|
||||
From: Cory Fields <theuni-nospam-@xbmc.org>
|
||||
Date: Thu, 2 May 2013 16:45:41 -0400
|
||||
Subject: [PATCH] build: stop using whole-archive for our final binary
|
||||
|
||||
This nasty hack has been around for ages. By changing, we get the following
|
||||
benefits:
|
||||
|
||||
- We don't link in _every_ object in _every_ archive!
|
||||
- Builds will no longer fail if a source file has been removed but its object
|
||||
still exists in the archive
|
||||
- Filesize reduction
|
||||
- Ability to use lto, garbage collection, dead-code stripping, etc in a
|
||||
useful manner
|
||||
|
||||
This is achieved by specifying a main object on the link line, and using
|
||||
start-group/end-group to search through the archives multiple times until each
|
||||
symbol is found.
|
||||
---
|
||||
Makefile.in | 24 ++++++++++++++++--------
|
||||
1 file changed, 16 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 3cbe1a2..f0827f2 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -92,6 +92,9 @@ DIRECTORY_ARCHIVES=$(DVDPLAYER_ARCHIVES) \
|
||||
xbmc/windows/windows.a \
|
||||
xbmc/xbmc.a \
|
||||
|
||||
+ifneq (@USE_LIBXBMC@,1)
|
||||
+DIRECTORY_ARCHIVES +=xbmc/main/main.a
|
||||
+endif
|
||||
|
||||
NWAOBJSXBMC= xbmc/threads/threads.a \
|
||||
xbmc/commons/commons.a
|
||||
@@ -425,24 +428,29 @@ endif
|
||||
|
||||
OBJSXBMC:=$(filter-out $(DYNOBJSXBMC), $(OBJSXBMC))
|
||||
|
||||
-libxbmc.so: $(OBJSXBMC) $(DYNOBJSXBMC) $(NWAOBJSXBMC)
|
||||
+MAINOBJS=xbmc/xbmc.o
|
||||
+ifeq (@USE_ANDROID@,1)
|
||||
+MAINOBJS+=xbmc/android/activity/android_main.o
|
||||
+endif
|
||||
+ifneq (@USE_LIBXBMC@,1)
|
||||
+MAINOBJS+=xbmc/main/main.o
|
||||
+endif
|
||||
+
|
||||
+libxbmc.so: $(OBJSXBMC) $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(MAINOBJS)
|
||||
ifeq ($(findstring osx,@ARCH@), osx)
|
||||
$(SILENT_LD) $(CXX) $(LDFLAGS) -bundle -o $@ -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(OBJSXBMC) $(LIBS)
|
||||
else
|
||||
- $(SILENT_LD) $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ -Wl,--whole-archive $(DYNOBJSXBMC) $(OBJSXBMC) -Wl,--no-whole-archive -Wl,--no-undefined $(NWAOBJSXBMC) $(LIBS)
|
||||
+ $(SILENT_LD) $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ $(MAINOBJS) -Wl,--start-group $(DYNOBJSXBMC) $(OBJSXBMC) -Wl,--end-group -Wl,--no-undefined $(NWAOBJSXBMC) $(LIBS)
|
||||
endif
|
||||
|
||||
-xbmc.bin: xbmc/main/main.a $(OBJSXBMC) $(DYNOBJSXBMC) $(NWAOBJSXBMC)
|
||||
+xbmc.bin: $(OBJSXBMC) $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(MAINOBJS)
|
||||
|
||||
ifeq ($(findstring osx,@ARCH@), osx)
|
||||
- $(SILENT_LD) $(CXX) $(LDFLAGS) -o xbmc.bin -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(OBJSXBMC) xbmc/main/main.a $(LIBS) -rdynamic
|
||||
+ $(SILENT_LD) $(CXX) $(LDFLAGS) -o xbmc.bin -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(OBJSXBMC) $(LIBS) -rdynamic
|
||||
else
|
||||
- $(SILENT_LD) $(CXX) $(CXXFLAGS) $(LDFLAGS) -o xbmc.bin -Wl,--whole-archive $(DYNOBJSXBMC) $(OBJSXBMC) xbmc/main/main.a -Wl,--no-whole-archive $(NWAOBJSXBMC) $(LIBS) -rdynamic
|
||||
+ $(SILENT_LD) $(CXX) $(CXXFLAGS) $(LDFLAGS) -o xbmc.bin $(MAINOBJS) -Wl,--start-group $(DYNOBJSXBMC) $(OBJSXBMC) -Wl,--end-group $(NWAOBJSXBMC) $(LIBS) -rdynamic
|
||||
endif
|
||||
|
||||
-xbmc/main/main.a: force
|
||||
- $(MAKE) -C xbmc/main
|
||||
-
|
||||
xbmc-xrandr: xbmc-xrandr.c
|
||||
ifneq (1,@USE_XRANDR@)
|
||||
# xbmc-xrandr.c gets picked up by the default make rules
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
89
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.12-PR2570.patch
vendored
Normal file
89
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.12-PR2570.patch
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
From 0aaeb72ed3d76134f11b80a4d17e50b40d6459be Mon Sep 17 00:00:00 2001
|
||||
From: hmis <hubert.mis@gmail.com>
|
||||
Date: Mon, 8 Apr 2013 21:35:35 +0300
|
||||
Subject: [PATCH] Read CD audio USB drive bug fixed
|
||||
|
||||
libcdio seems to allow read no more than about 10 audio sectors at once when CD audio device is connected via USB.
|
||||
This patch makes XBMC read small number of sectors if default one fails. It uses more CPU but allows to use USB CD devices.
|
||||
Tested on GNU/Linux x86 and RPi. (On Rpi OMXPlayer does not play CD, but I can rip tracks).
|
||||
---
|
||||
xbmc/filesystem/CDDAFile.cpp | 34 +++++++++++++++++++++++++++-------
|
||||
xbmc/filesystem/CDDAFile.h | 1 +
|
||||
2 files changed, 28 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/xbmc/filesystem/CDDAFile.cpp b/xbmc/filesystem/CDDAFile.cpp
|
||||
index 5342629..f5eaf37 100644
|
||||
--- a/xbmc/filesystem/CDDAFile.cpp
|
||||
+++ b/xbmc/filesystem/CDDAFile.cpp
|
||||
@@ -40,6 +40,7 @@
|
||||
m_lsnCurrent = CDIO_INVALID_LSN;
|
||||
m_lsnEnd = CDIO_INVALID_LSN;
|
||||
m_cdio = CLibcdio::GetInstance();
|
||||
+ m_iSectorCount = 52;
|
||||
}
|
||||
|
||||
CFileCDDA::~CFileCDDA(void)
|
||||
@@ -120,7 +121,8 @@ unsigned int CFileCDDA::Read(void* lpBuf, int64_t uiBufSize)
|
||||
if (!m_pCdIo || !g_mediaManager.IsDiscInDrive())
|
||||
return 0;
|
||||
|
||||
- int iSectorCount = (int)uiBufSize / CDIO_CD_FRAMESIZE_RAW;
|
||||
+ // limit number of sectors that fits in buffer by m_iSectorCount
|
||||
+ int iSectorCount = std::min((int)uiBufSize / CDIO_CD_FRAMESIZE_RAW, m_iSectorCount);
|
||||
|
||||
if (iSectorCount <= 0)
|
||||
return 0;
|
||||
@@ -129,14 +131,32 @@ unsigned int CFileCDDA::Read(void* lpBuf, int64_t uiBufSize)
|
||||
if (m_lsnCurrent + iSectorCount > m_lsnEnd)
|
||||
iSectorCount = m_lsnEnd - m_lsnCurrent;
|
||||
|
||||
- int iret = m_cdio->cdio_read_audio_sectors(m_pCdIo, lpBuf, m_lsnCurrent, iSectorCount);
|
||||
-
|
||||
- if ( iret != DRIVER_OP_SUCCESS)
|
||||
+ // The loop tries to solve read error problem by lowering number of sectors to read (iSectorCount).
|
||||
+ // When problem is solved the proper number of sectors is stored in m_iSectorCount
|
||||
+ int big_iSectorCount = iSectorCount;
|
||||
+ while (iSectorCount > 0)
|
||||
{
|
||||
- CLog::Log(LOGERROR, "file cdda: Reading %d sectors of audio data starting at lsn %d failed with error code %i", iSectorCount, m_lsnCurrent, iret);
|
||||
- return 0;
|
||||
+ int iret = m_cdio->cdio_read_audio_sectors(m_pCdIo, lpBuf, m_lsnCurrent, iSectorCount);
|
||||
+
|
||||
+ if (iret == DRIVER_OP_SUCCESS)
|
||||
+ {
|
||||
+ // If lower iSectorCount solved the problem limit it's value
|
||||
+ if (iSectorCount < big_iSectorCount)
|
||||
+ {
|
||||
+ m_iSectorCount = iSectorCount;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ // iSectorCount is low so it cannot solve read problem
|
||||
+ if (iSectorCount <= 10)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "file cdda: Reading %d sectors of audio data starting at lsn %d failed with error code %i", iSectorCount, m_lsnCurrent, iret);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ iSectorCount = 10;
|
||||
}
|
||||
-
|
||||
m_lsnCurrent += iSectorCount;
|
||||
|
||||
return iSectorCount*CDIO_CD_FRAMESIZE_RAW;
|
||||
diff --git a/xbmc/filesystem/CDDAFile.h b/xbmc/filesystem/CDDAFile.h
|
||||
index f041e0b..72b8d5b 100644
|
||||
--- a/xbmc/filesystem/CDDAFile.h
|
||||
+++ b/xbmc/filesystem/CDDAFile.h
|
||||
@@ -53,6 +53,7 @@ class CFileCDDA : public IFile
|
||||
lsn_t m_lsnStart; // Start of m_iTrack in logical sector number
|
||||
lsn_t m_lsnCurrent; // Position inside the track in logical sector number
|
||||
lsn_t m_lsnEnd; // End of m_iTrack in logical sector number
|
||||
+ int m_iSectorCount; // max number of sectors to read at once
|
||||
boost::shared_ptr<MEDIA_DETECT::CLibcdio> m_cdio;
|
||||
};
|
||||
}
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
555
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.12-PR2586.patch
vendored
Normal file
555
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.12-PR2586.patch
vendored
Normal file
@@ -0,0 +1,555 @@
|
||||
diff -Naur xbmc-12.2.0/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxCDDA.cpp xbmc-12.2.0.patch/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxCDDA.cpp
|
||||
--- xbmc-12.2.0/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxCDDA.cpp 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ xbmc-12.2.0.patch/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxCDDA.cpp 2013-05-10 07:16:56.061904946 +0200
|
||||
@@ -0,0 +1,180 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2013 Team XBMC
|
||||
+ * http://www.xbmc.org
|
||||
+ *
|
||||
+ * This Program 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, or (at your option)
|
||||
+ * any later version.
|
||||
+ *
|
||||
+ * This Program 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 XBMC; see the file COPYING. If not, see
|
||||
+ * <http://www.gnu.org/licenses/>.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include "DVDInputStreams/DVDInputStream.h"
|
||||
+#include "DVDDemuxCDDA.h"
|
||||
+#include "DVDDemuxUtils.h"
|
||||
+#include "utils/log.h"
|
||||
+#include "../DVDClock.h"
|
||||
+
|
||||
+// CDDA audio demuxer based on AirTunes audio Demuxer.
|
||||
+
|
||||
+using namespace std;
|
||||
+
|
||||
+class CDemuxStreamAudioCDDA
|
||||
+ : public CDemuxStreamAudio
|
||||
+{
|
||||
+public:
|
||||
+ void GetStreamInfo(string& strInfo)
|
||||
+ {
|
||||
+ strInfo = "pcm";
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+CDVDDemuxCDDA::CDVDDemuxCDDA() : CDVDDemux()
|
||||
+{
|
||||
+ m_pInput = NULL;
|
||||
+ m_stream = NULL;
|
||||
+ m_bytes = 0;
|
||||
+}
|
||||
+
|
||||
+CDVDDemuxCDDA::~CDVDDemuxCDDA()
|
||||
+{
|
||||
+ Dispose();
|
||||
+}
|
||||
+
|
||||
+bool CDVDDemuxCDDA::Open(CDVDInputStream* pInput)
|
||||
+{
|
||||
+ Abort();
|
||||
+
|
||||
+ Dispose();
|
||||
+
|
||||
+ if(!pInput || !pInput->IsStreamType(DVDSTREAM_TYPE_FILE))
|
||||
+ return false;
|
||||
+
|
||||
+ m_pInput = pInput;
|
||||
+
|
||||
+ m_stream = new CDemuxStreamAudioCDDA();
|
||||
+
|
||||
+ if(!m_stream)
|
||||
+ return false;
|
||||
+
|
||||
+ m_stream->iSampleRate = 44100;
|
||||
+ m_stream->iBitsPerSample = 16;
|
||||
+ m_stream->iBitRate = 44100 * 2 * 16;
|
||||
+ m_stream->iChannels = 2;
|
||||
+ m_stream->type = STREAM_AUDIO;
|
||||
+ m_stream->codec = CODEC_ID_PCM_S16LE;
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+void CDVDDemuxCDDA::Dispose()
|
||||
+{
|
||||
+ delete m_stream;
|
||||
+ m_stream = NULL;
|
||||
+
|
||||
+ m_pInput = NULL;
|
||||
+ m_bytes = 0;
|
||||
+}
|
||||
+
|
||||
+void CDVDDemuxCDDA::Reset()
|
||||
+{
|
||||
+ CDVDInputStream* pInputStream = m_pInput;
|
||||
+ Dispose();
|
||||
+ Open(pInputStream);
|
||||
+}
|
||||
+
|
||||
+void CDVDDemuxCDDA::Abort()
|
||||
+{
|
||||
+ if(m_pInput)
|
||||
+ return m_pInput->Abort();
|
||||
+}
|
||||
+
|
||||
+void CDVDDemuxCDDA::Flush()
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+#define CDDA_READ_SIZE 4096
|
||||
+DemuxPacket* CDVDDemuxCDDA::Read()
|
||||
+{
|
||||
+ if(!m_pInput)
|
||||
+ return NULL;
|
||||
+
|
||||
+ DemuxPacket* pPacket = CDVDDemuxUtils::AllocateDemuxPacket(CDDA_READ_SIZE);
|
||||
+
|
||||
+ if (!pPacket)
|
||||
+ {
|
||||
+ if (m_pInput)
|
||||
+ m_pInput->Close();
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ pPacket->iSize = m_pInput->Read(pPacket->pData, CDDA_READ_SIZE);
|
||||
+ pPacket->iStreamId = 0;
|
||||
+
|
||||
+ if(pPacket->iSize < 1)
|
||||
+ {
|
||||
+ delete pPacket;
|
||||
+ pPacket = NULL;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ int n = m_stream->iBitRate>>3;
|
||||
+ if (n > 0)
|
||||
+ {
|
||||
+ m_bytes += pPacket->iSize;
|
||||
+ pPacket->dts = (double)m_bytes * DVD_TIME_BASE / n;
|
||||
+ pPacket->pts = pPacket->dts;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ pPacket->dts = DVD_NOPTS_VALUE;
|
||||
+ pPacket->pts = DVD_NOPTS_VALUE;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return pPacket;
|
||||
+}
|
||||
+
|
||||
+int CDVDDemuxCDDA::GetStreamLength()
|
||||
+{
|
||||
+ int64_t num_track_bytes = m_pInput->GetLength();
|
||||
+ int bytes_per_second = (m_stream->iBitRate>>3);
|
||||
+ int64_t track_mseconds = num_track_bytes*1000 / bytes_per_second;
|
||||
+ return (int)track_mseconds;
|
||||
+}
|
||||
+
|
||||
+CDemuxStream* CDVDDemuxCDDA::GetStream(int iStreamId)
|
||||
+{
|
||||
+ if(iStreamId != 0)
|
||||
+ return NULL;
|
||||
+
|
||||
+ return m_stream;
|
||||
+}
|
||||
+
|
||||
+int CDVDDemuxCDDA::GetNrOfStreams()
|
||||
+{
|
||||
+ return (m_stream == NULL ? 0 : 1);
|
||||
+}
|
||||
+
|
||||
+std::string CDVDDemuxCDDA::GetFileName()
|
||||
+{
|
||||
+ if(m_pInput)
|
||||
+ return m_pInput->GetFileName();
|
||||
+ else
|
||||
+ return "";
|
||||
+}
|
||||
+
|
||||
+void CDVDDemuxCDDA::GetStreamCodecName(int iStreamId, CStdString &strName)
|
||||
+{
|
||||
+ if (m_stream && iStreamId == 0)
|
||||
+ strName = "pcm";
|
||||
+}
|
||||
diff -Naur xbmc-12.2.0/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxCDDA.h xbmc-12.2.0.patch/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxCDDA.h
|
||||
--- xbmc-12.2.0/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxCDDA.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ xbmc-12.2.0.patch/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxCDDA.h 2013-05-10 07:16:56.061904946 +0200
|
||||
@@ -0,0 +1,59 @@
|
||||
+#pragma once
|
||||
+/*
|
||||
+ * Copyright (C) 2013 Team XBMC
|
||||
+ * http://www.xbmc.org
|
||||
+ *
|
||||
+ * This Program 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, or (at your option)
|
||||
+ * any later version.
|
||||
+ *
|
||||
+ * This Program 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 XBMC; see the file COPYING. If not, see
|
||||
+ * <http://www.gnu.org/licenses/>.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include "DVDDemux.h"
|
||||
+
|
||||
+#ifdef _WIN32
|
||||
+#define __attribute__(dummy_val)
|
||||
+#else
|
||||
+#include <config.h>
|
||||
+#endif
|
||||
+
|
||||
+class CDemuxStreamAudioCDDA;
|
||||
+
|
||||
+class CDVDDemuxCDDA : public CDVDDemux
|
||||
+{
|
||||
+public:
|
||||
+
|
||||
+ CDVDDemuxCDDA();
|
||||
+ ~CDVDDemuxCDDA();
|
||||
+
|
||||
+ bool Open(CDVDInputStream* pInput);
|
||||
+ void Dispose();
|
||||
+ void Reset();
|
||||
+ void Abort();
|
||||
+ void Flush();
|
||||
+ DemuxPacket* Read();
|
||||
+ bool SeekTime(int time, bool backwords = false, double* startpts = NULL) { return false; };
|
||||
+ void SetSpeed(int iSpeed) {};
|
||||
+ int GetStreamLength() ;
|
||||
+ CDemuxStream* GetStream(int iStreamId);
|
||||
+ int GetNrOfStreams();
|
||||
+ std::string GetFileName();
|
||||
+ virtual void GetStreamCodecName(int iStreamId, CStdString &strName);
|
||||
+
|
||||
+protected:
|
||||
+ friend class CDemuxStreamAudioCDDA;
|
||||
+ CDVDInputStream* m_pInput;
|
||||
+ int64_t m_bytes;
|
||||
+
|
||||
+ CDemuxStreamAudioCDDA *m_stream;
|
||||
+};
|
||||
diff -Naur xbmc-12.2.0/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp xbmc-12.2.0.patch/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp
|
||||
--- xbmc-12.2.0/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp 2013-05-02 17:00:07.000000000 +0200
|
||||
+++ xbmc-12.2.0.patch/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp 2013-05-10 07:16:56.061904946 +0200
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "DVDDemuxHTSP.h"
|
||||
#endif
|
||||
#include "DVDDemuxBXA.h"
|
||||
+#include "DVDDemuxCDDA.h"
|
||||
#include "DVDDemuxPVRClient.h"
|
||||
#include "pvr/PVRManager.h"
|
||||
#include "pvr/addons/PVRClients.h"
|
||||
@@ -51,6 +52,22 @@
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
+
|
||||
+ // Try to open CDDA demuxer
|
||||
+ if (pInputStream->IsStreamType(DVDSTREAM_TYPE_FILE) && pInputStream->GetContent().compare("application/octet-stream") == 0)
|
||||
+ {
|
||||
+ std::string filename = pInputStream->GetFileName();
|
||||
+ if (filename.substr(0, 7) == "cdda://")
|
||||
+ {
|
||||
+ CLog::Log(LOGDEBUG, "DVDFactoryDemuxer: Stream is probably CD audio. Creating CDDA demuxer.");
|
||||
+
|
||||
+ auto_ptr<CDVDDemuxCDDA> demuxer(new CDVDDemuxCDDA());
|
||||
+ if (demuxer->Open(pInputStream))
|
||||
+ {
|
||||
+ return demuxer.release();
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
|
||||
if (pInputStream->IsStreamType(DVDSTREAM_TYPE_HTTP))
|
||||
{
|
||||
diff -Naur xbmc-12.2.0/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp.orig xbmc-12.2.0.patch/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp.orig
|
||||
diff -Naur xbmc-12.2.0/xbmc/cores/dvdplayer/DVDDemuxers/Makefile.in xbmc-12.2.0.patch/xbmc/cores/dvdplayer/DVDDemuxers/Makefile.in
|
||||
--- xbmc-12.2.0/xbmc/cores/dvdplayer/DVDDemuxers/Makefile.in 2013-05-02 17:00:07.000000000 +0200
|
||||
+++ xbmc-12.2.0.patch/xbmc/cores/dvdplayer/DVDDemuxers/Makefile.in 2013-05-10 07:16:56.061904946 +0200
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
SRCS = DVDDemux.cpp
|
||||
SRCS += DVDDemuxBXA.cpp
|
||||
+SRCS += DVDDemuxCDDA.cpp
|
||||
SRCS += DVDDemuxFFmpeg.cpp
|
||||
SRCS += DVDDemuxHTSP.cpp
|
||||
SRCS += DVDDemuxPVRClient.cpp
|
||||
diff -Naur xbmc-12.2.0/xbmc/cores/paplayer/CDDAcodec.cpp xbmc-12.2.0.patch/xbmc/cores/paplayer/CDDAcodec.cpp
|
||||
--- xbmc-12.2.0/xbmc/cores/paplayer/CDDAcodec.cpp 2013-05-02 17:00:08.000000000 +0200
|
||||
+++ xbmc-12.2.0.patch/xbmc/cores/paplayer/CDDAcodec.cpp 1970-01-01 01:00:00.000000000 +0100
|
||||
@@ -1,159 +0,0 @@
|
||||
-/*
|
||||
- * Copyright (C) 2005-2012 Team XBMC
|
||||
- * http://www.xbmc.org
|
||||
- *
|
||||
- * This Program 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, or (at your option)
|
||||
- * any later version.
|
||||
- *
|
||||
- * This Program 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 XBMC; see the file COPYING. If not, see
|
||||
- * <http://www.gnu.org/licenses/>.
|
||||
- *
|
||||
- */
|
||||
-
|
||||
-#include "CDDAcodec.h"
|
||||
-#if !defined(TARGET_DARWIN_IOS)
|
||||
-#include <cdio/sector.h>
|
||||
-#else
|
||||
-typedef int32_t lsn_t;
|
||||
-#define CDIO_CD_FRAMESIZE_RAW 2352
|
||||
-#define CDIO_CD_FRAMES_PER_SEC 75
|
||||
-#endif
|
||||
-#include "cores/AudioEngine/Utils/AEUtil.h"
|
||||
-
|
||||
-#define SECTOR_COUNT 55 // max. sectors that can be read at once
|
||||
-#define MAX_BUFFER_SIZE 2*SECTOR_COUNT*CDIO_CD_FRAMESIZE_RAW
|
||||
-
|
||||
-CDDACodec::CDDACodec()
|
||||
-{
|
||||
- m_SampleRate = 44100;
|
||||
- m_Channels = 2;
|
||||
- m_BitsPerSample = 16;
|
||||
- m_DataFormat = AE_FMT_S16NE;
|
||||
- m_TotalTime = 0;
|
||||
- m_Bitrate = 0;
|
||||
- m_CodecName = "cdda";
|
||||
-
|
||||
- m_BufferSize=0;
|
||||
- m_Buffer = new BYTE[MAX_BUFFER_SIZE];
|
||||
- m_BufferPos = 0;
|
||||
-}
|
||||
-
|
||||
-CDDACodec::~CDDACodec()
|
||||
-{
|
||||
- DeInit();
|
||||
-
|
||||
- if (m_Buffer)
|
||||
- {
|
||||
- delete[] m_Buffer;
|
||||
- m_Buffer = NULL;
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-bool CDDACodec::Init(const CStdString &strFile, unsigned int filecache)
|
||||
-{
|
||||
- if (!m_file.Open(strFile, READ_CACHED))
|
||||
- return false;
|
||||
-
|
||||
- // Calculate total time of the track
|
||||
- m_TotalTime=(m_file.GetLength()/CDIO_CD_FRAMESIZE_RAW)/CDIO_CD_FRAMES_PER_SEC;
|
||||
- if (m_TotalTime > 0)
|
||||
- m_Bitrate = (int)((m_file.GetLength() * 8) / m_TotalTime);
|
||||
- else
|
||||
- m_Bitrate = 0;
|
||||
- m_TotalTime*=1000; // ms
|
||||
- return true;
|
||||
-}
|
||||
-
|
||||
-void CDDACodec::DeInit()
|
||||
-{
|
||||
- m_file.Close();
|
||||
-}
|
||||
-
|
||||
-int64_t CDDACodec::Seek(int64_t iSeekTime)
|
||||
-{
|
||||
- // Calculate the next full second...
|
||||
- int iSeekTimeFullSec=(int)(iSeekTime+(1000-(iSeekTime%1000)))/1000;
|
||||
-
|
||||
- // ...and the logical sector on the cd...
|
||||
- lsn_t lsnSeek=iSeekTimeFullSec*CDIO_CD_FRAMES_PER_SEC;
|
||||
-
|
||||
- // ... then seek to its position...
|
||||
- int iNewOffset=(int)m_file.Seek(lsnSeek*CDIO_CD_FRAMESIZE_RAW, SEEK_SET);
|
||||
- m_BufferSize=m_BufferPos=0;
|
||||
-
|
||||
- // ... and look if we really got there.
|
||||
- int iNewSeekTime=(iNewOffset/CDIO_CD_FRAMESIZE_RAW)/CDIO_CD_FRAMES_PER_SEC;
|
||||
- return iNewSeekTime*(int64_t)1000; // ms
|
||||
-}
|
||||
-
|
||||
-int CDDACodec::ReadPCM(BYTE *pBuffer, int size, int *actualsize)
|
||||
-{
|
||||
- *actualsize=0;
|
||||
-
|
||||
- bool bEof=false;
|
||||
- // Reached end of track?
|
||||
- if (m_file.GetLength()==m_file.GetPosition())
|
||||
- bEof=true;
|
||||
-
|
||||
- // Do we have to refill our audio buffer?
|
||||
- if (m_BufferSize-m_BufferPos<MAX_BUFFER_SIZE/2 && !bEof)
|
||||
- {
|
||||
- // Move the remaining audio data to the beginning of the buffer
|
||||
- memmove(m_Buffer, m_Buffer + m_BufferPos, m_BufferSize-m_BufferPos);
|
||||
- m_BufferSize=m_BufferSize-m_BufferPos;
|
||||
- m_BufferPos = 0;
|
||||
-
|
||||
- // Fill our buffer with a chunk of audio data
|
||||
- int iAmountRead=m_file.Read(m_Buffer+m_BufferSize, MAX_BUFFER_SIZE/2);
|
||||
- if (iAmountRead<=0)
|
||||
- return READ_ERROR;
|
||||
-
|
||||
- m_BufferSize+=iAmountRead;
|
||||
- }
|
||||
-
|
||||
- // Our buffer is empty and no data left to read from the cd
|
||||
- if (m_BufferSize-m_BufferPos==0 && bEof)
|
||||
- return READ_EOF;
|
||||
-
|
||||
- // Try to give the player the amount of audio data he wants
|
||||
- if (m_BufferSize-m_BufferPos>=size)
|
||||
- { // we have enough data in our buffer
|
||||
- memcpy(pBuffer, m_Buffer + m_BufferPos, size);
|
||||
- m_BufferPos+=size;
|
||||
- *actualsize=size;
|
||||
- }
|
||||
- else
|
||||
- { // Only a smaller amount of data left as the player wants
|
||||
- memcpy(pBuffer, m_Buffer + m_BufferPos, m_BufferSize-m_BufferPos);
|
||||
- *actualsize=m_BufferSize-m_BufferPos;
|
||||
- m_BufferPos+=m_BufferSize-m_BufferPos;
|
||||
- }
|
||||
-
|
||||
- return READ_SUCCESS;
|
||||
-}
|
||||
-
|
||||
-bool CDDACodec::CanInit()
|
||||
-{
|
||||
- return true;
|
||||
-}
|
||||
-
|
||||
-CAEChannelInfo CDDACodec::GetChannelInfo()
|
||||
-{
|
||||
- static enum AEChannel map[2][3] = {
|
||||
- {AE_CH_FC, AE_CH_NULL},
|
||||
- {AE_CH_FL, AE_CH_FR , AE_CH_NULL}
|
||||
- };
|
||||
-
|
||||
- if (m_Channels > 2)
|
||||
- return CAEUtil::GuessChLayout(m_Channels);
|
||||
-
|
||||
- return CAEChannelInfo(map[m_Channels - 1]);
|
||||
-}
|
||||
diff -Naur xbmc-12.2.0/xbmc/cores/paplayer/CDDAcodec.h xbmc-12.2.0.patch/xbmc/cores/paplayer/CDDAcodec.h
|
||||
--- xbmc-12.2.0/xbmc/cores/paplayer/CDDAcodec.h 2013-05-02 17:00:08.000000000 +0200
|
||||
+++ xbmc-12.2.0.patch/xbmc/cores/paplayer/CDDAcodec.h 1970-01-01 01:00:00.000000000 +0100
|
||||
@@ -1,43 +0,0 @@
|
||||
-#pragma once
|
||||
-
|
||||
-/*
|
||||
- * Copyright (C) 2005-2012 Team XBMC
|
||||
- * http://www.xbmc.org
|
||||
- *
|
||||
- * This Program 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, or (at your option)
|
||||
- * any later version.
|
||||
- *
|
||||
- * This Program 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 XBMC; see the file COPYING. If not, see
|
||||
- * <http://www.gnu.org/licenses/>.
|
||||
- *
|
||||
- */
|
||||
-
|
||||
-#include "CachingCodec.h"
|
||||
-
|
||||
-class CDDACodec : public CachingCodec
|
||||
-{
|
||||
-public:
|
||||
- CDDACodec();
|
||||
- virtual ~CDDACodec();
|
||||
-
|
||||
- virtual bool Init(const CStdString &strFile, unsigned int filecache);
|
||||
- virtual void DeInit();
|
||||
- virtual int64_t Seek(int64_t iSeekTime);
|
||||
- virtual int ReadPCM(BYTE *pBuffer, int size, int *actualsize);
|
||||
- virtual bool CanInit();
|
||||
- virtual CAEChannelInfo GetChannelInfo();
|
||||
-
|
||||
-private:
|
||||
- // Input buffer to read our cdda data into
|
||||
- BYTE* m_Buffer;
|
||||
- int m_BufferSize;
|
||||
- int m_BufferPos;
|
||||
-};
|
||||
diff -Naur xbmc-12.2.0/xbmc/cores/paplayer/CodecFactory.cpp xbmc-12.2.0.patch/xbmc/cores/paplayer/CodecFactory.cpp
|
||||
--- xbmc-12.2.0/xbmc/cores/paplayer/CodecFactory.cpp 2013-05-02 17:00:08.000000000 +0200
|
||||
+++ xbmc-12.2.0.patch/xbmc/cores/paplayer/CodecFactory.cpp 2013-05-10 07:16:56.061904946 +0200
|
||||
@@ -21,7 +21,6 @@
|
||||
#include "system.h"
|
||||
#include "CodecFactory.h"
|
||||
#include "MP3codec.h"
|
||||
-#include "CDDAcodec.h"
|
||||
#include "OGGcodec.h"
|
||||
#include "FLACcodec.h"
|
||||
#include "WAVcodec.h"
|
||||
@@ -51,7 +50,7 @@
|
||||
else if (strFileType.Equals("ape") || strFileType.Equals("mac"))
|
||||
return new DVDPlayerCodec();
|
||||
else if (strFileType.Equals("cdda"))
|
||||
- return new CDDACodec();
|
||||
+ return new DVDPlayerCodec();
|
||||
else if (strFileType.Equals("mpc") || strFileType.Equals("mp+") || strFileType.Equals("mpp"))
|
||||
return new DVDPlayerCodec();
|
||||
else if (strFileType.Equals("shn"))
|
||||
@@ -183,20 +182,6 @@
|
||||
}
|
||||
delete codec;
|
||||
}
|
||||
- if (urlFile.GetFileType().Equals("cdda"))
|
||||
- {
|
||||
- //lets see what it contains...
|
||||
- //this kinda sucks 'cause if it's plain cdda the file
|
||||
- //will be opened, sniffed and closed before it is opened *again* for cdda
|
||||
- //would be better if the papcodecs could work with bitstreams instead of filenames.
|
||||
- DVDPlayerCodec *dvdcodec = new DVDPlayerCodec();
|
||||
- dvdcodec->SetContentType("audio/x-spdif-compressed");
|
||||
- if (dvdcodec->Init(strFile, filecache))
|
||||
- {
|
||||
- return dvdcodec;
|
||||
- }
|
||||
- delete dvdcodec;
|
||||
- }
|
||||
else if (urlFile.GetFileType().Equals("ogg") || urlFile.GetFileType().Equals("oggstream") || urlFile.GetFileType().Equals("oga"))
|
||||
return CreateOGGCodec(strFile,filecache);
|
||||
|
||||
diff -Naur xbmc-12.2.0/xbmc/cores/paplayer/Makefile.in xbmc-12.2.0.patch/xbmc/cores/paplayer/Makefile.in
|
||||
--- xbmc-12.2.0/xbmc/cores/paplayer/Makefile.in 2013-05-02 17:00:08.000000000 +0200
|
||||
+++ xbmc-12.2.0.patch/xbmc/cores/paplayer/Makefile.in 2013-05-10 07:16:56.062904942 +0200
|
||||
@@ -9,7 +9,6 @@
|
||||
|
||||
SRCS = ADPCMCodec.cpp
|
||||
SRCS += AudioDecoder.cpp
|
||||
-SRCS += CDDAcodec.cpp
|
||||
SRCS += CodecFactory.cpp
|
||||
SRCS += DVDPlayerCodec.cpp
|
||||
SRCS += FLACcodec.cpp
|
||||
29
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.13-PR2493.patch
vendored
Normal file
29
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.13-PR2493.patch
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
From ff283b0861afd35410d20c52fee8ba0542e91f8a Mon Sep 17 00:00:00 2001
|
||||
From: ulion <ulion2002@gmail.com>
|
||||
Date: Sun, 24 Mar 2013 13:19:39 +0800
|
||||
Subject: [PATCH] Check exists before listing dir, to avoid produce error log,
|
||||
fix #14210
|
||||
|
||||
---
|
||||
xbmc/video/VideoInfoScanner.cpp | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/xbmc/video/VideoInfoScanner.cpp b/xbmc/video/VideoInfoScanner.cpp
|
||||
index 170b5a9..fbe7913 100644
|
||||
--- a/xbmc/video/VideoInfoScanner.cpp
|
||||
+++ b/xbmc/video/VideoInfoScanner.cpp
|
||||
@@ -1771,7 +1771,10 @@
|
||||
void CVideoInfoScanner::FetchActorThumbs(vector<SActorInfo>& actors, const CStdString& strPath)
|
||||
{
|
||||
CFileItemList items;
|
||||
- CDirectory::GetDirectory(URIUtils::AddFileToFolder(strPath, ".actors"), items, ".png|.jpg|.tbn", DIR_FLAG_NO_FILE_DIRS | DIR_FLAG_NO_FILE_INFO);
|
||||
+ CStdString actorsDir = URIUtils::AddFileToFolder(strPath, ".actors");
|
||||
+ if (CDirectory::Exists(actorsDir))
|
||||
+ CDirectory::GetDirectory(actorsDir, items, ".png|.jpg|.tbn", DIR_FLAG_NO_FILE_DIRS |
|
||||
+ DIR_FLAG_NO_FILE_INFO);
|
||||
for (vector<SActorInfo>::iterator i = actors.begin(); i != actors.end(); ++i)
|
||||
{
|
||||
if (i->thumb.IsEmpty())
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
From 5b75f44b448bcefb9b802a3a28d0e6846284d22e Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Mon, 6 May 2013 14:20:05 +0100
|
||||
Subject: [PATCH] [rbp/omxplayer] Fix for hang following seek after eos
|
||||
|
||||
If you seek after the demuxer eof, the eof state is cleared, but we are not clearing the flags relating to sending eos stream to audio/video players
|
||||
---
|
||||
xbmc/cores/omxplayer/OMXPlayer.cpp | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
|
||||
index 156a3ad..82d0024 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
|
||||
@@ -1178,7 +1178,13 @@ void COMXPlayer::Process()
|
||||
CDVDDemuxUtils::FreeDemuxPacket(pPacket);
|
||||
continue;
|
||||
}
|
||||
-
|
||||
+ if (pPacket)
|
||||
+ {
|
||||
+ // reset eos state when we get a packet (e.g. for case of seek after eos)
|
||||
+ bOmxWaitVideo = false;
|
||||
+ bOmxWaitAudio = false;
|
||||
+ bOmxSentEOFs = false;
|
||||
+ }
|
||||
if (!pPacket)
|
||||
{
|
||||
// when paused, demuxer could be be returning empty
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
295
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.15-PR2748.patch
vendored
Normal file
295
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.15-PR2748.patch
vendored
Normal file
@@ -0,0 +1,295 @@
|
||||
From 4a61baea4a936089b589f0b7a834aa180a1017ea Mon Sep 17 00:00:00 2001
|
||||
From: Bob van Loosen <bob.loosen@gmail.com>
|
||||
Date: Tue, 14 May 2013 12:28:45 +0200
|
||||
Subject: [PATCH 1/2] fixed: when doing a format conversion from float to 32
|
||||
bit int, multiply with INT32_MAX - 127, since this is the maximum value that
|
||||
can be stored in 32 bit float and int, if INT32_MAX gets converted to float,
|
||||
it gets rounded to INT32_MAX + 1 which can cause wrap around distortion
|
||||
|
||||
---
|
||||
xbmc/cores/AudioEngine/Utils/AEConvert.cpp | 32 +++++++++++++++++-------------
|
||||
1 file changed, 18 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/AudioEngine/Utils/AEConvert.cpp b/xbmc/cores/AudioEngine/Utils/AEConvert.cpp
|
||||
index 97ec87b..5f0af63 100644
|
||||
--- a/xbmc/cores/AudioEngine/Utils/AEConvert.cpp
|
||||
+++ b/xbmc/cores/AudioEngine/Utils/AEConvert.cpp
|
||||
@@ -922,17 +922,21 @@ unsigned int CAEConvert::Float_S24NE3(float *data, const unsigned int samples, u
|
||||
return samples * 3;
|
||||
}
|
||||
|
||||
+//float can't store INT32_MAX, it gets rounded up to INT32_MAX + 1
|
||||
+//INT32_MAX - 127 is the maximum value that can exactly be stored in both 32 bit float and int
|
||||
+#define MUL32 ((float)(INT32_MAX - 127))
|
||||
+
|
||||
unsigned int CAEConvert::Float_S32LE(float *data, const unsigned int samples, uint8_t *dest)
|
||||
{
|
||||
int32_t *dst = (int32_t*)dest;
|
||||
#ifdef __SSE__
|
||||
- const __m128 mul = _mm_set_ps1((float)INT32_MAX);
|
||||
+ const __m128 mul = _mm_set_ps1(MUL32);
|
||||
unsigned int count = samples;
|
||||
|
||||
/* work around invalid alignment */
|
||||
while ((((uintptr_t)data & 0xF) || ((uintptr_t)dest & 0xF)) && count > 0)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * (float)INT32_MAX);
|
||||
+ dst[0] = safeRound(data[0] * MUL32);
|
||||
++data;
|
||||
++dst;
|
||||
--count;
|
||||
@@ -955,7 +959,7 @@ unsigned int CAEConvert::Float_S32LE(float *data, const unsigned int samples, ui
|
||||
const uint32_t odd = samples - even;
|
||||
if (odd == 1)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * (float)INT32_MAX);
|
||||
+ dst[0] = safeRound(data[0] * MUL32);
|
||||
dst[0] = Endian_SwapLE32(dst[0]);
|
||||
}
|
||||
else
|
||||
@@ -988,7 +992,7 @@ unsigned int CAEConvert::Float_S32LE(float *data, const unsigned int samples, ui
|
||||
/* no SIMD */
|
||||
for (uint32_t i = 0; i < samples; ++i, ++data, ++dst)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * (float)INT32_MAX);
|
||||
+ dst[0] = safeRound(data[0] * MUL32);
|
||||
dst[0] = Endian_SwapLE32(dst[0]);
|
||||
}
|
||||
#endif
|
||||
@@ -1002,7 +1006,7 @@ unsigned int CAEConvert::Float_S32LE_Neon(float *data, const unsigned int sample
|
||||
int32_t *dst = (int32_t*)dest;
|
||||
for (float *end = data + (samples & ~0x3); data < end; data += 4, dst += 4)
|
||||
{
|
||||
- float32x4_t val = vmulq_n_f32(vld1q_f32((const float32_t *)data), INT32_MAX);
|
||||
+ float32x4_t val = vmulq_n_f32(vld1q_f32((const float32_t *)data), MUL32);
|
||||
int32x4_t ret = vcvtq_s32_f32(val);
|
||||
#ifdef __BIG_ENDIAN__
|
||||
ret = vrev64q_s32(ret);
|
||||
@@ -1012,7 +1016,7 @@ unsigned int CAEConvert::Float_S32LE_Neon(float *data, const unsigned int sample
|
||||
|
||||
if (samples & 0x2)
|
||||
{
|
||||
- float32x2_t val = vmul_n_f32(vld1_f32((const float32_t *)data), INT32_MAX);
|
||||
+ float32x2_t val = vmul_n_f32(vld1_f32((const float32_t *)data), MUL32);
|
||||
int32x2_t ret = vcvt_s32_f32(val);
|
||||
#ifdef __BIG_ENDIAN__
|
||||
ret = vrev64_s32(ret);
|
||||
@@ -1024,7 +1028,7 @@ unsigned int CAEConvert::Float_S32LE_Neon(float *data, const unsigned int sample
|
||||
|
||||
if (samples & 0x1)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * (float)INT32_MAX);
|
||||
+ dst[0] = safeRound(data[0] * MUL32);
|
||||
dst[0] = Endian_SwapLE32(dst[0]);
|
||||
}
|
||||
#endif
|
||||
@@ -1035,13 +1039,13 @@ unsigned int CAEConvert::Float_S32BE(float *data, const unsigned int samples, ui
|
||||
{
|
||||
int32_t *dst = (int32_t*)dest;
|
||||
#ifdef __SSE__
|
||||
- const __m128 mul = _mm_set_ps1((float)INT32_MAX);
|
||||
+ const __m128 mul = _mm_set_ps1(MUL32);
|
||||
unsigned int count = samples;
|
||||
|
||||
/* work around invalid alignment */
|
||||
while ((((uintptr_t)data & 0xF) || ((uintptr_t)dest & 0xF)) && count > 0)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * (float)INT32_MAX);
|
||||
+ dst[0] = safeRound(data[0] * MUL32);
|
||||
++data;
|
||||
++dst;
|
||||
--count;
|
||||
@@ -1064,7 +1068,7 @@ unsigned int CAEConvert::Float_S32BE(float *data, const unsigned int samples, ui
|
||||
const uint32_t odd = samples - even;
|
||||
if (odd == 1)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * (float)INT32_MAX);
|
||||
+ dst[0] = safeRound(data[0] * MUL32);
|
||||
dst[0] = Endian_SwapBE32(dst[0]);
|
||||
}
|
||||
else
|
||||
@@ -1096,7 +1100,7 @@ unsigned int CAEConvert::Float_S32BE(float *data, const unsigned int samples, ui
|
||||
/* no SIMD */
|
||||
for (uint32_t i = 0; i < samples; ++i, ++data, ++dst)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * (float)INT32_MAX);
|
||||
+ dst[0] = safeRound(data[0] * MUL32);
|
||||
dst[0] = Endian_SwapBE32(dst[0]);
|
||||
}
|
||||
#endif
|
||||
@@ -1110,7 +1114,7 @@ unsigned int CAEConvert::Float_S32BE_Neon(float *data, const unsigned int sample
|
||||
int32_t *dst = (int32_t*)dest;
|
||||
for (float *end = data + (samples & ~0x3); data < end; data += 4, dst += 4)
|
||||
{
|
||||
- float32x4_t val = vmulq_n_f32(vld1q_f32((const float32_t *)data), INT32_MAX);
|
||||
+ float32x4_t val = vmulq_n_f32(vld1q_f32((const float32_t *)data), MUL32);
|
||||
int32x4_t ret = vcvtq_s32_f32(val);
|
||||
#ifndef __BIG_ENDIAN__
|
||||
ret = vrev64q_s32(ret);
|
||||
@@ -1120,7 +1124,7 @@ unsigned int CAEConvert::Float_S32BE_Neon(float *data, const unsigned int sample
|
||||
|
||||
if (samples & 0x2)
|
||||
{
|
||||
- float32x2_t val = vmul_n_f32(vld1_f32((const float32_t *)data), INT32_MAX);
|
||||
+ float32x2_t val = vmul_n_f32(vld1_f32((const float32_t *)data), MUL32);
|
||||
int32x2_t ret = vcvt_s32_f32(val);
|
||||
#ifndef __BIG_ENDIAN__
|
||||
ret = vrev64_s32(ret);
|
||||
@@ -1132,7 +1136,7 @@ unsigned int CAEConvert::Float_S32BE_Neon(float *data, const unsigned int sample
|
||||
|
||||
if (samples & 0x1)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * (float)INT32_MAX);
|
||||
+ dst[0] = safeRound(data[0] * MUL32);
|
||||
dst[0] = Endian_SwapBE32(dst[0]);
|
||||
}
|
||||
#endif
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
|
||||
From edf2e3d3c9b124446961a9b66aaf401cf1770500 Mon Sep 17 00:00:00 2001
|
||||
From: Bob van Loosen <bob.loosen@gmail.com>
|
||||
Date: Tue, 14 May 2013 18:43:01 +0200
|
||||
Subject: [PATCH 2/2] rename: MUL32 -> AE_MUL32
|
||||
|
||||
---
|
||||
xbmc/cores/AudioEngine/Utils/AEConvert.cpp | 30 +++++++++++++++---------------
|
||||
1 file changed, 15 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/AudioEngine/Utils/AEConvert.cpp b/xbmc/cores/AudioEngine/Utils/AEConvert.cpp
|
||||
index 5f0af63..0b0b646 100644
|
||||
--- a/xbmc/cores/AudioEngine/Utils/AEConvert.cpp
|
||||
+++ b/xbmc/cores/AudioEngine/Utils/AEConvert.cpp
|
||||
@@ -924,19 +924,19 @@ unsigned int CAEConvert::Float_S24NE3(float *data, const unsigned int samples, u
|
||||
|
||||
//float can't store INT32_MAX, it gets rounded up to INT32_MAX + 1
|
||||
//INT32_MAX - 127 is the maximum value that can exactly be stored in both 32 bit float and int
|
||||
-#define MUL32 ((float)(INT32_MAX - 127))
|
||||
+#define AE_MUL32 ((float)(INT32_MAX - 127))
|
||||
|
||||
unsigned int CAEConvert::Float_S32LE(float *data, const unsigned int samples, uint8_t *dest)
|
||||
{
|
||||
int32_t *dst = (int32_t*)dest;
|
||||
#ifdef __SSE__
|
||||
- const __m128 mul = _mm_set_ps1(MUL32);
|
||||
+ const __m128 mul = _mm_set_ps1(AE_MUL32);
|
||||
unsigned int count = samples;
|
||||
|
||||
/* work around invalid alignment */
|
||||
while ((((uintptr_t)data & 0xF) || ((uintptr_t)dest & 0xF)) && count > 0)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * MUL32);
|
||||
+ dst[0] = safeRound(data[0] * AE_MUL32);
|
||||
++data;
|
||||
++dst;
|
||||
--count;
|
||||
@@ -959,7 +959,7 @@ unsigned int CAEConvert::Float_S32LE(float *data, const unsigned int samples, ui
|
||||
const uint32_t odd = samples - even;
|
||||
if (odd == 1)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * MUL32);
|
||||
+ dst[0] = safeRound(data[0] * AE_MUL32);
|
||||
dst[0] = Endian_SwapLE32(dst[0]);
|
||||
}
|
||||
else
|
||||
@@ -992,7 +992,7 @@ unsigned int CAEConvert::Float_S32LE(float *data, const unsigned int samples, ui
|
||||
/* no SIMD */
|
||||
for (uint32_t i = 0; i < samples; ++i, ++data, ++dst)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * MUL32);
|
||||
+ dst[0] = safeRound(data[0] * AE_MUL32);
|
||||
dst[0] = Endian_SwapLE32(dst[0]);
|
||||
}
|
||||
#endif
|
||||
@@ -1006,7 +1006,7 @@ unsigned int CAEConvert::Float_S32LE_Neon(float *data, const unsigned int sample
|
||||
int32_t *dst = (int32_t*)dest;
|
||||
for (float *end = data + (samples & ~0x3); data < end; data += 4, dst += 4)
|
||||
{
|
||||
- float32x4_t val = vmulq_n_f32(vld1q_f32((const float32_t *)data), MUL32);
|
||||
+ float32x4_t val = vmulq_n_f32(vld1q_f32((const float32_t *)data), AE_MUL32);
|
||||
int32x4_t ret = vcvtq_s32_f32(val);
|
||||
#ifdef __BIG_ENDIAN__
|
||||
ret = vrev64q_s32(ret);
|
||||
@@ -1016,7 +1016,7 @@ unsigned int CAEConvert::Float_S32LE_Neon(float *data, const unsigned int sample
|
||||
|
||||
if (samples & 0x2)
|
||||
{
|
||||
- float32x2_t val = vmul_n_f32(vld1_f32((const float32_t *)data), MUL32);
|
||||
+ float32x2_t val = vmul_n_f32(vld1_f32((const float32_t *)data), AE_MUL32);
|
||||
int32x2_t ret = vcvt_s32_f32(val);
|
||||
#ifdef __BIG_ENDIAN__
|
||||
ret = vrev64_s32(ret);
|
||||
@@ -1028,7 +1028,7 @@ unsigned int CAEConvert::Float_S32LE_Neon(float *data, const unsigned int sample
|
||||
|
||||
if (samples & 0x1)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * MUL32);
|
||||
+ dst[0] = safeRound(data[0] * AE_MUL32);
|
||||
dst[0] = Endian_SwapLE32(dst[0]);
|
||||
}
|
||||
#endif
|
||||
@@ -1039,13 +1039,13 @@ unsigned int CAEConvert::Float_S32BE(float *data, const unsigned int samples, ui
|
||||
{
|
||||
int32_t *dst = (int32_t*)dest;
|
||||
#ifdef __SSE__
|
||||
- const __m128 mul = _mm_set_ps1(MUL32);
|
||||
+ const __m128 mul = _mm_set_ps1(AE_MUL32);
|
||||
unsigned int count = samples;
|
||||
|
||||
/* work around invalid alignment */
|
||||
while ((((uintptr_t)data & 0xF) || ((uintptr_t)dest & 0xF)) && count > 0)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * MUL32);
|
||||
+ dst[0] = safeRound(data[0] * AE_MUL32);
|
||||
++data;
|
||||
++dst;
|
||||
--count;
|
||||
@@ -1068,7 +1068,7 @@ unsigned int CAEConvert::Float_S32BE(float *data, const unsigned int samples, ui
|
||||
const uint32_t odd = samples - even;
|
||||
if (odd == 1)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * MUL32);
|
||||
+ dst[0] = safeRound(data[0] * AE_MUL32);
|
||||
dst[0] = Endian_SwapBE32(dst[0]);
|
||||
}
|
||||
else
|
||||
@@ -1100,7 +1100,7 @@ unsigned int CAEConvert::Float_S32BE(float *data, const unsigned int samples, ui
|
||||
/* no SIMD */
|
||||
for (uint32_t i = 0; i < samples; ++i, ++data, ++dst)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * MUL32);
|
||||
+ dst[0] = safeRound(data[0] * AE_MUL32);
|
||||
dst[0] = Endian_SwapBE32(dst[0]);
|
||||
}
|
||||
#endif
|
||||
@@ -1114,7 +1114,7 @@ unsigned int CAEConvert::Float_S32BE_Neon(float *data, const unsigned int sample
|
||||
int32_t *dst = (int32_t*)dest;
|
||||
for (float *end = data + (samples & ~0x3); data < end; data += 4, dst += 4)
|
||||
{
|
||||
- float32x4_t val = vmulq_n_f32(vld1q_f32((const float32_t *)data), MUL32);
|
||||
+ float32x4_t val = vmulq_n_f32(vld1q_f32((const float32_t *)data), AE_MUL32);
|
||||
int32x4_t ret = vcvtq_s32_f32(val);
|
||||
#ifndef __BIG_ENDIAN__
|
||||
ret = vrev64q_s32(ret);
|
||||
@@ -1124,7 +1124,7 @@ unsigned int CAEConvert::Float_S32BE_Neon(float *data, const unsigned int sample
|
||||
|
||||
if (samples & 0x2)
|
||||
{
|
||||
- float32x2_t val = vmul_n_f32(vld1_f32((const float32_t *)data), MUL32);
|
||||
+ float32x2_t val = vmul_n_f32(vld1_f32((const float32_t *)data), AE_MUL32);
|
||||
int32x2_t ret = vcvt_s32_f32(val);
|
||||
#ifndef __BIG_ENDIAN__
|
||||
ret = vrev64_s32(ret);
|
||||
@@ -1136,7 +1136,7 @@ unsigned int CAEConvert::Float_S32BE_Neon(float *data, const unsigned int sample
|
||||
|
||||
if (samples & 0x1)
|
||||
{
|
||||
- dst[0] = safeRound(data[0] * MUL32);
|
||||
+ dst[0] = safeRound(data[0] * AE_MUL32);
|
||||
dst[0] = Endian_SwapBE32(dst[0]);
|
||||
}
|
||||
#endif
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,99 @@
|
||||
diff -Naur xbmc-12.1/xbmc/cores/omxplayer/OMXPlayerAudio.cpp xbmc-12.1.patch/xbmc/cores/omxplayer/OMXPlayerAudio.cpp
|
||||
--- xbmc-12.1/xbmc/cores/omxplayer/OMXPlayerAudio.cpp 2013-04-07 22:10:57.264461705 +0200
|
||||
+++ xbmc-12.1.patch/xbmc/cores/omxplayer/OMXPlayerAudio.cpp 2013-04-07 22:18:08.064718783 +0200
|
||||
@@ -80,6 +80,7 @@
|
||||
m_send_eos = false;
|
||||
m_bad_state = false;
|
||||
m_hints_current.Clear();
|
||||
+ m_output_stalled = false;
|
||||
|
||||
m_av_clock->SetMasterClock(false);
|
||||
|
||||
@@ -154,6 +155,7 @@
|
||||
m_stalled = m_messageQueue.GetPacketCount(CDVDMsg::DEMUXER_PACKET) == 0;
|
||||
m_use_passthrough = (g_guiSettings.GetInt("audiooutput.mode") == AUDIO_HDMI) ? true : false ;
|
||||
m_use_hw_decode = g_advancedSettings.m_omxHWAudioDecode;
|
||||
+ m_output_stalled = m_stalled;
|
||||
}
|
||||
|
||||
bool OMXPlayerAudio::CloseStream(bool bWaitForBuffers)
|
||||
@@ -442,11 +444,11 @@
|
||||
}
|
||||
|
||||
if(bDropPacket)
|
||||
- m_stalled = false;
|
||||
+ m_stalled = m_output_stalled = false;
|
||||
|
||||
if(m_omxAudio.GetCacheTime() < 0.1 /*&& min(99,m_messageQueue.GetLevel() + MathUtils::round_int(100.0/8.0*GetCacheTime())) > 10*/)
|
||||
{
|
||||
- m_stalled = true;
|
||||
+ m_stalled = m_output_stalled = true;
|
||||
if(!m_av_clock->OMXAudioBuffer() && m_av_clock->HasVideo() && m_speed == DVD_PLAYSPEED_NORMAL)
|
||||
{
|
||||
clock_gettime(CLOCK_REALTIME, &m_starttime);
|
||||
@@ -454,6 +456,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ if (m_stalled && m_omxAudio.GetCacheTime() > 0.0)
|
||||
+ m_stalled = false;
|
||||
+
|
||||
// signal to our parent that we have initialized
|
||||
if(m_started == false)
|
||||
{
|
||||
@@ -478,6 +483,7 @@
|
||||
|
||||
if (ret == MSGQ_TIMEOUT)
|
||||
{
|
||||
+ m_stalled = true;
|
||||
Sleep(10);
|
||||
continue;
|
||||
}
|
||||
@@ -497,12 +503,14 @@
|
||||
CLog::Log(LOGINFO, "Audio: dts:%.0f pts:%.0f size:%d (s:%d f:%d d:%d l:%d) s:%d %d/%d late:%d,%d", pPacket->dts, pPacket->pts,
|
||||
(int)pPacket->iSize, m_started, m_flush, bPacketDrop, m_stalled, m_speed, 0, 0, (int)m_omxAudio.GetAudioRenderingLatency(), (int)m_hints_current.samplerate);
|
||||
#endif
|
||||
+
|
||||
+ m_stalled = false;
|
||||
if(Decode(pPacket, m_speed > DVD_PLAYSPEED_NORMAL || m_speed < 0 || bPacketDrop))
|
||||
{
|
||||
- if (m_stalled && (m_omxAudio.GetCacheTime() > (AUDIO_BUFFER_SECONDS * 0.75f)))
|
||||
+ if (m_output_stalled && (m_omxAudio.GetCacheTime() > (AUDIO_BUFFER_SECONDS * 0.75f)))
|
||||
{
|
||||
CLog::Log(LOGINFO, "COMXPlayerAudio - Switching to normal playback");
|
||||
- m_stalled = false;
|
||||
+ m_stalled = m_output_stalled = false;
|
||||
if(m_av_clock->HasVideo() && m_av_clock->OMXAudioBuffer())
|
||||
m_av_clock->OMXAudioBufferStop();
|
||||
}
|
||||
@@ -510,9 +518,9 @@
|
||||
// hard unlock audio out buffering
|
||||
clock_gettime(CLOCK_REALTIME, &m_endtime);
|
||||
//int iLevel = min(99,m_messageQueue.GetLevel() + MathUtils::round_int(100.0/8.0*GetCacheTime()));
|
||||
- if(/*iLevel < 10 &&*/ m_stalled && m_av_clock->OMXAudioBuffer() && (m_endtime.tv_sec - m_starttime.tv_sec) > 1)
|
||||
+ if(/*iLevel < 10 &&*/ m_output_stalled && m_av_clock->OMXAudioBuffer() && (m_endtime.tv_sec - m_starttime.tv_sec) > 1)
|
||||
{
|
||||
- m_stalled = false;
|
||||
+ m_stalled = m_output_stalled = false;
|
||||
if(m_av_clock->HasVideo() && m_av_clock->OMXAudioBuffer())
|
||||
m_av_clock->OMXAudioBufferStop();
|
||||
}
|
||||
@@ -563,6 +571,7 @@
|
||||
m_av_clock->UnLock();
|
||||
m_syncclock = true;
|
||||
m_stalled = true;
|
||||
+ m_output_stalled = true;
|
||||
m_started = false;
|
||||
|
||||
if (m_pAudioCodec)
|
||||
diff -Naur xbmc-12.1/xbmc/cores/omxplayer/OMXPlayerAudio.h xbmc-12.1.patch/xbmc/cores/omxplayer/OMXPlayerAudio.h
|
||||
--- xbmc-12.1/xbmc/cores/omxplayer/OMXPlayerAudio.h 2013-04-07 22:10:57.262461708 +0200
|
||||
+++ xbmc-12.1.patch/xbmc/cores/omxplayer/OMXPlayerAudio.h 2013-04-07 22:13:15.931280700 +0200
|
||||
@@ -76,6 +76,7 @@
|
||||
|
||||
bool m_stalled;
|
||||
bool m_started;
|
||||
+ bool m_output_stalled;
|
||||
|
||||
BitstreamStats m_audioStats;
|
||||
|
||||
69
packages/mediacenter/xbmc/patches/12.2.0/xbmc-995.04-OMXPlayer-some_caching_fixes_for_pvr.patch
vendored
Normal file
69
packages/mediacenter/xbmc/patches/12.2.0/xbmc-995.04-OMXPlayer-some_caching_fixes_for_pvr.patch
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
From eacf9a512d118e50a9777ae05460a2a344a408e6 Mon Sep 17 00:00:00 2001
|
||||
From: xbmc <fernetmenta@online.de>
|
||||
Date: Thu, 28 Mar 2013 15:18:53 +0100
|
||||
Subject: [PATCH] OMXPlayer: some caching fixes for pvr
|
||||
|
||||
---
|
||||
xbmc/cores/omxplayer/OMXPlayer.cpp | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
|
||||
index 28addd3..34f3acb 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
|
||||
@@ -1243,13 +1243,13 @@ void COMXPlayer::Process()
|
||||
if (!IsValidStream(m_CurrentAudio) && m_player_audio.IsStalled()) CloseAudioStream(true);
|
||||
if (!IsValidStream(m_CurrentVideo) && m_player_video.IsStalled()) CloseVideoStream(true);
|
||||
if (!IsValidStream(m_CurrentSubtitle) && m_player_subtitle.IsStalled()) CloseSubtitleStream(true);
|
||||
- if (!IsValidStream(m_CurrentTeletext)) CloseTeletextStream(true);
|
||||
+// if (!IsValidStream(m_CurrentTeletext)) CloseTeletextStream(true);
|
||||
|
||||
// see if we can find something better to play
|
||||
if (IsBetterStream(m_CurrentAudio, pStream)) OpenAudioStream (pStream->iId, pStream->source);
|
||||
if (IsBetterStream(m_CurrentVideo, pStream)) OpenVideoStream (pStream->iId, pStream->source);
|
||||
if (IsBetterStream(m_CurrentSubtitle, pStream)) OpenSubtitleStream(pStream->iId, pStream->source);
|
||||
- if (IsBetterStream(m_CurrentTeletext, pStream)) OpenTeletextStream(pStream->iId, pStream->source);
|
||||
+// if (IsBetterStream(m_CurrentTeletext, pStream)) OpenTeletextStream(pStream->iId, pStream->source);
|
||||
|
||||
if(m_change_volume)
|
||||
{
|
||||
@@ -2233,7 +2233,8 @@ void COMXPlayer::HandleMessages()
|
||||
// 1. disable audio
|
||||
// 2. skip frames and adjust their pts or the clock
|
||||
m_playSpeed = speed;
|
||||
- m_caching = CACHESTATE_DONE;
|
||||
+ if (m_caching != CACHESTATE_PVR && m_playSpeed != DVD_PLAYSPEED_NORMAL)
|
||||
+ SetCaching(CACHESTATE_DONE);
|
||||
m_av_clock.SetSpeed(speed);
|
||||
m_av_clock.OMXSetSpeed(speed);
|
||||
m_player_audio.SetSpeed(speed);
|
||||
@@ -3106,7 +3107,7 @@ bool COMXPlayer::CloseAudioStream(bool bWaitForBuffers)
|
||||
|
||||
CLog::Log(LOGNOTICE, "Closing audio stream");
|
||||
|
||||
- if(bWaitForBuffers)
|
||||
+ if(bWaitForBuffers && m_caching != CACHESTATE_PVR)
|
||||
SetCaching(CACHESTATE_DONE);
|
||||
|
||||
m_player_audio.CloseStream(bWaitForBuffers);
|
||||
@@ -3122,7 +3123,7 @@ bool COMXPlayer::CloseVideoStream(bool bWaitForBuffers)
|
||||
|
||||
CLog::Log(LOGNOTICE, "Closing video stream");
|
||||
|
||||
- if(bWaitForBuffers)
|
||||
+ if(bWaitForBuffers && m_caching != CACHESTATE_PVR)
|
||||
SetCaching(CACHESTATE_DONE);
|
||||
|
||||
m_player_video.CloseStream(bWaitForBuffers);
|
||||
@@ -3151,7 +3152,7 @@ bool COMXPlayer::CloseTeletextStream(bool bWaitForBuffers)
|
||||
|
||||
CLog::Log(LOGNOTICE, "Closing teletext stream");
|
||||
|
||||
- if(bWaitForBuffers)
|
||||
+ if(bWaitForBuffers && m_caching != CACHESTATE_PVR)
|
||||
SetCaching(CACHESTATE_DONE);
|
||||
|
||||
m_player_teletext.CloseStream(bWaitForBuffers);
|
||||
--
|
||||
1.8.1.5
|
||||
|
||||
27
packages/mediacenter/xbmc/patches/12.2.0/xbmc-996.02-xbmc-revert-799d6ff03-setwakeup.sh.patch
vendored
Normal file
27
packages/mediacenter/xbmc/patches/12.2.0/xbmc-996.02-xbmc-revert-799d6ff03-setwakeup.sh.patch
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
From 7abb1f31a53cc0147ba6f5ed5fc796e2ac8584ff Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Saraev <stefan@saraev.ca>
|
||||
Date: Thu, 9 May 2013 21:11:47 +0300
|
||||
Subject: [PATCH] xbmc: revert 799d6ff03 (setwakeup.sh)
|
||||
|
||||
this reverts upstream commit 799d6ff03
|
||||
https://github.com/xbmc/xbmc/commit/799d6ff03
|
||||
---
|
||||
xbmc/settings/GUISettings.cpp | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/xbmc/settings/GUISettings.cpp b/xbmc/settings/GUISettings.cpp
|
||||
index 67aeec9..96f738c 100644
|
||||
--- a/xbmc/settings/GUISettings.cpp
|
||||
+++ b/xbmc/settings/GUISettings.cpp
|
||||
@@ -1001,7 +1001,7 @@ void CGUISettings::Initialize()
|
||||
AddBool(pvrpwr, "pvrpowermanagement.enabled", 305, false);
|
||||
AddSeparator(pvrpwr, "pvrpowermanagement.sep1");
|
||||
AddInt(pvrpwr, "pvrpowermanagement.backendidletime", 19244, 15, 0, 5, 360, SPIN_CONTROL_INT_PLUS, MASK_MINS, TEXT_OFF);
|
||||
- AddString(pvrpwr, "pvrpowermanagement.setwakeupcmd", 19245, "", EDIT_CONTROL_INPUT, true);
|
||||
+ AddString(pvrpwr, "pvrpowermanagement.setwakeupcmd", 19245, "/usr/bin/setwakeup.sh", EDIT_CONTROL_INPUT, true);
|
||||
AddInt(pvrpwr, "pvrpowermanagement.prewakeup", 19246, 15, 0, 1, 60, SPIN_CONTROL_INT_PLUS, MASK_MINS, TEXT_OFF);
|
||||
AddSeparator(pvrpwr, "pvrpowermanagement.sep2");
|
||||
AddBool(pvrpwr, "pvrpowermanagement.dailywakeup", 19247, false);
|
||||
--
|
||||
1.7.2.5
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
From 5016973c68567e0691c9dc6c14d78de9e7d4558c Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Fri, 25 Jan 2013 23:00:13 +0000
|
||||
Subject: [PATCH] [rbp] Add support for new video codecs Latest firmware has a
|
||||
start_x.elf with support for additional codecs. These are
|
||||
MJPEG, VP6, VP8 and Ogg Theora. They are software GPU
|
||||
accelerated and should be good for SD resolutions. This
|
||||
update should be harmless with firmware that doesn't
|
||||
support the new codecs - they will fail to open and behave
|
||||
as before.
|
||||
|
||||
---
|
||||
xbmc/cores/omxplayer/OMXVideo.cpp | 33 +++++++++++++++++++++++++++++++++
|
||||
1 file changed, 33 insertions(+)
|
||||
|
||||
diff --git a/xbmc/cores/omxplayer/OMXVideo.cpp b/xbmc/cores/omxplayer/OMXVideo.cpp
|
||||
index 9215fd9..45e10fe 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXVideo.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXVideo.cpp
|
||||
@@ -69,7 +69,10 @@
|
||||
#define OMX_MPEG2V_DECODER OMX_VIDEO_DECODER
|
||||
#define OMX_VC1_DECODER OMX_VIDEO_DECODER
|
||||
#define OMX_WMV3_DECODER OMX_VIDEO_DECODER
|
||||
+#define OMX_VP6_DECODER OMX_VIDEO_DECODER
|
||||
#define OMX_VP8_DECODER OMX_VIDEO_DECODER
|
||||
+#define OMX_THEORA_DECODER OMX_VIDEO_DECODER
|
||||
+#define OMX_MJPEG_DECODER OMX_VIDEO_DECODER
|
||||
|
||||
#define MAX_TEXT_LENGTH 1024
|
||||
|
||||
@@ -145,6 +148,7 @@ bool COMXVideo::NaluFormatStartCodes(enum CodecID codec, uint8_t *in_extradata,
|
||||
|
||||
bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, bool deinterlace, bool hdmi_clock_sync)
|
||||
{
|
||||
+ bool vflip = false;
|
||||
Close();
|
||||
|
||||
OMX_ERRORTYPE omx_err = OMX_ErrorNone;
|
||||
@@ -248,6 +252,18 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, bool deinterlace, b
|
||||
m_codingType = OMX_VIDEO_CodingMPEG4;
|
||||
m_video_codec_name = "omx-h263";
|
||||
break;
|
||||
+ case CODEC_ID_VP6:
|
||||
+ // this form is encoded upside down
|
||||
+ vflip = true;
|
||||
+ // fall through
|
||||
+ case CODEC_ID_VP6F:
|
||||
+ case CODEC_ID_VP6A:
|
||||
+ // (role name) video_decoder.vp6
|
||||
+ // VP6
|
||||
+ decoder_name = OMX_VP6_DECODER;
|
||||
+ m_codingType = OMX_VIDEO_CodingVP6;
|
||||
+ m_video_codec_name = "omx-vp6";
|
||||
+ break;
|
||||
case CODEC_ID_VP8:
|
||||
// (role name) video_decoder.vp8
|
||||
// VP8
|
||||
@@ -255,6 +271,21 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, bool deinterlace, b
|
||||
m_codingType = OMX_VIDEO_CodingVP8;
|
||||
m_video_codec_name = "omx-vp8";
|
||||
break;
|
||||
+ case CODEC_ID_THEORA:
|
||||
+ // (role name) video_decoder.theora
|
||||
+ // theora
|
||||
+ decoder_name = OMX_THEORA_DECODER;
|
||||
+ m_codingType = OMX_VIDEO_CodingTheora;
|
||||
+ m_video_codec_name = "omx-theora";
|
||||
+ break;
|
||||
+ case CODEC_ID_MJPEG:
|
||||
+ case CODEC_ID_MJPEGB:
|
||||
+ // (role name) video_decoder.mjpg
|
||||
+ // mjpg
|
||||
+ decoder_name = OMX_MJPEG_DECODER;
|
||||
+ m_codingType = OMX_VIDEO_CodingMJPEG;
|
||||
+ m_video_codec_name = "omx-mjpeg";
|
||||
+ break;
|
||||
case CODEC_ID_VC1:
|
||||
case CODEC_ID_WMV3:
|
||||
// (role name) video_decoder.vc1
|
||||
@@ -594,6 +625,8 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, bool deinterlace, b
|
||||
configDisplay.transform = OMX_DISPLAY_ROT0;
|
||||
break;
|
||||
}
|
||||
+ if (vflip)
|
||||
+ configDisplay.transform = OMX_DISPLAY_MIRROR_ROT180;
|
||||
|
||||
omx_err = m_omx_render.SetConfig(OMX_IndexConfigDisplayRegion, &configDisplay);
|
||||
if(omx_err != OMX_ErrorNone)
|
||||
--
|
||||
1.7.10
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
From 2c915ea56abd68cf2310eb9d01936d19a2f118ab Mon Sep 17 00:00:00 2001
|
||||
From: davilla <davilla@4pi.com>
|
||||
Date: Tue, 19 Mar 2013 13:41:53 -0400
|
||||
Subject: [PATCH] changed, assert(0) is nasty, this could just be a bad audio
|
||||
packet
|
||||
|
||||
---
|
||||
xbmc/cores/dvdplayer/DVDPlayerAudio.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp
|
||||
index 03ba5ea..e075cd6 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp
|
||||
@@ -284,7 +284,7 @@ int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe, bool bDropPacket)
|
||||
CLog::Log(LOGERROR, "CDVDPlayerAudio:DecodeFrame - Codec tried to consume more data than available. Potential memory corruption");
|
||||
m_decode.Release();
|
||||
m_pAudioCodec->Reset();
|
||||
- assert(0);
|
||||
+ return DECODE_FLAG_ERROR;
|
||||
}
|
||||
|
||||
m_decode.data += len;
|
||||
--
|
||||
1.8.1.5
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From befdcfad8d2b14c9d935c3662a56853d617f884d Mon Sep 17 00:00:00 2001
|
||||
From: Voyager1 <voyager@xbmc.org>
|
||||
Date: Sat, 23 Mar 2013 07:19:46 +0100
|
||||
Subject: [PATCH] [dvdplayer] fix deadlock when trying to go to disc menu
|
||||
|
||||
---
|
||||
xbmc/cores/dvdplayer/DVDPlayer.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
|
||||
index 3d2ca03..22c89dc 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
|
||||
@@ -3511,7 +3511,7 @@ bool CDVDPlayer::OnAction(const CAction &action)
|
||||
pMenus->OnMenu();
|
||||
// send a message to everyone that we've gone to the menu
|
||||
CGUIMessage msg(GUI_MSG_VIDEO_MENU_STARTED, 0, 0);
|
||||
- g_windowManager.SendMessage(msg);
|
||||
+ g_windowManager.SendThreadMessage(msg);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
--
|
||||
1.8.1.5
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
--- xbmc-12.0.3/configure.in.orig 2013-03-01 13:21:58.791312360 +0100
|
||||
+++ xbmc-12.0.3/configure.in 2013-03-01 13:38:41.138311757 +0100
|
||||
@@ -990,9 +990,15 @@
|
||||
AC_CHECK_LIB([tiff], [main],, AC_MSG_ERROR($missing_library))
|
||||
if echo "$ARCH" | grep -q freebsd; then
|
||||
AC_CHECK_LIB([pthread], [main],LIBS="-pthread $LIBS", AC_MSG_ERROR($missing_library))
|
||||
+AC_CHECK_LIB([pthread], [pthread_set_name_np],
|
||||
+ AC_DEFINE([HAVE_PTHREAD_SET_NAME_NP],[1],["Define to 1 if pthread has pthread_set_name_np"]),
|
||||
+ AC_MSG_RESULT([Could not find pthread_set_name_np in pthread]))
|
||||
else
|
||||
if test "$target_platform" != "target_android" ; then
|
||||
AC_CHECK_LIB([pthread], [main],, AC_MSG_ERROR($missing_library))
|
||||
+ AC_CHECK_LIB([pthread], [pthread_setname_np],
|
||||
+ AC_DEFINE([HAVE_PTHREAD_SETNAME_NP],[1],["Define to 1 if pthread has pthread_setname_np"]),
|
||||
+ AC_MSG_RESULT([Could not find pthread_setname_np in pthread]))
|
||||
fi
|
||||
fi
|
||||
AC_CHECK_LIB([lzo2], [main],, AC_MSG_ERROR($missing_library))
|
||||
--- xbmc-12.0.3/xbmc/threads/platform/pthreads/ThreadImpl.cpp.orig 2013-03-01 14:40:50.080309513 +0100
|
||||
+++ xbmc-12.0.3/xbmc/threads/platform/pthreads/ThreadImpl.cpp 2013-03-01 14:40:20.548309531 +0100
|
||||
@@ -18,6 +18,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
+#if (defined HAVE_CONFIG_H) && (!defined WIN32)
|
||||
+ #include "config.h"
|
||||
+#endif
|
||||
#include <limits.h>
|
||||
#if defined(TARGET_ANDROID)
|
||||
#include <unistd.h>
|
||||
@@ -71,10 +74,16 @@
|
||||
m_ThreadOpaque.LwpId = syscall(SYS_gettid);
|
||||
#endif
|
||||
|
||||
+#if defined(HAVE_PTHREAD_SETNAME_NP)
|
||||
#ifdef TARGET_DARWIN
|
||||
#if(__MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 || __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200)
|
||||
pthread_setname_np(m_ThreadName.c_str());
|
||||
#endif
|
||||
+#else
|
||||
+ pthread_setname_np(m_ThreadId, m_ThreadName.c_str());
|
||||
+#endif
|
||||
+#elif defined(HAVE_PTHREAD_SET_NAME_NP)
|
||||
+ pthread_set_name_np(m_ThreadId, m_ThreadName.c_str());
|
||||
#endif
|
||||
|
||||
#ifdef RLIMIT_NICE
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user