openelec.patch 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279
  1. diff -Nur xbmc-15.0-Isengard.orig/addons/resource.language.en_gb/resources/strings.po xbmc-15.0-Isengard/addons/resource.language.en_gb/resources/strings.po
  2. --- xbmc-15.0-Isengard.orig/addons/resource.language.en_gb/resources/strings.po 2015-07-21 13:41:29.000000000 -0500
  3. +++ xbmc-15.0-Isengard/addons/resource.language.en_gb/resources/strings.po 2015-07-25 08:01:50.578340000 -0500
  4. @@ -16642,3 +16642,28 @@
  5. msgctxt "#38016"
  6. msgid "%d fps"
  7. msgstr ""
  8. +
  9. +#: system/peripherals.xml
  10. +msgctxt "#38050"
  11. +msgid "Remote button press delay before repeating (ms)"
  12. +msgstr ""
  13. +
  14. +#: system/peripherals.xml
  15. +msgctxt "#38051"
  16. +msgid "Remote button press repeat rate (ms)"
  17. +msgstr ""
  18. +
  19. +#: system/peripherals.xml
  20. +msgctxt "#38052"
  21. +msgid "Remote button press release time (ms)"
  22. +msgstr ""
  23. +
  24. +#: system/settings/rbp.xml system/settings/imx6.xml
  25. +msgctxt "#38120"
  26. +msgid "Support 8 channel DTS-HD audio decoding"
  27. +msgstr ""
  28. +
  29. +#: system/settings/rbp.xml system/settings/imx6.xml
  30. +msgctxt "#38121"
  31. +msgid "Enables decoding of high quality DTS-HD audio streams. Note: This increases CPU load and is only available when DTS and DTS-HD audio passthrough are disabled."
  32. +msgstr ""
  33. diff -Nur xbmc-15.0-Isengard.orig/docs/README.linux xbmc-15.0-Isengard/docs/README.linux
  34. --- xbmc-15.0-Isengard.orig/docs/README.linux 2015-07-21 13:41:29.000000000 -0500
  35. +++ xbmc-15.0-Isengard/docs/README.linux 2015-07-25 08:01:50.586339999 -0500
  36. @@ -44,7 +44,7 @@
  37. external libraries enabled).
  38. Build-Depends: autoconf, automake, autopoint, autotools-dev, cmake, curl,
  39. - debhelper (>= 7.0.50~), default-jre, gawk, gperf, libao-dev, libasound2-dev,
  40. + dcadec-dev, default-jre, gawk, gperf, libao-dev, libasound2-dev,
  41. libass-dev (>= 0.9.8), libavahi-client-dev, libavahi-common-dev, libbluetooth-dev,
  42. libbluray-dev, libboost-dev, libboost-thread-dev, libbz2-dev, libcap-dev, libcdio-dev,
  43. libcec-dev, libcurl4-gnutls-dev | libcurl4-openssl-dev | libcurl-dev, libcwiid-dev,
  44. diff -Nur xbmc-15.0-Isengard.orig/docs/README.ubuntu xbmc-15.0-Isengard/docs/README.ubuntu
  45. --- xbmc-15.0-Isengard.orig/docs/README.ubuntu 2015-07-21 13:41:29.000000000 -0500
  46. +++ xbmc-15.0-Isengard/docs/README.ubuntu 2015-07-25 08:01:50.586339999 -0500
  47. @@ -82,7 +82,7 @@
  48. For Ubuntu (all versions >= 7.04):
  49. - $ sudo apt-get install automake bison build-essential cmake curl cvs default-jre fp-compiler gawk gdc gettext git-core gperf libasound2-dev libass-dev libboost-dev libboost-thread-dev libbz2-dev libcap-dev libcdio-dev libcurl3 libcurl4-gnutls-dev libdbus-1-dev libfontconfig-dev libfreetype6-dev libfribidi-dev libgif-dev libglew-dev libiso9660-dev libjasper-dev libjpeg-dev liblzo2-dev libmicrohttpd-dev libmodplug-dev libmpeg2-4-dev libmpeg3-dev libmysqlclient-dev libnfs-dev libogg-dev libpcre3-dev libplist-dev libpng-dev libpulse-dev libsdl2-dev libsmbclient-dev libsqlite3-dev libssh-dev libssl-dev libtiff-dev libtinyxml-dev libtool libudev-dev libusb-dev libva-dev libvdpau-dev libvorbis-dev libvorbisenc2 libxml2-dev libxmu-dev libxrandr-dev libxrender-dev libxslt1-dev libxt-dev libyajl-dev mesa-utils nasm pmount python-dev python-imaging python-sqlite swig unzip yasm zip zlib1g-dev
  50. + $ sudo apt-get install automake bison build-essential cmake curl cvs dcadec-dev default-jre fp-compiler gawk gdc gettext git-core gperf libasound2-dev libass-dev libboost-dev libboost-thread-dev libbz2-dev libcap-dev libcdio-dev libcurl3 libcurl4-gnutls-dev libdbus-1-dev libfontconfig-dev libfreetype6-dev libfribidi-dev libgif-dev libglew-dev libiso9660-dev libjasper-dev libjpeg-dev liblzo2-dev libmicrohttpd-dev libmodplug-dev libmpeg2-4-dev libmpeg3-dev libmysqlclient-dev libnfs-dev libogg-dev libpcre3-dev libplist-dev libpng-dev libpulse-dev libsdl2-dev libsmbclient-dev libsqlite3-dev libssh-dev libssl-dev libtiff-dev libtinyxml-dev libtool libudev-dev libusb-dev libva-dev libvdpau-dev libvorbis-dev libvorbisenc2 libxml2-dev libxmu-dev libxrandr-dev libxrender-dev libxslt1-dev libxt-dev libyajl-dev mesa-utils nasm pmount python-dev python-imaging python-sqlite swig unzip yasm zip zlib1g-dev
  51. For >= 10.10:
  52. $ sudo apt-get install autopoint libltdl-dev
  53. diff -Nur xbmc-15.0-Isengard.orig/Makefile.in xbmc-15.0-Isengard/Makefile.in
  54. --- xbmc-15.0-Isengard.orig/Makefile.in 2015-07-21 13:41:29.000000000 -0500
  55. +++ xbmc-15.0-Isengard/Makefile.in 2015-07-25 08:01:50.566340001 -0500
  56. @@ -445,7 +445,7 @@
  57. @FFMPEG_LIBDIR@/libpostproc.a \
  58. @FFMPEG_LIBDIR@/libswscale.a
  59. DYNOBJSXBMC+= $(FFMPEGOBJS)
  60. -LIBS+= @GNUTLS_ALL_LIBS@ @VORBISENC_ALL_LIBS@
  61. +LIBS+= @GNUTLS_ALL_LIBS@ @VORBISENC_ALL_LIBS@ @DCADEC_ALL_LIBS@
  62. $(FFMPEGOBJS): dvdpcodecs
  63. endif
  64. diff -Nur xbmc-15.0-Isengard.orig/system/keyboardlayouts/english.xml xbmc-15.0-Isengard/system/keyboardlayouts/english.xml
  65. --- xbmc-15.0-Isengard.orig/system/keyboardlayouts/english.xml 2015-07-21 13:41:29.000000000 -0500
  66. +++ xbmc-15.0-Isengard/system/keyboardlayouts/english.xml 2015-07-25 08:01:50.526340002 -0500
  67. @@ -8,14 +8,14 @@
  68. <keyboard>
  69. <row>1234567890</row>
  70. <row>qwertyuiop</row>
  71. - <row>asdfghjkl</row>
  72. - <row>zxcvbnm</row>
  73. + <row>asdfghjkl:</row>
  74. + <row>zxcvbnm./@</row>
  75. </keyboard>
  76. <keyboard modifiers="shift">
  77. <row>1234567890</row>
  78. <row>QWERTYUIOP</row>
  79. - <row>ASDFGHJKL</row>
  80. - <row>ZXCVBNM</row>
  81. + <row>ASDFGHJKL:</row>
  82. + <row>ZXCVBNM./@</row>
  83. </keyboard>
  84. <keyboard modifiers="symbol,shift+symbol">
  85. <row>)!@#$%^&amp;*(</row>
  86. diff -Nur xbmc-15.0-Isengard.orig/system/peripherals.xml xbmc-15.0-Isengard/system/peripherals.xml
  87. --- xbmc-15.0-Isengard.orig/system/peripherals.xml 2015-07-21 13:41:29.000000000 -0500
  88. +++ xbmc-15.0-Isengard/system/peripherals.xml 2015-07-25 08:01:50.534339999 -0500
  89. @@ -30,7 +30,9 @@
  90. <setting key="device_type" type="int" value="1" configurable="0" />
  91. <setting key="wake_devices_advanced" type="string" value="" configurable="0" />
  92. <setting key="standby_devices_advanced" type="string" value="" configurable="0" />
  93. - <setting key="double_tap_timeout_ms" type="int" min="0" value="300" configurable="0" />
  94. + <setting key="double_tap_timeout_ms" type="int" min="50" max="1000" step="50" value="300" label="38050" order="16" />
  95. + <setting key="button_repeat_rate_ms" type="int" min="0" max="250" step="10" value="0" label="38051" order="17" />
  96. + <setting key="button_release_delay_ms" type="int" min="0" max="500" step="50" value="0" label="38052" order="18" />
  97. </peripheral>
  98. <peripheral vendor_product="2548:1001,2548:1002" bus="usb" name="Pulse-Eight CEC Adapter" mapTo="cec">
  99. diff -Nur xbmc-15.0-Isengard.orig/system/settings/imx6.xml xbmc-15.0-Isengard/system/settings/imx6.xml
  100. --- xbmc-15.0-Isengard.orig/system/settings/imx6.xml 2015-07-21 13:41:29.000000000 -0500
  101. +++ xbmc-15.0-Isengard/system/settings/imx6.xml 2015-07-25 08:01:50.578340000 -0500
  102. @@ -13,6 +13,26 @@
  103. </setting>
  104. </group>
  105. </category>
  106. + <category id="audiooutput">
  107. + <group id="1">
  108. + <setting id="audiooutput.supportdtshdcpudecoding" type="boolean" label="38120" help="38121">
  109. + <level>2</level>
  110. + <default>false</default>
  111. + <control type="toggle" />
  112. + <dependencies>
  113. + <dependency type="enable">
  114. + <or>
  115. + <condition setting="audiooutput.passthrough" operator="is">false</condition>
  116. + <and>
  117. + <condition setting="audiooutput.dtshdpassthrough" operator="is">false</condition>
  118. + <condition setting="audiooutput.dtspassthrough" operator="is">false</condition>
  119. + </and>
  120. + </or>
  121. + </dependency>
  122. + </dependencies>
  123. + </setting>
  124. + </group>
  125. + </category>
  126. </section>
  127. <section id="videos">
  128. <category id="videoacceleration">
  129. diff -Nur xbmc-15.0-Isengard.orig/system/settings/rbp2.xml xbmc-15.0-Isengard/system/settings/rbp2.xml
  130. --- xbmc-15.0-Isengard.orig/system/settings/rbp2.xml 2015-07-21 13:41:29.000000000 -0500
  131. +++ xbmc-15.0-Isengard/system/settings/rbp2.xml 2015-07-25 08:01:50.578340000 -0500
  132. @@ -19,6 +19,11 @@
  133. </group>
  134. </category>
  135. <category id="audiooutput">
  136. + <group id="1">
  137. + <setting id="audiooutput.supportdtshdcpudecoding">
  138. + <default>true</default>
  139. + </setting>
  140. + </group>
  141. <group id="3">
  142. <setting id="audiooutput.ac3transcode" help="36429">
  143. </setting>
  144. diff -Nur xbmc-15.0-Isengard.orig/system/settings/rbp.xml xbmc-15.0-Isengard/system/settings/rbp.xml
  145. --- xbmc-15.0-Isengard.orig/system/settings/rbp.xml 2015-07-21 13:41:29.000000000 -0500
  146. +++ xbmc-15.0-Isengard/system/settings/rbp.xml 2015-07-25 08:01:50.578340000 -0500
  147. @@ -76,6 +76,11 @@
  148. <setting id="audiooutput.processquality">
  149. <default>101</default> <!-- AE_QUALITY_GPU -->
  150. </setting>
  151. + <setting id="audiooutput.supportdtshdcpudecoding" type="boolean" label="38120" help="38121">
  152. + <level>2</level>
  153. + <default>false</default>
  154. + <control type="toggle" />
  155. + </setting>
  156. </group>
  157. <group id="3">
  158. <setting id="audiooutput.ac3transcode" help="37024">
  159. diff -Nur xbmc-15.0-Isengard.orig/tools/depends/target/ffmpeg/0001-avcodec-add-libdcadec-decoder.patch xbmc-15.0-Isengard/tools/depends/target/ffmpeg/0001-avcodec-add-libdcadec-decoder.patch
  160. --- xbmc-15.0-Isengard.orig/tools/depends/target/ffmpeg/0001-avcodec-add-libdcadec-decoder.patch 1969-12-31 18:00:00.000000000 -0600
  161. +++ xbmc-15.0-Isengard/tools/depends/target/ffmpeg/0001-avcodec-add-libdcadec-decoder.patch 2015-07-25 08:01:50.570340002 -0500
  162. @@ -0,0 +1,280 @@
  163. +From 519868de7d9c99876efcaf57d6a9683c22732cde Mon Sep 17 00:00:00 2001
  164. +From: Hendrik Leppkes <h.leppkes@gmail.com>
  165. +Date: Thu, 19 Mar 2015 23:56:22 +0100
  166. +Subject: [PATCH] avcodec: add libdcadec decoder
  167. +
  168. +Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
  169. +---
  170. + configure | 4 +
  171. + libavcodec/Makefile | 1 +
  172. + libavcodec/allcodecs.c | 1 +
  173. + libavcodec/libdcadec.c | 197 +++++++++++++++++++++++++++++++++++++++++++++++++
  174. + 4 files changed, 203 insertions(+)
  175. + create mode 100644 libavcodec/libdcadec.c
  176. +
  177. +diff --git a/configure b/configure
  178. +index 1bf8f80..a449bc7 100755
  179. +--- a/configure
  180. ++++ b/configure
  181. +@@ -210,6 +210,7 @@ External library support:
  182. + --enable-libcdio enable audio CD grabbing with libcdio [no]
  183. + --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
  184. + and libraw1394 [no]
  185. ++ --enable-libdcadec enable DCA decoding via libdcadec [no]
  186. + --enable-libfaac enable AAC encoding via libfaac [no]
  187. + --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
  188. + --enable-libflite enable flite (voice synthesis) support via libflite [no]
  189. +@@ -1353,6 +1354,7 @@ EXTERNAL_LIBRARY_LIST="
  190. + libcdio
  191. + libcelt
  192. + libdc1394
  193. ++ libdcadec
  194. + libfaac
  195. + libfdk_aac
  196. + libflite
  197. +@@ -2359,6 +2361,7 @@ vc1_parser_select="mpegvideo startcode vc1_decoder"
  198. + # external libraries
  199. + libaacplus_encoder_deps="libaacplus"
  200. + libcelt_decoder_deps="libcelt"
  201. ++libdcadec_decoder_deps="libdcadec"
  202. + libfaac_encoder_deps="libfaac"
  203. + libfaac_encoder_select="audio_frame_queue"
  204. + libfdk_aac_decoder_deps="libfdk_aac"
  205. +@@ -4922,6 +4925,7 @@ enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
  206. + { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
  207. + die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
  208. + enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
  209. ++enabled libdcadec && require libdcadec dca_context.h dcadec_context_create -ldcadec
  210. + enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
  211. + enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
  212. + flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
  213. +diff --git a/libavcodec/Makefile b/libavcodec/Makefile
  214. +index 4173f88..1a0c734 100644
  215. +--- a/libavcodec/Makefile
  216. ++++ b/libavcodec/Makefile
  217. +@@ -732,6 +732,7 @@ OBJS-$(CONFIG_ELBG_FILTER) += elbg.o
  218. + # external codec libraries
  219. + OBJS-$(CONFIG_LIBAACPLUS_ENCODER) += libaacplus.o
  220. + OBJS-$(CONFIG_LIBCELT_DECODER) += libcelt_dec.o
  221. ++OBJS-$(CONFIG_LIBDCADEC_DECODER) += libdcadec.o
  222. + OBJS-$(CONFIG_LIBFAAC_ENCODER) += libfaac.o
  223. + OBJS-$(CONFIG_LIBFDK_AAC_DECODER) += libfdk-aacdec.o
  224. + OBJS-$(CONFIG_LIBFDK_AAC_ENCODER) += libfdk-aacenc.o
  225. +diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
  226. +index 5194e74..bbf70a6 100644
  227. +--- a/libavcodec/allcodecs.c
  228. ++++ b/libavcodec/allcodecs.c
  229. +@@ -512,6 +512,7 @@ void avcodec_register_all(void)
  230. +
  231. + /* external libraries */
  232. + REGISTER_DECODER(LIBCELT, libcelt);
  233. ++ REGISTER_DECODER(LIBDCADEC, libdcadec)
  234. + REGISTER_ENCODER(LIBFAAC, libfaac);
  235. + REGISTER_ENCDEC (LIBFDK_AAC, libfdk_aac);
  236. + REGISTER_ENCDEC (LIBGSM, libgsm);
  237. +diff --git a/libavcodec/libdcadec.c b/libavcodec/libdcadec.c
  238. +new file mode 100644
  239. +index 0000000..d060db5
  240. +--- /dev/null
  241. ++++ b/libavcodec/libdcadec.c
  242. +@@ -0,0 +1,197 @@
  243. ++/*
  244. ++ * libdcadec decoder wrapper
  245. ++ * Copyright (C) 2015 Hendrik Leppkes
  246. ++ *
  247. ++ * This file is part of FFmpeg.
  248. ++ *
  249. ++ * FFmpeg is free software; you can redistribute it and/or
  250. ++ * modify it under the terms of the GNU Lesser General Public
  251. ++ * License as published by the Free Software Foundation; either
  252. ++ * version 2.1 of the License, or (at your option) any later version.
  253. ++ *
  254. ++ * FFmpeg is distributed in the hope that it will be useful,
  255. ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
  256. ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  257. ++ * Lesser General Public License for more details.
  258. ++ *
  259. ++ * You should have received a copy of the GNU Lesser General Public
  260. ++ * License along with FFmpeg; if not, write to the Free Software
  261. ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  262. ++ */
  263. ++
  264. ++#include <dca_context.h>
  265. ++
  266. ++#include "libavutil/avassert.h"
  267. ++#include "libavutil/channel_layout.h"
  268. ++#include "libavutil/common.h"
  269. ++#include "libavutil/opt.h"
  270. ++#include "avcodec.h"
  271. ++#include "dca.h"
  272. ++#include "dca_syncwords.h"
  273. ++#include "internal.h"
  274. ++
  275. ++typedef struct DCADecContext {
  276. ++ struct dcadec_context *ctx;
  277. ++ uint8_t *buffer;
  278. ++ int buffer_size;
  279. ++} DCADecContext;
  280. ++
  281. ++static int dcadec_decode_frame(AVCodecContext *avctx, void *data,
  282. ++ int *got_frame_ptr, AVPacket *avpkt)
  283. ++{
  284. ++ DCADecContext *s = avctx->priv_data;
  285. ++ AVFrame *frame = data;
  286. ++ int ret, i, k;
  287. ++ int **samples, nsamples, channel_mask, sample_rate, bits_per_sample, profile;
  288. ++ uint32_t mrk;
  289. ++ uint8_t *input = avpkt->data;
  290. ++ int input_size = avpkt->size;
  291. ++
  292. ++ /* convert bytestream syntax to RAW BE format if required */
  293. ++ mrk = AV_RB32(input);
  294. ++ if (mrk != DCA_SYNCWORD_CORE_BE && mrk != DCA_SYNCWORD_SUBSTREAM) {
  295. ++ s->buffer = av_fast_realloc(s->buffer, &s->buffer_size, avpkt->size + FF_INPUT_BUFFER_PADDING_SIZE);
  296. ++ if (!s->buffer)
  297. ++ return AVERROR(ENOMEM);
  298. ++
  299. ++ if ((ret = avpriv_dca_convert_bitstream(avpkt->data, avpkt->size, s->buffer, s->buffer_size)) < 0)
  300. ++ return ret;
  301. ++
  302. ++ input = s->buffer;
  303. ++ input_size = ret;
  304. ++ }
  305. ++
  306. ++ if ((ret = dcadec_context_parse(s->ctx, input, input_size)) < 0) {
  307. ++ av_log(avctx, AV_LOG_ERROR, "dcadec_context_parse() failed: %d (%s)\n", -ret, dcadec_strerror(ret));
  308. ++ return AVERROR_EXTERNAL;
  309. ++ }
  310. ++ if ((ret = dcadec_context_filter(s->ctx, &samples, &nsamples, &channel_mask,
  311. ++ &sample_rate, &bits_per_sample, &profile)) < 0) {
  312. ++ av_log(avctx, AV_LOG_ERROR, "dcadec_context_filter() failed: %d (%s)\n", -ret, dcadec_strerror(ret));
  313. ++ return AVERROR_EXTERNAL;
  314. ++ }
  315. ++
  316. ++ avctx->channels = av_get_channel_layout_nb_channels(channel_mask);
  317. ++ avctx->channel_layout = channel_mask;
  318. ++ avctx->sample_rate = sample_rate;
  319. ++
  320. ++ av_assert0(bits_per_sample >= 16 && bits_per_sample <= 24);
  321. ++ if (bits_per_sample == 16)
  322. ++ avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
  323. ++ else
  324. ++ avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
  325. ++
  326. ++ avctx->bits_per_raw_sample = bits_per_sample;
  327. ++
  328. ++ switch (profile) {
  329. ++ case DCADEC_PROFILE_DS:
  330. ++ avctx->profile = FF_PROFILE_DTS;
  331. ++ break;
  332. ++ case DCADEC_PROFILE_DS_96_24:
  333. ++ avctx->profile = FF_PROFILE_DTS_96_24;
  334. ++ break;
  335. ++ case DCADEC_PROFILE_DS_ES:
  336. ++ avctx->profile = FF_PROFILE_DTS_ES;
  337. ++ break;
  338. ++ case DCADEC_PROFILE_HD_HRA:
  339. ++ avctx->profile = FF_PROFILE_DTS_HD_HRA;
  340. ++ break;
  341. ++ case DCADEC_PROFILE_HD_MA:
  342. ++ avctx->profile = FF_PROFILE_DTS_HD_MA;
  343. ++ break;
  344. ++ case DCADEC_PROFILE_EXPRESS:
  345. ++ avctx->profile = FF_PROFILE_DTS_EXPRESS;
  346. ++ break;
  347. ++ case DCADEC_PROFILE_UNKNOWN:
  348. ++ default:
  349. ++ avctx->profile = FF_PROFILE_UNKNOWN;
  350. ++ break;
  351. ++ }
  352. ++
  353. ++ /* bitrate is only meaningful if there are no HD extensions, as they distort the bitrate */
  354. ++ if (profile == DCADEC_PROFILE_DS || profile == DCADEC_PROFILE_DS_96_24 || profile == DCADEC_PROFILE_DS_ES) {
  355. ++ struct dcadec_core_info *info = dcadec_context_get_core_info(s->ctx);
  356. ++ avctx->bit_rate = info->bit_rate;
  357. ++ dcadec_context_free_core_info(info);
  358. ++ } else
  359. ++ avctx->bit_rate = 0;
  360. ++
  361. ++ frame->nb_samples = nsamples;
  362. ++ if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
  363. ++ return ret;
  364. ++
  365. ++ for (i = 0; i < avctx->channels; i++) {
  366. ++ if (frame->format == AV_SAMPLE_FMT_S16P) {
  367. ++ int16_t *plane = (int16_t *)frame->extended_data[i];
  368. ++ for (k = 0; k < nsamples; k++)
  369. ++ plane[k] = samples[i][k];
  370. ++ } else {
  371. ++ int32_t *plane = (int32_t *)frame->extended_data[i];
  372. ++ int shift = 32 - bits_per_sample;
  373. ++ for (k = 0; k < nsamples; k++)
  374. ++ plane[k] = samples[i][k] << shift;
  375. ++ }
  376. ++ }
  377. ++
  378. ++ *got_frame_ptr = 1;
  379. ++
  380. ++ return avpkt->size;
  381. ++}
  382. ++
  383. ++static av_cold void dcadec_flush(AVCodecContext *avctx)
  384. ++{
  385. ++ DCADecContext *s = avctx->priv_data;
  386. ++ dcadec_context_clear(s->ctx);
  387. ++}
  388. ++
  389. ++static av_cold int dcadec_close(AVCodecContext *avctx)
  390. ++{
  391. ++ DCADecContext *s = avctx->priv_data;
  392. ++
  393. ++ dcadec_context_destroy(s->ctx);
  394. ++ s->ctx = NULL;
  395. ++
  396. ++ av_freep(&s->buffer);
  397. ++
  398. ++ return 0;
  399. ++}
  400. ++
  401. ++static av_cold int dcadec_init(AVCodecContext *avctx)
  402. ++{
  403. ++ DCADecContext *s = avctx->priv_data;
  404. ++
  405. ++ s->ctx = dcadec_context_create(0);
  406. ++ if (!s->ctx)
  407. ++ return AVERROR(ENOMEM);
  408. ++
  409. ++ avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
  410. ++ avctx->bits_per_raw_sample = 24;
  411. ++
  412. ++ return 0;
  413. ++}
  414. ++
  415. ++static const AVProfile profiles[] = {
  416. ++ { FF_PROFILE_DTS, "DTS" },
  417. ++ { FF_PROFILE_DTS_ES, "DTS-ES" },
  418. ++ { FF_PROFILE_DTS_96_24, "DTS 96/24" },
  419. ++ { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
  420. ++ { FF_PROFILE_DTS_HD_MA, "DTS-HD MA" },
  421. ++ { FF_PROFILE_DTS_EXPRESS, "DTS Express" },
  422. ++ { FF_PROFILE_UNKNOWN },
  423. ++};
  424. ++
  425. ++AVCodec ff_libdcadec_decoder = {
  426. ++ .name = "libdcadec",
  427. ++ .long_name = NULL_IF_CONFIG_SMALL("dcadec DCA decoder"),
  428. ++ .type = AVMEDIA_TYPE_AUDIO,
  429. ++ .id = AV_CODEC_ID_DTS,
  430. ++ .priv_data_size = sizeof(DCADecContext),
  431. ++ .init = dcadec_init,
  432. ++ .decode = dcadec_decode_frame,
  433. ++ .close = dcadec_close,
  434. ++ .flush = dcadec_flush,
  435. ++ .capabilities = CODEC_CAP_DR1 | CODEC_CAP_CHANNEL_CONF,
  436. ++ .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_S16P,
  437. ++ AV_SAMPLE_FMT_NONE },
  438. ++ .profiles = NULL_IF_CONFIG_SMALL(profiles),
  439. ++};
  440. +--
  441. +1.9.1
  442. +
  443. diff -Nur xbmc-15.0-Isengard.orig/tools/depends/target/ffmpeg/0002-avcodec-Fix-libdcadec-include-dir.patch xbmc-15.0-Isengard/tools/depends/target/ffmpeg/0002-avcodec-Fix-libdcadec-include-dir.patch
  444. --- xbmc-15.0-Isengard.orig/tools/depends/target/ffmpeg/0002-avcodec-Fix-libdcadec-include-dir.patch 1969-12-31 18:00:00.000000000 -0600
  445. +++ xbmc-15.0-Isengard/tools/depends/target/ffmpeg/0002-avcodec-Fix-libdcadec-include-dir.patch 2015-07-25 08:01:50.570340002 -0500
  446. @@ -0,0 +1,40 @@
  447. +From 4f3c31df3f569c7171ee9e651ddf479690367b9b Mon Sep 17 00:00:00 2001
  448. +From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <kasper93@gmail.com>
  449. +Date: Fri, 20 Mar 2015 01:58:25 +0100
  450. +Subject: [PATCH] avcodec: Fix libdcadec include dir
  451. +
  452. +Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
  453. +---
  454. + configure | 2 +-
  455. + libavcodec/libdcadec.c | 2 +-
  456. + 2 files changed, 2 insertions(+), 2 deletions(-)
  457. +
  458. +diff --git a/configure b/configure
  459. +index a449bc7..1ef83e3 100755
  460. +--- a/configure
  461. ++++ b/configure
  462. +@@ -4925,7 +4925,7 @@ enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
  463. + { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
  464. + die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
  465. + enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
  466. +-enabled libdcadec && require libdcadec dca_context.h dcadec_context_create -ldcadec
  467. ++enabled libdcadec && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
  468. + enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
  469. + enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
  470. + flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
  471. +diff --git a/libavcodec/libdcadec.c b/libavcodec/libdcadec.c
  472. +index d060db5..a28b983 100644
  473. +--- a/libavcodec/libdcadec.c
  474. ++++ b/libavcodec/libdcadec.c
  475. +@@ -19,7 +19,7 @@
  476. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  477. + */
  478. +
  479. +-#include <dca_context.h>
  480. ++#include <libdcadec/dca_context.h>
  481. +
  482. + #include "libavutil/avassert.h"
  483. + #include "libavutil/channel_layout.h"
  484. +--
  485. +1.9.1
  486. +
  487. diff -Nur xbmc-15.0-Isengard.orig/tools/depends/target/ffmpeg/0003-avcodec-add-profile-define-for-DTS-Express.patch xbmc-15.0-Isengard/tools/depends/target/ffmpeg/0003-avcodec-add-profile-define-for-DTS-Express.patch
  488. --- xbmc-15.0-Isengard.orig/tools/depends/target/ffmpeg/0003-avcodec-add-profile-define-for-DTS-Express.patch 1969-12-31 18:00:00.000000000 -0600
  489. +++ xbmc-15.0-Isengard/tools/depends/target/ffmpeg/0003-avcodec-add-profile-define-for-DTS-Express.patch 2015-07-25 08:01:50.570340002 -0500
  490. @@ -0,0 +1,25 @@
  491. +From 11fe56c8bbf39cd0c3edbf0cd404dea400ff7e0c Mon Sep 17 00:00:00 2001
  492. +From: Hendrik Leppkes <h.leppkes@gmail.com>
  493. +Date: Thu, 19 Mar 2015 23:45:39 +0100
  494. +Subject: [PATCH] avcodec: add profile define for DTS Express
  495. +
  496. +Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
  497. +---
  498. + libavcodec/avcodec.h | 1 +
  499. + 1 file changed, 1 insertion(+)
  500. +
  501. +diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
  502. +index cdc8aa1..48e212f 100644
  503. +--- a/libavcodec/avcodec.h
  504. ++++ b/libavcodec/avcodec.h
  505. +@@ -2851,6 +2851,7 @@ typedef struct AVCodecContext {
  506. + #define FF_PROFILE_DTS_96_24 40
  507. + #define FF_PROFILE_DTS_HD_HRA 50
  508. + #define FF_PROFILE_DTS_HD_MA 60
  509. ++#define FF_PROFILE_DTS_EXPRESS 70
  510. +
  511. + #define FF_PROFILE_MPEG2_422 0
  512. + #define FF_PROFILE_MPEG2_HIGH 1
  513. +--
  514. +1.9.1
  515. +
  516. diff -Nur xbmc-15.0-Isengard.orig/tools/depends/target/ffmpeg/autobuild.sh xbmc-15.0-Isengard/tools/depends/target/ffmpeg/autobuild.sh
  517. --- xbmc-15.0-Isengard.orig/tools/depends/target/ffmpeg/autobuild.sh 2015-07-21 13:41:29.000000000 -0500
  518. +++ xbmc-15.0-Isengard/tools/depends/target/ffmpeg/autobuild.sh 2015-07-25 08:01:50.586339999 -0500
  519. @@ -159,6 +159,7 @@
  520. --disable-mips32r2 \
  521. --disable-mipsdspr1 \
  522. --disable-mipsdspr2 \
  523. + --enable-libdcadec \
  524. ${FLAGS}
  525. make -j ${BUILDTHREADS}
  526. diff -Nur xbmc-15.0-Isengard.orig/tools/depends/target/ffmpeg/Makefile xbmc-15.0-Isengard/tools/depends/target/ffmpeg/Makefile
  527. --- xbmc-15.0-Isengard.orig/tools/depends/target/ffmpeg/Makefile 2015-07-21 13:41:29.000000000 -0500
  528. +++ xbmc-15.0-Isengard/tools/depends/target/ffmpeg/Makefile 2015-07-25 08:01:50.582339999 -0500
  529. @@ -1,6 +1,7 @@
  530. include ../../Makefile.include
  531. include FFMPEG-VERSION
  532. -DEPS= ../../Makefile.include FFMPEG-VERSION Makefile
  533. +DEPS= ../../Makefile.include FFMPEG-VERSION Makefile \
  534. + 0001-avcodec-add-libdcadec-decoder.patch 0002-avcodec-Fix-libdcadec-include-dir.patch 0003-avcodec-add-profile-define-for-DTS-Express.patch
  535. # set to "yes" to enable patching
  536. # we don't apply patches until we move to a vanilla ffmpeg tarball
  537. @@ -55,6 +56,7 @@
  538. ifeq ($(Configuration), Release)
  539. ffmpg_config += --disable-debug
  540. endif
  541. +ffmpg_config += --enable-libdcadec
  542. CLEAN_FILES=$(ARCHIVE) $(PLATFORM)
  543. @@ -68,6 +70,9 @@
  544. rm -rf $(PLATFORM); mkdir -p $(PLATFORM)
  545. cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
  546. cd $(PLATFORM); sed -i".bak" -e "s%pkg_config_default=pkg-config%export PKG_CONFIG_LIBDIR=$(PREFIX)/lib/pkgconfig \&\& pkg_config_default=$(NATIVEPREFIX)/bin/pkg-config%" configure
  547. + cd $(PLATFORM); patch -p1 < ../0001-avcodec-add-libdcadec-decoder.patch
  548. + cd $(PLATFORM); patch -p1 < ../0002-avcodec-Fix-libdcadec-include-dir.patch
  549. + cd $(PLATFORM); patch -p1 < ../0003-avcodec-add-profile-define-for-DTS-Express.patch
  550. cd $(PLATFORM);\
  551. CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \
  552. ./configure $(ffmpg_config)
  553. diff -Nur xbmc-15.0-Isengard.orig/tools/depends/target/libdcadec/Makefile xbmc-15.0-Isengard/tools/depends/target/libdcadec/Makefile
  554. --- xbmc-15.0-Isengard.orig/tools/depends/target/libdcadec/Makefile 1969-12-31 18:00:00.000000000 -0600
  555. +++ xbmc-15.0-Isengard/tools/depends/target/libdcadec/Makefile 2015-07-25 08:01:50.586339999 -0500
  556. @@ -0,0 +1,39 @@
  557. +include ../../Makefile.include
  558. +DEPS= ../../Makefile.include Makefile
  559. +
  560. +# lib name, version
  561. +LIBNAME=libdcadec
  562. +VERSION=git-396e75652
  563. +SOURCE=$(LIBNAME)-$(VERSION)
  564. +ARCHIVE=$(SOURCE).tar.gz
  565. +
  566. +# configuration settings
  567. +
  568. +LIBDYLIB=$(PLATFORM)/.libs/lib$(LIBNAME).a
  569. +
  570. +CLEAN_FILES=$(ARCHIVE) $(PLATFORM)
  571. +
  572. +CFLAGS += -std=gnu99
  573. +
  574. +all: $(LIBDYLIB) .installed-$(PLATFORM)
  575. +
  576. +$(TARBALLS_LOCATION)/$(ARCHIVE):
  577. + cd $(TARBALLS_LOCATION); $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
  578. +
  579. +$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
  580. + rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM)
  581. + cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
  582. +
  583. +$(LIBDYLIB): $(PLATFORM)
  584. + $(MAKE) -C $(PLATFORM) PREFIX=$(PREFIX) CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" AR="$(AR)"
  585. +
  586. +.installed-$(PLATFORM): $(LIBDYLIB)
  587. + $(MAKE) -C $(PLATFORM) PREFIX=$(PREFIX) CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" AR="$(AR)" install
  588. + touch $@
  589. +
  590. +clean:
  591. + $(MAKE) -C $(PLATFORM) clean
  592. + rm -f .installed-$(PLATFORM)
  593. +
  594. +distclean::
  595. + rm -rf $(PLATFORM) .installed-$(PLATFORM)
  596. diff -Nur xbmc-15.0-Isengard.orig/tools/depends/target/Makefile xbmc-15.0-Isengard/tools/depends/target/Makefile
  597. --- xbmc-15.0-Isengard.orig/tools/depends/target/Makefile 2015-07-21 13:41:29.000000000 -0500
  598. +++ xbmc-15.0-Isengard/tools/depends/target/Makefile 2015-07-25 08:01:50.570340002 -0500
  599. @@ -15,7 +15,7 @@
  600. python26 libshairplay \
  601. libplist libcec libbluray boost tinyxml dummy-libxbmc \
  602. libamplayer libssh taglib libusb libnfs libmp3lame \
  603. - pythonmodule-pil libxslt ffmpeg platform
  604. + pythonmodule-pil libxslt ffmpeg platform libdcadec
  605. FFMPEG_DEPENDS = gnutls
  606. @@ -96,7 +96,7 @@
  607. pythonmodule-pil: $(ZLIB) libjpeg-turbo libpng freetype2 python26
  608. libsdl2: $(LINUX_SYSTEM_LIBS)
  609. libxslt: libgcrypt
  610. -ffmpeg: $(ICONV) $(ZLIB) bzip2 libvorbis $(FFMPEG_DEPENDS)
  611. +ffmpeg: $(ICONV) $(ZLIB) bzip2 libvorbis libdcadec $(FFMPEG_DEPENDS)
  612. libcec: platform
  613. .installed-$(PLATFORM): $(DEPENDS)
  614. diff -Nur xbmc-15.0-Isengard.orig/userdata/RssFeeds.xml xbmc-15.0-Isengard/userdata/RssFeeds.xml
  615. --- xbmc-15.0-Isengard.orig/userdata/RssFeeds.xml 2015-07-21 13:41:29.000000000 -0500
  616. +++ xbmc-15.0-Isengard/userdata/RssFeeds.xml 2015-07-25 08:01:50.462339999 -0500
  617. @@ -3,6 +3,7 @@
  618. <!-- RSS feeds. To have multiple feeds, just add a feed to the set. You can also have multiple sets. !-->
  619. <!-- To use different sets in your skin, each must be called from skin with a unique id. !-->
  620. <set id="1">
  621. + <feed updateinterval="30">http://feeds.openelec.tv/news</feed>
  622. <feed updateinterval="30">http://feeds.xbmc.org/xbmc</feed>
  623. <feed updateinterval="30">http://feeds.xbmc.org/latest_xbmc_addons</feed>
  624. <feed updateinterval="30">http://feeds.xbmc.org/updated_xbmc_addons</feed>
  625. diff -Nur xbmc-15.0-Isengard.orig/xbmc/addons/AddonCallbacksAddon.cpp xbmc-15.0-Isengard/xbmc/addons/AddonCallbacksAddon.cpp
  626. --- xbmc-15.0-Isengard.orig/xbmc/addons/AddonCallbacksAddon.cpp 2015-07-21 13:41:29.000000000 -0500
  627. +++ xbmc-15.0-Isengard/xbmc/addons/AddonCallbacksAddon.cpp 2015-07-25 08:01:50.542340001 -0500
  628. @@ -180,6 +180,12 @@
  629. {
  630. CLog::Log(LOGDEBUG, "CAddonCallbacksAddon - %s - add-on '%s' requests setting '%s'", __FUNCTION__, addonHelper->m_addon->Name().c_str(), strSettingName);
  631. + if (strcasecmp(strSettingName, "__addonpath__") == 0)
  632. + {
  633. + strcpy((char*) settingValue, addonHelper->m_addon->Path().c_str());
  634. + return true;
  635. + }
  636. +
  637. if (!addonHelper->m_addon->ReloadSettings())
  638. {
  639. CLog::Log(LOGERROR, "CAddonCallbacksAddon - %s - could't get settings for add-on '%s'", __FUNCTION__, addonHelper->m_addon->Name().c_str());
  640. diff -Nur xbmc-15.0-Isengard.orig/xbmc/addons/Addon.cpp xbmc-15.0-Isengard/xbmc/addons/Addon.cpp
  641. --- xbmc-15.0-Isengard.orig/xbmc/addons/Addon.cpp 2015-07-21 13:41:29.000000000 -0500
  642. +++ xbmc-15.0-Isengard/xbmc/addons/Addon.cpp 2015-07-25 08:01:50.494340001 -0500
  643. @@ -44,6 +44,10 @@
  644. #include <string.h>
  645. #include <ostream>
  646. +#include <iostream>
  647. +#include <dirent.h>
  648. +#include <sys/stat.h>
  649. +
  650. using XFILE::CDirectory;
  651. using XFILE::CFile;
  652. using namespace std;
  653. @@ -622,6 +626,13 @@
  654. return AddonVersion("0.0.0");
  655. }
  656. +void CallOEWrapper(const std::string& ID, bool disable)
  657. +{
  658. + char cmd[255];
  659. + snprintf(cmd, sizeof(cmd), "/usr/lib/openelec/systemd-addon-wrapper %s %d %d", ID.c_str(), disable);
  660. + system(cmd);
  661. +}
  662. +
  663. void OnEnabled(const std::string& id)
  664. {
  665. // If the addon is a special, call enabled handler
  666. @@ -629,6 +640,11 @@
  667. if (CAddonMgr::Get().GetAddon(id, addon, ADDON_PVRDLL))
  668. return addon->OnEnabled();
  669. + // OE: systemctl enable & start on addon enable
  670. + if (CAddonMgr::Get().GetAddon(id, addon, ADDON_SERVICE))
  671. + CallOEWrapper(addon->ID(), false);
  672. + // OE
  673. +
  674. if (CAddonMgr::Get().GetAddon(id, addon, ADDON_SERVICE))
  675. std::static_pointer_cast<CService>(addon)->Start();
  676. @@ -645,6 +661,11 @@
  677. if (CAddonMgr::Get().GetAddon(id, addon, ADDON_SERVICE, false))
  678. std::static_pointer_cast<CService>(addon)->Stop();
  679. + // OE: systemctl stop & disable on addon disable
  680. + if (CAddonMgr::Get().GetAddon(id, addon, ADDON_SERVICE, false))
  681. + CallOEWrapper(addon->ID(), true);
  682. + // OE
  683. +
  684. if (CAddonMgr::Get().GetAddon(id, addon, ADDON_CONTEXT_ITEM, false))
  685. CContextMenuManager::Get().Unregister(std::static_pointer_cast<CContextItemAddon>(addon));
  686. }
  687. @@ -668,18 +689,53 @@
  688. void OnPostInstall(const AddonPtr& addon, bool update, bool modal)
  689. {
  690. AddonPtr localAddon;
  691. + // OE: systemctl stop & disable / enable & start on addon upgrade
  692. + if (CAddonMgr::Get().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
  693. + {
  694. + CallOEWrapper(addon->ID(), true);
  695. + CallOEWrapper(addon->ID(), false);
  696. + }
  697. + // OE
  698. +
  699. if (CAddonMgr::Get().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
  700. std::static_pointer_cast<CService>(localAddon)->Start();
  701. if (CAddonMgr::Get().GetAddon(addon->ID(), localAddon, ADDON_CONTEXT_ITEM))
  702. CContextMenuManager::Get().Register(std::static_pointer_cast<CContextItemAddon>(localAddon));
  703. + // OE: make binary addons executable, creddits to vpeter4
  704. + std::string addonDirPath;
  705. + std::string chmodFilePath;
  706. + DIR *addonsDir;
  707. + struct dirent *fileDirent;
  708. + struct stat fileStat;
  709. + int statRet;
  710. +
  711. + addonDirPath = "/storage/.kodi/addons/" + addon->ID() + "/bin/";
  712. + if ((addonsDir = opendir(addonDirPath.c_str())) != NULL)
  713. + {
  714. + while ((fileDirent = readdir(addonsDir)) != NULL)
  715. + {
  716. + chmodFilePath = addonDirPath + fileDirent->d_name;
  717. + statRet = stat(chmodFilePath.c_str(), &fileStat);
  718. + if (statRet == 0 && (fileStat.st_mode & S_IFMT) != S_IFDIR)
  719. + chmod(chmodFilePath.c_str(), fileStat.st_mode | S_IXUSR | S_IXGRP | S_IXOTH);
  720. + }
  721. + closedir(addonsDir);
  722. + }
  723. + // OE
  724. +
  725. addon->OnPostInstall(update, modal);
  726. }
  727. void OnPreUnInstall(const AddonPtr& addon)
  728. {
  729. AddonPtr localAddon;
  730. + // OE: systemctl stop & disable on addon ininstall
  731. + if (CAddonMgr::Get().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
  732. + CallOEWrapper(addon->ID(), true);
  733. + // OE
  734. +
  735. if (CAddonMgr::Get().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
  736. std::static_pointer_cast<CService>(localAddon)->Stop();
  737. diff -Nur xbmc-15.0-Isengard.orig/xbmc/addons/Addon.h xbmc-15.0-Isengard/xbmc/addons/Addon.h
  738. --- xbmc-15.0-Isengard.orig/xbmc/addons/Addon.h 2015-07-21 13:41:29.000000000 -0500
  739. +++ xbmc-15.0-Isengard/xbmc/addons/Addon.h 2015-07-25 08:01:50.494340001 -0500
  740. @@ -171,6 +171,8 @@
  741. const InfoMap &ExtraInfo() const { return m_props.extrainfo; }
  742. const ADDONDEPS &GetDeps() const { return m_props.dependencies; }
  743. + void CallOEWrapper(const std::string& ID, bool disable);
  744. +
  745. /*! \brief get the required version of a dependency.
  746. \param dependencyID the addon ID of the dependency.
  747. \return the version this addon requires.
  748. diff -Nur xbmc-15.0-Isengard.orig/xbmc/Application.cpp xbmc-15.0-Isengard/xbmc/Application.cpp
  749. --- xbmc-15.0-Isengard.orig/xbmc/Application.cpp 2015-07-21 13:41:29.000000000 -0500
  750. +++ xbmc-15.0-Isengard/xbmc/Application.cpp 2015-07-25 08:01:50.502340002 -0500
  751. @@ -2593,12 +2593,19 @@
  752. }
  753. }
  754. +void CApplication::SetExitCode(int exitCode)
  755. +{
  756. + // save it for CEC
  757. + m_ExitCode = exitCode;
  758. + m_ExitCodeSet = true;
  759. +}
  760. +
  761. void CApplication::Stop(int exitCode)
  762. {
  763. try
  764. {
  765. CVariant vExitCode(CVariant::VariantTypeObject);
  766. - vExitCode["exitcode"] = exitCode;
  767. + vExitCode["exitcode"] = m_ExitCode;
  768. CAnnouncementManager::Get().Announce(System, "xbmc", "OnQuit", vExitCode);
  769. // Abort any active screensaver
  770. @@ -2625,7 +2632,6 @@
  771. m_bStop = true;
  772. m_AppFocused = false;
  773. - m_ExitCode = exitCode;
  774. CLog::Log(LOGNOTICE, "stop all");
  775. // cancel any jobs from the jobmanager
  776. @@ -4732,7 +4738,6 @@
  777. void CApplication::Minimize()
  778. {
  779. - g_Windowing.Minimize();
  780. }
  781. PLAYERCOREID CApplication::GetCurrentPlayer()
  782. diff -Nur xbmc-15.0-Isengard.orig/xbmc/Application.h xbmc-15.0-Isengard/xbmc/Application.h
  783. --- xbmc-15.0-Isengard.orig/xbmc/Application.h 2015-07-21 13:41:29.000000000 -0500
  784. +++ xbmc-15.0-Isengard/xbmc/Application.h 2015-07-25 08:01:50.502340002 -0500
  785. @@ -154,6 +154,7 @@
  786. bool StartPVRManager();
  787. void StopPVRManager();
  788. bool IsCurrentThread() const;
  789. + void SetExitCode(int exitCode);
  790. void Stop(int exitCode);
  791. void RestartApp();
  792. void UnloadSkin(bool forReload = false);
  793. diff -Nur xbmc-15.0-Isengard.orig/xbmc/ApplicationMessenger.cpp xbmc-15.0-Isengard/xbmc/ApplicationMessenger.cpp
  794. --- xbmc-15.0-Isengard.orig/xbmc/ApplicationMessenger.cpp 2015-07-21 13:41:29.000000000 -0500
  795. +++ xbmc-15.0-Isengard/xbmc/ApplicationMessenger.cpp 2015-07-25 08:01:50.502340002 -0500
  796. @@ -257,13 +257,14 @@
  797. case TMSG_POWERDOWN:
  798. {
  799. - g_application.Stop(EXITCODE_POWERDOWN);
  800. + g_application.SetExitCode(EXITCODE_POWERDOWN);
  801. g_powerManager.Powerdown();
  802. }
  803. break;
  804. case TMSG_QUIT:
  805. {
  806. + g_application.SetExitCode(EXITCODE_QUIT);
  807. g_application.Stop(EXITCODE_QUIT);
  808. }
  809. break;
  810. @@ -285,7 +286,7 @@
  811. case TMSG_RESTART:
  812. case TMSG_RESET:
  813. {
  814. - g_application.Stop(EXITCODE_REBOOT);
  815. + g_application.SetExitCode(EXITCODE_REBOOT);
  816. g_powerManager.Reboot();
  817. }
  818. break;
  819. @@ -293,6 +294,7 @@
  820. case TMSG_RESTARTAPP:
  821. {
  822. #if defined(TARGET_WINDOWS) || defined(TARGET_LINUX)
  823. + g_application.SetExitCode(EXITCODE_RESTARTAPP);
  824. g_application.Stop(EXITCODE_RESTARTAPP);
  825. #endif
  826. }
  827. diff -Nur xbmc-15.0-Isengard.orig/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp xbmc-15.0-Isengard/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp
  828. --- xbmc-15.0-Isengard.orig/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp 2015-07-21 13:41:29.000000000 -0500
  829. +++ xbmc-15.0-Isengard/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp 2015-07-25 08:01:50.618340002 -0500
  830. @@ -28,6 +28,7 @@
  831. #include "cores/AudioEngine/Encoders/AEEncoderFFmpeg.h"
  832. #include "settings/Settings.h"
  833. +#include "settings/AdvancedSettings.h"
  834. #include "windowing/WindowingFactory.h"
  835. #include "utils/log.h"
  836. @@ -1505,6 +1506,13 @@
  837. format.m_channelLayout = AE_CH_LAYOUT_2_0;
  838. }
  839. + // OpenELEC workaround to define a minimum sample Rate for broken AVRs
  840. + if (format.m_sampleRate < g_advancedSettings.m_minimumSampleRate)
  841. + {
  842. + format.m_sampleRate = g_advancedSettings.m_minimumSampleRate;
  843. + CLog::Log(LOGDEBUG, "CActiveAE::MinimumSampleRate - Forced by use to samplerate %d", format.m_sampleRate);
  844. + }
  845. +
  846. if (m_settings.config == AE_CONFIG_FIXED)
  847. {
  848. format.m_sampleRate = m_settings.samplerate;
  849. diff -Nur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp
  850. --- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp 2015-07-21 13:41:29.000000000 -0500
  851. +++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp 2015-07-25 08:01:50.582339999 -0500
  852. @@ -33,6 +33,7 @@
  853. #include "settings/Settings.h"
  854. #include "cores/AudioEngine/Utils/AEUtil.h"
  855. #endif
  856. +#include "settings/Settings.h"
  857. CDVDAudioCodecFFmpeg::CDVDAudioCodecFFmpeg() : CDVDAudioCodec()
  858. {
  859. @@ -54,10 +55,19 @@
  860. bool CDVDAudioCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
  861. {
  862. - AVCodec* pCodec;
  863. + AVCodec* pCodec = NULL;
  864. m_bOpenedCodec = false;
  865. - pCodec = avcodec_find_decoder(hints.codec);
  866. + bool allow_dtshd_decoding = true;
  867. +#if defined(TARGET_RASPBERRY_PI) || defined(HAS_IMXVPU) || defined(HAS_LIBAMCODEC)
  868. + allow_dtshd_decoding = CSettings::Get().GetBool("audiooutput.supportdtshdcpudecoding");
  869. +#endif
  870. + if (hints.codec == AV_CODEC_ID_DTS && allow_dtshd_decoding)
  871. + pCodec = avcodec_find_decoder_by_name("libdcadec");
  872. +
  873. + if (!pCodec)
  874. + pCodec = avcodec_find_decoder(hints.codec);
  875. +
  876. if (!pCodec)
  877. {
  878. CLog::Log(LOGDEBUG,"CDVDAudioCodecFFmpeg::Open() Unable to find codec %d", hints.codec);
  879. diff -Nur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
  880. --- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp 2015-07-21 13:41:29.000000000 -0500
  881. +++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp 2015-07-25 08:01:50.630339999 -0500
  882. @@ -38,7 +38,7 @@
  883. #define IMX_VDI_MAX_WIDTH 968
  884. #define FRAME_ALIGN 16
  885. #define MEDIAINFO 1
  886. -#define RENDER_QUEUE_SIZE 3
  887. +#define RENDER_QUEUE_SIZE 5
  888. #define _4CC(c1,c2,c3,c4) (((uint32_t)(c4)<<24)|((uint32_t)(c3)<<16)|((uint32_t)(c2)<<8)|(uint32_t)(c1))
  889. #define Align(ptr,align) (((unsigned int)ptr + (align) - 1)/(align)*(align))
  890. #define Align2(ptr,align) (((unsigned int)ptr)/(align)*(align))
  891. diff -Nur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
  892. --- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp 2015-07-21 13:41:29.000000000 -0500
  893. +++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp 2015-07-25 08:01:50.582339999 -0500
  894. @@ -439,6 +439,21 @@
  895. if (m_streaminfo)
  896. {
  897. +#if defined(TARGET_RASPBERRY_PI) || defined(HAS_IMXVPU) || defined(HAS_LIBAMCODEC)
  898. + if (CSettings::Get().GetBool("audiooutput.supportdtshdcpudecoding"))
  899. +#endif
  900. + {
  901. + for (unsigned int i = 0; i < m_pFormatContext->nb_streams; i++)
  902. + {
  903. + AVStream *st = m_pFormatContext->streams[i];
  904. + if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && st->codec->codec_id == AV_CODEC_ID_DTS)
  905. + {
  906. + AVCodec* pCodec = avcodec_find_decoder_by_name("libdcadec");
  907. + if (pCodec)
  908. + st->codec->codec = pCodec;
  909. + }
  910. + }
  911. + }
  912. /* to speed up dvd switches, only analyse very short */
  913. if(m_pInput->IsStreamType(DVDSTREAM_TYPE_DVD))
  914. av_opt_set_int(m_pFormatContext, "analyzeduration", 500000, 0);
  915. diff -Nur xbmc-15.0-Isengard.orig/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp xbmc-15.0-Isengard/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp
  916. --- xbmc-15.0-Isengard.orig/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp 2015-07-21 13:41:29.000000000 -0500
  917. +++ xbmc-15.0-Isengard/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp 2015-07-25 08:01:50.582339999 -0500
  918. @@ -26,6 +26,7 @@
  919. #include "cores/AudioEngine/Utils/AEUtil.h"
  920. #include "cores/AudioEngine/AEFactory.h"
  921. +#include "settings/Settings.h"
  922. // the size of the audio_render output port buffers
  923. #define AUDIO_DECODE_OUTPUT_BUFFER (32*1024)
  924. @@ -62,10 +63,15 @@
  925. bool COMXAudioCodecOMX::Open(CDVDStreamInfo &hints)
  926. {
  927. - AVCodec* pCodec;
  928. + AVCodec* pCodec = NULL;
  929. m_bOpenedCodec = false;
  930. - pCodec = avcodec_find_decoder(hints.codec);
  931. + if (hints.codec == AV_CODEC_ID_DTS && CSettings::Get().GetBool("audiooutput.supportdtshdcpudecoding"))
  932. + pCodec = avcodec_find_decoder_by_name("libdcadec");
  933. +
  934. + if (!pCodec)
  935. + pCodec = avcodec_find_decoder(hints.codec);
  936. +
  937. if (!pCodec)
  938. {
  939. CLog::Log(LOGDEBUG,"COMXAudioCodecOMX::Open() Unable to find codec %d", hints.codec);
  940. diff -Nur xbmc-15.0-Isengard.orig/xbmc/GUIInfoManager.cpp xbmc-15.0-Isengard/xbmc/GUIInfoManager.cpp
  941. --- xbmc-15.0-Isengard.orig/xbmc/GUIInfoManager.cpp 2015-07-21 13:41:29.000000000 -0500
  942. +++ xbmc-15.0-Isengard/xbmc/GUIInfoManager.cpp 2015-07-25 08:01:50.466339999 -0500
  943. @@ -272,7 +272,6 @@
  944. { "currentwindow", SYSTEM_CURRENT_WINDOW },
  945. { "currentcontrol", SYSTEM_CURRENT_CONTROL },
  946. { "dvdlabel", SYSTEM_DVD_LABEL },
  947. - { "internetstate", SYSTEM_INTERNET_STATE },
  948. { "osversioninfo", SYSTEM_OS_VERSION_INFO },
  949. { "kernelversion", SYSTEM_OS_VERSION_INFO }, // old, not correct name
  950. { "uptime", SYSTEM_UPTIME },
  951. diff -Nur xbmc-15.0-Isengard.orig/xbmc/interfaces/python/XBPython.cpp xbmc-15.0-Isengard/xbmc/interfaces/python/XBPython.cpp
  952. --- xbmc-15.0-Isengard.orig/xbmc/interfaces/python/XBPython.cpp 2015-07-21 13:41:29.000000000 -0500
  953. +++ xbmc-15.0-Isengard/xbmc/interfaces/python/XBPython.cpp 2015-07-25 08:01:50.458340000 -0500
  954. @@ -567,10 +567,9 @@
  955. // at http://docs.python.org/using/cmdline.html#environment-variables
  956. #if !defined(TARGET_WINDOWS) && !defined(TARGET_ANDROID)
  957. - /* PYTHONOPTIMIZE is set off intentionally when using external Python.
  958. - Reason for this is because we cannot be sure what version of Python
  959. - was used to compile the various Python object files (i.e. .pyo,
  960. - .pyc, etc.). */
  961. + // Required for python to find optimized code (pyo) files
  962. + setenv("PYTHONOPTIMIZE", "1", 1);
  963. +
  964. // check if we are running as real xbmc.app or just binary
  965. if (!CUtil::GetFrameworksPath(true).empty())
  966. {
  967. diff -Nur xbmc-15.0-Isengard.orig/xbmc/linux/LinuxTimezone.cpp xbmc-15.0-Isengard/xbmc/linux/LinuxTimezone.cpp
  968. --- xbmc-15.0-Isengard.orig/xbmc/linux/LinuxTimezone.cpp 2015-07-21 13:41:29.000000000 -0500
  969. +++ xbmc-15.0-Isengard/xbmc/linux/LinuxTimezone.cpp 2015-07-25 08:01:50.490339999 -0500
  970. @@ -42,6 +42,8 @@
  971. #include <algorithm>
  972. +#include <fstream>
  973. +
  974. using namespace std;
  975. CLinuxTimezone::CLinuxTimezone() : m_IsDST(0)
  976. @@ -161,6 +163,16 @@
  977. const std::string &settingId = setting->GetId();
  978. if (settingId == "locale.timezone")
  979. {
  980. + std::ofstream out("/storage/.cache/timezone");
  981. + if (out)
  982. + {
  983. + const std::string tz = std::string("TIMEZONE=") + ((CSettingString*)setting)->GetValue().c_str();
  984. + out << tz << std::endl;
  985. + out.flush();
  986. + out.close();
  987. + system("systemctl restart tz-data.service");
  988. + }
  989. +
  990. SetTimezone(((CSettingString*)setting)->GetValue());
  991. CDateTime::ResetTimezoneBias();
  992. diff -Nur xbmc-15.0-Isengard.orig/xbmc/linux/PosixMountProvider.cpp xbmc-15.0-Isengard/xbmc/linux/PosixMountProvider.cpp
  993. --- xbmc-15.0-Isengard.orig/xbmc/linux/PosixMountProvider.cpp 2015-07-21 13:41:29.000000000 -0500
  994. +++ xbmc-15.0-Isengard/xbmc/linux/PosixMountProvider.cpp 2015-07-25 08:01:50.474340002 -0500
  995. @@ -133,7 +133,7 @@
  996. {
  997. // just go ahead and try to umount the disk
  998. // if it does umount, life is good, if not, no loss.
  999. - std::string cmd = "umount \"" + mountpath + "\"";
  1000. + std::string cmd = "udevil umount \"" + mountpath + "\"";
  1001. int status = system(cmd.c_str());
  1002. if (status == 0)
  1003. diff -Nur xbmc-15.0-Isengard.orig/xbmc/main/main.cpp xbmc-15.0-Isengard/xbmc/main/main.cpp
  1004. --- xbmc-15.0-Isengard.orig/xbmc/main/main.cpp 2015-07-21 13:41:29.000000000 -0500
  1005. +++ xbmc-15.0-Isengard/xbmc/main/main.cpp 2015-07-25 08:01:50.506340000 -0500
  1006. @@ -41,9 +41,24 @@
  1007. #include "input/linux/LIRC.h"
  1008. #endif
  1009. #include "XbmcContext.h"
  1010. +#include "Application.h"
  1011. +
  1012. +void xbmc_term_handler(int signum)
  1013. +{
  1014. + CLog::Log(LOGINFO, "Received SIGTERM...");
  1015. + if (!g_application.m_ExitCodeSet)
  1016. + g_application.SetExitCode(EXITCODE_RESTARTAPP);
  1017. + g_application.Stop(EXITCODE_RESTARTAPP);
  1018. +}
  1019. int main(int argc, char* argv[])
  1020. {
  1021. + // SIGTERM handler
  1022. + struct sigaction action;
  1023. + memset(&action, 0, sizeof(struct sigaction));
  1024. + action.sa_handler = xbmc_term_handler;
  1025. + sigaction(SIGTERM, &action, NULL);
  1026. +
  1027. // set up some xbmc specific relationships
  1028. XBMC::Context context;
  1029. diff -Nur xbmc-15.0-Isengard.orig/xbmc/peripherals/devices/PeripheralCecAdapter.cpp xbmc-15.0-Isengard/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
  1030. --- xbmc-15.0-Isengard.orig/xbmc/peripherals/devices/PeripheralCecAdapter.cpp 2015-07-21 13:41:29.000000000 -0500
  1031. +++ xbmc-15.0-Isengard/xbmc/peripherals/devices/PeripheralCecAdapter.cpp 2015-07-25 08:01:50.542340001 -0500
  1032. @@ -767,7 +767,10 @@
  1033. CLog::Log(LOGDEBUG, "%s - received key %2x duration %d", __FUNCTION__, key.iButton, key.iDuration);
  1034. CSingleLock lock(m_critSection);
  1035. - if (key.iDuration > 0)
  1036. + // avoid the queue getting too long
  1037. + if (m_configuration.iButtonRepeatRateMs && m_buttonQueue.size() > 5)
  1038. + return;
  1039. + if (m_configuration.iButtonRepeatRateMs == 0 && key.iDuration > 0)
  1040. {
  1041. if (m_currentButton.iButton == key.iButton && m_currentButton.iDuration == 0)
  1042. {
  1043. @@ -1267,6 +1270,20 @@
  1044. m_configuration.bSendInactiveSource = config.bSendInactiveSource;
  1045. bChanged |= SetSetting("send_inactive_source", m_configuration.bSendInactiveSource == 1);
  1046. +#if defined(CEC_DOUBLE_TAP_TIMEOUT_MS_OLD)
  1047. + m_configuration.iDoubleTapTimeout50Ms = config.iDoubleTapTimeout50Ms;
  1048. + bChanged |= SetSetting("double_tap_timeout_ms", (int)m_configuration.iDoubleTapTimeout50Ms * 50);
  1049. +#else
  1050. + m_configuration.iDoubleTapTimeoutMs = config.iDoubleTapTimeoutMs;
  1051. + bChanged |= SetSetting("double_tap_timeout_ms", (int)m_configuration.iDoubleTapTimeoutMs;
  1052. +#endif
  1053. +
  1054. + m_configuration.iButtonRepeatRateMs = config.iButtonRepeatRateMs;
  1055. + bChanged |= SetSetting("button_repeat_rate_ms", (int)m_configuration.iButtonRepeatRateMs);
  1056. +
  1057. + m_configuration.iButtonReleaseDelayMs = config.iButtonReleaseDelayMs;
  1058. + bChanged |= SetSetting("button_release_delay_ms", (int)m_configuration.iButtonReleaseDelayMs);
  1059. +
  1060. m_configuration.iFirmwareVersion = config.iFirmwareVersion;
  1061. m_configuration.bShutdownOnStandby = config.bShutdownOnStandby;
  1062. @@ -1371,6 +1388,8 @@
  1063. // backwards compatibility. will be removed once the next major release of libCEC is out
  1064. m_configuration.iDoubleTapTimeoutMs = GetSettingInt("double_tap_timeout_ms");
  1065. #endif
  1066. + m_configuration.iButtonRepeatRateMs = GetSettingInt("button_repeat_rate_ms");
  1067. + m_configuration.iButtonReleaseDelayMs = GetSettingInt("button_release_delay_ms");
  1068. }
  1069. void CPeripheralCecAdapter::ReadLogicalAddresses(const std::string &strString, cec_logical_addresses &addresses)
  1070. diff -Nur xbmc-15.0-Isengard.orig/xbmc/settings/AdvancedSettings.cpp xbmc-15.0-Isengard/xbmc/settings/AdvancedSettings.cpp
  1071. --- xbmc-15.0-Isengard.orig/xbmc/settings/AdvancedSettings.cpp 2015-07-21 13:41:29.000000000 -0500
  1072. +++ xbmc-15.0-Isengard/xbmc/settings/AdvancedSettings.cpp 2015-07-25 08:01:50.622340002 -0500
  1073. @@ -106,6 +106,8 @@
  1074. return;
  1075. m_audioHeadRoom = 0;
  1076. + // OpenELEC workaround for broken AVRs
  1077. + m_minimumSampleRate = 8000;
  1078. m_ac3Gain = 12.0f;
  1079. m_audioApplyDrc = -1.0f;
  1080. m_dvdplayerIgnoreDTSinWAV = false;
  1081. @@ -464,6 +466,7 @@
  1082. {
  1083. XMLUtils::GetFloat(pElement, "ac3downmixgain", m_ac3Gain, -96.0f, 96.0f);
  1084. XMLUtils::GetInt(pElement, "headroom", m_audioHeadRoom, 0, 12);
  1085. + XMLUtils::GetInt(pElement, "minimumsamplerate", m_minimumSampleRate, 8000, 192000);
  1086. XMLUtils::GetString(pElement, "defaultplayer", m_audioDefaultPlayer);
  1087. // 101 on purpose - can be used to never automark as watched
  1088. XMLUtils::GetFloat(pElement, "playcountminimumpercent", m_audioPlayCountMinimumPercent, 0.0f, 101.0f);
  1089. diff -Nur xbmc-15.0-Isengard.orig/xbmc/settings/AdvancedSettings.h xbmc-15.0-Isengard/xbmc/settings/AdvancedSettings.h
  1090. --- xbmc-15.0-Isengard.orig/xbmc/settings/AdvancedSettings.h 2015-07-21 13:41:29.000000000 -0500
  1091. +++ xbmc-15.0-Isengard/xbmc/settings/AdvancedSettings.h 2015-07-25 08:01:50.622340002 -0500
  1092. @@ -140,6 +140,8 @@
  1093. static void SettingOptionsLoggingComponentsFiller(const CSetting *setting, std::vector< std::pair<std::string, int> > &list, int &current, void *data);
  1094. int m_audioHeadRoom;
  1095. + // OpenELEC workaround for minimum sample Rate
  1096. + int m_minimumSampleRate;
  1097. float m_ac3Gain;
  1098. std::string m_audioDefaultPlayer;
  1099. float m_audioPlayCountMinimumPercent;
  1100. diff -Nur xbmc-15.0-Isengard.orig/xbmc/storage/linux/UDevProvider.cpp xbmc-15.0-Isengard/xbmc/storage/linux/UDevProvider.cpp
  1101. --- xbmc-15.0-Isengard.orig/xbmc/storage/linux/UDevProvider.cpp 2015-07-21 13:41:29.000000000 -0500
  1102. +++ xbmc-15.0-Isengard/xbmc/storage/linux/UDevProvider.cpp 2015-07-25 08:01:50.514339999 -0500
  1103. @@ -152,6 +152,20 @@
  1104. continue;
  1105. }
  1106. + // OE: filter out openelec specific mounts
  1107. + if (strstr(mountpoint, "/flash"))
  1108. + {
  1109. + udev_device_unref(device);
  1110. + continue;
  1111. + }
  1112. +
  1113. + if (strstr(mountpoint, "/storage"))
  1114. + {
  1115. + udev_device_unref(device);
  1116. + continue;
  1117. + }
  1118. + // OE
  1119. +
  1120. // look for devices on the usb bus, or mounted on */media/ (sdcards), or optical devices
  1121. const char *bus = udev_device_get_property_value(device, "ID_BUS");
  1122. const char *optical = udev_device_get_property_value(device, "ID_CDROM"); // matches also DVD, Blu-ray
  1123. @@ -207,7 +221,7 @@
  1124. {
  1125. // just go ahead and try to umount the disk
  1126. // if it does umount, life is good, if not, no loss.
  1127. - std::string cmd = "umount \"" + mountpath + "\"";
  1128. + std::string cmd = "udevil umount \"" + mountpath + "\"";
  1129. int status = system(cmd.c_str());
  1130. if (status == 0)
  1131. diff -Nur xbmc-15.0-Isengard.orig/xbmc/utils/CPUInfo.cpp xbmc-15.0-Isengard/xbmc/utils/CPUInfo.cpp
  1132. --- xbmc-15.0-Isengard.orig/xbmc/utils/CPUInfo.cpp 2015-07-21 13:41:29.000000000 -0500
  1133. +++ xbmc-15.0-Isengard/xbmc/utils/CPUInfo.cpp 2015-07-25 08:01:50.510339999 -0500
  1134. @@ -271,6 +271,8 @@
  1135. m_fProcTemperature = fopen("/sys/class/thermal/thermal_zone0/temp", "r"); // On Raspberry PIs
  1136. m_fCPUFreq = fopen ("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", "r");
  1137. + if (m_fCPUFreq == NULL)
  1138. + m_fCPUFreq = fopen ("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq", "r");
  1139. if (!m_fCPUFreq)
  1140. {
  1141. m_cpuInfoForFreq = true;
  1142. diff -Nur xbmc-15.0-Isengard.orig/xbmc/utils/SystemInfo.cpp xbmc-15.0-Isengard/xbmc/utils/SystemInfo.cpp
  1143. --- xbmc-15.0-Isengard.orig/xbmc/utils/SystemInfo.cpp 2015-07-21 13:41:29.000000000 -0500
  1144. +++ xbmc-15.0-Isengard/xbmc/utils/SystemInfo.cpp 2015-07-25 08:01:50.470340001 -0500
  1145. @@ -246,7 +246,6 @@
  1146. {
  1147. m_info.systemUptime = GetSystemUpTime(false);
  1148. m_info.systemTotalUptime = GetSystemUpTime(true);
  1149. - m_info.internetState = GetInternetState();
  1150. m_info.videoEncoder = GetVideoEncoder();
  1151. m_info.cpuFrequency = GetCPUFreqInfo();
  1152. m_info.osVersionInfo = CSysInfo::GetOsPrettyNameWithVersion() + " (kernel: " + CSysInfo::GetKernelName() + " " + CSysInfo::GetKernelVersionFull() + ")";
  1153. @@ -1022,9 +1021,7 @@
  1154. bool CSysInfo::HasInternet()
  1155. {
  1156. - if (m_info.internetState != CSysData::UNKNOWN)
  1157. - return m_info.internetState == CSysData::CONNECTED;
  1158. - return (m_info.internetState = CSysInfoJob::GetInternetState()) == CSysData::CONNECTED;
  1159. + return m_info.internetState == CSysData::UNKNOWN;
  1160. }
  1161. std::string CSysInfo::GetHddSpaceInfo(int drive, bool shortText)
  1162. diff -Nur xbmc-15.0-Isengard.orig/xbmc/windowing/X11/WinSystemX11.cpp xbmc-15.0-Isengard/xbmc/windowing/X11/WinSystemX11.cpp
  1163. --- xbmc-15.0-Isengard.orig/xbmc/windowing/X11/WinSystemX11.cpp 2015-07-21 13:41:29.000000000 -0500
  1164. +++ xbmc-15.0-Isengard/xbmc/windowing/X11/WinSystemX11.cpp 2015-07-25 08:01:50.482340000 -0500
  1165. @@ -1143,8 +1143,6 @@
  1166. if (fullscreen && hasWM)
  1167. {
  1168. - Atom fs = XInternAtom(m_dpy, "_NET_WM_STATE_FULLSCREEN", True);
  1169. - XChangeProperty(m_dpy, m_mainWindow, XInternAtom(m_dpy, "_NET_WM_STATE", True), XA_ATOM, 32, PropModeReplace, (unsigned char *) &fs, 1);
  1170. // disable desktop compositing for KDE, when Kodi is in full-screen mode
  1171. int one = 1;
  1172. XChangeProperty(m_dpy, m_mainWindow, XInternAtom(m_dpy, "_KDE_NET_WM_BLOCK_COMPOSITING", True), XA_CARDINAL, 32,
  1173. diff -Nur xbmc-15.0-Isengard.orig/xbmc/windowing/X11/WinSystemX11.h xbmc-15.0-Isengard/xbmc/windowing/X11/WinSystemX11.h
  1174. --- xbmc-15.0-Isengard.orig/xbmc/windowing/X11/WinSystemX11.h 2015-07-21 13:41:29.000000000 -0500
  1175. +++ xbmc-15.0-Isengard/xbmc/windowing/X11/WinSystemX11.h 2015-07-25 08:01:50.510339999 -0500
  1176. @@ -54,6 +54,7 @@
  1177. virtual bool ResizeWindow(int newWidth, int newHeight, int newLeft, int newTop);
  1178. virtual bool SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays);
  1179. virtual void UpdateResolutions();
  1180. + virtual bool CanDoWindowed() { return false; }
  1181. virtual int GetNumScreens() { return 1; }
  1182. virtual int GetCurrentScreen() { return m_nScreen; }
  1183. virtual void ShowOSMouse(bool show);
  1184. diff -Nur xbmc-15.0-Isengard.orig/xbmc/windows/GUIWindowSystemInfo.cpp xbmc-15.0-Isengard/xbmc/windows/GUIWindowSystemInfo.cpp
  1185. --- xbmc-15.0-Isengard.orig/xbmc/windows/GUIWindowSystemInfo.cpp 2015-07-21 13:41:29.000000000 -0500
  1186. +++ xbmc-15.0-Isengard/xbmc/windows/GUIWindowSystemInfo.cpp 2015-07-25 08:01:50.470340001 -0500
  1187. @@ -125,7 +125,6 @@
  1188. SetControlLabel(i++, "%s: %s", 13160, NETWORK_GATEWAY_ADDRESS);
  1189. SetControlLabel(i++, "%s: %s", 13161, NETWORK_DNS1_ADDRESS);
  1190. SetControlLabel(i++, "%s: %s", 20307, NETWORK_DNS2_ADDRESS);
  1191. - SetControlLabel(i++, "%s %s", 13295, SYSTEM_INTERNET_STATE);
  1192. }
  1193. else if (m_section == CONTROL_BT_VIDEO)
  1194. {
  1195. diff -Nur xbmc-15.0-Isengard.orig/xbmc/XBApplicationEx.cpp xbmc-15.0-Isengard/xbmc/XBApplicationEx.cpp
  1196. --- xbmc-15.0-Isengard.orig/xbmc/XBApplicationEx.cpp 2015-07-21 13:41:29.000000000 -0500
  1197. +++ xbmc-15.0-Isengard/xbmc/XBApplicationEx.cpp 2015-07-25 08:01:50.502340002 -0500
  1198. @@ -40,6 +40,7 @@
  1199. m_bStop = false;
  1200. m_AppFocused = true;
  1201. m_ExitCode = EXITCODE_QUIT;
  1202. + m_ExitCodeSet = false;
  1203. m_renderGUI = false;
  1204. }
  1205. diff -Nur xbmc-15.0-Isengard.orig/xbmc/XBApplicationEx.h xbmc-15.0-Isengard/xbmc/XBApplicationEx.h
  1206. --- xbmc-15.0-Isengard.orig/xbmc/XBApplicationEx.h 2015-07-21 13:41:29.000000000 -0500
  1207. +++ xbmc-15.0-Isengard/xbmc/XBApplicationEx.h 2015-07-25 08:01:50.506340000 -0500
  1208. @@ -40,6 +40,7 @@
  1209. // Variables for timing
  1210. bool m_bStop;
  1211. int m_ExitCode;
  1212. + bool m_ExitCodeSet;
  1213. bool m_AppFocused;
  1214. bool m_renderGUI;