diff --git a/packages/addons/browser/chromium/changelog.txt b/packages/addons/browser/chromium/changelog.txt new file mode 100644 index 0000000000..9b71490b4f --- /dev/null +++ b/packages/addons/browser/chromium/changelog.txt @@ -0,0 +1,2 @@ +7.0.100 +- initial LibreELEC release diff --git a/packages/addons/browser/chromium/config/Xdefaults b/packages/addons/browser/chromium/config/Xdefaults new file mode 100644 index 0000000000..95307ee3db --- /dev/null +++ b/packages/addons/browser/chromium/config/Xdefaults @@ -0,0 +1 @@ +Xft.dpi: 96 diff --git a/packages/addons/browser/chromium/config/pango.modules b/packages/addons/browser/chromium/config/pango.modules new file mode 100644 index 0000000000..3a7ae71db4 --- /dev/null +++ b/packages/addons/browser/chromium/config/pango.modules @@ -0,0 +1,13 @@ +/storage/.kodi/addons/browser.chromium/pango-modules/pango-arabic-lang.so ArabicScriptEngineLang PangoEngineLang PangoRenderNone arabic:* +/storage/.kodi/addons/browser.chromium/pango-modules/pango-basic-fc.so BasicScriptEngineFc PangoEngineShape PangoRenderFc common: +/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so devaIndicScriptEngineLang PangoEngineLang PangoRenderNone devanagari:* +/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so bengIndicScriptEngineLang PangoEngineLang PangoRenderNone bengali:* +/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so guruIndicScriptEngineLang PangoEngineLang PangoRenderNone gurmukhi:* +/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so gujrIndicScriptEngineLang PangoEngineLang PangoRenderNone gujarati:* +/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so oryaIndicScriptEngineLang PangoEngineLang PangoRenderNone oriya:* +/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so tamlIndicScriptEngineLang PangoEngineLang PangoRenderNone tamil:* +/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so teluIndicScriptEngineLang PangoEngineLang PangoRenderNone telugu:* +/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so kndaIndicScriptEngineLang PangoEngineLang PangoRenderNone kannada:* +/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so mlymIndicScriptEngineLang PangoEngineLang PangoRenderNone malayalam:* +/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so sinhIndicScriptEngineLang PangoEngineLang PangoRenderNone sinhala:* + diff --git a/packages/addons/browser/chromium/config/pangorc b/packages/addons/browser/chromium/config/pangorc new file mode 100644 index 0000000000..e7a942d712 --- /dev/null +++ b/packages/addons/browser/chromium/config/pangorc @@ -0,0 +1,10 @@ +# +# pangorc file for uninstalled operation. If pango-viewer is run with +# this file in the current directory it will set it as PANGO_RC_FILE +# + +[Pango] +ModuleFiles = /storage/.kodi/addons/browser.chromium/config/pango.modules + +[PangoX] +AliasFiles = /storage/.kodi/addons/browser.chromium/config/pangx.aliases diff --git a/packages/addons/browser/chromium/config/pixbuf.loaders.cache b/packages/addons/browser/chromium/config/pixbuf.loaders.cache new file mode 100644 index 0000000000..62ef3707da --- /dev/null +++ b/packages/addons/browser/chromium/config/pixbuf.loaders.cache @@ -0,0 +1,125 @@ +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-jpeg.so" +"jpeg" 5 "gdk-pixbuf" "The JPEG image format" "LGPL" +"image/jpeg" "" +"jpeg" "jpe" "jpg" "" +"\377\330" "" 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-ani.so" +"ani" 4 "gdk-pixbuf" "The ANI image format" "LGPL" +"application/x-navi-animation" "" +"ani" "" +"RIFF ACON" " xxxx " 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-ico.so" +"ico" 5 "gdk-pixbuf" "The ICO image format" "LGPL" +"image/x-icon" "image/x-ico" "image/x-win-bitmap" "" +"ico" "cur" "" +" \001 " "zz znz" 100 +" \002 " "zz znz" 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-ras.so" +"ras" 4 "gdk-pixbuf" "The Sun raster image format" "LGPL" +"image/x-cmu-raster" "image/x-sun-raster" "" +"ras" "" +"Y\246j\225" "" 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-jasper.so" +"jpeg2000" 4 "gdk-pixbuf" "The JPEG 2000 image format" "LGPL" +"image/jp2" "image/jpeg2000" "image/jpx" "" +"jp2" "jpc" "jpx" "j2k" "jpf" "" +" jP" "!!!! " 100 +"\377O\377Q" "" 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-wbmp.so" +"wbmp" 4 "gdk-pixbuf" "The WBMP image format" "LGPL" +"image/vnd.wap.wbmp" "" +"wbmp" "" +" " "zz" 1 +" `" "z " 1 +" @" "z " 1 +" " "z " 1 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-png.so" +"png" 5 "gdk-pixbuf" "The PNG image format" "LGPL" +"image/png" "" +"png" "" +"\211PNG\r\n\032\n" "" 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-pcx.so" +"pcx" 4 "gdk-pixbuf" "The PCX image format" "LGPL" +"image/x-pcx" "" +"pcx" "" +"\n \001" "" 100 +"\n\002\001" "" 100 +"\n\003\001" "" 100 +"\n\004\001" "" 100 +"\n\005\001" "" 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-qtif.so" +"qtif" 4 "gdk-pixbuf" "The QTIF image format" "LGPL" +"image/x-quicktime" "image/qtif" "" +"qtif" "qif" "" +"abcdidsc" "xxxx " 100 +"abcdidat" "xxxx " 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-tiff.so" +"tiff" 5 "gdk-pixbuf" "The TIFF image format" "LGPL" +"image/tiff" "" +"tiff" "tif" "" +"MM *" " z " 100 +"II* " " z" 100 +"II* \020 CR\002 " " z zzz z" 0 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-icns.so" +"icns" 4 "gdk-pixbuf" "The ICNS image format" "GPL" +"image/x-icns" "" +"icns" "" +"icns" "" 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-tga.so" +"tga" 4 "gdk-pixbuf" "The Targa image format" "LGPL" +"image/x-tga" "" +"tga" "targa" "" +" \001\001" "x " 100 +" \001\t" "x " 100 +" \002" "xz " 99 +" \003" "xz " 100 +" \n" "xz " 100 +" \v" "xz " 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-bmp.so" +"bmp" 5 "gdk-pixbuf" "The BMP image format" "LGPL" +"image/bmp" "image/x-bmp" "image/x-MS-bmp" "" +"bmp" "" +"BM" "" 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-xbm.so" +"xbm" 4 "gdk-pixbuf" "The XBM image format" "LGPL" +"image/x-xbitmap" "" +"xbm" "" +"#define " "" 100 +"/*" "" 50 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-xpm.so" +"xpm" 4 "gdk-pixbuf" "The XPM image format" "LGPL" +"image/x-xpixmap" "" +"xpm" "" +"/* XPM */" "" 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-pnm.so" +"pnm" 4 "gdk-pixbuf" "The PNM/PBM/PGM/PPM image format family" "LGPL" +"image/x-portable-anymap" "image/x-portable-bitmap" "image/x-portable-graymap" "image/x-portable-pixmap" "" +"pnm" "pbm" "pgm" "ppm" "" +"P1" "" 100 +"P2" "" 100 +"P3" "" 100 +"P4" "" 100 +"P5" "" 100 +"P6" "" 100 + +"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-gif.so" +"gif" 4 "gdk-pixbuf" "The GIF image format" "LGPL" +"image/gif" "" +"gif" "" +"GIF8" "" 100 + diff --git a/packages/addons/browser/chromium/icon/icon.png b/packages/addons/browser/chromium/icon/icon.png new file mode 100644 index 0000000000..033fb10f71 Binary files /dev/null and b/packages/addons/browser/chromium/icon/icon.png differ diff --git a/packages/addons/browser/chromium/package.mk b/packages/addons/browser/chromium/package.mk new file mode 100644 index 0000000000..0ca3a593d9 --- /dev/null +++ b/packages/addons/browser/chromium/package.mk @@ -0,0 +1,177 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# 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 +################################################################################ + +PKG_NAME="chromium" +PKG_VERSION="49.0.2623.87" +PKG_REV="100" +PKG_ARCH="x86_64" +PKG_LICENSE="Mixed" +PKG_SITE="http://www.chromium.org/Home" +PKG_URL="https://commondatastorage.googleapis.com/chromium-browser-official/$PKG_NAME-$PKG_VERSION.tar.xz" +PKG_DEPENDS_TARGET="toolchain pciutils dbus libXcomposite libXcursor libXtst alsa-lib bzip2 yasm nss libXScrnSaver libexif ninja:host libpng harfbuzz atk gtk+ libva-vdpau-driver" +PKG_PRIORITY="optional" +PKG_SECTION="browser" +PKG_SHORTDESC="Chromium Browser: the open-source web browser from Google" +PKG_LONGDESC="Chromium Browser: the open-source web browser from Google" +PKG_AUTORECONF="no" + +PKG_IS_ADDON="yes" +PKG_ADDON_NAME="Chromium" +PKG_ADDON_TYPE="xbmc.python.script" +PKG_ADDON_PROVIDES="executable" +PKG_ADDON_REPOVERSION="7.0" + +pre_make_target() { + export MAKEFLAGS="-j4" + + strip_lto + + # https://groups.google.com/a/chromium.org/d/topic/chromium-packagers/9JX1N2nf4PU/discussion + touch chrome/test/data/webui/i18n_process_css_test.html +} + +make_target() { + # CFLAGS are passed through release_extra_cflags below + export -n CFLAGS CXXFLAGS + + export LDFLAGS="$LDFLAGS -ludev" + + # Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) + # Note: These are for OpenELEC use ONLY. For your own distribution, please + # get your own set of keys. + + _google_api_key=AIzaSyAQ6L9vt9cnN4nM0weaa6Y38K4eyPvtKgI + _google_default_client_id=740889307901-4bkm4e0udppnp1lradko85qsbnmkfq3b.apps.googleusercontent.com + _google_default_client_secret=9TJlhL661hvShQub4cWhANXa + + local _chromium_conf=( + -Dgoogle_api_key=$_google_api_key + -Dgoogle_default_client_id=$_google_default_client_id + -Dgoogle_default_client_secret=$_google_default_client_secret + -Dtarget_arch=x64 + -Dfastbuild=2 + -Dwerror= + -Dclang=0 + -Dpython_ver=2.7 + -Dlinux_link_gsettings=0 + -Dlinux_strip_binary=1 + -Dlinux_use_bundled_binutils=0 + -Dlinux_use_bundled_gold=0 + -Dlinux_use_gold_flags=0 + -Dicu_use_data_file_flag=0 + -Dlogging_like_official_build=1 + -Dtracing_like_official_build=1 + -Dfieldtrial_testing_like_official_build=1 + -Dremove_webcore_debug_symbols=1 + -Drelease_extra_cflags="$CFLAGS" + -Dlibspeechd_h_prefix=speech-dispatcher/ + -Dffmpeg_branding=Chrome + -Dproprietary_codecs=1 + -Duse_system_bzip2=1 + -Duse_system_flac=0 + -Duse_system_ffmpeg=0 + -Duse_system_harfbuzz=1 + -Duse_system_icu=0 + -Duse_system_libevent=0 + -Duse_system_libjpeg=1 + -Duse_system_libpng=1 + -Duse_system_libvpx=0 + -Duse_system_libxml=0 + -Duse_system_snappy=0 + -Duse_system_xdg_utils=0 + -Duse_system_yasm=1 + -Duse_system_zlib=0 + -Duse_mojo=0 + -Duse_gconf=0 + -Duse_gnome_keyring=0 + -Duse_pulseaudio=0 + -Duse_kerberos=0 + -Duse_cups=0 + -Denable_hangout_services_extension=1 + -Ddisable_fatal_linker_warnings=1 + -Dsysroot=$SYSROOT_PREFIX + -Ddisable_glibc=1 + -Denable_widevine=1 + -Ddisable_nacl=1 + -Ddisable_pnacl=1) + + ./build/linux/unbundle/replace_gyp_files.py "${_chromium_conf[@]}" + ./build/gyp_chromium --depth=. "${_chromium_conf[@]}" + + ninja -C out/Release chrome chrome_sandbox +} + +makeinstall_target() { + : +} + +addon() { + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -P $PKG_BUILD/out/Release/chrome $ADDON_BUILD/$PKG_ADDON_ID/bin/chromium.bin + cp -P $PKG_BUILD/out/Release/chrome_sandbox $ADDON_BUILD/$PKG_ADDON_ID/bin/chrome-sandbox + cp -P $PKG_BUILD/out/Release/{*.pak,*.bin,libwidevinecdmadapter.so} $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -PR $PKG_BUILD/out/Release/locales $ADDON_BUILD/$PKG_ADDON_ID/bin/ + + $STRIP $ADDON_BUILD/$PKG_ADDON_ID/bin/chromium.bin + $STRIP $ADDON_BUILD/$PKG_ADDON_ID/bin/chrome-sandbox + + # config + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/config + cp -P $PKG_DIR/config/* $ADDON_BUILD/$PKG_ADDON_ID/config + + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/lib + + # pango + cp -PL $(get_build_dir pango)/.install_pkg/usr/lib/libpangocairo-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + cp -PL $(get_build_dir pango)/.install_pkg/usr/lib/libpango-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + cp -PL $(get_build_dir pango)/.install_pkg/usr/lib/libpangoft2-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # cairo + cp -PL $(get_build_dir cairo)/.install_pkg/usr/lib/libcairo.so.2 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # gtk + cp -PL $(get_build_dir gtk+)/.install_pkg/usr/lib/libgdk-x11-2.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + cp -PL $(get_build_dir gtk+)/.install_pkg/usr/lib/libgtk-x11-2.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # atk + # cp -PL $(get_build_dir atk)/.install_pkg/usr/lib/libatk-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # harfbuzz + cp -PL $(get_build_dir harfbuzz)/.install_pkg/usr/lib/libharfbuzz.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # gdk-pixbuf + cp -PL $(get_build_dir gdk-pixbuf)/.install_pkg/usr/lib/libgdk_pixbuf-2.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # pixbuf loaders + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/gdk-pixbuf-modules + cp -PL $(get_build_dir gdk-pixbuf)/.install_pkg/usr/lib/gdk-pixbuf-2.0/2.10.0/loaders/* $ADDON_BUILD/$PKG_ADDON_ID/gdk-pixbuf-modules + + # nss + cp -PL $(get_build_dir nss)/dist/Linux*OPT.OBJ/lib/*.so $ADDON_BUILD/$PKG_ADDON_ID/lib + + # nspr + cp -PL $(get_build_dir nspr)/.install_pkg/usr/lib/*.so $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libexif + cp -PL $(get_build_dir libexif)/.install_pkg/usr/lib/* $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libva-vdpau-driver + cp -PL $(get_build_dir libva-vdpau-driver)/.install_pkg/usr/lib/va/*.so $ADDON_BUILD/$PKG_ADDON_ID/lib +} diff --git a/packages/addons/browser/chromium/patches/chromium-0001_widevine.patch b/packages/addons/browser/chromium/patches/chromium-0001_widevine.patch new file mode 100644 index 0000000000..eb06138905 --- /dev/null +++ b/packages/addons/browser/chromium/patches/chromium-0001_widevine.patch @@ -0,0 +1,53 @@ +diff -upr chromium-48.0.2564.82.orig/chrome/common/chrome_content_client.cc chromium-48.0.2564.82/chrome/common/chrome_content_client.cc +--- chromium-48.0.2564.82.orig/chrome/common/chrome_content_client.cc 2016-01-20 22:01:20.000000000 +0200 ++++ chromium-48.0.2564.82/chrome/common/chrome_content_client.cc 2016-01-21 20:02:02.788936626 +0200 +@@ -158,7 +158,12 @@ void ComputeBuiltInPlugins(std::vector*create_vda_function)(); + if (!video_decode_accelerator_ || + !video_decode_accelerator_->Initialize(config, this)) + continue; + ++ VLOG(1) << "Initialization successful."; ++ + if (video_decode_accelerator_->CanDecodeOnIOThread()) { + filter_ = new MessageFilter(this, host_route_id_); + stub_->channel()->AddFilter(filter_.get()); +@@ -346,7 +351,9 @@ void GpuVideoDecodeAccelerator::BindImag + scoped_ptr + GpuVideoDecodeAccelerator::CreateVaapiVDA() { + scoped_ptr decoder; +-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) ++ VLOG(1) << "About to create new VAAPI video decode accelerator."; ++#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) ++ VLOG(1) << "Creating new VAAPI video decode accelerator."; + decoder.reset(new VaapiVideoDecodeAccelerator( + make_context_current_, base::Bind(&GpuVideoDecodeAccelerator::BindImage, + base::Unretained(this)))); +Index: dev.wily/content/content_common.gypi +=================================================================== +--- dev.wily.orig/content/content_common.gypi ++++ dev.wily/content/content_common.gypi +@@ -856,7 +856,7 @@ + }, + ], + }], +- ['chromeos==1', { ++ ['chromeos==1 or desktop_linux==1', { + 'sources': [ + 'common/gpu/media/accelerated_video_decoder.h', + 'common/gpu/media/h264_decoder.cc', +@@ -908,7 +908,7 @@ + 'common/gpu/media/tegra_v4l2_device.h', + ], + }], +- ['target_arch != "arm" and chromeos == 1', { ++ ['target_arch != "arm" and (chromeos == 1 or desktop_linux == 1)', { + 'dependencies': [ + '../media/media.gyp:media', + '../third_party/libyuv/libyuv.gyp:libyuv', +Index: dev.wily/content/content_gpu.gypi +=================================================================== +--- dev.wily.orig/content/content_gpu.gypi ++++ dev.wily/content/content_gpu.gypi +@@ -36,7 +36,7 @@ + ], + }, + }], +- ['target_arch!="arm" and chromeos == 1', { ++ ['target_arch!="arm" and (chromeos == 1 or desktop_linux == 1)', { + 'include_dirs': [ + '<(DEPTH)/third_party/libva', + ], +Index: dev.wily/content/content_tests.gypi +=================================================================== +--- dev.wily.orig/content/content_tests.gypi ++++ dev.wily/content/content_tests.gypi +@@ -1719,7 +1719,7 @@ + }, + ] + }], +- ['chromeos==1 and target_arch != "arm"', { ++ ['(chromeos==1 or desktop_linux==1) and target_arch != "arm"', { + 'targets': [ + { + 'target_name': 'vaapi_jpeg_decoder_unittest', +Index: dev.wily/content/public/common/content_switches.cc +=================================================================== +--- dev.wily.orig/content/public/common/content_switches.cc ++++ dev.wily/content/public/common/content_switches.cc +@@ -926,7 +926,9 @@ const char kDisableWebAudio[] + #if defined(OS_CHROMEOS) + // Disables panel fitting (used for mirror mode). + const char kDisablePanelFitting[] = "disable-panel-fitting"; ++#endif + ++#if defined(OS_CHROMEOS) || defined(OS_LINUX) + // Disables VA-API accelerated video encode. + const char kDisableVaapiAcceleratedVideoEncode[] = + "disable-vaapi-accelerated-video-encode"; +Index: dev.wily/content/public/common/content_switches.h +=================================================================== +--- dev.wily.orig/content/public/common/content_switches.h ++++ dev.wily/content/public/common/content_switches.h +@@ -272,6 +272,8 @@ CONTENT_EXPORT extern const char kDisabl + + #if defined(OS_CHROMEOS) + CONTENT_EXPORT extern const char kDisablePanelFitting[]; ++#endif ++#if defined(OS_CHROMEOS) || defined(OS_LINUX) + CONTENT_EXPORT extern const char kDisableVaapiAcceleratedVideoEncode[]; + #endif + +Index: dev.wily/media/media.gyp +=================================================================== +--- dev.wily.orig/media/media.gyp ++++ dev.wily/media/media.gyp +@@ -756,7 +756,7 @@ + ], + }], + # For VaapiVideoEncodeAccelerator. +- ['target_arch != "arm" and chromeos == 1', { ++ ['target_arch != "arm" and (chromeos == 1 or desktop_linux == 1)', { + 'sources': [ + 'filters/h264_bitstream_buffer.cc', + 'filters/h264_bitstream_buffer.h', +@@ -1359,7 +1359,7 @@ + 'player_android', + ], + }], +- ['target_arch != "arm" and chromeos == 1 and use_x11 == 1', { ++ ['target_arch != "arm" and (chromeos == 1 or desktop_linux == 1) and use_x11 == 1', { + 'sources': [ + 'filters/h264_bitstream_buffer_unittest.cc', + ], +Index: dev.wily/gpu/config/software_rendering_list_json.cc +=================================================================== +--- dev.wily.orig/gpu/config/software_rendering_list_json.cc ++++ dev.wily/gpu/config/software_rendering_list_json.cc +@@ -481,17 +481,6 @@ const char kSoftwareRenderingListJson[] + ] + }, + { +- "id": 48, +- "description": "Accelerated video decode is unavailable on Linux", +- "cr_bugs": [137247], +- "os": { +- "type": "linux" +- }, +- "features": [ +- "accelerated_video_decode" +- ] +- }, +- { + "id": 49, + "description": "NVidia GeForce GT 650M can cause the system to hang with flash 3D", + "cr_bugs": [140175], +@@ -1042,6 +1042,11 @@ + }, + { + "os": { ++ "type": "linux" ++ } ++ }, ++ { ++ "os": { + "type": "android" + }, + "gl_renderer": ".*Google.*" +Index: dev.wily/content/common/sandbox_linux/bpf_gpu_policy_linux.cc +=================================================================== +--- dev.wily.orig/content/common/sandbox_linux/bpf_gpu_policy_linux.cc ++++ dev.wily/content/common/sandbox_linux/bpf_gpu_policy_linux.cc +@@ -21,6 +21,8 @@ + #include "base/logging.h" + #include "base/memory/scoped_ptr.h" + #include "build/build_config.h" ++// Auto-generated for dlopen libva libraries ++#include "content/common/gpu/media/va_stubs.h" + #include "content/common/sandbox_linux/sandbox_bpf_base_policy_linux.h" + #include "content/common/sandbox_linux/sandbox_seccomp_bpf_linux.h" + #include "content/common/set_process_title.h" +@@ -31,6 +33,8 @@ + #include "sandbox/linux/syscall_broker/broker_file_permission.h" + #include "sandbox/linux/syscall_broker/broker_process.h" + #include "sandbox/linux/system_headers/linux_syscalls.h" ++#include "third_party/libva/va/va.h" ++#include "third_party/libva/va/va_x11.h" + + using sandbox::arch_seccomp_data; + using sandbox::bpf_dsl::Allow; +@@ -40,6 +44,11 @@ using sandbox::syscall_broker::BrokerFil + using sandbox::syscall_broker::BrokerProcess; + using sandbox::SyscallSets; + ++using content_common_gpu_media::kModuleVa; ++using content_common_gpu_media::kModuleVa_x11; ++using content_common_gpu_media::InitializeStubs; ++using content_common_gpu_media::StubPathMap; ++ + namespace content { + + namespace { +@@ -94,7 +103,7 @@ inline bool UseLibV4L2() { + + bool IsAcceleratedVaapiVideoEncodeEnabled() { + bool accelerated_encode_enabled = false; +-#if defined(OS_CHROMEOS) ++#if defined(OS_CHROMEOS) || defined(OS_LINUX) + const base::CommandLine& command_line = + *base::CommandLine::ForCurrentProcess(); + accelerated_encode_enabled = +@@ -299,27 +299,41 @@ + // inside the sandbox, so preload them now. + if (IsAcceleratedVaapiVideoEncodeEnabled() || + IsAcceleratedVideoDecodeEnabled()) { +- const char* I965DrvVideoPath = NULL; +- const char* I965HybridDrvVideoPath = NULL; ++ VLOG(1) << "Attempting to enable hardware video acceleration."; ++ StubPathMap paths; ++ paths[kModuleVa].push_back("libva.so.1"); ++ paths[kModuleVa_x11].push_back("libva-x11.so.1"); ++ if (!InitializeStubs(paths)) { ++ VLOG(1) << "Failed to initialize stubs"; ++ return false; ++ } + +- if (IsArchitectureX86_64()) { +- I965DrvVideoPath = "/usr/lib64/va/drivers/i965_drv_video.so"; +- I965HybridDrvVideoPath = "/usr/lib64/va/drivers/hybrid_drv_video.so"; +- } else if (IsArchitectureI386()) { +- I965DrvVideoPath = "/usr/lib/va/drivers/i965_drv_video.so"; ++ // libva drivers won't get loaded even above two libraries get dlopened. ++ // Thus, libva calls will fail after post sandbox stage. ++ // ++ // To get the va driver loaded before sandboxing, upstream simply dlopen ++ // the hard-coded va driver path because ChromeOS is the only platform ++ // that Google want to support libva. ++ // ++ // While generic linux distros ship va driver as anywhere they want. ++ // Fortunately, the va driver will be loadded when vaInitialize() get ++ // called. ++ // So the following code is to call vaInitialize() before sandboxing. ++ Display* x_display = XOpenDisplay(NULL); ++ VADisplay va_display = vaGetDisplay(x_display); ++ if (!vaDisplayIsValid(va_display)) { ++ VLOG(1) << "Failed to call vaGetDisplay()"; ++ return false; + } + +- dlopen(I965DrvVideoPath, RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); +- if (I965HybridDrvVideoPath) +- dlopen(I965HybridDrvVideoPath, RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); +- dlopen("libva.so.1", RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); +-#if defined(USE_OZONE) +- dlopen("libva-drm.so.1", RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); +-#elif defined(USE_X11) +- dlopen("libva-x11.so.1", RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); +-#endif +- } +- } ++ int major_version, minor_version; ++ if (vaInitialize(va_display, &major_version, &minor_version) ++ != VA_STATUS_SUCCESS) { ++ VLOG(1) << "Failed to call vaInitialize()"; ++ return false; ++ } ++ } // end of IsAcceleratedVaapiVideoEncodeEnabled() || IsAcceleratedVideoDecodeEnabled() ++ } // end of IsArchitectureX86_64() || IsArchitectureI386() + + return true; + } +Index: dev.wily/chrome/browser/about_flags.cc +=================================================================== +--- dev.wily.orig/chrome/browser/about_flags.cc ++++ dev.wily/chrome/browser/about_flags.cc +@@ -937,7 +937,7 @@ + "disable-accelerated-video-decode", + IDS_FLAGS_ACCELERATED_VIDEO_DECODE_NAME, + IDS_FLAGS_ACCELERATED_VIDEO_DECODE_DESCRIPTION, +- kOsMac | kOsWin | kOsCrOS, ++ kOsAll, + SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode), + }, + #if defined(USE_ASH) +Index: dev.wily/content/common/gpu/media/vaapi_wrapper.cc +=================================================================== +--- dev.wily.orig/content/common/gpu/media/vaapi_wrapper.cc ++++ dev.wily/content/common/gpu/media/vaapi_wrapper.cc +@@ -146,7 +146,7 @@ scoped_ptr VaapiWrapper::C + VAProfile va_profile, + const base::Closure& report_error_to_uma_cb) { + if (!profile_infos_.Get().IsProfileSupported(mode, va_profile)) { +- DVLOG(1) << "Unsupported va_profile: " << va_profile; ++ VLOG(1) << "Unsupported va_profile: " << va_profile; + return nullptr; + } + +@@ -305,15 +305,17 @@ VaapiWrapper::GetSupportedProfileInfosFo + bool VaapiWrapper::VaInitialize(const base::Closure& report_error_to_uma_cb) { + static bool vaapi_functions_initialized = PostSandboxInitialization(); + if (!vaapi_functions_initialized) { +- bool running_on_chromeos = false; +-#if defined(OS_CHROMEOS) ++ bool error_level_logging = false; ++#if defined(OS_LINUX) ++ error_level_logging = true; ++#elif defined(OS_CHROMEOS) + // When chrome runs on linux with chromeos=1, do not log error message + // without VAAPI libraries. +- running_on_chromeos = base::SysInfo::IsRunningOnChromeOS(); ++ error_level_logging = base::SysInfo::IsRunningOnChromeOS(); + #endif + static const char kErrorMsg[] = "Failed to initialize VAAPI libs"; +- if (running_on_chromeos) +- LOG(ERROR) << kErrorMsg; ++ if (error_level_logging) ++ VLOG(1) << kErrorMsg; + else + DVLOG(1) << kErrorMsg; + return false; +@@ -384,7 +386,7 @@ bool VaapiWrapper::IsEntrypointSupported + if (std::find(supported_entrypoints.begin(), + supported_entrypoints.end(), + entrypoint) == supported_entrypoints.end()) { +- DVLOG(1) << "Unsupported entrypoint"; ++ VLOG(1) << "Unsupported entrypoint"; + return false; + } + return true; +@@ -408,8 +410,8 @@ bool VaapiWrapper::AreAttribsSupported_L + if (attribs[i].type != required_attribs[i].type || + (attribs[i].value & required_attribs[i].value) != + required_attribs[i].value) { +- DVLOG(1) << "Unsupported value " << required_attribs[i].value +- << " for attribute type " << required_attribs[i].type; ++ VLOG(1) << "Unsupported value " << required_attribs[i].value ++ << " for attribute type " << required_attribs[i].type; + return false; + } + } +@@ -427,46 +427,7 @@ + VAEntrypoint entrypoint, + std::vector& required_attribs, + gfx::Size* resolution) { +- va_lock_->AssertAcquired(); +- VAConfigID va_config_id; +- VAStatus va_res = vaCreateConfig( +- va_display_, +- va_profile, +- entrypoint, +- &required_attribs[0], +- required_attribs.size(), +- &va_config_id); +- VA_SUCCESS_OR_RETURN(va_res, "vaCreateConfig failed", false); +- +- // Calls vaQuerySurfaceAttributes twice. The first time is to get the number +- // of attributes to prepare the space and the second time is to get all +- // attributes. +- unsigned int num_attribs; +- va_res = vaQuerySurfaceAttributes( +- va_display_, va_config_id, nullptr, &num_attribs); +- VA_SUCCESS_OR_RETURN(va_res, "vaQuerySurfaceAttributes failed", false); +- if (!num_attribs) +- return false; +- +- std::vector attrib_list( +- base::checked_cast(num_attribs)); +- +- va_res = vaQuerySurfaceAttributes( +- va_display_, va_config_id, &attrib_list[0], &num_attribs); +- VA_SUCCESS_OR_RETURN(va_res, "vaQuerySurfaceAttributes failed", false); +- +- resolution->SetSize(0, 0); +- for (const auto& attrib : attrib_list) { +- if (attrib.type == VASurfaceAttribMaxWidth) +- resolution->set_width(attrib.value.value.i); +- else if (attrib.type == VASurfaceAttribMaxHeight) +- resolution->set_height(attrib.value.value.i); +- } +- if (resolution->IsEmpty()) { +- LOG(ERROR) << "Codec resolution " << resolution->ToString() +- << " cannot be zero."; +- return false; +- } ++ resolution->SetSize(1920, 1088); + return true; + } + +Index: dev.wily/content/common/gpu/media/vaapi_video_decode_accelerator.cc +=================================================================== +--- dev.wily.orig/content/common/gpu/media/vaapi_video_decode_accelerator.cc ++++ dev.wily/content/common/gpu/media/vaapi_video_decode_accelerator.cc +@@ -269,17 +269,17 @@ bool VaapiVideoDecodeAccelerator::Initia + + base::AutoLock auto_lock(lock_); + DCHECK_EQ(state_, kUninitialized); +- DVLOG(2) << "Initializing VAVDA, profile: " << profile; ++ VLOG(1) << "Initializing VAVDA, profile: " << profile; + + #if defined(USE_X11) + if (gfx::GetGLImplementation() != gfx::kGLImplementationDesktopGL) { +- DVLOG(1) << "HW video decode acceleration not available without " ++ VLOG(1) << "HW video decode acceleration not available without " + "DesktopGL (GLX)."; + return false; + } + #elif defined(USE_OZONE) + if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) { +- DVLOG(1) << "HW video decode acceleration not available without " ++ VLOG(1) << "HW video decode acceleration not available without " + << "EGLGLES2."; + return false; + } +@@ -289,7 +289,7 @@ bool VaapiVideoDecodeAccelerator::Initia + VaapiWrapper::kDecode, profile, base::Bind(&ReportToUMA, VAAPI_ERROR)); + + if (!vaapi_wrapper_.get()) { +- DVLOG(1) << "Failed initializing VAAPI for profile " << profile; ++ VLOG(1) << "Failed initializing VAAPI for profile " << profile; + return false; + } + +@@ -302,7 +302,7 @@ bool VaapiVideoDecodeAccelerator::Initia + vp8_accelerator_.reset(new VaapiVP8Accelerator(this, vaapi_wrapper_.get())); + decoder_.reset(new VP8Decoder(vp8_accelerator_.get())); + } else { +- DLOG(ERROR) << "Unsupported profile " << profile; ++ VLOG(1) << "Unsupported profile " << profile; + return false; + } + +Index: dev.wily/content/gpu/gpu_main.cc +=================================================================== +--- dev.wily.orig/content/gpu/gpu_main.cc ++++ dev.wily/content/gpu/gpu_main.cc +@@ -66,7 +66,7 @@ + #include "content/common/sandbox_mac.h" + #endif + +-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) ++#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) + #include "content/common/gpu/media/vaapi_wrapper.h" + #endif + +@@ -227,7 +227,7 @@ int GpuMain(const MainFunctionParams& pa + GetGpuInfoFromCommandLine(gpu_info, command_line); + gpu_info.in_process_gpu = false; + +-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) ++#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) + VaapiWrapper::PreSandboxInitialization(); + #endif + +Index: dev.wily/content/common/gpu/client/command_buffer_proxy_impl.cc +=================================================================== +--- dev.wily.orig/content/common/gpu/client/command_buffer_proxy_impl.cc ++++ dev.wily/content/common/gpu/client/command_buffer_proxy_impl.cc +@@ -561,8 +561,10 @@ bool CommandBufferProxyImpl::ProduceFron + + scoped_ptr + CommandBufferProxyImpl::CreateVideoDecoder() { ++ TRACE_EVENT0("gpu", "CommandBufferProxyImpl::CreateVideoDecoder"); + if (!channel_) + return scoped_ptr(); ++ VLOG(1) << "About to create GpuVideoDecodeAcceleratorHost."; + return scoped_ptr( + new GpuVideoDecodeAcceleratorHost(channel_, this)); + } diff --git a/packages/addons/browser/chromium/source/bin/chromium b/packages/addons/browser/chromium/source/bin/chromium new file mode 100644 index 0000000000..07ee195662 --- /dev/null +++ b/packages/addons/browser/chromium/source/bin/chromium @@ -0,0 +1,33 @@ +#!/bin/sh +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv) +# +# OpenELEC 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 of the License, or +# (at your option) any later version. +# +# OpenELEC 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. If not, see . +################################################################################ + +# make sure we use "own" gtk/pango/nss/etc +export LD_LIBRARY_PATH=/storage/.kodi/addons/browser.chromium/lib + +# configure pango/pixbuf +export PANGO_RC_FILE=/storage/.kodi/addons/browser.chromium/config/pangorc +export GDK_PIXBUF_MODULE_FILE=/storage/.kodi/addons/browser.chromium/config/pixbuf.loaders.cache + +# font rendering in gtk widgets is brokeen with nvidia blob. use our Xdefaults +export XENVIRONMENT=/storage/.kodi/addons/browser.chromium/config/Xdefaults + +# start chromium +LD_PRELOAD=/usr/lib/libGL.so /storage/.kodi/addons/browser.chromium/bin/chromium.bin \ + --user-data-dir=/storage/.kodi/userdata/addon_data/browser.chromium/profile \ + --test-type $@ diff --git a/packages/addons/browser/chromium/source/default.py b/packages/addons/browser/chromium/source/default.py new file mode 100644 index 0000000000..b4e16086f6 --- /dev/null +++ b/packages/addons/browser/chromium/source/default.py @@ -0,0 +1,195 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# 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 +################################################################################ + +import os +import sys +import time +import xbmcaddon +import subprocess +from xml.dom.minidom import parse + +sys.path.append('/usr/share/kodi/addons/service.libreelec.settings') + +import oe + +__addon__ = xbmcaddon.Addon(); +__path__ = os.path.join(__addon__.getAddonInfo('path'), 'bin') + '/' + +pauseXBMC = __addon__.getSetting("PAUSE_XBMC") + +# widevine and flash stuff +__url__ = 'https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb' +__file__ = __url__.split('/')[-1] +__tar__ = 'data.tar.xz' +__tmp__ = '/tmp/widevine/' +__lib__ = 'opt/google/chrome/libwidevinecdm.so' +__flash__ = 'opt/google/chrome/PepperFlash/libpepflashplayer.so' + +def download(): + try: + if not os.path.isdir(__tmp__): + os.mkdir(__tmp__) + if not os.path.exists(__tmp__ + __file__): + oe.download_file(__url__, __tmp__ + __file__) + except Exception, e: + oe.notify('Chromium', 'Could not download file') + +def install_flash(): + try: + download() + oe.notify('Chromium', 'Extracting libpepflashplayer.so') + if not os.path.isdir(__tmp__ + __tar__): + oe.execute('cd ' + __tmp__ + ' && ar -x ' + __file__) + oe.execute('tar xf ' + __tmp__ + __tar__ + ' -C ' + __tmp__ + ' ./' + __flash__) + if not os.path.isdir(__path__ + 'PepperFlash'): + os.mkdir(__path__ + 'PepperFlash') + oe.copy_file(__tmp__ + __flash__, __path__ + 'PepperFlash/' + __flash__.split('/')[-1]) + oe.notify('Chromium', 'Installation of libpepflashplayer.so succeeded') + except Exception, e: + oe.notify('Chromium', 'Installation of libpepflashplayer.so failed') + +def install_widevine(): + try: + download() + oe.notify('Chromium', 'Extracting libwidevinecdm.so') + if not os.path.isdir(__tmp__ + __tar__): + oe.execute('cd ' + __tmp__ + ' && ar -x ' + __file__) + oe.execute('tar xf ' + __tmp__ + __tar__ + ' -C ' + __tmp__ + ' ./' + __lib__) + oe.copy_file(__tmp__ + __lib__, __path__ + __lib__.split('/')[-1]) + oe.notify('Chromium', 'Installation of libwidevinecdm.so succeeded') + except Exception, e: + oe.notify('Chromium', 'Installation of libwidevinecdm.so failed') + +def pauseXbmc(): + if pauseXBMC == "true": + xbmc.executebuiltin("PlayerControl(Stop)") + xbmc.audioSuspend() + xbmc.enableNavSounds(False) + +def resumeXbmc(): + if pauseXBMC == "true": + xbmc.audioResume() + xbmc.enableNavSounds(True) + +def startChromium(args): + oe.execute('chmod +x ' + __path__ + 'chromium') + oe.execute('chmod +x ' + __path__ + 'chromium.bin') + oe.execute('chmod 4755 ' + __path__ + 'chrome-sandbox') + + try: + window_mode = { + 'maximized': '--start-maximized', + 'kiosk': '--kiosk', + 'none': '', + } + + raster_mode = { + 'default': '', + 'off': '--disable-accelerated-2d-canvas --disable-gpu-compositing', + 'force': '--enable-gpu-rasterization --enable-accelerated-2d-canvas --ignore-gpu-blacklist', + } + + new_env = os.environ.copy() + vaapi_mode = __addon__.getSetting('VAAPI_MODE') + gpu_accel_mode = '' + if vaapi_mode == 'intel': + new_env['LIBVA_DRIVERS_PATH'] = '/usr/lib/va' + new_env['LIBVA_DRIVER_NAME'] = 'i965' + elif vaapi_mode == 'amd': + new_env['LIBVA_DRIVERS_PATH'] = os.path.join(__addon__.getAddonInfo('path'), 'lib') + new_env['LIBVA_DRIVER_NAME'] = 'vdpau' + elif vaapi_mode == 'nvidia': + new_env['LIBVA_DRIVERS_PATH'] = os.path.join(__addon__.getAddonInfo('path'), 'lib') + new_env['LIBVA_DRIVER_NAME'] = 'vdpau' + gpu_accel_mode = '--allow-no-sandbox-job --disable-gpu-sandbox' + else: + new_env['LIBGL_ALWAYS_SOFTWARE'] = '1' + + flash_plugin = '' + if os.path.exists(__path__ + 'PepperFlash/libpepflashplayer.so'): + flash_plugin = '--ppapi-flash-path=' + __path__ + 'PepperFlash/libpepflashplayer.so' + + if __addon__.getSetting('USE_CUST_AUDIODEVICE') == 'true': + alsa_device = __addon__.getSetting('CUST_AUDIODEVICE_STR') + else: + alsa_device = getAudioDevice() + alsa_param = '' + if not alsa_device == None and not alsa_device == '': + alsa_param = '--alsa-output-device=' + alsa_device + + chrome_params = window_mode.get(__addon__.getSetting('WINDOW_MODE')) + ' ' + \ + raster_mode.get(__addon__.getSetting('RASTER_MODE')) + ' ' + \ + flash_plugin + ' ' + \ + gpu_accel_mode + ' ' + \ + alsa_param + ' ' + \ + args + ' ' + \ + __addon__.getSetting('HOMEPAGE') + subprocess.call(__path__ + 'chromium ' + chrome_params, shell=True, env=new_env) + except Exception, e: + oe.dbg_log('chromium', unicode(e)) + +def isRuning(pname): + tmp = os.popen("ps -Af").read() + pcount = tmp.count(pname) + if pcount > 0: + return True + return False + +def getAudioDevice(): + try: + dom = parse("/storage/.kodi/userdata/guisettings.xml") + audiooutput=dom.getElementsByTagName('audiooutput') + for node in audiooutput: + dev = node.getElementsByTagName('audiodevice')[0].childNodes[0].nodeValue + if dev.startswith("ALSA:"): + dev = dev.split("ALSA:")[1] + if dev == "@": + return None + if dev.startswith("@:"): + dev = dev.split("@:")[1] + else: + # not ALSA + return None + except: + return None + if dev.startswith("CARD="): + dev = "plughw:" + dev + return dev + +if (not __addon__.getSetting("firstrun")): + __addon__.setSetting("firstrun", "1") + __addon__.openSettings() + +try: + args = ' '.join(sys.argv[1:]) +except: + args = "" + +if args == 'widevine': + install_widevine() +elif args == 'flash': + install_flash() +else: + if not isRuning('chromium.bin'): + pauseXbmc() + startChromium(args) + while isRuning('chromium.bin'): + time.sleep(1) + resumeXbmc() diff --git a/packages/addons/browser/chromium/source/resources/language/English/strings.xml b/packages/addons/browser/chromium/source/resources/language/English/strings.xml new file mode 100644 index 0000000000..8add108e03 --- /dev/null +++ b/packages/addons/browser/chromium/source/resources/language/English/strings.xml @@ -0,0 +1,16 @@ + + + General + Actions + Chromium Configuration + Stop Kodi Player and Suspend AudioEngine + HW Acceleration Mode + Rasterization Mode + Window Mode + Default Homepage + Use Custom Audio Device + Audio Device + Chromium Actions + Install libwidevinecdm.so (Netflix Support) + Install libpepflashplayer.so (Flash Player Support) + diff --git a/packages/addons/browser/chromium/source/resources/settings.xml b/packages/addons/browser/chromium/source/resources/settings.xml new file mode 100644 index 0000000000..65fc47d8cd --- /dev/null +++ b/packages/addons/browser/chromium/source/resources/settings.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + +