summaryrefslogtreecommitdiffstats
path: root/system
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
commitc04dcc2e7d834218ef2d4194331e383402495ae1 (patch)
tree7333e38d10d75386e60f336b80c2443c1166031d /system
parentInitial commit. (diff)
downloadkodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz
kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'system')
-rw-r--r--system/IRSSmap.xml91
-rw-r--r--system/Lircmap.xml724
-rw-r--r--system/X10-Lola-IRSSmap.xml96
-rw-r--r--system/addon-manifest.xml59
-rw-r--r--system/colors.xml153
-rw-r--r--system/dialogcolors.xml166
-rw-r--r--system/keyboardlayouts/arabic.xml27
-rw-r--r--system/keyboardlayouts/bulgarian.xml47
-rw-r--r--system/keyboardlayouts/chinese.xml27
-rw-r--r--system/keyboardlayouts/croatian.xml27
-rw-r--r--system/keyboardlayouts/czech.xml27
-rw-r--r--system/keyboardlayouts/danish.xml27
-rw-r--r--system/keyboardlayouts/english.xml85
-rw-r--r--system/keyboardlayouts/estonian.xml27
-rw-r--r--system/keyboardlayouts/french.xml27
-rw-r--r--system/keyboardlayouts/german.xml59
-rw-r--r--system/keyboardlayouts/greek.xml27
-rw-r--r--system/keyboardlayouts/hebrew.xml47
-rw-r--r--system/keyboardlayouts/hungarian.xml27
-rw-r--r--system/keyboardlayouts/icelandic.xml27
-rw-r--r--system/keyboardlayouts/italian.xml45
-rw-r--r--system/keyboardlayouts/korean.xml27
-rw-r--r--system/keyboardlayouts/lithuanian.xml47
-rw-r--r--system/keyboardlayouts/norwegian.xml27
-rw-r--r--system/keyboardlayouts/persian.xml27
-rw-r--r--system/keyboardlayouts/polish.xml27
-rw-r--r--system/keyboardlayouts/portuguese.xml47
-rw-r--r--system/keyboardlayouts/romanian.xml27
-rw-r--r--system/keyboardlayouts/russian.xml47
-rw-r--r--system/keyboardlayouts/silesian.xml27
-rw-r--r--system/keyboardlayouts/slovak.xml67
-rw-r--r--system/keyboardlayouts/slovenian.xml27
-rw-r--r--system/keyboardlayouts/spanish.xml27
-rw-r--r--system/keyboardlayouts/swedish.xml27
-rw-r--r--system/keyboardlayouts/thai.xml27
-rw-r--r--system/keyboardlayouts/turkish.xml27
-rw-r--r--system/keyboardlayouts/ukrainian.xml47
-rw-r--r--system/keymaps/appcommand.xml31
-rw-r--r--system/keymaps/customcontroller.AppleRemote.xml202
-rw-r--r--system/keymaps/customcontroller.Harmony.xml343
-rw-r--r--system/keymaps/customcontroller.SiriRemote.xml147
-rw-r--r--system/keymaps/gamepad.xml322
-rw-r--r--system/keymaps/joystick.xml415
-rw-r--r--system/keymaps/keyboard.xml849
-rw-r--r--system/keymaps/mouse.xml68
-rw-r--r--system/keymaps/nyxboard/keyboard.xml15
-rw-r--r--system/keymaps/osmc/osmc_remote.xml576
-rw-r--r--system/keymaps/remote.xml720
-rw-r--r--system/keymaps/touchscreen.xml133
-rw-r--r--system/keymaps/wetek-play/keyboard.xml275
-rw-r--r--system/library/music/addons.xml6
-rw-r--r--system/library/music/albums.xml6
-rw-r--r--system/library/music/artists.xml6
-rw-r--r--system/library/music/boxsets.xml6
-rw-r--r--system/library/music/compilations.xml6
-rw-r--r--system/library/music/files.xml6
-rw-r--r--system/library/music/genres.xml7
-rw-r--r--system/library/music/musicroles/albumartists.xml6
-rw-r--r--system/library/music/musicroles/allartists.xml6
-rw-r--r--system/library/music/musicroles/allcontributors.xml6
-rw-r--r--system/library/music/musicroles/allroles.xml6
-rw-r--r--system/library/music/musicroles/arrangers.xml6
-rw-r--r--system/library/music/musicroles/composers.xml6
-rw-r--r--system/library/music/musicroles/conductors.xml6
-rw-r--r--system/library/music/musicroles/djmixers.xml6
-rw-r--r--system/library/music/musicroles/index.xml5
-rw-r--r--system/library/music/musicroles/lyricists.xml6
-rw-r--r--system/library/music/musicroles/orchestras.xml6
-rw-r--r--system/library/music/musicroles/remixers.xml6
-rw-r--r--system/library/music/musicvideos/albums.xml7
-rw-r--r--system/library/music/musicvideos/artists.xml7
-rw-r--r--system/library/music/musicvideos/directors.xml7
-rw-r--r--system/library/music/musicvideos/genres.xml7
-rw-r--r--system/library/music/musicvideos/index.xml5
-rw-r--r--system/library/music/musicvideos/studios.xml7
-rw-r--r--system/library/music/musicvideos/tags.xml7
-rw-r--r--system/library/music/musicvideos/titles.xml7
-rw-r--r--system/library/music/musicvideos/years.xml7
-rw-r--r--system/library/music/playlists.xml6
-rw-r--r--system/library/music/recentlyaddedalbums.xml6
-rw-r--r--system/library/music/recentlyplayedalbums.xml6
-rw-r--r--system/library/music/singles.xml6
-rw-r--r--system/library/music/songs.xml6
-rw-r--r--system/library/music/sources.xml6
-rw-r--r--system/library/music/top100/index.xml5
-rw-r--r--system/library/music/top100/top100albums.xml12
-rw-r--r--system/library/music/top100/top100songs.xml12
-rw-r--r--system/library/music/years.xml7
-rw-r--r--system/library/video/addons.xml6
-rw-r--r--system/library/video/files.xml6
-rw-r--r--system/library/video/movies/actors.xml8
-rw-r--r--system/library/video/movies/country.xml7
-rw-r--r--system/library/video/movies/directors.xml7
-rw-r--r--system/library/video/movies/genres.xml7
-rw-r--r--system/library/video/movies/index.xml5
-rw-r--r--system/library/video/movies/recentlyaddedmovies.xml6
-rw-r--r--system/library/video/movies/sets.xml7
-rw-r--r--system/library/video/movies/studios.xml7
-rw-r--r--system/library/video/movies/tags.xml7
-rw-r--r--system/library/video/movies/titles.xml7
-rw-r--r--system/library/video/movies/years.xml7
-rw-r--r--system/library/video/musicvideos/albums.xml7
-rw-r--r--system/library/video/musicvideos/artists.xml7
-rw-r--r--system/library/video/musicvideos/directors.xml7
-rw-r--r--system/library/video/musicvideos/genres.xml7
-rw-r--r--system/library/video/musicvideos/index.xml5
-rw-r--r--system/library/video/musicvideos/recentlyaddedmusicvideos.xml6
-rw-r--r--system/library/video/musicvideos/studios.xml7
-rw-r--r--system/library/video/musicvideos/tags.xml7
-rw-r--r--system/library/video/musicvideos/titles.xml7
-rw-r--r--system/library/video/musicvideos/years.xml7
-rw-r--r--system/library/video/playlists.xml6
-rw-r--r--system/library/video/tvshows/actors.xml7
-rw-r--r--system/library/video/tvshows/genres.xml7
-rw-r--r--system/library/video/tvshows/index.xml5
-rw-r--r--system/library/video/tvshows/inprogressshows.xml6
-rw-r--r--system/library/video/tvshows/recentlyaddedepisodes.xml6
-rw-r--r--system/library/video/tvshows/studios.xml7
-rw-r--r--system/library/video/tvshows/tags.xml7
-rw-r--r--system/library/video/tvshows/titles.xml7
-rw-r--r--system/library/video/tvshows/years.xml7
-rw-r--r--system/library/video_flat/addons.xml6
-rw-r--r--system/library/video_flat/files.xml6
-rw-r--r--system/library/video_flat/inprogressshows.xml6
-rw-r--r--system/library/video_flat/movies.xml7
-rw-r--r--system/library/video_flat/musicvideos.xml7
-rw-r--r--system/library/video_flat/playlists.xml6
-rw-r--r--system/library/video_flat/recentlyaddedepisodes.xml6
-rw-r--r--system/library/video_flat/recentlyaddedmovies.xml6
-rw-r--r--system/library/video_flat/recentlyaddedmusicvideos.xml6
-rw-r--r--system/library/video_flat/tvshows.xml7
-rw-r--r--system/peripherals.xml66
-rw-r--r--system/playercorefactory.xml40
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/10-autohint.conf9
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/10-no-sub-pixel.conf9
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-bgr.conf9
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-rgb.conf9
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-vbgr.conf9
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-vrgb.conf9
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/10-unhinted.conf9
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/20-fix-globaladvance.conf29
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/20-lohit-gujarati.conf11
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/20-unhint-small-vera.conf49
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/30-amt-aliases.conf21
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/30-urw-aliases.conf52
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/40-generic.conf66
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/49-sansserif.conf21
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/50-user.conf7
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/51-local.conf7
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/60-latin.conf42
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/65-fonts-persian.conf539
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/65-nonlatin.conf38
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/69-unifont.conf24
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/70-no-bitmaps.conf13
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/70-yes-bitmaps.conf13
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/80-delicious.conf20
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/90-synthetic.conf64
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.avail/README48
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/20-fix-globaladvance.conf29
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/20-lohit-gujarati.conf11
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/20-unhint-small-vera.conf49
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/30-amt-aliases.conf21
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/30-urw-aliases.conf52
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/40-generic.conf66
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/49-sansserif.conf21
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/50-user.conf7
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/51-local.conf7
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/60-latin.conf42
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/65-fonts-persian.conf539
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/65-nonlatin.conf38
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/69-unifont.conf24
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/80-delicious.conf20
-rw-r--r--system/players/VideoPlayer/etc/fonts/conf.d/90-synthetic.conf64
-rw-r--r--system/players/VideoPlayer/etc/fonts/fonts.conf156
-rw-r--r--system/players/VideoPlayer/etc/fonts/fonts.dtd222
-rw-r--r--system/settings/android.xml44
-rw-r--r--system/settings/darwin.xml69
-rw-r--r--system/settings/darwin_ios.xml90
-rw-r--r--system/settings/darwin_osx.xml12
-rw-r--r--system/settings/darwin_tvos.xml161
l---------system/settings/freebsd.xml1
-rw-r--r--system/settings/linux.xml249
-rwxr-xr-xsystem/settings/settings.xml4059
-rw-r--r--system/settings/win10.xml51
-rw-r--r--system/settings/win32.xml18
-rw-r--r--system/settings/windows.xml73
-rw-r--r--system/shaders/GL/1.2/gl_convolution-4x4.glsl89
-rw-r--r--system/shaders/GL/1.2/gl_convolution-6x6.glsl100
-rw-r--r--system/shaders/GL/1.2/gl_output.glsl58
-rw-r--r--system/shaders/GL/1.2/gl_shader_frag_default.glsl29
-rw-r--r--system/shaders/GL/1.2/gl_shader_frag_fonts.glsl34
-rw-r--r--system/shaders/GL/1.2/gl_shader_frag_multi.glsl32
-rw-r--r--system/shaders/GL/1.2/gl_shader_frag_multi_blendcolor.glsl33
-rw-r--r--system/shaders/GL/1.2/gl_shader_frag_texture.glsl31
-rw-r--r--system/shaders/GL/1.2/gl_shader_frag_texture_noblend.glsl30
-rw-r--r--system/shaders/GL/1.2/gl_shader_vert.glsl40
-rw-r--r--system/shaders/GL/1.2/gl_shader_vert_default.glsl31
-rw-r--r--system/shaders/GL/1.2/gl_stretch.glsl41
-rw-r--r--system/shaders/GL/1.2/gl_videofilter_frag.glsl30
-rw-r--r--system/shaders/GL/1.2/gl_videofilter_vertex.glsl34
-rw-r--r--system/shaders/GL/1.2/gl_yuv2rgb_basic.glsl131
-rw-r--r--system/shaders/GL/1.2/gl_yuv2rgb_vertex.glsl38
-rw-r--r--system/shaders/GL/1.5/gl_convolution-4x4.glsl71
-rw-r--r--system/shaders/GL/1.5/gl_convolution-6x6.glsl83
-rw-r--r--system/shaders/GL/1.5/gl_output.glsl37
-rw-r--r--system/shaders/GL/1.5/gl_shader_frag_default.glsl14
-rw-r--r--system/shaders/GL/1.5/gl_shader_frag_fonts.glsl19
-rw-r--r--system/shaders/GL/1.5/gl_shader_frag_multi.glsl17
-rw-r--r--system/shaders/GL/1.5/gl_shader_frag_multi_blendcolor.glsl18
-rw-r--r--system/shaders/GL/1.5/gl_shader_frag_texture.glsl16
-rw-r--r--system/shaders/GL/1.5/gl_shader_frag_texture_lim.glsl15
-rw-r--r--system/shaders/GL/1.5/gl_shader_frag_texture_noblend.glsl15
-rw-r--r--system/shaders/GL/1.5/gl_shader_vert.glsl20
-rw-r--r--system/shaders/GL/1.5/gl_shader_vert_default.glsl11
-rw-r--r--system/shaders/GL/1.5/gl_stretch.glsl22
-rw-r--r--system/shaders/GL/1.5/gl_tonemap.glsl50
-rw-r--r--system/shaders/GL/1.5/gl_videofilter_frag.glsl12
-rw-r--r--system/shaders/GL/1.5/gl_videofilter_vertex.glsl14
-rw-r--r--system/shaders/GL/1.5/gl_yuv2rgb_basic.glsl123
-rw-r--r--system/shaders/GL/1.5/gl_yuv2rgb_vertex.glsl20
-rw-r--r--system/shaders/GL/4.0/gl_yuv2rgb_filter4.glsl141
-rw-r--r--system/shaders/GLES/2.0/gles_convolution-4x4.frag78
-rw-r--r--system/shaders/GLES/2.0/gles_convolution-6x6.frag89
-rw-r--r--system/shaders/GLES/2.0/gles_shader.vert41
-rw-r--r--system/shaders/GLES/2.0/gles_shader_default.frag38
-rw-r--r--system/shaders/GLES/2.0/gles_shader_fonts.frag41
-rw-r--r--system/shaders/GLES/2.0/gles_shader_multi.frag41
-rw-r--r--system/shaders/GLES/2.0/gles_shader_multi_blendcolor.frag42
-rw-r--r--system/shaders/GLES/2.0/gles_shader_rgba.frag43
-rw-r--r--system/shaders/GLES/2.0/gles_shader_rgba_blendcolor.frag43
-rw-r--r--system/shaders/GLES/2.0/gles_shader_rgba_bob.frag56
-rw-r--r--system/shaders/GLES/2.0/gles_shader_rgba_bob_oes.frag58
-rw-r--r--system/shaders/GLES/2.0/gles_shader_rgba_oes.frag41
-rw-r--r--system/shaders/GLES/2.0/gles_shader_texture.frag40
-rw-r--r--system/shaders/GLES/2.0/gles_shader_texture_noalpha.frag25
-rw-r--r--system/shaders/GLES/2.0/gles_shader_texture_noblend.frag39
-rw-r--r--system/shaders/GLES/2.0/gles_tonemap.frag50
-rw-r--r--system/shaders/GLES/2.0/gles_videofilter.frag11
-rw-r--r--system/shaders/GLES/2.0/gles_videofilter.vert14
-rw-r--r--system/shaders/GLES/2.0/gles_yuv2rgb.vert40
-rw-r--r--system/shaders/GLES/2.0/gles_yuv2rgb_basic.frag93
-rw-r--r--system/shaders/GLES/2.0/gles_yuv2rgb_bob.frag113
-rw-r--r--system/shaders/convolution-4x4_d3d.fx88
-rw-r--r--system/shaders/convolution-6x6_d3d.fx96
-rw-r--r--system/shaders/convolution_d3d.fx61
-rw-r--r--system/shaders/convolutionsep-4x4_d3d.fx109
-rw-r--r--system/shaders/convolutionsep-6x6_d3d.fx121
-rw-r--r--system/shaders/guishader_checkerboard_left.hlsl40
-rw-r--r--system/shaders/guishader_checkerboard_right.hlsl40
-rw-r--r--system/shaders/guishader_common.hlsl116
-rw-r--r--system/shaders/guishader_default.hlsl28
-rw-r--r--system/shaders/guishader_fonts.hlsl31
-rw-r--r--system/shaders/guishader_interlaced_left.hlsl40
-rw-r--r--system/shaders/guishader_interlaced_right.hlsl40
-rw-r--r--system/shaders/guishader_multi_texture_blend.hlsl31
-rw-r--r--system/shaders/guishader_texture.hlsl30
-rw-r--r--system/shaders/guishader_texture_noblend.hlsl30
-rw-r--r--system/shaders/guishader_vert.hlsl32
-rw-r--r--system/shaders/output_d3d.fx197
-rw-r--r--system/shaders/rp_output_d3d.fx81
-rw-r--r--system/shaders/yuv2rgb_d3d.fx138
261 files changed, 18331 insertions, 0 deletions
diff --git a/system/IRSSmap.xml b/system/IRSSmap.xml
new file mode 100644
index 0000000..31c9bda
--- /dev/null
+++ b/system/IRSSmap.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of IR Server Suite keys to XBMC keys used in Keymap.xml -->
+
+<irssmap>
+ <remote device="Microsoft MCE">
+ <pause>31719</pause> <!-- pause -->
+ <stop>31718</stop> <!-- stop -->
+ <play>31721</play> <!-- play -->
+ <forward>31723</forward> <!-- forward -->
+ <reverse>31722</reverse> <!-- reverse -->
+ <left>31711</left> <!-- left -->
+ <right>31710</right> <!-- right -->
+ <up>31713</up> <!-- up -->
+ <down>31712</down> <!-- down -->
+ <select>31709</select> <!-- ok -->
+ <pageplus>31725</pageplus> <!-- channel up -->
+ <pageminus>31724</pageminus> <!-- channel down -->
+ <back>31708</back> <!-- previous -->
+ <menu>31707</menu> <!-- dvd menu -->
+ <title>31671</title> <!-- recorded tv -->
+ <info>31728</info> <!-- info -->
+ <skipplus>31717</skipplus> <!-- skip -->
+ <skipminus>31716</skipminus> <!-- repeat -->
+ <display>31705</display> <!-- guide -->
+ <start>31730</start> <!-- start -->
+ <record>31720</record> <!-- record -->
+ <volumeplus>31727</volumeplus> <!-- volume up -->
+ <volumeminus>31726</volumeminus> <!-- volume down -->
+ <mute>31729</mute> <!-- mute -->
+ <power>31642</power> <!-- tv power -->
+ <mytv>31706</mytv> <!-- live tv -->
+ <one>31742</one>
+ <two>31741</two>
+ <three>31740</three>
+ <four>31739</four>
+ <five>31738</five>
+ <six>31737</six>
+ <seven>31736</seven>
+ <eight>31735</eight>
+ <nine>31734</nine>
+ <zero>31743</zero>
+ <mytv>31652</mytv> <!-- red -->
+ <mymusic>31651</mymusic> <!-- green -->
+ <mypictures>31650</mypictures> <!-- yellow -->
+ <myvideo>31649</myvideo> <!-- blue -->
+ </remote>
+ <remote device="Abstract">
+ <!-- This is a default remote used by IR Server Suite to send english names instead of remote codes -->
+ <!-- And should allow for more remotes to work out of the box with newer IR Server Suite installed -->
+ <pause>Pause</pause>
+ <stop>Stop</stop>
+ <play>Play</play>
+ <forward>FastForward</forward>
+ <reverse>Rewind</reverse>
+ <left>Left</left>
+ <right>Right</right>
+ <up>Up</up>
+ <down>Down</down>
+ <select>OK</select>
+ <pageplus>ChannelUp</pageplus>
+ <pageminus>ChannelDown</pageminus>
+ <back>Back</back>
+ <menu>DVD</menu>
+ <title>RecordedTV</title>
+ <info>Info</info>
+ <skipplus>NextChapter</skipplus>
+ <skipminus>PreviousChapter</skipminus>
+ <display>Guide</display>
+ <start>Start</start>
+ <record>Record</record>
+ <volumeplus>VolumeUp</volumeplus>
+ <volumeminus>VolumeDown</volumeminus>
+ <mute>Mute</mute>
+ <power>Power</power>
+ <mytv>LiveTV</mytv>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <zero>Number0</zero>
+ <mytv>Red</mytv>
+ <mymusic>Green</mymusic>
+ <mypictures>Yellow</mypictures>
+ <myvideo>Blue</myvideo>
+ </remote>
+</irssmap>
diff --git a/system/Lircmap.xml b/system/Lircmap.xml
new file mode 100644
index 0000000..ec7c6e0
--- /dev/null
+++ b/system/Lircmap.xml
@@ -0,0 +1,724 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of LIRC keys to XBMC keys used in Keymap.xml -->
+<!-- -->
+<!-- How to add remotes -->
+<!-- <remote device="name_Lirc_calls_the_remote"> -->
+<!-- -->
+<!-- For the commands the layout following layout is used -->
+<!-- <XBMC_COMMAND>LircButtonName</XBMC_COMMAND> -->
+<!-- -->
+<!-- For a list of XBMC_COMMAND's check out the <remote> sections of keymap.xml -->
+
+<lircmap>
+ <remote device="mceusb">
+ <play>Play</play>
+ <pause>Pause</pause>
+ <stop>Stop</stop>
+ <forward>Forward</forward>
+ <reverse>Rewind</reverse>
+ <left>Left</left>
+ <right>Right</right>
+ <up>Up</up>
+ <down>Down</down>
+ <select>OK</select>
+ <pageplus>ChanUp</pageplus>
+ <pageminus>ChanDown</pageminus>
+ <back>Back</back>
+ <menu>DVD</menu>
+ <title>Guide</title>
+ <info>More</info>
+ <skipplus>Skip</skipplus>
+ <skipminus>Replay</skipminus>
+ <display>Aspect</display>
+ <start>Home</start>
+ <record>Record</record>
+ <volumeplus>VolUp</volumeplus>
+ <volumeminus>VolDown</volumeminus>
+ <mute>Mute</mute>
+ <power>Power</power>
+ <myvideo>Videos</myvideo>
+ <mymusic>Music</mymusic>
+ <mypictures>Pictures</mypictures>
+ <mytv>TV</mytv>
+ <one>One</one>
+ <two>Two</two>
+ <three>Three</three>
+ <four>Four</four>
+ <five>Five</five>
+ <six>Six</six>
+ <seven>Seven</seven>
+ <eight>Eight</eight>
+ <nine>Nine</nine>
+ <zero>Zero</zero>
+ <star>Star</star>
+ <hash>Hash</hash>
+ <clear>Clear</clear>
+ <enter>Enter</enter>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ <teletext>Teletext</teletext>
+ <print>Print</print>
+
+ <!-- new kernel-based lirc button names -->
+ <eject>KEY_EJECTCD</eject>
+ <left>KEY_LEFT</left>
+ <right>KEY_RIGHT</right>
+ <up>KEY_UP</up>
+ <down>KEY_DOWN</down>
+ <select>KEY_OK</select>
+ <start>KEY_HOME</start>
+ <back>KEY_BACK</back>
+ <record>KEY_RECORD</record>
+ <play>KEY_PLAY</play>
+ <pause>KEY_PAUSE</pause>
+ <stop>KEY_STOP</stop>
+ <forward>KEY_FORWARD</forward>
+ <reverse>KEY_REWIND</reverse>
+ <volumeplus>KEY_VOLUMEUP</volumeplus>
+ <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+ <pageplus>KEY_CHANNELUP</pageplus>
+ <pageminus>KEY_CHANNELDOWN</pageminus>
+ <skipplus>KEY_NEXT</skipplus>
+ <skipminus>KEY_AGAIN</skipminus>
+ <mute>KEY_MUTE</mute>
+ <power>KEY_POWER</power>
+ <myvideo>KEY_VIDEO</myvideo>
+ <mymusic>KEY_AUDIO</mymusic>
+ <livetv>LiveTV</livetv>
+ <livetv>KEY_TV</livetv>
+ <guide>KEY_EPG</guide>
+ <one>KEY_1</one>
+ <two>KEY_2</two>
+ <three>KEY_3</three>
+ <four>KEY_4</four>
+ <five>KEY_5</five>
+ <six>KEY_6</six>
+ <seven>KEY_7</seven>
+ <eight>KEY_8</eight>
+ <nine>KEY_9</nine>
+ <zero>KEY_0</zero>
+ <red>KEY_RED</red>
+ <green>KEY_GREEN</green>
+ <yellow>KEY_YELLOW</yellow>
+ <blue>KEY_BLUE</blue>
+ <menu>KEY_DVD</menu>
+ <clear>KEY_CLEAR</clear>
+ <enter>KEY_ENTER</enter>
+ <star>KEY_NUMERIC_STAR</star>
+ <hash>KEY_NUMERIC_POUND</hash>
+ <info>KEY_INFO</info>
+ </remote>
+
+ <remote device="XboxDVDDongle">
+ <play>PLAY</play>
+ <pause>PAUSE</pause>
+ <stop>STOP</stop>
+ <forward>FORWARD</forward>
+ <reverse>REVERSE</reverse>
+ <left>LEFT</left>
+ <right>RIGHT</right>
+ <up>UP</up>
+ <down>DOWN</down>
+ <select>SELECT</select>
+ <back>BACK</back>
+ <menu>MENU</menu>
+ <title>TITLE</title>
+ <info>INFO</info>
+ <skipplus>SKIP+</skipplus>
+ <skipminus>SKIP-</skipminus>
+ <display>DISPLAY</display>
+ <one>1</one>
+ <two>2</two>
+ <three>3</three>
+ <four>4</four>
+ <five>5</five>
+ <six>6</six>
+ <seven>7</seven>
+ <eight>8</eight>
+ <nine>9</nine>
+ <zero>0</zero>
+ </remote>
+
+ <remote device="Microsoft_Xbox">
+ <play>PLAY</play>
+ <pause>PAUSE</pause>
+ <stop>STOP</stop>
+ <forward>FORWARD</forward>
+ <reverse>REVERSE</reverse>
+ <left>LEFT</left>
+ <right>RIGHT</right>
+ <up>UP</up>
+ <down>DOWN</down>
+ <select>SELECT</select>
+ <back>BACK</back>
+ <menu>MENU</menu>
+ <title>TITLE</title>
+ <info>INFO</info>
+ <skipplus>SKIP+</skipplus>
+ <skipminus>SKIP-</skipminus>
+ <display>DISPLAY</display>
+ <one>1</one>
+ <two>2</two>
+ <three>3</three>
+ <four>4</four>
+ <five>5</five>
+ <six>6</six>
+ <seven>7</seven>
+ <eight>8</eight>
+ <nine>9</nine>
+ <zero>0</zero>
+ </remote>
+
+ <remote device="PinnacleSysPCTVRemote">
+ <play>KEY_PLAY</play>
+ <pause>KEY_PAUSE</pause>
+ <stop>KEY_STOP</stop>
+ <forward>KEY_FASTFORWARD</forward>
+ <reverse>KEY_REWIND</reverse>
+ <left>Vol-Rew</left>
+ <right>Vol+FF</right>
+ <up>Chan+Play</up>
+ <down>Chan-Stop</down>
+ <pageplus>KEY_CHANNELUP</pageplus>
+ <pageminus>KEY_CHANNELDOWN</pageminus>
+ <select>middle</select>
+ <back>KEY_UNDO</back>
+ <menu>KEY_MENU</menu>
+ <title>KEY_L</title>
+ <info>KEY_INFO</info>
+ <skipplus>KEY_NEXT</skipplus>
+ <display>Fullscreen</display>
+ <record>KEY_RECORD</record>
+ <volumeplus>KEY_VOLUMEUP</volumeplus>
+ <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+ <mute>KEY_MUTE</mute>
+ <power>KEY_POWER</power>
+ <one>KEY_1</one>
+ <two>KEY_2</two>
+ <three>KEY_3</three>
+ <four>KEY_4</four>
+ <five>KEY_5</five>
+ <six>KEY_6</six>
+ <seven>KEY_7</seven>
+ <eight>KEY_8</eight>
+ <nine>KEY_9</nine>
+ <zero>KEY_0</zero>
+ </remote>
+
+ <remote device="anysee">
+ <pause>pause</pause>
+ <stop>stop</stop>
+ <forward>f1</forward>
+ <reverse>f2</reverse>
+ <left>left</left>
+ <right>right</right>
+ <up>chan-up</up>
+ <down>chan-down</down>
+ <select>ok</select>
+ <back>exit</back>
+ <menu>menu</menu>
+ <title>play</title>
+ <info>info</info>
+ <skipplus>jump-fwd</skipplus>
+ <skipminus>jump-back</skipminus>
+ <display>size</display>
+ <start>star</start>
+ <record>rec</record>
+ <volumeplus></volumeplus>
+ <volumeminus></volumeminus>
+ <mute>mute</mute>
+ <power>power</power>
+ <one>1</one>
+ <two>2</two>
+ <three>3</three>
+ <four>4</four>
+ <five>5</five>
+ <six>6</six>
+ <seven>7</seven>
+ <eight>8</eight>
+ <nine>9</nine>
+ <zero>0</zero>
+ <red>red</red>
+ <green>green</green>
+ <yellow>yellow</yellow>
+ <blue>blue</blue>
+ <subtitle>subtitle</subtitle>
+ <language>audio</language>
+ </remote>
+ <remote device="iMON-PAD">
+ <power>Power</power>
+ <record>Record</record>
+ <play>Play</play>
+ <reverse>Rewind</reverse>
+ <pause>Pause</pause>
+ <stop>Stop</stop>
+ <forward>FastForward</forward>
+ <left>Left</left>
+ <right>Right</right>
+ <up>Up</up>
+ <down>Down</down>
+ <select>Enter</select>
+ <pageplus>Ch+</pageplus>
+ <pageminus>Ch-</pageminus>
+ <back>Esc</back>
+ <back>Backspace</back>
+ <menu>Multimon</menu>
+ <title>MouseMenu</title>
+ <info>SelectSpace</info>
+ <skipplus>NextChapter</skipplus>
+ <skipminus>PrevChapter</skipminus>
+ <display>FullScreen</display>
+ <start>MultiMon</start>
+ <volumeplus>Vol+</volumeplus>
+ <volumeminus>Vol-</volumeminus>
+ <mute>Mute</mute>
+ <myvideo>MyMovie</myvideo>
+ <mymusic>MyMusic</mymusic>
+ <mypictures>MyPhoto</mypictures>
+ <mytv>MyTV</mytv>
+ <one>1</one>
+ <two>2</two>
+ <three>3</three>
+ <four>4</four>
+ <five>5</five>
+ <six>6</six>
+ <seven>7</seven>
+ <eight>8</eight>
+ <nine>9</nine>
+ <zero>0</zero>
+ <subtitle>Language</subtitle>
+ </remote>
+ <remote device="Antec_Veris_RM200">
+ <stop>KEY_STOP</stop>
+ <pause>KEY_PAUSE</pause>
+ <forward>KEY_FASTFORWARD</forward>
+ <reverse>KEY_REWIND</reverse>
+ <left>KEY_LEFT</left>
+ <right>KEY_RIGHT</right>
+ <up>KEY_UP</up>
+ <down>KEY_DOWN</down>
+ <select>KEY_ENTER</select>
+ <pageplus>KEY_CHANNELUP</pageplus>
+ <pageminus>KEY_CHANNELDOWN</pageminus>
+ <back>KEY_BACKSPACE</back>
+ <menu>KEY_MENU</menu>
+ <play>KEY_PLAY</play>
+ <info>Go</info>
+ <skipplus>next</skipplus>
+ <skipminus>prev</skipminus>
+ <display>FullScreen</display>
+ <start>applauncher</start>
+ <record>KEY_RECORD</record>
+ <volumeplus>KEY_VOLUMEUP</volumeplus>
+ <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+ <mute>KEY_MUTE</mute>
+ <power>KEY_POWER</power>
+ <myvideo>KEY_VIDEO</myvideo>
+ <mymusic>KEY_AUDIO</mymusic>
+ <mypictures>KEY_PHOTO</mypictures>
+ <mytv>KEY_TV</mytv>
+ <one>KEY_1</one>
+ <two>KEY_2</two>
+ <three>KEY_3</three>
+ <four>KEY_4</four>
+ <five>KEY_5</five>
+ <six>KEY_6</six>
+ <seven>KEY_7</seven>
+ <eight>KEY_8</eight>
+ <nine>KEY_9</nine>
+ <zero>KEY_0</zero>
+ <star>Star</star>
+ <hash>Hash</hash>
+ <playlist>KEY_BOOKMARKS</playlist>
+ <teletext>Thumbnail</teletext>
+ <title>TaskSwitcher</title>
+ </remote>
+ <remote device="MCE_via_iMON">
+ <play>KEY_PLAY</play>
+ <pause>KEY_PAUSE</pause>
+ <stop>KEY_STOP</stop>
+ <forward>KEY_FASTFORWARD</forward>
+ <reverse>KEY_REWIND</reverse>
+ <left>KEY_LEFT</left>
+ <right>KEY_RIGHT</right>
+ <up>KEY_UP</up>
+ <down>KEY_DOWN</down>
+ <select>KEY_OK</select>
+ <pageplus>KEY_CHANNELUP</pageplus>
+ <pageminus>KEY_CHANNELDOWN</pageminus>
+ <back>KEY_BACKSPACE</back>
+ <menu>PreviousMenu</menu>
+ <title>Guide</title>
+ <info>KEY_INFO</info>
+ <skipplus>KEY_SKIP</skipplus>
+ <skipminus>KEY_REPLAY</skipminus>
+ <display>Teletext</display>
+ <start>WindowsMCE</start>
+ <record>KEY_RECORD</record>
+ <volumeplus>KEY_VOLUMEUP</volumeplus>
+ <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+ <mute>KEY_MUTE</mute>
+ <power>KEY_POWER</power>
+ <myvideo>KEY_VIDEO</myvideo>
+ <mymusic>KEY_AUDIO</mymusic>
+ <mypictures>KEY_PHOTO</mypictures>
+ <mytv>KEY_TV</mytv>
+ <one>KEY_ONE</one>
+ <two>KEY_TWO</two>
+ <three>KEY_THREE</three>
+ <four>KEY_FOUR</four>
+ <five>KEY_FIVE</five>
+ <six>KEY_SIX</six>
+ <seven>KEY_SEVEN</seven>
+ <eight>KEY_EIGHT</eight>
+ <nine>KEY_NINE</nine>
+ <zero>KEY_ZERO</zero>
+ <star>Star</star>
+ <hash>Hash</hash>
+ <clear>KEY_DELETE</clear>
+ <enter>KEY_ENTER</enter>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </remote>
+ <remote device="TwinHanRemote">
+ <display>fullscreen</display>
+ <power>power</power>
+ <one>1</one>
+ <two>2</two>
+ <three>3</three>
+ <four>4</four>
+ <five>5</five>
+ <six>6</six>
+ <seven>7</seven>
+ <eight>8</eight>
+ <nine>9</nine>
+ <record>rec</record>
+ <zero>0</zero>
+ <myvideo>favorite</myvideo>
+ <volumeminus>rewind</volumeminus>
+ <volumeplus>forward</volumeplus>
+ <up>ch+</up>
+ <left>vol-</left>
+ <select>play</select>
+ <right>vol+</right>
+ <down>ch-</down>
+ <menu>recall</menu>
+ <stop>stop</stop>
+ <pause>pause</pause>
+ <mute>mute</mute>
+ <info>epg</info>
+ <recordedtv>recordlist</recordedtv>
+ <title>teletext</title>
+ </remote>
+
+ <remote device="linux-input-layer">
+ <altname>cx23885_remote</altname>
+ <left>KEY_LEFT</left>
+ <right>KEY_RIGHT</right>
+ <up>KEY_UP</up>
+ <down>KEY_DOWN</down>
+ <select>KEY_OK</select>
+ <select>KEY_ENTER</select>
+ <enter>KEY_ENTER</enter>
+ <clear>KEY_DELETE</clear>
+ <start>KEY_SELECT</start>
+ <start>KEY_PROG1</start>
+ <start>KEY_HOME</start>
+ <back>KEY_ESC</back>
+ <back>KEY_EXIT</back>
+ <back>KEY_BACK</back>
+ <back>KEY_CLOSE</back>
+ <record>KEY_RECORD</record>
+ <play>KEY_PLAY</play>
+ <play>KEY_PLAYPAUSE</play>
+ <pause>KEY_PAUSE</pause>
+ <stop>KEY_STOP</stop>
+ <stop>KEY_STOPCD</stop>
+ <forward>KEY_FASTFORWARD</forward>
+ <reverse>KEY_REWIND</reverse>
+ <volumeplus>KEY_VOLUMEUP</volumeplus>
+ <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+ <pageplus>KEY_CHANNELUP</pageplus>
+ <pageminus>KEY_CHANNELDOWN</pageminus>
+ <skipplus>KEY_NEXTSONG</skipplus>
+ <skipplus>KEY_NEXT</skipplus>
+ <skipminus>KEY_PREVIOUSSONG</skipminus>
+ <skipminus>KEY_PREVIOUS</skipminus>
+ <title>KEY_TITLE</title>
+ <guide>KEY_EPG</guide>
+ <subtitle>KEY_SUBTITLE</subtitle>
+ <language>KEY_LANGUAGE</language>
+ <mute>KEY_MUTE</mute>
+ <power>KEY_POWER</power>
+ <myvideo>KEY_VIDEO</myvideo>
+ <mymusic>KEY_AUDIO</mymusic>
+ <mypictures>KEY_MHP</mypictures>
+ <mypictures>KEY_CAMERA</mypictures>
+ <mytv>KEY_TV</mytv>
+ <liveradio>KEY_RADIO</liveradio>
+ <livetv>KEY_TUNER</livetv>
+ <one>KEY_1</one>
+ <two>KEY_2</two>
+ <three>KEY_3</three>
+ <four>KEY_4</four>
+ <five>KEY_5</five>
+ <six>KEY_6</six>
+ <seven>KEY_7</seven>
+ <eight>KEY_8</eight>
+ <nine>KEY_9</nine>
+ <zero>KEY_0</zero>
+ <one>KEY_NUMERIC_1</one>
+ <two>KEY_NUMERIC_2</two>
+ <three>KEY_NUMERIC_3</three>
+ <four>KEY_NUMERIC_4</four>
+ <five>KEY_NUMERIC_5</five>
+ <six>KEY_NUMERIC_6</six>
+ <seven>KEY_NUMERIC_7</seven>
+ <eight>KEY_NUMERIC_8</eight>
+ <nine>KEY_NUMERIC_9</nine>
+ <zero>KEY_NUMERIC_0</zero>
+ <star>KEY_NUMERIC_STAR</star>
+ <hash>KEY_NUMERIC_POUND</hash>
+ <red>KEY_RED</red>
+ <green>KEY_GREEN</green>
+ <yellow>KEY_YELLOW</yellow>
+ <blue>KEY_BLUE</blue>
+ <menu>KEY_DVD</menu>
+ <menu>KEY_MENU</menu>
+ <info>KEY_INFO</info>
+ <info>KEY_PROPS</info>
+ <display>KEY_ANGLE</display>
+ <display>KEY_ZOOM</display>
+ <recordedtv>KEY_PVR</recordedtv>
+ <teletext>KEY_TEXT</teletext>
+ <clear>KEY_DELETE</clear>
+ </remote>
+ <remote device="mediacenter">
+ <pause>pause</pause>
+ <stop>stop</stop>
+ <forward>fwd</forward>
+ <reverse>rew</reverse>
+ <left>left</left>
+ <right>right</right>
+ <up>up</up>
+ <down>down</down>
+ <select>ok</select>
+ <pageplus>ch+</pageplus>
+ <pageminus>ch-</pageminus>
+ <back>back</back>
+ <menu>clear</menu>
+ <title>play</title>
+ <info>info</info>
+ <skipplus>next</skipplus>
+ <skipminus>prev</skipminus>
+ <display>teletext</display>
+ <start>ehome</start>
+ <record>rec</record>
+ <volumeplus>vol+</volumeplus>
+ <volumeminus>vol-</volumeminus>
+ <mute>mute</mute>
+ <power>power</power>
+ <myvideo>video</myvideo>
+ <mymusic>music</mymusic>
+ <mypictures>pictures</mypictures>
+ <mytv>tv</mytv>
+ <one>1</one>
+ <two>2</two>
+ <three>3</three>
+ <four>4</four>
+ <five>5</five>
+ <six>6</six>
+ <seven>7</seven>
+ <eight>8</eight>
+ <nine>9</nine>
+ <zero>0</zero>
+ <mytv>red</mytv>
+ <mymusic>green</mymusic>
+ <mypictures>yellow</mypictures>
+ <myvideo>blue</myvideo>
+ </remote>
+
+ <remote device="devinput">
+ <left>KEY_LEFT</left>
+ <right>KEY_RIGHT</right>
+ <up>KEY_UP</up>
+ <down>KEY_DOWN</down>
+ <select>KEY_OK</select>
+ <enter>KEY_ENTER</enter>
+ <clear>KEY_DELETE</clear>
+ <start>KEY_MEDIA</start>
+ <back>KEY_EXIT</back>
+ <record>KEY_RECORD</record>
+ <play>KEY_PLAY</play>
+ <pause>KEY_PAUSE</pause>
+ <stop>KEY_STOP</stop>
+ <forward>KEY_FASTFORWARD</forward>
+ <reverse>KEY_REWIND</reverse>
+ <volumeplus>KEY_VOLUMEUP</volumeplus>
+ <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+ <pageplus>KEY_CHANNELUP</pageplus>
+ <pageminus>KEY_CHANNELDOWN</pageminus>
+ <skipplus>KEY_NEXT</skipplus>
+ <skipminus>KEY_PREVIOUS</skipminus>
+ <guide>KEY_EPG</guide>
+ <title>KEY_TITLE</title>
+ <subtitle>KEY_SUBTITLE</subtitle>
+ <language>KEY_LANGUAGE</language>
+ <info>KEY_INFO</info>
+ <display>KEY_ZOOM</display>
+ <mute>KEY_MUTE</mute>
+ <power>KEY_POWER</power>
+ <eject>KEY_EJECTCD</eject>
+ <eject>KEY_EJECTCLOSECD</eject>
+ <menu>KEY_DVD</menu>
+ <menu>KEY_MENU</menu>
+ <myvideo>KEY_VIDEO</myvideo>
+ <mymusic>KEY_AUDIO</mymusic>
+ <mypictures>KEY_CAMERA</mypictures>
+ <livetv>KEY_TUNER</livetv>
+ <mytv>KEY_TV</mytv>
+ <teletext>KEY_TEXT</teletext>
+ <one>KEY_NUMERIC_1</one>
+ <two>KEY_NUMERIC_2</two>
+ <three>KEY_NUMERIC_3</three>
+ <four>KEY_NUMERIC_4</four>
+ <five>KEY_NUMERIC_5</five>
+ <six>KEY_NUMERIC_6</six>
+ <seven>KEY_NUMERIC_7</seven>
+ <eight>KEY_NUMERIC_8</eight>
+ <nine>KEY_NUMERIC_9</nine>
+ <zero>KEY_NUMERIC_0</zero>
+ <star>KEY_NUMERIC_STAR</star>
+ <hash>KEY_NUMERIC_POUND</hash>
+ <red>KEY_RED</red>
+ <green>KEY_GREEN</green>
+ <yellow>KEY_YELLOW</yellow>
+ <blue>KEY_BLUE</blue>
+ <recordedtv>KEY_PVR</recordedtv>
+ <liveradio>KEY_RADIO</liveradio>
+ </remote>
+
+ <remote device="devinput-32">
+ <left>KEY_LEFT</left>
+ <right>KEY_RIGHT</right>
+ <up>KEY_UP</up>
+ <down>KEY_DOWN</down>
+ <select>KEY_OK</select>
+ <enter>KEY_ENTER</enter>
+ <clear>KEY_DELETE</clear>
+ <start>KEY_MEDIA</start>
+ <back>KEY_EXIT</back>
+ <record>KEY_RECORD</record>
+ <play>KEY_PLAY</play>
+ <pause>KEY_PAUSE</pause>
+ <stop>KEY_STOP</stop>
+ <forward>KEY_FASTFORWARD</forward>
+ <reverse>KEY_REWIND</reverse>
+ <volumeplus>KEY_VOLUMEUP</volumeplus>
+ <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+ <pageplus>KEY_CHANNELUP</pageplus>
+ <pageminus>KEY_CHANNELDOWN</pageminus>
+ <skipplus>KEY_NEXT</skipplus>
+ <skipminus>KEY_PREVIOUS</skipminus>
+ <guide>KEY_EPG</guide>
+ <title>KEY_TITLE</title>
+ <subtitle>KEY_SUBTITLE</subtitle>
+ <language>KEY_LANGUAGE</language>
+ <info>KEY_INFO</info>
+ <display>KEY_ZOOM</display>
+ <mute>KEY_MUTE</mute>
+ <power>KEY_POWER</power>
+ <eject>KEY_EJECTCD</eject>
+ <eject>KEY_EJECTCLOSECD</eject>
+ <menu>KEY_DVD</menu>
+ <menu>KEY_MENU</menu>
+ <myvideo>KEY_VIDEO</myvideo>
+ <mymusic>KEY_AUDIO</mymusic>
+ <mypictures>KEY_CAMERA</mypictures>
+ <livetv>KEY_TUNER</livetv>
+ <mytv>KEY_TV</mytv>
+ <teletext>KEY_TEXT</teletext>
+ <one>KEY_NUMERIC_1</one>
+ <two>KEY_NUMERIC_2</two>
+ <three>KEY_NUMERIC_3</three>
+ <four>KEY_NUMERIC_4</four>
+ <five>KEY_NUMERIC_5</five>
+ <six>KEY_NUMERIC_6</six>
+ <seven>KEY_NUMERIC_7</seven>
+ <eight>KEY_NUMERIC_8</eight>
+ <nine>KEY_NUMERIC_9</nine>
+ <zero>KEY_NUMERIC_0</zero>
+ <star>KEY_NUMERIC_STAR</star>
+ <hash>KEY_NUMERIC_POUND</hash>
+ <red>KEY_RED</red>
+ <green>KEY_GREEN</green>
+ <yellow>KEY_YELLOW</yellow>
+ <blue>KEY_BLUE</blue>
+ <recordedtv>KEY_PVR</recordedtv>
+ <liveradio>KEY_RADIO</liveradio>
+ </remote>
+
+ <remote device="devinput-64">
+ <left>KEY_LEFT</left>
+ <right>KEY_RIGHT</right>
+ <up>KEY_UP</up>
+ <down>KEY_DOWN</down>
+ <select>KEY_OK</select>
+ <enter>KEY_ENTER</enter>
+ <clear>KEY_DELETE</clear>
+ <start>KEY_MEDIA</start>
+ <back>KEY_EXIT</back>
+ <record>KEY_RECORD</record>
+ <play>KEY_PLAY</play>
+ <pause>KEY_PAUSE</pause>
+ <stop>KEY_STOP</stop>
+ <forward>KEY_FASTFORWARD</forward>
+ <reverse>KEY_REWIND</reverse>
+ <volumeplus>KEY_VOLUMEUP</volumeplus>
+ <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+ <pageplus>KEY_CHANNELUP</pageplus>
+ <pageminus>KEY_CHANNELDOWN</pageminus>
+ <skipplus>KEY_NEXT</skipplus>
+ <skipminus>KEY_PREVIOUS</skipminus>
+ <guide>KEY_EPG</guide>
+ <title>KEY_TITLE</title>
+ <subtitle>KEY_SUBTITLE</subtitle>
+ <language>KEY_LANGUAGE</language>
+ <info>KEY_INFO</info>
+ <display>KEY_ZOOM</display>
+ <mute>KEY_MUTE</mute>
+ <power>KEY_POWER</power>
+ <eject>KEY_EJECTCD</eject>
+ <eject>KEY_EJECTCLOSECD</eject>
+ <menu>KEY_DVD</menu>
+ <menu>KEY_MENU</menu>
+ <myvideo>KEY_VIDEO</myvideo>
+ <mymusic>KEY_AUDIO</mymusic>
+ <mypictures>KEY_CAMERA</mypictures>
+ <livetv>KEY_TUNER</livetv>
+ <mytv>KEY_TV</mytv>
+ <teletext>KEY_TEXT</teletext>
+ <one>KEY_NUMERIC_1</one>
+ <two>KEY_NUMERIC_2</two>
+ <three>KEY_NUMERIC_3</three>
+ <four>KEY_NUMERIC_4</four>
+ <five>KEY_NUMERIC_5</five>
+ <six>KEY_NUMERIC_6</six>
+ <seven>KEY_NUMERIC_7</seven>
+ <eight>KEY_NUMERIC_8</eight>
+ <nine>KEY_NUMERIC_9</nine>
+ <zero>KEY_NUMERIC_0</zero>
+ <star>KEY_NUMERIC_STAR</star>
+ <hash>KEY_NUMERIC_POUND</hash>
+ <red>KEY_RED</red>
+ <green>KEY_GREEN</green>
+ <yellow>KEY_YELLOW</yellow>
+ <blue>KEY_BLUE</blue>
+ <recordedtv>KEY_PVR</recordedtv>
+ <liveradio>KEY_RADIO</liveradio>
+ </remote>
+</lircmap>
diff --git a/system/X10-Lola-IRSSmap.xml b/system/X10-Lola-IRSSmap.xml
new file mode 100644
index 0000000..e0a47d7
--- /dev/null
+++ b/system/X10-Lola-IRSSmap.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- X10 Lola UR89A in PC MODE
+Button = CMD
+Record = X10CMD_RECORD
+Stop = X10CMD_STOP
+Pause = X10CMD_NONE
+Scan- = X10CMD_INPUT
+Rew = X10CMD_REWIND
+Play = X10CMD_PLAY
+FF = X10CMD_FF
+Scan+ = X10CMD_ZOOM
+Top = X10CMD_MTRADIO
+End = X10CMD_MTPC
+Find = X10CMD_HANDSYMBOL
+Select = X10CMD_MTCHANNELLIST
+Page Up = X10CMD_BOOKMARK
+Page Dn = X10CMD_RESIZE
+Playlist = X10CMD_BUTTON_B
+Playing = X10CMD_MTVCR
+Left = X10CMD_LEFT
+Right = X10CMD_RIGHT
+Up = X10CMD_UP
+Down = X10CMD_DN
+Enter = X10CMD_ENTER
+Album = X10CMD_BUTTON_C
+Artist = X10CMD_BUTTON_D
+Genre = X10CMD_BUTTON_E
+Track = X10CMD_BUTTON_F
+1 = X10CMD_1
+2 = X10CMD_2
+3 = X10CMD_3
+4 = X10CMD_4
+5 = X10CMD_5
+6 = X10CMD_6
+7 = X10CMD_7
+8 = X10CMD_8
+9 = X10CMD_9
+0 = X10CMD_0
+Add/Del = X10CMD_MTADDDELETE
+A/B = X10CMT_MTAB
+Vol Left = X10CMD_VOL_UP (this button is actually labeled Vol-)
+Vol Right = X10CMD_VOL_DN (this button is actually labeled Vol+)
+Chan Up = X10CMD_CH_UP
+Chan Down = X10CMD_CH_DN
+M/All Off = X10CMD_MUTE
+Power/All Lts On = X10CMD_POWER
+ -->
+<irssmap>
+ <remote device="X10">
+ <pause>X10CMD_NONE</pause> <!-- Pause -->
+ <stop>X10CMD_STOP</stop> <!-- Stop -->
+ <play>X10CMD_PLAY</play> <!-- Play -->
+ <forward>X10CMD_FF</forward> <!-- FF -->
+ <reverse>X10CMD_REWIND</reverse> <!-- Rew -->
+ <left>X10CMD_LEFT</left> <!-- Left -->
+ <right>X10CMD_RIGHT</right> <!-- Right -->
+ <up>X10CMD_UP</up> <!-- Up -->
+ <down>X10CMD_DN</down> <!-- Down -->
+ <select>X10CMD_ENTER</select> <!-- Enter -->
+ <pageplus>X10CMD_BOOKMARK</pageplus> <!-- Page Up -->
+ <pageminus>X10CMD_RESIZE</pageminus> <!-- Page Down -->
+ <back>X10CMD_MTAB</back> <!-- A/B -->
+ <menu>X10CMD_MTRADIO</menu> <!-- Top -->
+ <title>X10CMD_MTPC</title> <!-- End -->
+ <info>X10CMD_HANDSYMBOL</info> <!-- Find -->
+ <skipplus>X10CMD_INPUT</skipplus> <!-- Scan- -->
+ <skipminus>X10CMD_ZOOM</skipminus> <!-- Scan+ -->
+ <display>X10CMD_MTVCR</display> <!-- Playing -->
+ <start>X10CMD_MTCHANNELLIST</start> <!-- Select -->
+ <record>X10CMD_RECORD</record> <!-- Rec -->
+ <mute>X10CMD_MUTE</mute> <!-- M/All off -->
+ <power>X10CMD_POWER</power> <!-- Power/All Lts on -->
+ <one>X10CMD_1</one> <!-- 1 -->
+ <two>X10CMD_2</two> <!-- 2 -->
+ <three>X10CMD_3</three> <!-- 3 -->
+ <four>X10CMD_4</four> <!-- 4 -->
+ <five>X10CMD_5</five> <!-- 5 -->
+ <six>X10CMD_6</six> <!-- 6 -->
+ <seven>X10CMD_7</seven> <!-- 7 -->
+ <eight>X10CMD_8</eight> <!-- 8 -->
+ <nine>X10CMD_9</nine> <!-- 9 -->
+ <zero>X10CMD_0</zero> <!-- 0 -->
+ <channelplus>X10CMD_CH_UP</channelplus> <!-- CH+ -->
+ <channelminus>X10CMD_CH_DN</channelminus> <!-- CH- -->
+ <volumeplus>X10CMD_VOL_DN</volumeplus> <!-- VOL+ (volume commands are reversed) -->
+ <volumeminus>X10CMD_VOL_UP</volumeminus> <!-- VOL- (volume commands are reversed) -->
+ <livetv>X10CMD_BUTTON_B</livetv> <!-- Playlist -->
+ <star></star>
+ <hash></hash>
+ <clear>X10CMD_MTADDDELETE</clear> <!-- Add/Delete -->
+ <mytv></mytv>
+ <mymusic></mymusic>
+ <mypictures></mypictures>
+ <myvideo></myvideo>
+ </remote>
+</irssmap>
diff --git a/system/addon-manifest.xml b/system/addon-manifest.xml
new file mode 100644
index 0000000..7df13a6
--- /dev/null
+++ b/system/addon-manifest.xml
@@ -0,0 +1,59 @@
+<addons>
+ <addon>audioencoder.kodi.builtin.aac</addon>
+ <addon>audioencoder.kodi.builtin.wma</addon>
+ <addon>game.controller.default</addon>
+ <addon>game.controller.keyboard</addon>
+ <addon>game.controller.mouse</addon>
+ <addon>game.controller.snes</addon>
+ <addon>kodi.binary.global.audioengine</addon>
+ <addon>kodi.binary.global.filesystem</addon>
+ <addon>kodi.binary.global.general</addon>
+ <addon>kodi.binary.global.gui</addon>
+ <addon>kodi.binary.global.main</addon>
+ <addon>kodi.binary.global.network</addon>
+ <addon>kodi.binary.global.tools</addon>
+ <addon>kodi.binary.instance.audiodecoder</addon>
+ <addon>kodi.binary.instance.audioencoder</addon>
+ <addon>kodi.binary.instance.game</addon>
+ <addon>kodi.binary.instance.imagedecoder</addon>
+ <addon>kodi.binary.instance.inputstream</addon>
+ <addon>kodi.binary.instance.peripheral</addon>
+ <addon>kodi.binary.instance.pvr</addon>
+ <addon>kodi.binary.instance.screensaver</addon>
+ <addon>kodi.binary.instance.vfs</addon>
+ <addon>kodi.binary.instance.videocodec</addon>
+ <addon>kodi.binary.instance.visualization</addon>
+ <addon>kodi.resource</addon>
+ <addon>metadata.album.universal</addon>
+ <addon>metadata.artists.universal</addon>
+ <addon>metadata.common.allmusic.com</addon>
+ <addon>metadata.common.fanart.tv</addon>
+ <addon>metadata.common.musicbrainz.org</addon>
+ <addon>metadata.common.theaudiodb.com</addon>
+ <addon>metadata.generic.albums</addon>
+ <addon>metadata.generic.artists</addon>
+ <addon>metadata.local</addon>
+ <addon>metadata.themoviedb.org.python</addon>
+ <addon>metadata.tvshows.themoviedb.org.python</addon>
+ <addon>repository.xbmc.org</addon>
+ <addon>resource.images.weathericons.default</addon>
+ <addon>resource.language.en_gb</addon>
+ <addon>resource.uisounds.kodi</addon>
+ <addon>screensaver.xbmc.builtin.black</addon>
+ <addon>screensaver.xbmc.builtin.dim</addon>
+ <addon>script.module.pil</addon>
+ <addon>script.module.pycryptodome</addon>
+ <addon>skin.estouchy</addon>
+ <addon>skin.estuary</addon>
+ <addon>webinterface.default</addon>
+ <addon>xbmc.addon</addon>
+ <addon>xbmc.core</addon>
+ <addon>xbmc.gui</addon>
+ <addon>xbmc.json</addon>
+ <addon>xbmc.metadata</addon>
+ <addon>xbmc.python</addon>
+ <addon>xbmc.webinterface</addon>
+ <addon optional="true">inputstream.adaptive</addon>
+ <addon optional="true">peripheral.joystick</addon>
+ <addon optional="true">service.xbmc.versioncheck</addon>
+</addons>
diff --git a/system/colors.xml b/system/colors.xml
new file mode 100644
index 0000000..12903e5
--- /dev/null
+++ b/system/colors.xml
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- http://www.w3.org/TR/css3-color/#colorunits -->
+<colors>
+ <color name="aliceblue">fff0f8ff</color>
+ <color name="antiquewhite">fffaebd7</color>
+ <color name="aqua">ff00ffff</color>
+ <color name="aquamarine">ff7fffd4</color>
+ <color name="azure">fff0ffff</color>
+ <color name="beige">fff5f5dc</color>
+ <color name="bisque">ffffe4c4</color>
+ <color name="black">ff000000</color>
+ <color name="blanchedalmond">ffffebcd</color>
+ <color name="blue">ff0000ff</color>
+ <color name="blueviolet">ff8a2be2</color>
+ <color name="brown">ffa52a2a</color>
+ <color name="burlywood">ffdeb887</color>
+ <color name="cadetblue">ff5f9ea0</color>
+ <color name="chartreuse">ff7fff00</color>
+ <color name="chocolate">ffd2691e</color>
+ <color name="coral">ffff7f50</color>
+ <color name="cornflowerblue">ff6495ed</color>
+ <color name="cornsilk">fffff8dc</color>
+ <color name="crimson">ffdc143c</color>
+ <color name="cyan">ff00ffff</color>
+ <color name="darkblue">ff00008b</color>
+ <color name="darkcyan">ff008b8b</color>
+ <color name="darkgoldenrod">ffb8860b</color>
+ <color name="darkgray">ffa9a9a9</color>
+ <color name="darkgreen">ff006400</color>
+ <color name="darkgrey">ffa9a9a9</color>
+ <color name="darkkhaki">ffbdb76b</color>
+ <color name="darkmagenta">ff8b008b</color>
+ <color name="darkolivegreen">ff556b2f</color>
+ <color name="darkorange">ffff8c00</color>
+ <color name="darkorchid">ff9932cc</color>
+ <color name="darkred">ff8b0000</color>
+ <color name="darksalmon">ffe9967a</color>
+ <color name="darkseagreen">ff8fbc8f</color>
+ <color name="darkslateblue">ff483d8b</color>
+ <color name="darkslategray">ff2f4f4f</color>
+ <color name="darkslategrey">ff2f4f4f</color>
+ <color name="darkturquoise">ff00ced1</color>
+ <color name="darkviolet">ff9400d3</color>
+ <color name="deeppink">ffff1493</color>
+ <color name="deepskyblue">ff00bfff</color>
+ <color name="dimgray">ff696969</color>
+ <color name="dimgrey">ff696969</color>
+ <color name="dodgerblue">ff1e90ff</color>
+ <color name="firebrick">ffb22222</color>
+ <color name="floralwhite">fffffaf0</color>
+ <color name="forestgreen">ff228b22</color>
+ <color name="fuchsia">ffff00ff</color>
+ <color name="gainsboro">ffdcdcdc</color>
+ <color name="ghostwhite">fff8f8ff</color>
+ <color name="gold">ffffd700</color>
+ <color name="goldenrod">ffdaa520</color>
+ <color name="gray">ff808080</color>
+ <color name="green">ff008000</color>
+ <color name="greenyellow">ffadff2f</color>
+ <color name="grey">ff808080</color>
+ <color name="honeydew">fff0fff0</color>
+ <color name="hotpink">ffff69b4</color>
+ <color name="indianred">ffcd5c5c</color>
+ <color name="indigo">ff4b0082</color>
+ <color name="ivory">fffffff0</color>
+ <color name="khaki">fff0e68c</color>
+ <color name="lavender">ffe6e6fa</color>
+ <color name="lavenderblush">fffff0f5</color>
+ <color name="lawngreen">ff7cfc00</color>
+ <color name="lemonchiffon">fffffacd</color>
+ <color name="lightblue">ffadd8e6</color>
+ <color name="lightcoral">fff08080</color>
+ <color name="lightcyan">ffe0ffff</color>
+ <color name="lightgoldenrodyellow">fffafad2</color>
+ <color name="lightgray">ffd3d3d3</color>
+ <color name="lightgreen">ff90ee90</color>
+ <color name="lightgrey">ffd3d3d3</color>
+ <color name="lightpink">ffffb6c1</color>
+ <color name="lightsalmon">ffffa07a</color>
+ <color name="lightseagreen">ff20b2aa</color>
+ <color name="lightskyblue">ff87cefa</color>
+ <color name="lightslategray">ff778899</color>
+ <color name="lightslategrey">ff778899</color>
+ <color name="lightsteelblue">ffb0c4de</color>
+ <color name="lightyellow">ffffffe0</color>
+ <color name="lime">ff00ff00</color>
+ <color name="limegreen">ff32cd32</color>
+ <color name="linen">fffaf0e6</color>
+ <color name="magenta">ffff00ff</color>
+ <color name="maroon">ff800000</color>
+ <color name="mediumaquamarine">ff66cdaa</color>
+ <color name="mediumblue">ff0000cd</color>
+ <color name="mediumorchid">ffba55d3</color>
+ <color name="mediumpurple">ff9370db</color>
+ <color name="mediumseagreen">ff3cb371</color>
+ <color name="mediumslateblue">ff7b68ee</color>
+ <color name="mediumspringgreen">ff00fa9a</color>
+ <color name="mediumturquoise">ff48d1cc</color>
+ <color name="mediumvioletred">ffc71585</color>
+ <color name="midnightblue">ff191970</color>
+ <color name="mintcream">fff5fffa</color>
+ <color name="mistyrose">ffffe4e1</color>
+ <color name="moccasin">ffffe4b5</color>
+ <color name="navajowhite">ffffdead</color>
+ <color name="navy">ff000080</color>
+ <color name="none">00000000</color>
+ <color name="oldlace">fffdf5e6</color>
+ <color name="olive">ff808000</color>
+ <color name="olivedrab">ff6b8e23</color>
+ <color name="orange">ffffa500</color>
+ <color name="orangered">ffff4500</color>
+ <color name="orchid">ffda70d6</color>
+ <color name="palegoldenrod">ffeee8aa</color>
+ <color name="palegreen">ff98fb98</color>
+ <color name="paleturquoise">ffafeeee</color>
+ <color name="palevioletred">ffdb7093</color>
+ <color name="papayawhip">ffffefd5</color>
+ <color name="peachpuff">ffffdab9</color>
+ <color name="peru">ffcd853f</color>
+ <color name="pink">ffffc0cb</color>
+ <color name="plum">ffdda0dd</color>
+ <color name="powderblue">ffb0e0e6</color>
+ <color name="purple">ff800080</color>
+ <color name="red">ffff0000</color>
+ <color name="rosybrown">ffbc8f8f</color>
+ <color name="royalblue">ff4169e1</color>
+ <color name="saddlebrown">ff8b4513</color>
+ <color name="salmon">fffa8072</color>
+ <color name="sandybrown">fff4a460</color>
+ <color name="seagreen">ff2e8b57</color>
+ <color name="seashell">fffff5ee</color>
+ <color name="sienna">ffa0522d</color>
+ <color name="silver">ffc0c0c0</color>
+ <color name="skyblue">ff87ceeb</color>
+ <color name="slateblue">ff6a5acd</color>
+ <color name="slategray">ff708090</color>
+ <color name="slategrey">ff708090</color>
+ <color name="snow">fffffafa</color>
+ <color name="springgreen">ff00ff7f</color>
+ <color name="steelblue">ff4682b4</color>
+ <color name="tan">ffd2b48c</color>
+ <color name="teal">ff008080</color>
+ <color name="thistle">ffd8bfd8</color>
+ <color name="tomato">ffff6347</color>
+ <color name="transparent">00000000</color>
+ <color name="turquoise">ff40e0d0</color>
+ <color name="violet">ffee82ee</color>
+ <color name="wheat">fff5deb3</color>
+ <color name="white">ffffffff</color>
+ <color name="whitesmoke">fff5f5f5</color>
+ <color name="yellow">ffffff00</color>
+ <color name="yellowgreen">ff9acd32</color>
+</colors>
diff --git a/system/dialogcolors.xml b/system/dialogcolors.xml
new file mode 100644
index 0000000..12af216
--- /dev/null
+++ b/system/dialogcolors.xml
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- https://en.wikipedia.org/wiki/List_of_Crayola_crayon_colors -->
+<colors>
+ <color name="Almond">FFEFDECD</color>
+ <color name="Antique Brass">FFCD9575</color>
+ <color name="Apple Orchard">FFBF3F3F</color>
+ <color name="Apricot">FFFDD9B5</color>
+ <color name="Aquamarine">FF78DBE2</color>
+ <color name="Asparagus">FF87A96B</color>
+ <color name="Atomic Tangerine">FFFFA474</color>
+ <color name="Banana Mania">FFFAE7B5</color>
+ <color name="Beaver">FF9F8170</color>
+ <color name="Berry Parfait">FFA43482</color>
+ <color name="Bittersweet">FFFD7C6E</color>
+ <color name="Black">FF000000</color>
+ <color name="Blizzard Blue">FFACE5EE</color>
+ <color name="Blue Bell">FFA2A2D0</color>
+ <color name="Blue Gray">FF6699CC</color>
+ <color name="Blue Green">FF0D98BA</color>
+ <color name="Blue Violet">FF7366BD</color>
+ <color name="Blue">FF1F75FE</color>
+ <color name="Blush">FFDE5D83</color>
+ <color name="Brick Red">FFCB4154</color>
+ <color name="Bright Gray">ffeeeeee</color>
+ <color name="Brown">FFB4674D</color>
+ <color name="Bubble Gum">FFDF9ACA</color>
+ <color name="Burnt Orange">FFFF7F49</color>
+ <color name="Burnt Sienna">FFEA7E5D</color>
+ <color name="Butternut Squash">FFE74F00</color>
+ <color name="Cadet Blue">FFB0B7C6</color>
+ <color name="Canary">FFFFFF99</color>
+ <color name="Caribbean Green">FF1CD3A2</color>
+ <color name="Caribbean Sea">FF67CD95</color>
+ <color name="Carnation Pink">FFFFAACC</color>
+ <color name="Cerise">FFDD4492</color>
+ <color name="Cerulean">FF1DACD6</color>
+ <color name="Chestnut">FFBC5D58</color>
+ <color name="Chinese White">ffe0e0e0</color>
+ <color name="Cloudy Sky">FF548CD0</color>
+ <color name="Copper">FFDD9475</color>
+ <color name="Cornflower">FF9ACEEB</color>
+ <color name="Cotton Candy">FFFFBCD9</color>
+ <color name="Dandelion">FFFDDB6D</color>
+ <color name="Denim">FF2B6CC4</color>
+ <color name="Desert Sand">FFEFCDB8</color>
+ <color name="Eggplant">FF6E5160</color>
+ <color name="Electric Lime">FFCEFF1D</color>
+ <color name="Fern">FF71BC78</color>
+ <color name="Forest Green">FF6DAE81</color>
+ <color name="Fuchsia">FFC364C5</color>
+ <color name="Fuzzy Wuzzy">FFCC6666</color>
+ <color name="Gold">FFE7C697</color>
+ <color name="Goldenrod">FFFCD975</color>
+ <color name="Granite Gray">ff616161</color>
+ <color name="Granny Smith Apple">FFA8E4A0</color>
+ <color name="Gray Arsenic">ff424242</color>
+ <color name="Gray Cultured">fff5f5f5</color>
+ <color name="Gray Lotion">fffafafa</color>
+ <color name="Gray XII">ffbdbdbd</color>
+ <color name="Green Blue">FF1164B4</color>
+ <color name="Green Yellow">FFF0E891</color>
+ <color name="Green">FF1CAC78</color>
+ <color name="Hot Cocoa">FF8F482F</color>
+ <color name="Hot Magenta">FFFF1DCE</color>
+ <color name="Inchworm">FFB2EC5D</color>
+ <color name="Indigo">FF5D76CB</color>
+ <color name="Iridescent Indigo">FF3C32CD</color>
+ <color name="Jazzberry Jam">FFCA3767</color>
+ <color name="Jungle Green">FF3BB08F</color>
+ <color name="Laser Lemon">FFFEFE22</color>
+ <color name="Lavender Silk">FF6B4D82</color>
+ <color name="Lavender">FFFCB4D5</color>
+ <color name="Leafy Canopy">FF94DDCB</color>
+ <color name="Lemon Yellow">FFFFF44F</color>
+ <color name="Liquid Gold">FFFFD966</color>
+ <color name="Macaroni and Cheese">FFFFBD88</color>
+ <color name="Magenta">FFF664AF</color>
+ <color name="Magic Mint">FFAAF0D1</color>
+ <color name="Mahogany">FFCD4A4C</color>
+ <color name="Maize">FFEDD19C</color>
+ <color name="Manatee">FF979AAA</color>
+ <color name="Mango Purée">FFFF6137</color>
+ <color name="Mango Tango">FFFF8243</color>
+ <color name="Maroon">FFC8385A</color>
+ <color name="Mauvelous">FFEF98AA</color>
+ <color name="Melon">FFFDBCB4</color>
+ <color name="Midnight Blue">FF1A4876</color>
+ <color name="Moonlit Pond">FF4F2CD0</color>
+ <color name="Mountain Meadow">FF30BA8F</color>
+ <color name="Mulberry">FFC54B8C</color>
+ <color name="Navy Blue">FF1974D2</color>
+ <color name="Neon Carrot">FFFFA343</color>
+ <color name="Ocean Foam">FF62C9D3</color>
+ <color name="Olive Green">FFBAB86C</color>
+ <color name="Orange Peel">FFFF8021</color>
+ <color name="Orange Red">FFFF2B2B</color>
+ <color name="Orange Yellow">FFF8D568</color>
+ <color name="Orange">FFFF7538</color>
+ <color name="Orchid">FFE6A8D7</color>
+ <color name="Outer Space">FF414A4C</color>
+ <color name="Outrageous Orange">FFFF6E4A</color>
+ <color name="Pacific Blue">FF1CA9C9</color>
+ <color name="Peach">FFFFCFAB</color>
+ <color name="Periwinkle">FFC5D0E6</color>
+ <color name="Pesto">FF5F7B4A</color>
+ <color name="Piggy Pink">FFFDDDE6</color>
+ <color name="Pine Green">FF158078</color>
+ <color name="Pink Flamingo">FFFC74FD</color>
+ <color name="Pink Luster">FFFFB2E7</color>
+ <color name="Pink Sherbet">FFF78FA7</color>
+ <color name="Plum">FF8E4585</color>
+ <color name="Purple Heart">FF7442C8</color>
+ <color name="Purple Mountain's Majesty">FF9D81BA</color>
+ <color name="Purple Pizzazz">FFFE4EDA</color>
+ <color name="Radical Red">FFFF496C</color>
+ <color name="Raisin Black">ff212121</color>
+ <color name="Raw Sienna">FFD68A59</color>
+ <color name="Raw Umber">FF714B23</color>
+ <color name="Razzle Dazzle Rose">FFFF48D0</color>
+ <color name="Razzmatazz">FFE3256B</color>
+ <color name="Red Orange">FFFF5349</color>
+ <color name="Red Satin">FF9F3434</color>
+ <color name="Red Violet">FFC0448F</color>
+ <color name="Red">FFEE204D</color>
+ <color name="Robin's Egg Blue">FF1FCECB</color>
+ <color name="Royal Purple">FF7851A9</color>
+ <color name="Salmon">FFFF9BAA</color>
+ <color name="Scarlet">FFFC2847</color>
+ <color name="Screamin' Green">FF76FF7A</color>
+ <color name="Sea Glass">FFC4EA7F</color>
+ <color name="Sea Green">FF9FE2BF</color>
+ <color name="Sepia">FFA5694F</color>
+ <color name="Shadow">FF8A795D</color>
+ <color name="Shamrock">FF45CEA2</color>
+ <color name="Shocking Pink">FFFB7EFD</color>
+ <color name="Shooting Star">FFFFFF65</color>
+ <color name="Sky Blue">FF80DAEB</color>
+ <color name="Sonic Silver">ff757575</color>
+ <color name="Spanish Gray">ff9e9e9e</color>
+ <color name="Spring Green">FFECEABE</color>
+ <color name="Sunglow">FFFFCF48</color>
+ <color name="Sunset Orange">FFFD5E53</color>
+ <color name="Sunset Shimmer">FFF79015</color>
+ <color name="Tan">FFFAA76C</color>
+ <color name="Teal Blue">FF18A7B5</color>
+ <color name="Thistle">FFEBC7DF</color>
+ <color name="Tickle Me Pink">FFFC89AC</color>
+ <color name="Timberwolf">FFDBD7D2</color>
+ <color name="Tropical Rain Forest">FF17806D</color>
+ <color name="Tumbleweed">FFDEAA88</color>
+ <color name="Turquoise Blue">FF77DDE7</color>
+ <color name="Unmellow Yellow">FFFFFF66</color>
+ <color name="Violet (Purple)">FF926EAE</color>
+ <color name="Violet Blue">FF324AB2</color>
+ <color name="Violet Red">FFF75394</color>
+ <color name="Vivid Tangerine">FFFFA089</color>
+ <color name="Vivid Violet">FF8F509D</color>
+ <color name="White">FFFFFFFF</color>
+ <color name="Wild Blue Yonder">FFA2ADD0</color>
+ <color name="Wild Strawberry">FFFF43A4</color>
+ <color name="Wild Watermelon">FFFC6C85</color>
+ <color name="Wisteria">FFCDA4DE</color>
+ <color name="Yellow Green">FFC5E384</color>
+ <color name="Yellow Orange">FFFFAE42</color>
+ <color name="Yellow">FFFCE883</color>
+</colors>
diff --git a/system/keyboardlayouts/arabic.xml b/system/keyboardlayouts/arabic.xml
new file mode 100644
index 0000000..3b37ff0
--- /dev/null
+++ b/system/keyboardlayouts/arabic.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Arabic" layout="QWERTY">
+ <keyboard>
+ <row>١٢٣٤٥٦٧٨٩٠</row>
+ <row>ضصثقفغعهخحج</row>
+ <row>شسيبلاتنمكة</row>
+ <row>ءظطذدزروی</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>أإآؤ</row>
+ <row>ـئ‘،؛</row>
+ <row>ًٌٍََُِّْ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~؟</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/bulgarian.xml b/system/keyboardlayouts/bulgarian.xml
new file mode 100644
index 0000000..dee53f5
--- /dev/null
+++ b/system/keyboardlayouts/bulgarian.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Bulgarian" layout="ЯВЕРТЪ">
+ <keyboard>
+ <row>ч1234567890</row>
+ <row>явертъуиопшщ</row>
+ <row>асдфгхйклю</row>
+ <row>зьцжбнм</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>Ч1234567890</row>
+ <row>ЯВЕРТЪУИОПШЩ</row>
+ <row>АСДФГХЙКЛЮ</row>
+ <row>ЗЬЦЖБНМ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+ <layout language="Bulgarian" layout="АБВ">
+ <keyboard>
+ <row>0123456789</row>
+ <row>абвгдежзий</row>
+ <row>клмнопрсту</row>
+ <row>фхцчшщъьюя</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>0123456789</row>
+ <row>АБВГДЕЖЗИЙ</row>
+ <row>КЛМНОПРСТУ</row>
+ <row>ФХЦЧШЩЪЬЮЯ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/chinese.xml b/system/keyboardlayouts/chinese.xml
new file mode 100644
index 0000000..2bd6f12
--- /dev/null
+++ b/system/keyboardlayouts/chinese.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Chinese" layout="BasePY" codingtable="BasePY">
+ <keyboard>
+ <row>0123456789</row>
+ <row>qwertyuiop</row>
+ <row>asdfghjkl</row>
+ <row>zxcvbnm</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>0123456789</row>
+ <row>QWERTYUIOP</row>
+ <row>ASDFGHJKL</row>
+ <row>ZXCVBNM</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/croatian.xml b/system/keyboardlayouts/croatian.xml
new file mode 100644
index 0000000..3f3fca7
--- /dev/null
+++ b/system/keyboardlayouts/croatian.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Croatian" layout="QWERTY">
+ <keyboard>
+ <row>1234567890'+</row>
+ <row>qwertzuiopšđ</row>
+ <row>asdfghjklčćž:</row>
+ <row>yxcvbnm,.-</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>!"#$%&amp;/()=?*</row>
+ <row>QWERTZUIOPŠĐ</row>
+ <row>ASDFGHJKLČĆŽ</row>
+ <row>YXCVBNM;:_</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/czech.xml b/system/keyboardlayouts/czech.xml
new file mode 100644
index 0000000..4c31abd
--- /dev/null
+++ b/system/keyboardlayouts/czech.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Czech" layout="QWERTZ">
+ <keyboard>
+ <row>ťěščřžýáíéó(</row>
+ <row>qwertzuiopú)</row>
+ <row>asdfghjklůď_</row>
+ <row>/yxcvbnmň:.-</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>ŤĚŠČŘŽÝÁÍÉÓ(</row>
+ <row>QWERTZUIOPÚ)</row>
+ <row>ASDFGHJKLŮĎ_</row>
+ <row>\YXCVBNMŇ:.-</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>1234567890%</row>
+ <row>+@#$~^&amp;*{}=</row>
+ <row>[]()/"'`;!</row>
+ <row>\|&lt;&gt;,.?:-_</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/danish.xml b/system/keyboardlayouts/danish.xml
new file mode 100644
index 0000000..2ceffec
--- /dev/null
+++ b/system/keyboardlayouts/danish.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Danish" layout="QWERTY">
+ <keyboard>
+ <row>1234567890</row>
+ <row>qwertyuiopå</row>
+ <row>asdfghjklæø</row>
+ <row>zxcvbnm</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>QWERTYUIOPÅ</row>
+ <row>ASDFGHJKLÆØ</row>
+ <row>ZXCVBNM</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/english.xml b/system/keyboardlayouts/english.xml
new file mode 100644
index 0000000..760ac81
--- /dev/null
+++ b/system/keyboardlayouts/english.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="English" layout="QWERTY">
+ <keyboard>
+ <row>1234567890-=`</row>
+ <row>qwertyuiop[]\</row>
+ <row>asdfghjkl;'</row>
+ <row>zxcvbnm,./</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>!@#$%^&amp;*()_+~</row>
+ <row>QWERTYUIOP{}|</row>
+ <row>ASDFGHJKL:"</row>
+ <row>ZXCVBNM&lt;&gt;?</row>
+ </keyboard>
+ <keyboard modifiers="symbol">
+ <row>£¥€§±µ¤«»·</row>
+ <row>áàâäãåæçéè</row>
+ <row>êëíìîïñóòô</row>
+ <row>öõøœßúùûü</row>
+ </keyboard>
+ <keyboard modifiers="shift+symbol">
+ <row>¼½¾¹²³°ªº¨</row>
+ <row>ÁÀÂÄÃÅÆÇÉÈ</row>
+ <row>ÊËÍÌÎÏÑÓÒÔ</row>
+ <row>ÖÕØŒẞÚÙÛÜ</row>
+ </keyboard>
+ </layout>
+ <layout language="English" layout="AZERTY">
+ <keyboard>
+ <row>1234567890-=`</row>
+ <row>azertyuiop[]\</row>
+ <row>qsdfghjklm;'</row>
+ <row>wxcvbn,./</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>!@#$%^&amp;*()_+~</row>
+ <row>AZERTYUIOP{}|</row>
+ <row>QSDFGHJKLM:"</row>
+ <row>WXCVBN&lt;&gt;?</row>
+ </keyboard>
+ <keyboard modifiers="symbol">
+ <row>£¥€§±µ¤«»·</row>
+ <row>áàâäãåæçéè</row>
+ <row>êëíìîïñóòô</row>
+ <row>öõøœßúùûü</row>
+ </keyboard>
+ <keyboard modifiers="shift+symbol">
+ <row>¼½¾¹²³°ªº¨</row>
+ <row>ÁÀÂÄÃÅÆÇÉÈ</row>
+ <row>ÊËÍÌÎÏÑÓÒÔ</row>
+ <row>ÖÕØŒẞÚÙÛÜ</row>
+ </keyboard>
+ </layout>
+ <layout language="English" layout="ABC">
+ <keyboard>
+ <row>1234567890-=`</row>
+ <row>abcdefghij[]\</row>
+ <row>klmnopqrst;'</row>
+ <row>uvwxyz,./</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>!@#$%^&amp;*()_+~</row>
+ <row>ABCDEFGHIJ{}|</row>
+ <row>KLMNOPQRST:"</row>
+ <row>UVWXYZ&lt;&gt;?</row>
+ </keyboard>
+ <keyboard modifiers="symbol">
+ <row>£¥€§±µ¤«»·</row>
+ <row>áàâäãåæçéè</row>
+ <row>êëíìîïñóòô</row>
+ <row>öõøœßúùûü</row>
+ </keyboard>
+ <keyboard modifiers="shift+symbol">
+ <row>¼½¾¹²³°ªº¨</row>
+ <row>ÁÀÂÄÃÅÆÇÉÈ</row>
+ <row>ÊËÍÌÎÏÑÓÒÔ</row>
+ <row>ÖÕØŒẞÚÙÛÜ</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/estonian.xml b/system/keyboardlayouts/estonian.xml
new file mode 100644
index 0000000..96b94d3
--- /dev/null
+++ b/system/keyboardlayouts/estonian.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Estonian" layout="QWERTY">
+ <keyboard>
+ <row>1234567890</row>
+ <row>qwertyuiopüõ</row>
+ <row>asdfghjklöä</row>
+ <row>zxcvbnm</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>QWERTYUIOPÜÕ</row>
+ <row>ASDFGHJKLÖÄ</row>
+ <row>ZXCVBNM</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/french.xml b/system/keyboardlayouts/french.xml
new file mode 100644
index 0000000..630ec32
--- /dev/null
+++ b/system/keyboardlayouts/french.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="French" layout="AZERTY">
+ <keyboard>
+ <row>1234567890°+</row>
+ <row>azertyuiop^$</row>
+ <row>qsdfghjklmù*</row>
+ <row>&lt;wxcvbn,;:!&amp;</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890@=</row>
+ <row>AZERTYUIOP¨£</row>
+ <row>QSDFGHJKLM%µ</row>
+ <row>&gt;WXCVBN?./§²</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>()[]{}~&quot;&apos;`-_</row>
+ <row>#|\€¤ÆŒæœüÜÙ</row>
+ <row>àâçéèêëîïôöû</row>
+ <row>ÀÂÇÉÈÊËÎÏÔÖÛ</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts> \ No newline at end of file
diff --git a/system/keyboardlayouts/german.xml b/system/keyboardlayouts/german.xml
new file mode 100644
index 0000000..8bde9cb
--- /dev/null
+++ b/system/keyboardlayouts/german.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="German" layout="QWERTZ">
+ <keyboard>
+ <row>1234567890ß'</row>
+ <row>qwertzuiopü+</row>
+ <row>asdfghjklöä#</row>
+ <row>yxcvbnm,.-/@</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>!"§$%&amp;/()=?`</row>
+ <row>QWERTZUIOPÜ*</row>
+ <row>ASDFGHJKLÖÄ'</row>
+ <row>YXCVBNM;:_/@</row>
+ </keyboard>
+ <keyboard modifiers="symbol">
+ <row>^£€[]{}\|&lt;&gt;µ</row>
+ <row>áàâäãåæçéè</row>
+ <row>êëíìîïñóòô</row>
+ <row>õøœßúùû</row>
+ </keyboard>
+ <keyboard modifiers="shift+symbol">
+ <row>°¹²³¼½¾±µ¤«»·</row>
+ <row>ÁÀÂÄÃÅÆÇÉÈ</row>
+ <row>ÊËÍÌÎÏÑÓÒÔ</row>
+ <row>ÕØŒẞÚÙÛ</row>
+ </keyboard>
+ </layout>
+ <layout language="German" layout="ABC">
+ <keyboard>
+ <row>1234567890ß'</row>
+ <row>abcdefghijk+</row>
+ <row>lmnopqrstuv#</row>
+ <row>wxyzäöü,.-@</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>!"§$%&amp;/()=?`</row>
+ <row>ABCDEFGHIJK*</row>
+ <row>LMNOPQRSTUV'</row>
+ <row>WXYZÄÖÜ;:_@</row>
+ </keyboard>
+ <keyboard modifiers="symbol">
+ <row>^£€[]{}\|&lt;&gt;µ</row>
+ <row>áàâäãåæçéè</row>
+ <row>êëíìîïñóòô</row>
+ <row>õøœßúùû</row>
+ </keyboard>
+ <keyboard modifiers="shift+symbol">
+ <row>°¹²³¼½¾±µ¤«»·</row>
+ <row>ÁÀÂÄÃÅÆÇÉÈ</row>
+ <row>ÊËÍÌÎÏÑÓÒÔ</row>
+ <row>ÕØŒẞÚÙÛ</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/greek.xml b/system/keyboardlayouts/greek.xml
new file mode 100644
index 0000000..823133a
--- /dev/null
+++ b/system/keyboardlayouts/greek.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Greek" layout="QWERTY">
+ <keyboard>
+ <row>1234567890</row>
+ <row>ςερτυθιοπ</row>
+ <row>ασδφγηξκλ</row>
+ <row>ζχψωβνμ</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>ΕΡΤΥΘΙΟΠ</row>
+ <row>ΑΣΔΦΓΗΞΚΛ</row>
+ <row>ΖΧΨΩΒΝΜ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#ۤ$%^&amp;*(</row>
+ <row>[]{}-_=+;:~</row>
+ <row>'",.&lt;&gt;/?\|`</row>
+ <row>έύίόάήώϋϊΰΐ</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/hebrew.xml b/system/keyboardlayouts/hebrew.xml
new file mode 100644
index 0000000..8cd23ab
--- /dev/null
+++ b/system/keyboardlayouts/hebrew.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Hebrew" layout="QWERTY">
+ <keyboard>
+ <row>1234567890</row>
+ <row>קראטוןםפ</row>
+ <row>שדגכעיחלךף</row>
+ <row>זסבהנמצתץ</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>QWERTYUIOP</row>
+ <row>ASDFGHJKL</row>
+ <row>ZXCVBNM</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+ <layout language="Hebrew" layout="ABC">
+ <keyboard>
+ <row>0123456789</row>
+ <row>יטחזוהדגבא</row>
+ <row>ףפעסןנםמלכ</row>
+ <row>תשרקץצ</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>0123456789</row>
+ <row>ABCDEFGHIJ</row>
+ <row>KLMNOPQRST</row>
+ <row>UVWXYZ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/hungarian.xml b/system/keyboardlayouts/hungarian.xml
new file mode 100644
index 0000000..0d16ceb
--- /dev/null
+++ b/system/keyboardlayouts/hungarian.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Hungarian" layout="QWERTZ">
+ <keyboard>
+ <row>0123456789öüó</row>
+ <row>qwertzuiopőú+</row>
+ <row>asdfghjkléáű-</row>
+ <row>íyxcvbnm,.?!@</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>0123456789ÖÜÓ</row>
+ <row>QWERTZUIOPŐÚ+</row>
+ <row>ASDFGHJKLÉÁŰ-</row>
+ <row>ÍYXCVBNM,.?!@</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>§'"+!/=()~</row>
+ <row>^;\|Ä€Í÷×ä</row>
+ <row>đĐ[]íłŁ$ߤ</row>
+ <row>#@{}&lt;&gt;*?:_</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/icelandic.xml b/system/keyboardlayouts/icelandic.xml
new file mode 100644
index 0000000..7b1887d
--- /dev/null
+++ b/system/keyboardlayouts/icelandic.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Icelandic" layout="QWERTY">
+ <keyboard>
+ <row>1234567890ö-</row>
+ <row>qwertyuiopð'</row>
+ <row>asdfghjklæ+</row>
+ <row>zxcvbnm,.þ</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890Ö_</row>
+ <row>QWERTYUIOPÐ?</row>
+ <row>ASDFGHJKLÆ*</row>
+ <row>ZXCVBNM;:Þ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>áéíóú&lt;&gt;/?\|</row>
+ <row>ÁÉÍÓÚ`~"</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/italian.xml b/system/keyboardlayouts/italian.xml
new file mode 100644
index 0000000..c92e225
--- /dev/null
+++ b/system/keyboardlayouts/italian.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Italian" layout="QWERTY">
+ <keyboard>
+ <row>1234567890'ì</row>
+ <row>qwertyuiopè+</row>
+ <row>asdfghjklòàù</row>
+ <row>zxcvbnm,.-</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890?^</row>
+ <row>QWERTYUIOPé*</row>
+ <row>ASDFGHJKLç°§</row>
+ <row>ZXCVBNM;:_</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>/\|@€#[]&lt;&gt;`~</row>
+ <row>!"£$%&amp;()='?</row>
+ <row>&lt;&gt;,.-+*_^§ç</row>
+ </keyboard>
+ </layout>
+ <layout language="Italian" layout="ABC">
+ <keyboard>
+ <row>1234567890+-</row>
+ <row>abcdefghiàèì</row>
+ <row>jklmnopqròù'</row>
+ <row>stuvwxyz,.</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890*_</row>
+ <row>ABCDEFGHI°é^</row>
+ <row>JKLMNOPQR�</row>
+ <row>STUVWXYZ;:</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>/\|@€#[]&lt;&gt;`~</row>
+ <row>!"£$%&amp;()='?</row>
+ <row>&lt;&gt;,.-+*_^§ç</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/korean.xml b/system/keyboardlayouts/korean.xml
new file mode 100644
index 0000000..31109e5
--- /dev/null
+++ b/system/keyboardlayouts/korean.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Korean" layout="ㄱㄴㄷ" codingtable="Korean">
+ <keyboard>
+ <row>0123456789</row>
+ <row>ㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋ</row>
+ <row>ㅌㅍㅎㄲㄸㅃㅆㅉㅏㅑㅓ</row>
+ <row>ㅕㅗㅛㅜㅠㅡㅣㅐㅔㅒㅖ</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>0123456789</row>
+ <row>ㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋ</row>
+ <row>ㅌㅍㅎㄲㄸㅃㅆㅉㅏㅑㅓ</row>
+ <row>ㅕㅗㅛㅜㅠㅡㅣㅐㅔㅒㅖ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/lithuanian.xml b/system/keyboardlayouts/lithuanian.xml
new file mode 100644
index 0000000..9f0c839
--- /dev/null
+++ b/system/keyboardlayouts/lithuanian.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Lithuanian" layout="AZERTY">
+ <keyboard>
+ <row>1234567890x</row>
+ <row>ąžertyuiopįw</row>
+ <row>asdšghjklųėq</row>
+ <row>zūcvbnmčfę</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890X</row>
+ <row>ĄŽERTYUIOPĮW</row>
+ <row>ASDŠGHJKLŲĖQ</row>
+ <row>ZŪCVBNMČFĘ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+ <layout language="Lithuanian" layout="QWERTY">
+ <keyboard>
+ <row>1234567890</row>
+ <row>qwertyuiopąč</row>
+ <row>asdfghjklęėį</row>
+ <row>zxcvbnmšųūž</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>QWERTYUIOPĄČ</row>
+ <row>ASDFGHJKLĘĖĮ</row>
+ <row>ZXCVBNMŠŲŪŽ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/norwegian.xml b/system/keyboardlayouts/norwegian.xml
new file mode 100644
index 0000000..8db7f78
--- /dev/null
+++ b/system/keyboardlayouts/norwegian.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Norwegian" layout="QWERTY">
+ <keyboard>
+ <row>1234567890</row>
+ <row>qwertyuiopå</row>
+ <row>asdfghjkløæ</row>
+ <row>zxcvbnm</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>QWERTYUIOPÅ</row>
+ <row>ASDFGHJKLØÆ</row>
+ <row>ZXCVBNM</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/persian.xml b/system/keyboardlayouts/persian.xml
new file mode 100644
index 0000000..e92f587
--- /dev/null
+++ b/system/keyboardlayouts/persian.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Persian" layout="QWERTY">
+ <keyboard>
+ <row>۱۲۳۴۵۶۷۸۹۰</row>
+ <row>جحخهعغفقثصض</row>
+ <row>گکمنتالبیسش</row>
+ <row>وپدذرزطظژچ.</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>\|{}ّ[]</row>
+ <row>؛:«»ةآأإيئؤ</row>
+ <row>/<>؟ٰك</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~؟</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/polish.xml b/system/keyboardlayouts/polish.xml
new file mode 100644
index 0000000..91e631e
--- /dev/null
+++ b/system/keyboardlayouts/polish.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Polish" layout="QWERTY">
+ <keyboard>
+ <row>`1234567890-</row>
+ <row>qwertyuiopąć</row>
+ <row>asdfghjklęłń</row>
+ <row>zxcvbnmóśżź</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>~1234567890_</row>
+ <row>QWERTYUIOPĄĆ</row>
+ <row>ASDFGHJKLĘŁŃ</row>
+ <row>ZXCVBNMÓŚŻŹ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>!@#$%^&amp;*()=+</row>
+ <row>\|€£§[]{};',</row>
+ <row>./:"&lt;&gt;?</row>
+ <row></row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/portuguese.xml b/system/keyboardlayouts/portuguese.xml
new file mode 100644
index 0000000..88c9dce
--- /dev/null
+++ b/system/keyboardlayouts/portuguese.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Portuguese (Brazil)" layout="QWERTY">
+ <keyboard>
+ <row>/\0123456789</row>
+ <row>qwertyuiopôê</row>
+ <row>asdfghjklç.:</row>
+ <row>zxcvbnmáéíóú</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>/\0123456789</row>
+ <row>QWERTYUIOPÔÊ</row>
+ <row>ASDFGHJKLÇ.:</row>
+ <row>ZXCVBNMÁÉÍÓÚ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~ÁÉÍÓÚÊÃ</row>
+ </keyboard>
+ </layout>
+ <layout language="Portuguese (Portugal)" layout="QWERTY">
+ <keyboard>
+ <row>\1234567890'</row>
+ <row>qwertyuiop+´</row>
+ <row>asdfghjklçº~</row>
+ <row>&lt;zxcvbnm,.-</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>|1234567890?</row>
+ <row>QWERTYUIOP*`</row>
+ <row>ASDFGHJKLǪ^</row>
+ <row>&gt;ZXCVBNM;:_</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>|!"#$%&amp;/()=?</row>
+ <row>@£§{[]}€áãâà</row>
+ <row>éêíóõôúÁÃÂÀÉ</row>
+ <row>ÊÍÓÕÔÚ«»¨</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/romanian.xml b/system/keyboardlayouts/romanian.xml
new file mode 100644
index 0000000..83defed
--- /dev/null
+++ b/system/keyboardlayouts/romanian.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Romanian" layout="QWERTY">
+ <keyboard>
+ <row>1234567890</row>
+ <row>qwertyuiopăî</row>
+ <row>asdfghjklșțâ</row>
+ <row>zxcvbnm</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>QWERTYUIOPĂÎ</row>
+ <row>ASDFGHJKLȘȚÂ</row>
+ <row>ZXCVBNM</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~„”</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/russian.xml b/system/keyboardlayouts/russian.xml
new file mode 100644
index 0000000..d0c9102
--- /dev/null
+++ b/system/keyboardlayouts/russian.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Russian" layout="ЙЦУКЕН">
+ <keyboard>
+ <row>ё1234567890</row>
+ <row>йцукенгшщзхъ</row>
+ <row>фывапролджэ</row>
+ <row>ячсмитьбю</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>Ё1234567890</row>
+ <row>ЙЦУКЕНГШЩЗХЪ</row>
+ <row>ФЫВАПРОЛДЖЭ</row>
+ <row>ЯЧСМИТЬБЮ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+ <layout language="Russian" layout="АБВ">
+ <keyboard>
+ <row>0123456789</row>
+ <row>абвгдеёжзий</row>
+ <row>клмнопрстуф</row>
+ <row>хцчшщъыьэюя</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>0123456789</row>
+ <row>АБВГДЕЁЖЗИЙ</row>
+ <row>КЛМНОПРСТУФ</row>
+ <row>ХЦЧШЩЪЫЬЭЮЯ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/silesian.xml b/system/keyboardlayouts/silesian.xml
new file mode 100644
index 0000000..a35aab9
--- /dev/null
+++ b/system/keyboardlayouts/silesian.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Silesian" layout="QWERTY">
+ <keyboard>
+ <row>ôōŏśćńłżź(</row>
+ <row>qwertzuiopã)</row>
+ <row>asdfghjklõ_</row>
+ <row>/yxcvbnm:.-</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>ÔŌŎŚĆŃŁŻŹ(</row>
+ <row>QWERTZUIOPÃ)</row>
+ <row>ASDFGHJKLÕ_</row>
+ <row>\YXCVBNM:.-</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>1234567890%</row>
+ <row>+@#$~^&amp;*{}=</row>
+ <row>[]()/"'`;!</row>
+ <row>\|&lt;&gt;,.?:-_</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/slovak.xml b/system/keyboardlayouts/slovak.xml
new file mode 100644
index 0000000..5737079
--- /dev/null
+++ b/system/keyboardlayouts/slovak.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Slovak" layout="QWERTZ">
+ <keyboard>
+ <row>ĺľščťžýáíéó_</row>
+ <row>qwertzuiopúä</row>
+ <row>asdfghjklôďň</row>
+ <row>/yxcvbnmŕ:.-</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>ĹĽŠČŤŽÝÁÍÉÓ_</row>
+ <row>QWERTZUIOPÚÄ</row>
+ <row>ASDFGHJKLÔĎŇ</row>
+ <row>\YXCVBNMŔ:.-</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>1234567890%</row>
+ <row>+@#$~^&amp;*{}=</row>
+ <row>[]()/"'`;!</row>
+ <row>\|&lt;&gt;,.?:-_</row>
+ </keyboard>
+ </layout>
+ <layout language="Slovak" layout="QWERTY">
+ <keyboard>
+ <row>ĺľščťžýáíéó_</row>
+ <row>qwertyuiopúä</row>
+ <row>asdfghjklôďň</row>
+ <row>/zxcvbnmŕ:.-</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>ĹĽŠČŤŽÝÁÍÉÓ_</row>
+ <row>QWERTYUIOPÚÄ</row>
+ <row>ASDFGHJKLÔĎŇ</row>
+ <row>\ZXCVBNMŔ:.-</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>1234567890%</row>
+ <row>+@#$~^&amp;*{}=</row>
+ <row>[]()/"'`;!</row>
+ <row>\|&lt;&gt;,.?:-_</row>
+ </keyboard>
+ </layout>
+ <layout language="Slovak" layout="ABC">
+ <keyboard>
+ <row>aáäbcčdďeéfg</row>
+ <row>hiíjklĺľmnňo</row>
+ <row>óôpqrŕsštťuú</row>
+ <row>vwxyýzž:./\@</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>AÁÄBCČDĎEÉFG</row>
+ <row>HIÍJKLĹĽMNŇO</row>
+ <row>ÓÔPQRŔSŠTŤUÚ</row>
+ <row>VWXYÝZŽ:./\@</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>1234567890%</row>
+ <row>+@#$~^&amp;*{}=</row>
+ <row>[]()/"'`;!</row>
+ <row>\|&lt;&gt;,.?:-_</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/slovenian.xml b/system/keyboardlayouts/slovenian.xml
new file mode 100644
index 0000000..a09b007
--- /dev/null
+++ b/system/keyboardlayouts/slovenian.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Slovenian" layout="QWERTZ">
+ <keyboard>
+ <row>1234567890'+</row>
+ <row>qwertzuiopšđ</row>
+ <row>asdfghjklčćž:</row>
+ <row>yxcvbnm,.-</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>!"#$%&amp;/()=?*</row>
+ <row>QWERTZUIOPŠĐ</row>
+ <row>ASDFGHJKLČĆŽ</row>
+ <row>YXCVBNM;:_</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/spanish.xml b/system/keyboardlayouts/spanish.xml
new file mode 100644
index 0000000..866e9b0
--- /dev/null
+++ b/system/keyboardlayouts/spanish.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Spanish" layout="QWERTY">
+ <keyboard>
+ <row>1234567890'¡</row>
+ <row>qwertyuiop`+</row>
+ <row>asdfghjklñ´ç</row>
+ <row>&lt;zxcvbnm,.-</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890?¿</row>
+ <row>QWERTYUIOP^*</row>
+ <row>ASDFGHJKLѨÇ</row>
+ <row>&gt;ZXCVBNM;:_</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>!"·$%&amp;/()=?¿</row>
+ <row>\|@#€£¥[]{}~</row>
+ <row>áéíóúü¹²³ªº±</row>
+ <row>ÁÉÍÓÚܼ½¾«»§</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/swedish.xml b/system/keyboardlayouts/swedish.xml
new file mode 100644
index 0000000..62f920c
--- /dev/null
+++ b/system/keyboardlayouts/swedish.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Swedish" layout="QWERTY">
+ <keyboard>
+ <row>1234567890</row>
+ <row>qwertyuiopå</row>
+ <row>asdfghjklöä</row>
+ <row>zxcvbnm</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>QWERTYUIOPÅ</row>
+ <row>ASDFGHJKLÖÄ</row>
+ <row>ZXCVBNM</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/thai.xml b/system/keyboardlayouts/thai.xml
new file mode 100644
index 0000000..0a810c4
--- /dev/null
+++ b/system/keyboardlayouts/thai.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Thai" layout="Kedmanee">
+ <keyboard>
+ <row>ๅ/-ภถุึคตจขช</row>
+ <row>ๆไำพะัีรนยบลฃ</row>
+ <row>ฟหกดเ้่าสวง</row>
+ <row>ผปแอิืทมใฝ</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>+๑๒๓๔ู฿๕๖๗๘๙</row>
+ <row>๐"ฎฑธํ๊ณฯญฐ,ฅ</row>
+ <row>ฤฆฏโฌ็๋ษศซ.</row>
+ <row>()ฉฮฺ์?ฒฬฦ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#ۤ$%^&amp;*(</row>
+ <row>[]{}-_=+;:μ</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/turkish.xml b/system/keyboardlayouts/turkish.xml
new file mode 100644
index 0000000..3a123db
--- /dev/null
+++ b/system/keyboardlayouts/turkish.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Turkish" layout="QWERTY">
+ <keyboard>
+ <row>1234567890</row>
+ <row>qwertyuıopğü</row>
+ <row>asdfghjklşi</row>
+ <row>zxcvbnmöç</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>1234567890</row>
+ <row>QWERTYUIOPĞÜ</row>
+ <row>ASDFGHJKLŞİ</row>
+ <row>ZXCVBNMÖÇ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keyboardlayouts/ukrainian.xml b/system/keyboardlayouts/ukrainian.xml
new file mode 100644
index 0000000..3303a1b
--- /dev/null
+++ b/system/keyboardlayouts/ukrainian.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+Please use English language names instead.
+Default font lacks support for all characters
+-->
+<keyboardlayouts>
+ <layout language="Ukrainian" layout="ЙЦУКЕН">
+ <keyboard>
+ <row>'1234567890</row>
+ <row>йцукенгшщзхї</row>
+ <row>фівапролджє</row>
+ <row>ґячсмитьбю</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>'1234567890</row>
+ <row>ЙЦУКЕНГШЩЗХЇ</row>
+ <row>ФІВАПРОЛДЖЄ</row>
+ <row>ҐЯЧСМИТЬБЮ</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+ <layout language="Ukrainian" layout="АБВ">
+ <keyboard>
+ <row>0123456789</row>
+ <row>абвгґдеєжзиі</row>
+ <row>їйклмнопрст</row>
+ <row>уфхцчшщьюя'</row>
+ </keyboard>
+ <keyboard modifiers="shift">
+ <row>0123456789</row>
+ <row>АБВГҐДЕЄЖЗИІ</row>
+ <row>ЇЙКЛМНОПРСТ</row>
+ <row>УФХЦЧШЩЬЮЯ'</row>
+ </keyboard>
+ <keyboard modifiers="symbol,shift+symbol">
+ <row>)!@#$%^&amp;*(</row>
+ <row>[]{}-_=+;:</row>
+ <row>'",.&lt;&gt;/?\|</row>
+ <row>`~</row>
+ </keyboard>
+ </layout>
+</keyboardlayouts>
diff --git a/system/keymaps/appcommand.xml b/system/keymaps/appcommand.xml
new file mode 100644
index 0000000..d8ac1d2
--- /dev/null
+++ b/system/keymaps/appcommand.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<keymap>
+ <global>
+ <appcommand>
+ <browser_back>Back</browser_back>
+ <browser_forward/>
+ <browser_refresh/>
+ <browser_stop>Stop</browser_stop>
+ <browser_search/>
+ <browser_favorites>ActivateWindow(FavouritesBrowser)</browser_favorites>
+ <browser_home>FirstPage</browser_home>
+ <volume_mute/>
+ <volume_down/>
+ <volume_up/>
+ <next_track>SkipNext</next_track>
+ <prev_track>SkipPrevious</prev_track>
+ <stop>Stop</stop>
+ <play_pause>PlayPause</play_pause>
+ <launch_mail/>
+ <launch_media_select>ActivateWindow(Music)</launch_media_select>
+ <launch_app1>ActivateWindow(Programs)</launch_app1>
+ <launch_app2>ActivateWindow(Programs)</launch_app2>
+ <play>Play</play>
+ <pause>Pause</pause>
+ <fastforward>FastForward</fastforward>
+ <rewind>Rewind</rewind>
+ <channelup>PageUp</channelup>
+ <channeldown>PageDown</channeldown>
+ </appcommand>
+ </global>
+</keymap>
diff --git a/system/keymaps/customcontroller.AppleRemote.xml b/system/keymaps/customcontroller.AppleRemote.xml
new file mode 100644
index 0000000..a06cf59
--- /dev/null
+++ b/system/keymaps/customcontroller.AppleRemote.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of keys to actions within Kodi. -->
+<!-- -->
+<!-- The format is: -->
+<!-- <window> -->
+<!-- <device> -->
+<!-- <button>action</button> -->
+<!-- </device> -->
+<!-- </window> -->
+<!-- -->
+<!-- The <global> section is a fall through - they will only be used if the button is -->
+<!-- not used in the current window's section. -->
+<!-- -->
+<!-- Actions can be built-in functions. -->
+<!-- eg <button id="6">ActivateWindow(Music)</button> -->
+<!-- would automatically go to Music on the press of the "Menu" button. -->
+<!-- -->
+<!-- -->
+<!-- An empty action removes the corresponding mapping from default and parent keymaps. -->
+<!-- This is different from a "noop" action, which disables a button. -->
+<!-- -->
+<!-- More documentation on keymaps can be found on http://kodi.wiki/view/keymaps -->
+<!-- -->
+<!-- To map keys from other remotes using the RCA protocol, you may add -->
+<!-- <customcontroller name="AppleRemote"> blocks. -->
+<!-- In this case, the tags used are <button id=""#> where # is the original button code -->
+<!-- (OBC) of the key. -->
+<!-- You set it up by adding a <customcontroller name="AppleRemote"> block to the window -->
+<!-- or <global> section: -->
+<!-- <customcontroller name="AppleRemote"> -->
+<!-- <button id="45">Stop</button> -->
+<!-- </customcontroller> -->
+<!-- -->
+<!-- Button Ids: -->
+<!-- 'id' is the button ID used by SDL. The key ids recognized from your remote appears -->
+<!-- in the log file for each button pressed and when debug mode is enabled. -->
+<!-- Use your log to discover and map custom buttons to actions. -->
+<keymap>
+ <global>
+ <customcontroller name="AppleRemote">
+ <!-- plus --> <button id="1">Up</button>
+ <!-- minus --> <button id="2">Down</button>
+ <!-- left --> <button id="3">Left</button>
+ <!-- right --> <button id="4">Right</button>
+ <!-- center --> <button id="5">Select</button>
+ <!-- menu --> <button id="6">Back</button>
+ <!-- hold center--> <button id="7">Fullscreen</button>
+ <!-- hold menu --> <button id="8">ContextMenu</button>
+
+ <!-- old buttons for ATV1 <2.2, used on OSX -->
+ <!-- hold left --> <button id="9">Left</button>
+ <!-- hold right --> <button id="10">Right</button>
+
+ <!-- new aluminium remote buttons -->
+ <!-- play/pause --> <button id="12">PlayPause</button>
+
+ <!-- Additional buttons via Harmony Apple TV remote profile - these are also the learned buttons on Apple TV 2gen-->
+ <!-- pageup --> <button id="13">PageUp</button>
+ <!-- pagedown --> <button id="14">PageDown</button>
+ <!-- pause --> <button id="15">Pause</button>
+ <!-- play2 --> <button id="16">Play</button>
+ <!-- stop --> <button id="17">Stop</button>
+ <!-- fast fwd --> <button id="18">FastForward</button>
+ <!-- rewind --> <button id="19">Rewind</button>
+ <!-- skip fwd --> <button id="20">SkipNext</button>
+ <!-- skip back --> <button id="21">SkipPrevious</button>
+
+ <!-- Learned remote buttons (ATV1 >2.3) -->
+ <!-- Play --> <button id="70">Play</button>
+ <!-- Pause --> <button id="71">Pause</button>
+ <!-- Stop --> <button id="72">Stop</button>
+ <!-- Previous --> <button id="73">SkipPrevious</button>
+ <!-- Next --> <button id="74">SkipNext</button>
+ <!-- Rewind --> <button id="75">Rewind</button>
+ <!-- Forward --> <button id="76">FastForward</button>
+ <!-- Return --> <button id="77">OSD</button>
+ <!-- Enter --> <button id="78">ShowVideoMenu</button>
+
+ <!-- few gestures from Apple's iPhone Remote (ATV1 > 2.3 ?) -->
+ <!-- SwipeLeft --> <button id="80">Left</button>
+ <!-- SwipeRight --> <button id="81">Right</button>
+ <!-- SwipeUp --> <button id="82">Up</button>
+ <!-- SwipeDown --> <button id="83">Down</button>
+
+ <!-- FlickLeft --> <button id="85">Left</button>
+ <!-- FlickRight --> <button id="86">Right</button>
+ <!-- FlickUp --> <button id="87">Up</button>
+ <!-- FlickDown --> <button id="88">Down</button>
+
+ </customcontroller>
+ </global>
+ <Home>
+ <customcontroller name="AppleRemote">
+ <button id="6">ActivateWindow(FavouritesBrowser)</button>
+ <button id="8">ActivateWindow(shutdownmenu)</button>
+ </customcontroller>
+ </Home>
+ <FullscreenVideo>
+ <customcontroller name="AppleRemote">
+ <button id="1">VolumeUp</button>
+ <button id="2">VolumeDown</button>
+ <button id="3">StepBack</button>
+ <button id="4">StepForward</button>
+ <button id="5">Pause</button>
+ <button id="6">Stop</button>
+ <button id="7">OSD</button>
+ <button id="8">Fullscreen</button>
+ <button id="9">Rewind</button>
+ <button id="10">FastForward</button>
+ <!-- pageup --> <button id="13">ChapterOrBigStepForward</button>
+ <!-- pagedown --> <button id="14">ChapterOrBigStepBack</button>
+ <!-- SwipeLeft --> <button id="80">StepBack</button>
+ <!-- SwipeRight --> <button id="81">StepForward</button>
+ <!-- SwipeUp --> <button id="82">BigStepForward</button>
+ <!-- SwipeDown --> <button id="83">BigStepBack</button>
+ <!-- FlickLeft --> <button id="85">Rewind</button>
+ <!-- FlickRight --> <button id="86">FastForward</button>
+ <!-- FlickUp --> <button id="87">BigStepForward</button>
+ <!-- FlickDown --> <button id="88">BigStepBack</button>
+ </customcontroller>
+ </FullscreenVideo>
+ <FullscreenLiveTV>
+ <customcontroller name="AppleRemote">
+ <button id="3">ChannelDown</button>
+ <button id="4">ChannelUp</button>
+ <!-- pageup --> <button id="13">ChannelUp</button>
+ <!-- pagedown --> <button id="14">ChannelDown</button>
+ </customcontroller>
+ </FullscreenLiveTV>
+ <FullscreenRadio>
+ <customcontroller name="AppleRemote">
+ <button id="3">ChannelDown</button>
+ <button id="4">ChannelUp</button>
+ <!-- pageup --> <button id="13">ChannelUp</button>
+ <!-- pagedown --> <button id="14">ChannelDown</button>
+ </customcontroller>
+ </FullscreenRadio>
+ <Visualisation>
+ <customcontroller name="AppleRemote">
+ <button id="1">VolumeUp</button>
+ <button id="2">VolumeDown</button>
+ <button id="3">SkipPrevious</button>
+ <button id="4">SkipNext</button>
+ <button id="5">Pause</button>
+ <button id="6">Fullscreen</button>
+ <button id="7">OSD</button>
+ <button id="8">Stop</button>
+ <!-- SwipeLeft --> <button id="80">SkipPrevious</button>
+ <!-- SwipeRight --> <button id="81">SkipNext</button>
+ <!-- FlickLeft --> <button id="85">SkipPrevious</button>
+ <!-- FlickRight --> <button id="86">SkipNext</button>
+ </customcontroller>
+ </Visualisation>
+ <SlideShow>
+ <customcontroller name="AppleRemote">
+ <button id="1">ZoomIn</button>
+ <button id="2">ZoomOut</button>
+ <button id="3">PreviousPicture</button>
+ <button id="4">NextPicture</button>
+ <button id="6">Stop</button>
+ <button id="7">Info</button>
+ <button id="8">Rotate</button>
+ <!-- SwipeLeft --> <button id="80">PreviousPicture</button>
+ <!-- SwipeRight --> <button id="81">NextPicture</button>
+ <!-- FlickLeft --> <button id="85">PreviousPicture</button>
+ <!-- FlickRight --> <button id="86">NextPicture</button>
+ </customcontroller>
+ </SlideShow>
+ <ScreenCalibration>
+ <customcontroller name="AppleRemote">
+ <button id="5">NextCalibration</button>
+ </customcontroller>
+ </ScreenCalibration>
+ <VideoOSD>
+ <customcontroller name="AppleRemote">
+ <button id="7">Back</button>
+ </customcontroller>
+ </VideoOSD>
+ <VideoMenu>
+ <customcontroller name="AppleRemote">
+ <button id="5">Select</button>
+ <button id="6">Stop</button>
+ <button id="7">OSD</button>
+ <button id="8"/>
+ </customcontroller>
+ </VideoMenu>
+ <Videos>
+ <customcontroller name="AppleRemote">
+ <button id="7">Info</button>
+ </customcontroller>
+ </Videos>
+ <PictureInfo>
+ <customcontroller name="AppleRemote">
+ <button id="3">Left</button>
+ <button id="4">Right</button>
+ <!-- SwipeLeft --> <button id="80">Left</button>
+ <!-- SwipeRight --> <button id="81">Right</button>
+ <!-- FlickLeft --> <button id="85">Left</button>
+ <!-- FlickRight --> <button id="86">Right</button>
+ </customcontroller>
+ </PictureInfo>
+</keymap>
diff --git a/system/keymaps/customcontroller.Harmony.xml b/system/keymaps/customcontroller.Harmony.xml
new file mode 100644
index 0000000..77f288d
--- /dev/null
+++ b/system/keymaps/customcontroller.Harmony.xml
@@ -0,0 +1,343 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of keys to actions within Kodi. -->
+<!-- -->
+<!-- The format is: -->
+<!-- <window> -->
+<!-- <device> -->
+<!-- <button>action</button> -->
+<!-- </device> -->
+<!-- </window> -->
+<!-- -->
+<!-- The <global> section is a fall through - they will only be used if the button is -->
+<!-- not used in the current window's section. -->
+<!-- -->
+<!-- Actions can be built-in functions. -->
+<!-- eg <button id="6">ActivateWindow(Music)</button> -->
+<!-- would automatically go to Music on the press of the "Menu" button. -->
+<!-- -->
+<!-- -->
+<!-- An empty action removes the corresponding mapping from default and parent keymaps. -->
+<!-- This is different from a "noop" action, which disables a button. -->
+<!-- -->
+<!-- More documentation on keymaps can be found on http://kodi.wiki/view/keymaps -->
+<!-- -->
+<!-- To map keys from other remotes using the RCA protocol, you may add -->
+<!-- <customcontroller name="Harmony"> blocks. -->
+<!-- In this case, the tags used are <button id=""#> where # is the original button code -->
+<!-- (OBC) of the key. -->
+<!-- You set it up by adding a <customcontroller name="Harmony"> block to the window -->
+<!-- or <global> section: -->
+<!-- <customcontroller name="Harmony"> -->
+<!-- <button id="45">Stop</button> -->
+<!-- </customcontroller> -->
+<!-- -->
+<!-- Button Ids: -->
+<!-- 'id' is the button ID used by SDL. The key ids recognized from your remote appears -->
+<!-- in the log file for each button pressed and when debug mode is enabled. -->
+<!-- Use your log to discover and map custom buttons to actions. -->
+<keymap>
+ <global>
+ <customcontroller name="Harmony">
+ <!-- up --> <button id="101">Up</button>
+ <!-- down --> <button id="102">Down</button>
+ <!-- left --> <button id="103">Left</button>
+ <!-- right --> <button id="104">Right</button>
+ <!-- OK --> <button id="105">Select</button>
+ <!-- menu --> <button id="106">ContextMenu</button>
+ <!-- hold play --> <button id="107">FullScreen</button>
+ <!-- hold menu --> <button id="108">ContextMenu</button>
+ <!-- hold right --> <button id="109">Right</button>
+ <!-- hold left --> <button id="110">Left</button>
+ <!-- Stop --> <button id="115">Stop</button>
+ <!-- Stop Hold --> <key id="117"/>
+ <!-- Play --> <button id="116">Play</button>
+ <!-- Play Hold --> <key id="118"/>
+ <!-- Replay --> <button id="191">SkipPrevious</button>
+ <!-- Skip --> <button id="192">SkipNext</button>
+ <!-- Record --> <button id="152">Screenshot</button>
+ <!-- Rew --> <button id="141">Rewind</button>
+ <!-- Fwd --> <button id="142">FastForward</button>
+ <!-- Pause --> <button id="126">Pause</button>
+ <!-- Prev --> <button id="132">ParentDir</button>
+ <!-- Guide --> <button id="165">FullScreen</button>
+ <!-- Info --> <button id="131">Info</button>
+ <!-- Exit --> <button id="151">PreviousMenu</button>
+ <!-- Channel Up --> <button id="171">PageUp</button>
+ <!-- Channel Down --> <button id="172">PageDown</button>
+ <!-- looks like buttons below are duplicates of those above
+ Arrow Up <button id="171"></button>
+ Arrow Down <button id="172"></button>
+ -->
+ <!-- Volume + --> <button id="121">VolumeUp</button>
+ <!-- Volume - --> <button id="122">VolumeDown</button>
+ <!-- 1 --> <button id="111">Number1</button>
+ <!-- 2 --> <button id="112">Number2</button>
+ <!-- 3 --> <button id="113">Number3</button>
+ <!-- 4 --> <button id="114">Number4</button>
+ <!-- 5 --> <button id="123">Number5</button>
+ <!-- 6 --> <button id="124">Number6</button>
+ <!-- 7 --> <button id="133">Number7</button>
+ <!-- 8 --> <button id="134">Number8</button>
+ <!-- 9 --> <button id="143">Number9</button>
+ <!-- 0 --> <button id="144">Number0</button>
+ <!-- * clear --> <button id="145">Back</button>
+ <!-- # enter --> <button id="136">Select</button>
+ <!-- Mute --> <button id="125">Mute</button>
+ <!-- Aspect --> <button id="161">AspectRatio</button>
+ <!-- F1 --> <button id="153">ActivateWindow(Music)</button>
+ <!-- F3 --> <button id="155">ActivateWindow(Videos,tvshowtitles,return)</button>
+ <!-- F2 --> <button id="154">ActivateWindow(Videos,movietitles,return)</button>
+ <!-- F4 --> <button id="156">ActivateWindow(Weather)</button>
+ <!-- F5 --> <button id="193">OSD</button>
+ <!-- F7 --> <button id="195">ActivateWindow(Home)</button>
+ <!-- F6 --> <button id="194">ActivateWindow(Programs)</button>
+ <!-- F8 --> <button id="196">ActivateWindow(FavouritesBrowser)</button>
+ <!-- F9 --> <button id="173">ShowVideoMenu</button>
+ <!-- F10 --> <button id="174">ShowSubtitles</button>
+ <!-- F11 --> <button id="175">NextSubtitle</button>
+ <!-- F12 --> <button id="176">ActivateWindow(Videos)</button>
+ <!-- F13 --> <button id="163">Playlist</button>
+ <!-- F14 --> <button id="164">AudioNextLanguage</button>
+ <!-- Large Down --> <button id="182">PageDown</button>
+ <!-- Large Up --> <button id="181">PageUp</button>
+ <!-- pwrToggle --> <button id="166">ShutDown()</button>
+ <!-- Queue --> <button id="162">Queue</button>
+ <!-- Sleep --> <button id="146">Suspend()</button>
+ <!-- Red --> <button id="183">PlayerProcessInfo</button>
+ <!-- Green --> <button id="184">ActivateWindow(Settings)</button>
+ <!-- Yellow --> <button id="185">ActivateWindow(SystemSettings)</button>
+ <!-- Blue --> <button id="186">ActivateWindow(SystemInfo)</button>
+ </customcontroller>
+ </global>
+ <Home>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">ActivateWindow(PlayerControls)</button>
+ <!-- Info --> <button id="131">ActivateWindow(Settings)</button>
+ <!-- Exit --> <button id="151">ActivateWindow(ShutdownMenu)</button>
+ <!-- #enter --> <button id="136">ActivateWindow(SystemInfo)</button>
+ <!-- 1 --> <button id="111">ToggleFullScreen</button>
+ </customcontroller>
+ </Home>
+ <FileManager>
+ <customcontroller name="Harmony">
+ <!-- 1 --> <button id="111">Highlight</button>
+ <!-- 4 --> <button id="114">Copy</button>
+ <!-- 7 --> <button id="133">Move</button>
+ <!-- * clear --> <button id="145">Delete</button>
+ </customcontroller>
+ </FileManager>
+ <MusicPlaylist>
+ <customcontroller name="Harmony">
+ <!-- * clear --> <button id="145">Delete</button>
+ <!-- Channel Up --> <button id="171">MoveItemUp</button>
+ <!-- Channel Down --> <button id="172">MoveItemDown</button>
+ </customcontroller>
+ </MusicPlaylist>
+ <Music>
+ <customcontroller name="Harmony">
+ <!-- 1 --> <button id="111">number1</button>
+ <!-- 2 --> <button id="112">JumpSMS2</button>
+ <!-- 3 --> <button id="113">JumpSMS3</button>
+ <!-- 4 --> <button id="114">JumpSMS4</button>
+ <!-- 5 --> <button id="123">JumpSMS5</button>
+ <!-- 6 --> <button id="124">JumpSMS6</button>
+ <!-- 7 --> <button id="133">JumpSMS7</button>
+ <!-- 8 --> <button id="134">JumpSMS8</button>
+ <!-- 9 --> <button id="143">JumpSMS9</button>
+ </customcontroller>
+ </Music>
+ <FullscreenVideo>
+ <customcontroller name="Harmony">
+ <!-- up --> <button id="101">ChapterOrBigStepForward</button>
+ <!-- down --> <button id="102">ChapterOrBigStepBack</button>
+ <!-- left --> <button id="103">StepBack</button>
+ <!-- right --> <button id="104">StepForward</button>
+ <!-- menu --> <button id="106">OSD</button>
+ <!-- Prev --> <button id="132">SmallStepBack</button>
+ </customcontroller>
+ </FullscreenVideo>
+ <FullscreenLiveTV>
+ <customcontroller name="Harmony">
+ <!-- up --> <button id="101">ChannelUp</button>
+ <!-- down --> <button id="102">ChannelDown</button>
+ <!-- left --> <button id="103">PreviousChannelGroup</button>
+ <!-- right --> <button id="104">NextChannelGroup</button>
+ </customcontroller>
+ </FullscreenLiveTV>
+ <FullscreenRadio>
+ <customcontroller name="Harmony">
+ <!-- up --> <button id="101">ChannelUp</button>
+ <!-- down --> <button id="102">ChannelDown</button>
+ <!-- left --> <button id="103">PreviousChannelGroup</button>
+ <!-- right --> <button id="104">NextChannelGroup</button>
+ </customcontroller>
+ </FullscreenRadio>
+ <FullscreenInfo>
+ <customcontroller name="Harmony">
+ <!-- Info --> <button id="131">Back</button>
+ </customcontroller>
+ </FullscreenInfo>
+ <PlayerControls>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ </customcontroller>
+ </PlayerControls>
+ <Visualisation>
+ <customcontroller name="Harmony">
+ <!-- up --> <button id="101">IncreaseRating</button>
+ <!-- minus --> <button id="102">DecreaseRating</button>
+ <!-- left --> <button id="103">PreviousPreset</button>
+ <!-- right --> <button id="104">NextPreset</button>
+ <!-- menu --> <button id="106">OSD</button>
+ <!-- Prev --> <button id="132">LockPreset</button>
+ <!-- F8 --> <button id="196">ActivateWindow(VisualisationPresetList)</button>
+ <!-- F9 --> <button id="173">ActivateWindow(AddonSettings)</button>
+ </customcontroller>
+ </Visualisation>
+ <MusicOSD>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ <!-- Info --> <button id="131">PlayerProcessInfo</button>
+ </customcontroller>
+ </MusicOSD>
+ <AddonSettings>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ </customcontroller>
+ </AddonSettings>
+ <VisualisationPresetList>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ </customcontroller>
+ </VisualisationPresetList>
+ <SlideShow>
+ <customcontroller name="Harmony">
+ <!-- 1 --> <button id="111">ZoomLevel1</button>
+ <!-- 2 --> <button id="112">ZoomLevel2</button>
+ <!-- 3 --> <button id="113">ZoomLevel3</button>
+ <!-- 4 --> <button id="114">ZoomLevel4</button>
+ <!-- 5 --> <button id="123">ZoomLevel5</button>
+ <!-- 6 --> <button id="124">ZoomLevel6</button>
+ <!-- 7 --> <button id="133">ZoomLevel7</button>
+ <!-- 8 --> <button id="134">ZoomLevel8</button>
+ <!-- 9 --> <button id="143">ZoomLevel9</button>
+ <!-- 0 --> <button id="144">ZoomNormal</button>
+ <!-- Skip --> <button id="192">NextPicture</button>
+ <!-- Replay --> <button id="191">PreviousPicture</button>
+ <!-- OK --> <button id="105">Rotate</button>
+ </customcontroller>
+ </SlideShow>
+ <ScreenCalibration>
+ <customcontroller name="Harmony">
+ <!-- OK --> <button id="105">NextCalibration</button>
+ <!-- 0 --> <button id="144">ResetCalibration</button>
+ <!-- # enter --> <button id="136">NextCalibration</button>
+ <!-- Guide --> <button id="165">NextResolution</button>
+ </customcontroller>
+ </ScreenCalibration>
+ <VideoOSD>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ </customcontroller>
+ </VideoOSD>
+ <VideoMenu>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">OSD</button>
+ <!-- Info --> <button id="131">Info</button>
+ </customcontroller>
+ </VideoMenu>
+ <OSDVideoSettings>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ </customcontroller>
+ </OSDVideoSettings>
+ <OSDAudioSettings>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ </customcontroller>
+ </OSDAudioSettings>
+ <VideoBookmarks>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ <!-- * clear --> <button id="145">Delete</button>
+ </customcontroller>
+ </VideoBookmarks>
+ <Videos>
+ <customcontroller name="Harmony">
+ <!-- * clear --> <button id="145">Delete</button>
+ <!-- # enter --> <button id="136">ToggleWatched</button>
+ <!-- 1 --> <button id="111">number1</button>
+ <!-- 2 --> <button id="112">JumpSMS2</button>
+ <!-- 3 --> <button id="113">JumpSMS3</button>
+ <!-- 4 --> <button id="114">JumpSMS4</button>
+ <!-- 5 --> <button id="123">JumpSMS5</button>
+ <!-- 6 --> <button id="124">JumpSMS6</button>
+ <!-- 7 --> <button id="133">JumpSMS7</button>
+ <!-- 8 --> <button id="134">JumpSMS8</button>
+ <!-- 9 --> <button id="143">JumpSMS9</button>
+ </customcontroller>
+ </Videos>
+ <VideoPlaylist>
+ <customcontroller name="Harmony">
+ <!-- * clear --> <button id="145">Delete</button>
+ <!-- Channel Up --> <button id="171">MoveItemUp</button>
+ <!-- Channel Down --> <button id="172">MoveItemDown</button>
+ </customcontroller>
+ </VideoPlaylist>
+ <VirtualKeyboard>
+ <customcontroller name="Harmony">
+ <!-- Prev --> <button id="132">BackSpace</button>
+ <!-- * clear --> <button id="145">Shift</button>
+ <!-- # enter --> <button id="136">Symbols</button>
+ <!-- Rew --> <button id="141">CursorLeft</button>
+ <!-- Fwd --> <button id="142">CursorRight</button>
+ </customcontroller>
+ </VirtualKeyboard>
+ <Programs>
+ <customcontroller name="Harmony">
+ <!-- Info --> <button id="131">info</button>
+ </customcontroller>
+ </Programs>
+ <NumericInput>
+ <customcontroller name="Harmony">
+ <!-- 1 --> <button id="111">Number1</button>
+ <!-- 2 --> <button id="112">Number2</button>
+ <!-- 3 --> <button id="113">Number3</button>
+ <!-- 4 --> <button id="114">Number4</button>
+ <!-- 5 --> <button id="123">Number5</button>
+ <!-- 6 --> <button id="124">Number6</button>
+ <!-- 7 --> <button id="133">Number7</button>
+ <!-- 8 --> <button id="134">Number8</button>
+ <!-- 9 --> <button id="143">Number9</button>
+ <!-- 0 --> <button id="144">Number0</button>
+ <!-- Prev --> <button id="132">BackSpace</button>
+ </customcontroller>
+ </NumericInput>
+ <MusicInformation>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ </customcontroller>
+ </MusicInformation>
+ <MovieInformation>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ </customcontroller>
+ </MovieInformation>
+ <LockSettings>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ </customcontroller>
+ </LockSettings>
+ <ProfileSettings>
+ <customcontroller name="Harmony">
+ <!-- menu --> <button id="106">Back</button>
+ </customcontroller>
+ </ProfileSettings>
+ <PictureInfo>
+ <customcontroller name="Harmony">
+ <!-- Replay --> <button id="191">PreviousPicture</button>
+ <!-- Skip --> <button id="192">NextPicture</button>
+ <!-- Info --> <button id="131">Back</button>
+ </customcontroller>
+ </PictureInfo>
+</keymap>
diff --git a/system/keymaps/customcontroller.SiriRemote.xml b/system/keymaps/customcontroller.SiriRemote.xml
new file mode 100644
index 0000000..1267c8d
--- /dev/null
+++ b/system/keymaps/customcontroller.SiriRemote.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of keys (gamepad,remote and keyboard) to actions within XBMC -->
+<!-- The <global> section is a fall through - they will only be used if the button is not -->
+<!-- used in the current window's section. Note that there is only handling -->
+<!-- for a single action per button at this stage. -->
+<!-- For joystick/gamepad configuration under linux/win32, see below as it differs from xbox -->
+<!-- gamepads. -->
+
+<!-- The format is: -->
+<!-- <device> -->
+<!-- <button id=""#>xbmc action</button> -->
+<!-- </device> -->
+
+<!-- To map keys from other remotes using the RCA protocol, you may add <customcontroller name="SiriRemote"> blocks -->
+<!-- In this case, the tags used are <button id=""#> where # is the original button code (OBC) of the key -->
+<!-- You set it up by adding a <customcontroller name="SiriRemote"> block to the window or <global> section: -->
+<!-- <customcontroller name="SiriRemote"> -->
+<!-- <button id="45">Stop</button> -->
+<!-- </customcontroller> -->
+
+<!-- Note that the action can be a built-in function. -->
+<!-- eg <button id="6">ActivateWindow(FavouritesBrowser)</button> -->
+<!-- would bring up Favourites when the button with the id of 6 is press. In this case, "Menu" -->
+
+<!-- -->
+<!-- Button Ids: -->
+<!-- 'id' is the button ID used by SDL. The key ids recognized from your remote appears -->
+<!-- in /var/log/syslog on the ATV2 for each button pressed and when debug mode is enabled -->
+<!-- Use your log to discover and map custom buttons to actions. -->
+
+<keymap>
+ <global>
+ <customcontroller name="SiriRemote">
+ <!-- Siri/IR remotes up --> <button id="1">Up</button>
+ <!-- Siri/IR remotes down --> <button id="2">Down</button>
+ <!-- Siri/IR remotes left --> <button id="3">Left</button>
+ <!-- Siri/IR remotes right --> <button id="4">Right</button>
+ <!-- Siri remote select --> <button id="5">Select</button>
+ <!-- Siri remote menu --> <button id="6">Back</button>
+ <!-- Siri remote hold select --> <button id="7">ContextMenu</button>
+ <!-- Siri remote swipe up --> <button id="8">Up</button>
+ <!-- Siri remote swipe down --> <button id="9">Down</button>
+ <!-- Siri remote swipe left --> <button id="10">Left</button>
+ <!-- Siri remote swipe right --> <button id="11">Right</button>
+ <!-- Siri remote play/pause --> <button id="12">PlayPause</button>
+ <!-- IR remote/iDevice Now Playing play --> <button id="13">Play</button>
+ <!-- IR remote/iDevice Now Playing pause --> <button id="14">Pause</button>
+ <!-- IR remote stop --> <button id="15">Stop</button>
+ <!-- IR remote/iDevice Now Playing next track --> <button id="16">SkipNext</button>
+ <!-- IR remote/iDevice Now Playing prev track --> <button id="17">SkipPrevious</button>
+ <!-- IR remote seek forward --> <button id="18">FastForward</button>
+ <!-- IR remote seek backward --> <button id="19">Rewind</button>
+ <!-- Siri remote hold play/pause --> <button id="20">Stop</button>
+ <!-- Siri remote double play/pause --> <button id="21">noop</button>
+ <!-- Siri remote double select --> <button id="22">noop</button>
+ <!-- Siri remote pan up --> <button id="23">Up</button>
+ <!-- Siri remote pan down --> <button id="24">Down</button>
+ <!-- Siri remote pan left --> <button id="25">Left</button>
+ <!-- Siri remote pan right --> <button id="26">Right</button>
+ </customcontroller>
+ </global>
+ <Home>
+ <customcontroller name="SiriRemote">
+ <button id="6">ActivateWindow(FavouritesBrowser)</button>
+ </customcontroller>
+ </Home>
+ <FullscreenVideo>
+ <customcontroller name="SiriRemote">
+ <button id="1">VolumeUp</button>
+ <button id="2">VolumeDown</button>
+ <button id="3">StepBack</button>
+ <button id="4">StepForward</button>
+ <button id="5">Pause</button>
+ <button id="6">Stop</button>
+ <button id="7">OSD</button>
+ <button id="8">noop</button>
+ <button id="9">noop</button>
+ <button id="10">noop</button>
+ <button id="11">noop</button>
+ </customcontroller>
+ </FullscreenVideo>
+ <FullscreenLiveTV>
+ <customcontroller name="SiriRemote">
+ <button id="3">ChannelDown</button>
+ <button id="4">ChannelUp</button>
+ <button id="8">noop</button>
+ <button id="9">noop</button>
+ <button id="10">noop</button>
+ <button id="11">noop</button>
+ </customcontroller>
+ </FullscreenLiveTV>
+ <FullscreenRadio>
+ <customcontroller name="SiriRemote">
+ <button id="3">ChannelDown</button>
+ <button id="4">ChannelUp</button>
+ </customcontroller>
+ </FullscreenRadio>
+ <Visualisation>
+ <customcontroller name="SiriRemote">
+ <button id="1">VolumeUp</button>
+ <button id="2">VolumeDown</button>
+ <button id="3">SkipPrevious</button>
+ <button id="4">SkipNext</button>
+ <button id="5">Pause</button>
+ <button id="6">Fullscreen</button>
+ <button id="7">OSD</button>
+ </customcontroller>
+ </Visualisation>
+ <SlideShow>
+ <customcontroller name="SiriRemote">
+ <button id="1">ZoomIn</button>
+ <button id="2">ZoomOut</button>
+ <button id="3">PreviousPicture</button>
+ <button id="4">NextPicture</button>
+ <button id="6">Stop</button>
+ <button id="7">Info</button>
+ </customcontroller>
+ </SlideShow>
+ <ScreenCalibration>
+ <customcontroller name="SiriRemote">
+ <button id="5">NextCalibration</button>
+ </customcontroller>
+ </ScreenCalibration>
+ <VideoOSD>
+ <customcontroller name="SiriRemote">
+ <button id="7">Back</button>
+ </customcontroller>
+ </VideoOSD>
+ <VideoMenu>
+ <customcontroller name="SiriRemote">
+ <button id="5">Select</button>
+ <button id="6">Stop</button>
+ <button id="7">OSD</button>
+ </customcontroller>
+ </VideoMenu>
+ <Videos>
+ <customcontroller name="SiriRemote">
+ <button id="7">ContextMenu</button>
+ </customcontroller>
+ </Videos>
+ <PictureInfo>
+ <customcontroller name="SiriRemote">
+ <button id="3">Left</button>
+ <button id="4">Right</button>
+ </customcontroller>
+ </PictureInfo>
+</keymap>
diff --git a/system/keymaps/gamepad.xml b/system/keymaps/gamepad.xml
new file mode 100644
index 0000000..cc440c3
--- /dev/null
+++ b/system/keymaps/gamepad.xml
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of EventServer "gamepad" keys to actions within Kodi. -->
+<!-- -->
+<!-- The format is: -->
+<!-- <window> -->
+<!-- <device> -->
+<!-- <button>action</button> -->
+<!-- </device> -->
+<!-- </window> -->
+<!-- -->
+<!-- The <global> section is a fall through - they will only be used if the button is -->
+<!-- not used in the current window's section. -->
+<!-- -->
+<!-- Actions can be built-in functions. -->
+<!-- eg <B>ActivateWindow(Music)</B> -->
+<!-- would automatically go to Music on the press of the B button. -->
+<!-- -->
+<!-- -->
+<!-- An empty action removes the corresponding mapping from default and parent keymaps. -->
+<!-- This is different from a "noop" action, which disables a button. -->
+<!-- -->
+<!-- More documentation on keymaps can be found on http://kodi.wiki/view/keymaps -->
+<keymap>
+ <global>
+ <gamepad>
+ <A>Select</A>
+ <B>Back</B>
+ <X>FullScreen</X>
+ <Y>Queue</Y>
+ <white>ContextMenu</white>
+ <black/>
+ <start>ActivateWindow(PlayerControls)</start>
+ <back>PreviousMenu</back>
+ <dpadleft>Left</dpadleft>
+ <dpadright>Right</dpadright>
+ <dpadup>Up</dpadup>
+ <dpaddown>Down</dpaddown>
+ <leftthumbbutton>Screenshot</leftthumbbutton>
+ <rightthumbbutton>ActivateWindow(ShutdownMenu)</rightthumbbutton>
+ <leftanalogtrigger>ScrollUp</leftanalogtrigger>
+ <rightanalogtrigger>ScrollDown</rightanalogtrigger>
+ <rightthumbstickleft>AnalogSeekBack</rightthumbstickleft>
+ <rightthumbstickright>AnalogSeekForward</rightthumbstickright>
+ <rightthumbstickup>VolumeUp</rightthumbstickup>
+ <rightthumbstickdown>VolumeDown</rightthumbstickdown>
+ </gamepad>
+ </global>
+ <FileManager>
+ <gamepad>
+ <Y>Highlight</Y>
+ </gamepad>
+ </FileManager>
+ <MusicPlaylist>
+ <gamepad>
+ <Y>Delete</Y>
+ <black>Back</black>
+ </gamepad>
+ </MusicPlaylist>
+ <MusicPlaylistEditor>
+ <gamepad>
+ <Y>Queue</Y>
+ </gamepad>
+ </MusicPlaylistEditor>
+ <Music>
+ <gamepad>
+ <Y>Queue</Y>
+ <black>Playlist</black>
+ </gamepad>
+ </Music>
+ <FullscreenVideo>
+ <gamepad>
+ <A>Pause</A>
+ <B>Stop</B>
+ <Y>AspectRatio</Y>
+ <black>PlayerProcessInfo</black>
+ <white>Info</white>
+ <back>Seek(-7)</back><!-- Replaces smallstepback -->
+ <start>OSD</start>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ <dpadleft>StepBack</dpadleft>
+ <dpadright>StepForward</dpadright>
+ <dpadup>ChapterOrBigStepForward</dpadup>
+ <dpaddown>ChapterOrBigStepBack</dpaddown>
+ </gamepad>
+ </FullscreenVideo>
+ <FullscreenGame>
+ <gamepad>
+ <A>Pause</A>
+ <B>Stop</B>
+ <Y>AspectRatio</Y>
+ <black>CodecInfo</black>
+ <white>Info</white>
+ <back>Seek(-7)</back><!-- Replaces smallstepback -->
+ <start>OSD</start>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ <dpadleft>StepBack</dpadleft>
+ <dpadright>StepForward</dpadright>
+ </gamepad>
+ </FullscreenGame>
+ <FullscreenLiveTV>
+ <gamepad>
+ <dpadleft>StepBack</dpadleft>
+ <dpadright>StepForward</dpadright>
+ <dpadup>ChannelUp</dpadup>
+ <dpaddown>ChannelDown</dpaddown>
+ </gamepad>
+ </FullscreenLiveTV>
+ <FullscreenRadio>
+ <gamepad>
+ <dpadleft>StepBack</dpadleft>
+ <dpadright>StepForward</dpadright>
+ <dpadup>ChannelUp</dpadup>
+ <dpaddown>ChannelDown</dpaddown>
+ </gamepad>
+ </FullscreenRadio>
+ <FullscreenInfo>
+ <gamepad>
+ <start>OSD</start>
+ <black>PlayerProcessInfo</black>
+ <white>Back</white>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ </gamepad>
+ </FullscreenInfo>
+ <PlayerControls>
+ <gamepad>
+ <start>Back</start>
+ </gamepad>
+ </PlayerControls>
+ <Visualisation>
+ <gamepad>
+ <A>Pause</A>
+ <B>Stop</B>
+ <Y>ActivateWindow(VisualisationPresetList)</Y>
+ <black>PlayerProcessInfo</black>
+ <white>Info</white>
+ <start>OSD</start>
+ <back>LockPreset</back>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ <dpadleft>StepBack</dpadleft>
+ <dpadright>StepForward</dpadright>
+ <dpadup>SkipNext</dpadup>
+ <dpaddown>SkipPrevious</dpaddown>
+ </gamepad>
+ </Visualisation>
+ <MusicOSD>
+ <gamepad>
+ <start>Back</start>
+ <black>PlayerProcessInfo</black>
+ <white>Info</white>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ </gamepad>
+ </MusicOSD>
+ <AddonSettings>
+ <gamepad>
+ <start>Back</start>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ </gamepad>
+ </AddonSettings>
+ <VisualisationPresetList>
+ <gamepad>
+ <start>Back</start>
+ <Y>Back</Y>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ </gamepad>
+ </VisualisationPresetList>
+ <SlideShow>
+ <gamepad>
+ <A>Pause</A>
+ <B>Stop</B>
+ <Y>Rotate</Y>
+ <X>ZoomNormal</X>
+ <black>Info</black>
+ <white>Info</white>
+ <righttrigger>NextPicture</righttrigger>
+ <lefttrigger>PreviousPicture</lefttrigger>
+ <dpadleft>PreviousPicture</dpadleft>
+ <dpadright>NextPicture</dpadright>
+ <dpadup>ZoomIn</dpadup>
+ <dpaddown>ZoomOut</dpaddown>
+ <leftthumbstick>AnalogMove</leftthumbstick>
+ <back>Stop</back>
+ </gamepad>
+ </SlideShow>
+ <ScreenCalibration>
+ <gamepad>
+ <leftthumbstick>AnalogMove</leftthumbstick>
+ <A>NextCalibration</A>
+ <black>ResetCalibration</black>
+ <white>NextResolution</white>
+ </gamepad>
+ </ScreenCalibration>
+ <ScreenCalibration>
+ <gamepad>
+ <leftthumbstick>AnalogMove</leftthumbstick>
+ <A>NextCalibration</A>
+ <black>ResetCalibration</black>
+ </gamepad>
+ </ScreenCalibration>
+ <VideoOSD>
+ <gamepad>
+ <start>Back</start>
+ <black>PlayerProcessInfo</black>
+ <white>Info</white>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ </gamepad>
+ </VideoOSD>
+ <VideoMenu>
+ <gamepad>
+ <Y>AspectRatio</Y>
+ <B>Stop</B>
+ <start>OSD</start>
+ <white>Info</white>
+ <black>PlayerProcessInfo</black>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ </gamepad>
+ </VideoMenu>
+ <OSDVideoSettings>
+ <gamepad>
+ <X/>
+ <Y>AspectRatio</Y>
+ <start>Back</start>
+ <black>PlayerProcessInfo</black>
+ <white>Info</white>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ </gamepad>
+ </OSDVideoSettings>
+ <OSDAudioSettings>
+ <gamepad>
+ <X/>
+ <Y>AspectRatio</Y>
+ <start>Back</start>
+ <black>PlayerProcessInfo</black>
+ <white>Info</white>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ </gamepad>
+ </OSDAudioSettings>
+ <VideoBookmarks>
+ <gamepad>
+ <X/>
+ <Y>Delete</Y>
+ <start>Back</start>
+ <leftanalogtrigger>AnalogRewind</leftanalogtrigger>
+ <rightanalogtrigger>AnalogFastForward</rightanalogtrigger>
+ </gamepad>
+ </VideoBookmarks>
+ <Videos>
+ <gamepad>
+ <black>Delete</black>
+ </gamepad>
+ </Videos>
+ <VideoPlaylist>
+ <gamepad>
+ <Y>Delete</Y>
+ <black>Back</black>
+ </gamepad>
+ </VideoPlaylist>
+ <VirtualKeyboard>
+ <gamepad>
+ <start>Enter</start>
+ <B>BackSpace</B>
+ <Y>Shift</Y>
+ <X>Symbols</X>
+ <lefttrigger>CursorLeft</lefttrigger>
+ <righttrigger>CursorRight</righttrigger>
+ </gamepad>
+ </VirtualKeyboard>
+ <ContextMenu>
+ <gamepad>
+ <white>Back</white>
+ </gamepad>
+ </ContextMenu>
+ <Programs>
+ <gamepad>
+ <black>info</black>
+ </gamepad>
+ </Programs>
+ <NumericInput>
+ <gamepad>
+ <B>BackSpace</B>
+ <start>Enter</start>
+ <lefttrigger>SkipPrevious</lefttrigger>
+ <righttrigger>SkipNext</righttrigger>
+ </gamepad>
+ </NumericInput>
+ <GamepadInput>
+ <gamepad>
+ <start>Stop</start> <!-- Enter Password -->
+ </gamepad>
+ </GamepadInput>
+ <LockSettings>
+ <gamepad>
+ <start>Back</start>
+ </gamepad>
+ </LockSettings>
+ <ProfileSettings>
+ <gamepad>
+ <start>Back</start>
+ </gamepad>
+ </ProfileSettings>
+ <PictureInfo>
+ <gamepad>
+ <dpadleft>PreviousPicture</dpadleft>
+ <dpadright>NextPicture</dpadright>
+ </gamepad>
+ </PictureInfo>
+ <PlayerProcessInfo>
+ <gamepad>
+ <black>PlayerProcessInfo</black>
+ </gamepad>
+ </PlayerProcessInfo>
+</keymap>
diff --git a/system/keymaps/joystick.xml b/system/keymaps/joystick.xml
new file mode 100644
index 0000000..2db760b
--- /dev/null
+++ b/system/keymaps/joystick.xml
@@ -0,0 +1,415 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of joystick buttons to actions within -->
+<!-- Kodi. -->
+<!-- -->
+<!-- The format is: -->
+<!-- <window> -->
+<!-- <joystick profile="game.controller.default"> -->
+<!-- <button>action</button> -->
+<!-- </joystick> -->
+<!-- </window> -->
+<!-- -->
+<!-- The <global> section is a fall through - they will only be used if the -->
+<!-- button is not used in the current window's section. -->
+<!-- -->
+<!-- The "profile" attribute specifies the controller profile whose buttons -->
+<!-- are being mapped. Currently, the default controller profile is used for -->
+<!-- every controller. In the future it may be possible to specify mappings -->
+<!-- for the controller profile most similar to the user's physical -->
+<!-- controller. -->
+<!-- -->
+<!-- Actions can be built-in functions. -->
+<!-- eg <b>ActivateWindow(Music)</b> -->
+<!-- would automatically go to Music on the press of the B button. -->
+<!-- -->
+<!-- Buttons can be overloaded with hold durations, in milliseconds: -->
+<!-- <joystick profile="game.controller.default"> -->
+<!-- <a>Select</a> -->
+<!-- <a holdtime="500">ContextMenu</a> -->
+<!-- </joystick> -->
+<!-- -->
+<!-- Buttons can be also require hotkeys to be pressed: -->
+<!-- <joystick profile="game.controller.default"> -->
+<!-- <start hotkey="back">Stop</start> -->
+<!-- </joystick> -->
+<!-- -->
+<!-- Due to limitations in the button mapper, buttons can be overloaded with -->
+<!-- different hold durations, but not different hotkeys for the same -->
+<!-- duration. -->
+<!-- -->
+<!-- More documentation on keymaps can be found on -->
+<!-- http://kodi.wiki/view/keymaps -->
+<!-- -->
+<keymap>
+ <global>
+ <joystick profile="game.controller.default">
+ <a>Select</a>
+ <a holdtime="500">ContextMenu</a>
+ <b>Back</b>
+ <x>ContextMenu</x>
+ <y>FullScreen</y>
+ <start>ActivateWindow(PlayerControls)</start>
+ <back>ActivateWindow(Home)</back>
+ <guide>ActivateWindow(Home)</guide>
+ <up>Up</up>
+ <down>Down</down>
+ <right>Right</right>
+ <left>Left</left>
+ <leftthumb>Screenshot</leftthumb>
+ <rightthumb>ActivateWindow(ShutdownMenu)</rightthumb>
+ <lefttrigger>ScrollUp</lefttrigger>
+ <righttrigger>ScrollDown</righttrigger>
+ <leftbumper>ScrollUp</leftbumper>
+ <rightbumper>ScrollDown</rightbumper>
+ <leftstick direction="left">Left</leftstick>
+ <leftstick direction="right">Right</leftstick>
+ <leftstick direction="up">Up</leftstick>
+ <leftstick direction="down">Down</leftstick>
+ <rightstick direction="left">VolumeDown</rightstick>
+ <rightstick direction="right">VolumeUp</rightstick>
+ <rightstick direction="up">VolumeUp</rightstick>
+ <rightstick direction="down">VolumeDown</rightstick>
+ </joystick>
+ </global>
+ <Home>
+ <joystick profile="game.controller.default">
+ <b>Back</b>
+ <b holdtime="500">ActivateWindow(ShutdownMenu)</b>
+ </joystick>
+ </Home>
+ <FileManager>
+ <joystick profile="game.controller.default">
+ <rightbumper>Highlight</rightbumper>
+ </joystick>
+ </FileManager>
+ <MusicPlaylist>
+ <joystick profile="game.controller.default">
+ <leftbumper>Delete</leftbumper>
+ </joystick>
+ </MusicPlaylist>
+ <Music>
+ </Music>
+ <FullscreenVideo>
+ <joystick profile="game.controller.default">
+ <a>Pause</a>
+ <b>Stop</b>
+ <b holdtime="500">FullScreen</b>
+ <x>OSD</x>
+ <y>FullScreen</y>
+ <start>Info</start>
+ <back>FullScreen</back>
+ <guide>OSD</guide>
+ <up>ChapterOrBigStepForward</up>
+ <down>ChapterOrBigStepBack</down>
+ <right>StepForward</right>
+ <left>StepBack</left>
+ <leftthumb>ShowSubtitles</leftthumb>
+ <rightthumb>AspectRatio</rightthumb>
+ <lefttrigger>AnalogRewind</lefttrigger>
+ <righttrigger>AnalogFastForward</righttrigger>
+ <leftbumper>AnalogRewind</leftbumper>
+ <rightbumper>AnalogFastForward</rightbumper>
+ <leftstick direction="left">AnalogSeekBack</leftstick>
+ <leftstick direction="right">AnalogSeekForward</leftstick>
+ <leftstick direction="up">noop</leftstick>
+ <leftstick direction="down">noop</leftstick>
+ </joystick>
+ </FullscreenVideo>
+ <FullscreenGame>
+ <joystick profile="game.controller.default">
+ <start holdtime="1000">OSD</start>
+ <guide>OSD</guide>
+ <!-- Give games access to volume controls -->
+ <rightstick direction="left" hotkey="back">VolumeDown</rightstick>
+ <rightstick direction="right" hotkey="back">VolumeUp</rightstick>
+ <rightstick direction="up" hotkey="back">VolumeUp</rightstick>
+ <rightstick direction="down" hotkey="back">VolumeDown</rightstick>
+ <!-- RetroPie hotkeys, ref: https://github.com/RetroPie/RetroPie-Setup/wiki/RetroArch-Configuration -->
+ <!--
+ <b hotkey="back">Player.Reset</b>
+ <x hotkey="back">OSD</x>
+ <start hotkey="back">Stop</start>
+ <rightbumper hotkey="back">Save</rightbumper>
+ <leftbumper hotkey="back">Load</leftbumper>
+ <righttrigger hotkey="back">AnalogFastForward</righttrigger>
+ <lefttrigger hotkey="back">AnalogRewind</lefttrigger>
+ <right hotkey="back">SaveSlotIncrease</right>
+ <left hotkey="back">SaveSlotDecrease</left>
+ -->
+ <!-- Hotkeys courtesy Julipo -->
+ <!--
+ <a hotkey="back">Screenshot</a>
+ <x hotkey="back">FullScreen</x>
+ <y hotkey="back">OSD</y>
+ <start hotkey="back">OSD</start>
+ <rightbumper hotkey="back">Save</rightbumper>
+ <leftbumper hotkey="back">Load</leftbumper>
+ <leftstick direction="left" hotkey="back">SaveSlotDecrease</leftstick>
+ <leftstick direction="right" hotkey="back">SaveSlotIncrease</leftstick>
+ -->
+ <!-- Merged -->
+ <!-- Screenshot is disabled until it has been further automated
+ (currently pops up multiple annoying confusing dialogs) -->
+ <!-- <a hotkey="back">Screenshot</a> -->
+ <!-- Reset is disabled until player can undo a reset -->
+ <!--<b hotkey="back">PlayerControl(Reset)</b> -->
+ <x hotkey="back">OSD</x>
+ <y hotkey="back">OSD</y>
+ <start hotkey="back">Stop</start>
+ <rightbumper hotkey="back">AnalogFastForward</rightbumper>
+ <leftbumper hotkey="back">AnalogRewind</leftbumper>
+ <righttrigger hotkey="back">AnalogFastForward</righttrigger>
+ <lefttrigger hotkey="back">AnalogRewind</lefttrigger>
+ <!--
+ <right hotkey="back">SaveSlotIncrease</right>
+ <left hotkey="back">SaveSlotDecrease</left>
+ <leftstick direction="left" hotkey="back">SaveSlotDecrease</leftstick>
+ <leftstick direction="right" hotkey="back">SaveSlotIncrease</leftstick>
+ -->
+ </joystick>
+ </FullscreenGame>
+ <FullscreenLiveTV>
+ <joystick profile="game.controller.default">
+ <a>Pause</a>
+ <b>Stop</b>
+ <b holdtime="500">FullScreen</b>
+ <x>OSD</x>
+ <back>OSD</back>
+ <guide>OSD</guide>
+ <start>Info</start>
+ <up>ChannelUp</up>
+ <down>ChannelDown</down>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ </joystick>
+ </FullscreenLiveTV>
+ <TVGuide>
+ <joystick profile="game.controller.default">
+ <back>Menu</back>
+ </joystick>
+ </TVGuide>
+ <FullscreenRadio>
+ <joystick profile="game.controller.default">
+ <a>Pause</a>
+ <b>Stop</b>
+ <b holdtime="500">FullScreen</b>
+ <x>OSD</x>
+ <back>OSD</back>
+ <guide>OSD</guide>
+ <start>Info</start>
+ <up>ChannelUp</up>
+ <down>ChannelDown</down>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ </joystick>
+ </FullscreenRadio>
+ <RadioGuide>
+ <joystick profile="game.controller.default">
+ <back>Menu</back>
+ </joystick>
+ </RadioGuide>
+ <FullscreenInfo>
+ <joystick profile="game.controller.default">
+ <b>Close</b>
+ <x>OSD</x>
+ <start>Close</start>
+ <lefttrigger>AnalogRewind</lefttrigger>
+ <righttrigger>AnalogFastForward</righttrigger>
+ <leftbumper>AnalogRewind</leftbumper>
+ <rightbumper>AnalogFastForward</rightbumper>
+ </joystick>
+ </FullscreenInfo>
+ <PlayerControls>
+ <joystick profile="game.controller.default">
+ <x>Close</x>
+ <leftthumb>Close</leftthumb>
+ <rightthumb>Close</rightthumb>
+ </joystick>
+ </PlayerControls>
+ <Visualisation>
+ <joystick profile="game.controller.default">
+ <a>Pause</a>
+ <b>Stop</b>
+ <x>Addon.Default.OpenSettings(xbmc.player.musicviz)</x>
+ <y>ActivateWindow(VisualisationPresetList)</y>
+ <start>Info</start>
+ <rightthumb>ActivateWindow(MusicOSD)</rightthumb>
+ <up>SkipNext</up>
+ <down>SkipPrevious</down>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ <lefttrigger>AnalogRewind</lefttrigger>
+ <righttrigger>AnalogFastForward</righttrigger>
+ <leftbumper>AnalogRewind</leftbumper>
+ <rightbumper>AnalogFastForward</rightbumper>
+ <leftstick direction="left">PreviousPreset</leftstick>
+ <leftstick direction="right">NextPreset</leftstick>
+ <leftstick direction="up">noop</leftstick>
+ <leftstick direction="down">noop</leftstick>
+ </joystick>
+ </Visualisation>
+ <MusicOSD>
+ <joystick profile="game.controller.default">
+ <b>Close</b>
+ <start>Info</start>
+ </joystick>
+ </MusicOSD>
+ <VisualisationPresetList>
+ <joystick profile="game.controller.default">
+ <b>Close</b>
+ </joystick>
+ </VisualisationPresetList>
+ <SlideShow>
+ <joystick profile="game.controller.default">
+ <a>Pause</a>
+ <b>Stop</b>
+ <y>ZoomNormal</y>
+ <leftbumper>Rotate</leftbumper>
+ <rightbumper>Info</rightbumper>
+ <up>ZoomIn</up>
+ <down>ZoomOut</down>
+ <left>PreviousPicture</left>
+ <right>NextPicture</right>
+ <leftstick direction="left">AnalogMoveXLeft</leftstick>
+ <leftstick direction="right">AnalogMoveXRight</leftstick>
+ <leftstick direction="up">AnalogMoveYUp</leftstick>
+ <leftstick direction="down">AnalogMoveYDown</leftstick>
+ <lefttrigger>ZoomOut</lefttrigger>
+ <righttrigger>ZoomIn</righttrigger>
+ </joystick>
+ </SlideShow>
+ <ScreenCalibration>
+ <joystick profile="game.controller.default">
+ <x>ResetCalibration</x>
+ <leftbumper>NextResolution</leftbumper>
+ <rightbumper>NextCalibration</rightbumper>
+ </joystick>
+ </ScreenCalibration>
+ <ScreenCalibration>
+ <joystick profile="game.controller.default">
+ <x>ResetCalibration</x>
+ <leftbumper>NextResolution</leftbumper>
+ <rightbumper>NextCalibration</rightbumper>
+ </joystick>
+ </ScreenCalibration>
+ <VideoOSD>
+ <joystick profile="game.controller.default">
+ <b>Close</b>
+ </joystick>
+ </VideoOSD>
+ <VideoMenu>
+ <joystick profile="game.controller.default">
+ <b>Stop</b>
+ <x>OSD</x>
+ <leftbumper>AspectRatio</leftbumper>
+ <start>Info</start>
+ </joystick>
+ </VideoMenu>
+ <OSDVideoSettings>
+ <joystick profile="game.controller.default">
+ <leftbumper>AspectRatio</leftbumper>
+ <x>Close</x>
+ </joystick>
+ </OSDVideoSettings>
+ <OSDAudioSettings>
+ <joystick profile="game.controller.default">
+ <leftbumper>AspectRatio</leftbumper>
+ <x>Close</x>
+ </joystick>
+ </OSDAudioSettings>
+ <VideoBookmarks>
+ <joystick profile="game.controller.default">
+ <leftbumper>Delete</leftbumper>
+ </joystick>
+ </VideoBookmarks>
+ <Videos>
+ </Videos>
+ <VideoPlaylist>
+ <joystick profile="game.controller.default">
+ <leftbumper>Delete</leftbumper>
+ </joystick>
+ </VideoPlaylist>
+ <VirtualKeyboard>
+ <joystick profile="game.controller.default">
+ <a>Select</a>
+ <a holdtime="500">Shift</a>
+ <b>BackSpace</b>
+ <y>Symbols</y>
+ <leftbumper>Shift</leftbumper>
+ <leftthumb>Enter</leftthumb>
+ <lefttrigger>CursorLeft</lefttrigger>
+ <righttrigger>CursorRight</righttrigger>
+ <x>VoiceRecognizer</x>
+ <start>VoiceRecognizer</start>
+ </joystick>
+ </VirtualKeyboard>
+ <ContextMenu>
+ <joystick profile="game.controller.default">
+ <b>Close</b>
+ </joystick>
+ </ContextMenu>
+ <Settings>
+ <joystick profile="game.controller.default">
+ <b>PreviousMenu</b>
+ </joystick>
+ </Settings>
+ <AddonInformation>
+ <joystick profile="game.controller.default">
+ <b>Close</b>
+ </joystick>
+ </AddonInformation>
+ <AddonSettings>
+ <joystick profile="game.controller.default">
+ <b>Close</b>
+ </joystick>
+ </AddonSettings>
+ <TextViewer>
+ <joystick profile="game.controller.default">
+ <b>Close</b>
+ </joystick>
+ </TextViewer>
+ <shutdownmenu>
+ <joystick profile="game.controller.default">
+ <b>PreviousMenu</b>
+ <leftthumb>PreviousMenu</leftthumb>
+ </joystick>
+ </shutdownmenu>
+ <submenu>
+ <joystick profile="game.controller.default">
+ <b>PreviousMenu</b>
+ </joystick>
+ </submenu>
+ <MusicInformation>
+ <joystick profile="game.controller.default">
+ <b>Close</b>
+ </joystick>
+ </MusicInformation>
+ <MovieInformation>
+ <joystick profile="game.controller.default">
+ <b>Close</b>
+ </joystick>
+ </MovieInformation>
+ <NumericInput>
+ <joystick profile="game.controller.default">
+ <b>BackSpace</b>
+ <leftthumb>Enter</leftthumb>
+ </joystick>
+ </NumericInput>
+ <GamepadInput>
+ <joystick profile="game.controller.default">
+ <leftthumb>Stop</leftthumb>
+ </joystick>
+ </GamepadInput>
+ <LockSettings>
+ <joystick profile="game.controller.default">
+ <b>PreviousMenu</b>
+ <leftthumb>Close</leftthumb>
+ </joystick>
+ </LockSettings>
+ <ProfileSettings>
+ <joystick profile="game.controller.default">
+ <b>PreviousMenu</b>
+ <leftthumb>Close</leftthumb>
+ </joystick>
+ </ProfileSettings>
+</keymap>
diff --git a/system/keymaps/keyboard.xml b/system/keymaps/keyboard.xml
new file mode 100644
index 0000000..49177c4
--- /dev/null
+++ b/system/keymaps/keyboard.xml
@@ -0,0 +1,849 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of keyboard keys to actions within Kodi. -->
+<!-- -->
+<!-- The format is: -->
+<!-- <window> -->
+<!-- <device> -->
+<!-- <button>action</button> -->
+<!-- </device> -->
+<!-- </window> -->
+<!-- -->
+<!-- The <global> section is a fall through - they will only be used if the button is -->
+<!-- not used in the current window's section. -->
+<!-- -->
+<!-- Actions can be built-in functions. -->
+<!-- eg <B>ActivateWindow(Music)</B> -->
+<!-- would automatically go to Music on the press of the B button. -->
+<!-- -->
+<!-- Long presses -->
+<!-- A limitation is that if a single press is mapped in a section, a global "longpress"-->
+<!-- will be ignored. The workaround is to duplicate the long mapping in the section. -->
+<!-- -->
+<!-- An empty action removes the corresponding mapping from default and parent keymaps. -->
+<!-- This is different from a "noop" action, which disables a button. -->
+<!-- -->
+<!-- More documentation on keymaps can be found on http://kodi.wiki/view/keymaps -->
+<keymap>
+ <global>
+ <keyboard>
+ <p>Play</p>
+ <q>Queue</q>
+ <f>FastForward</f>
+ <r>Rewind</r>
+ <y>SwitchPlayer</y>
+ <left>Left</left>
+ <right>Right</right>
+ <up>Up</up>
+ <down>Down</down>
+ <left mod="ctrl">analogseekback</left>
+ <right mod="ctrl">analogseekforward</right>
+ <pageup>PageUp</pageup>
+ <pagedown>PageDown</pagedown>
+ <return>Select</return>
+ <return mod="longpress">ContextMenu</return>
+ <return mod="ctrl">Enter</return>
+ <enter>Select</enter>
+ <enter mod="longpress">ContextMenu</enter>
+ <enter mod="ctrl">Enter</enter>
+ <backspace>Back</backspace>
+ <browser_back>Back</browser_back>
+ <browser_back mod="longpress">ActivateWindow(Home)</browser_back>
+ <key id='65446'>Back</key>
+ <m>Menu</m>
+ <n mod="ctrl">ActivateWindow(PlayerControls)</n>
+ <s>ActivateWindow(ShutdownMenu)</s>
+ <escape>PreviousMenu</escape>
+ <escape mod="longpress">Back</escape>
+ <i>Info</i>
+ <menu>ContextMenu</menu>
+ <menu mod="longpress">Menu</menu>
+ <c>ContextMenu</c>
+ <c mod="longpress">Menu</c>
+ <space>Pause</space>
+ <x>Stop</x>
+ <period>SkipNext</period>
+ <comma>SkipPrevious</comma>
+ <tab>FullScreen</tab>
+ <printscreen>Screenshot</printscreen>
+ <s mod="ctrl">Screenshot</s>
+ <minus>VolumeDown</minus>
+ <plus>VolumeUp</plus>
+ <equals>VolumeUp</equals>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <numpadminus>VolumeDown</numpadminus>
+ <numpadplus>VolumeUp</numpadplus>
+ <numpadzero>Number0</numpadzero>
+ <numpadone>Number1</numpadone>
+ <numpadtwo>Number2</numpadtwo>
+ <numpadthree>Number3</numpadthree>
+ <numpadfour>Number4</numpadfour>
+ <numpadfive>Number5</numpadfive>
+ <numpadsix>Number6</numpadsix>
+ <numpadseven>Number7</numpadseven>
+ <numpadeight>Number8</numpadeight>
+ <numpadnine>Number9</numpadnine>
+ <backslash>ToggleFullScreen</backslash>
+ <home>FirstPage</home>
+ <end>LastPage</end>
+ <power>ActivateWindow(ShutdownMenu)</power>
+ <sleep>ActivateWindow(ShutdownMenu)</sleep>
+ <!-- PVR windows -->
+ <e>ActivateWindow(TVGuide)</e>
+ <epg>ActivateWindow(TVGuide)</epg>
+ <h>ActivateWindow(TVChannels)</h>
+ <j>ActivateWindow(RadioChannels)</j>
+ <k>ActivateWindow(TVRecordings)</k>
+ <b>ActivateWindow(TVTimers)</b>
+ <!-- PVR -->
+ <red>ActivateWindow(TVChannels)</red>
+ <green>ActivateWindow(Videos)</green>
+ <yellow>ActivateWindow(Music)</yellow>
+ <blue>ActivateWindow(Pictures)</blue>
+ <!-- Multimedia keyboard keys -->
+ <browser_back>Back</browser_back>
+ <browser_forward/>
+ <browser_refresh/>
+ <browser_stop/>
+ <browser_search/>
+ <browser_favorites>ActivateWindow(FavouritesBrowser)</browser_favorites>
+ <favorites>ActivateWindow(FavouritesBrowser)</favorites>
+ <config>ActivateWindow(Settings)</config>
+ <browser_home>ActivateWindow(Home)</browser_home>
+ <homepage>ActivateWindow(Home)</homepage>
+ <volume_mute>Mute</volume_mute>
+ <volume_down>VolumeDown</volume_down>
+ <volume_up>VolumeUp</volume_up>
+ <next_track>SkipNext</next_track>
+ <prev_track>SkipPrevious</prev_track>
+ <stop>Stop</stop>
+ <play_pause>PlayPause</play_pause>
+ <play_pause mod="longpress">Info</play_pause>
+ <fastforward>FastForward</fastforward>
+ <rewind>Rewind</rewind>
+ <record/>
+ <launch_mail></launch_mail>
+ <launch_media_select>ActivateWindow(Music)</launch_media_select>
+ <launch_app1_pc_icon>ActivateWindow(Programs)</launch_app1_pc_icon>
+ <launch_app2_pc_icon>ActivateWindow(Programs)</launch_app2_pc_icon>
+ <launch_file_browser/>
+ <launch_media_center/>
+ <!-- ****************************************************** -->
+ <!-- MS Media Center keyboard shortcuts sent by MCE remotes -->
+ <!-- See http://msdn.microsoft.com/en-us/library/bb189249.aspx -->
+ <p mod="ctrl,shift">Play</p> <!-- Play -->
+ <s mod="ctrl,shift">Stop</s> <!-- Stop -->
+ <p mod="ctrl">Pause</p> <!-- Pause -->
+ <f mod="ctrl,shift">FastForward</f> <!-- Fwd -->
+ <b mod="ctrl,shift">Rewind</b> <!-- Rew -->
+ <f mod="ctrl">SkipNext</f> <!-- Skip -->
+ <b mod="ctrl">SkipPrevious</b> <!-- Replay -->
+ <d mod="ctrl">Info</d> <!-- MCE Details -->
+ <r mod="ctrl">Record</r> <!-- Record -->
+ <f4 mod="alt">PreviousMenu</f4> <!-- Exit -->
+ <f10>VolumeUp</f10> <!-- MCE Vol up -->
+ <f9>VolumeDown</f9> <!-- MCE Vol down -->
+ <f8>Mute</f8> <!-- MCE mute -->
+ <g mod="ctrl">ActivateWindow(TVGuide)</g> <!-- MCE Guide -->
+ <m mod="ctrl">ActivateWindow(music)</m> <!-- MCE My music -->
+ <i mod="ctrl">ActivateWindow(pictures)</i> <!-- MCE My pictures -->
+ <e mod="ctrl">ActivateWindow(videos)</e> <!-- MCE videos -->
+ <m mod="ctrl,shift">PlayerControl(ShowVideoMenu)</m> <!-- MCE DVD menu -->
+ <o mod="ctrl">ActivateWindow(TVRecordings)</o> <!-- MCE Recorded TV -->
+ <t mod="ctrl">ActivateWindow(TVChannels)</t> <!-- MCE Live TV -->
+ <t mod="ctrl,shift">ActivateWindow(TVChannels)</t> <!-- MCE TV -->
+ <a mod="ctrl">ActivateWindow(RadioChannels)</a> <!-- MCE Radio -->
+ <!-- MCE keypresses without an obvious use in Kodi -->
+ <u mod="ctrl">Notification(MCEKeypress, DVD subtitle, 3)</u>
+ <a mod="ctrl,shift">Notification(MCEKeypress, DVD audio, 3)</a>
+ <k mod="ctrl,shift">ReloadKeymaps</k>
+ <d mod="ctrl,shift">ToggleDebug</d>
+ <r mod="ctrl,shift">ToggleDirtyRegionVisualization</r>
+ <f11>HDRToggle</f11>
+ </keyboard>
+ </global>
+ <LoginScreen>
+ <keyboard>
+ <end mod="ctrl">ShutDown()</end>
+ </keyboard>
+ </LoginScreen>
+ <Home>
+ <keyboard>
+ <i>info</i>
+ <end mod="ctrl">ShutDown()</end>
+ <backspace mod="longpress">ActivateWindow(ShutdownMenu)</backspace>
+ </keyboard>
+ </Home>
+ <VirtualKeyboard>
+ <keyboard>
+ <c mod="longpress">noop</c>
+ <left>Left</left>
+ <right>Right</right>
+ <up>Up</up>
+ <down>Down</down>
+ <return>Select</return>
+ <enter>Select</enter>
+ <backspace>Backspace</backspace>
+ <browser_back>Backspace</browser_back>
+ <browser_back mod="longpress">PreviousMenu</browser_back>
+ <play_pause mod="longpress">Enter</play_pause>
+ <browser_search>VoiceRecognizer</browser_search>
+ <menu>VoiceRecognizer</menu>
+ <return mod="longpress">VoiceRecognizer</return>
+ <enter mod="longpress">VoiceRecognizer</enter>
+ <play_pause>VoiceRecognizer</play_pause>
+ </keyboard>
+ </VirtualKeyboard>
+ <TVChannels>
+ <keyboard>
+ <delete>Delete</delete>
+ <m mod="ctrl">Move</m>
+ <h>PreviousMenu</h>
+ <period mod="longpress">ChannelNumberSeparator</period>
+ <numpadperiod>ChannelNumberSeparator</numpadperiod>
+ </keyboard>
+ </TVChannels>
+ <TVRecordings>
+ <keyboard>
+ <delete>Delete</delete>
+ <r>Rename</r>
+ <k>PreviousMenu</k>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </keyboard>
+ </TVRecordings>
+ <TVTimers>
+ <keyboard>
+ <delete>Delete</delete>
+ <r>Rename</r>
+ <b>PreviousMenu</b>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </keyboard>
+ </TVTimers>
+ <TVTimerRules>
+ <keyboard>
+ <delete>Delete</delete>
+ <r>Rename</r>
+ <b>PreviousMenu</b>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </keyboard>
+ </TVTimerRules>
+ <TVGuide>
+ <keyboard>
+ <e>PreviousMenu</e>
+ <t>ShowTimerRule</t>
+ <epg>PreviousMenu</epg>
+ <g>NextChannelGroup</g>
+ <n>ActivateWindow(PVRGuideControls)</n>
+ <backspace mod="longpress">Number0</backspace> <!-- 0 key goes to "now" on EPG timeline -->
+ <browser_back mod="longpress">Number0</browser_back> <!-- 0 key goes to "now" on EPG timeline -->
+ <period mod="longpress">ChannelNumberSeparator</period>
+ <numpadperiod>ChannelNumberSeparator</numpadperiod>
+ </keyboard>
+ </TVGuide>
+ <RadioChannels>
+ <keyboard>
+ <delete>Delete</delete>
+ <m mod="ctrl">Move</m>
+ <j>PreviousMenu</j>
+ <period mod="longpress">ChannelNumberSeparator</period>
+ <numpadperiod>ChannelNumberSeparator</numpadperiod>
+ </keyboard>
+ </RadioChannels>
+ <RadioRecordings>
+ <keyboard>
+ <delete>Delete</delete>
+ <r>Rename</r>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </keyboard>
+ </RadioRecordings>
+ <RadioTimers>
+ <keyboard>
+ <delete>Delete</delete>
+ <r>Rename</r>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </keyboard>
+ </RadioTimers>
+ <RadioTimerRules>
+ <keyboard>
+ <delete>Delete</delete>
+ <r>Rename</r>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </keyboard>
+ </RadioTimerRules>
+ <RadioGuide>
+ <keyboard>
+ <e>PreviousMenu</e>
+ <t>ShowTimerRule</t>
+ <epg>PreviousMenu</epg>
+ <g>NextChannelGroup</g>
+ <n>ActivateWindow(PVRGuideControls)</n>
+ <backspace mod="longpress">Number0</backspace> <!-- 0 key goes to "now" on EPG timeline -->
+ <browser_back mod="longpress">Number0</browser_back> <!-- 0 key goes to "now" on EPG timeline -->
+ <period mod="longpress">ChannelNumberSeparator</period>
+ <numpadperiod>ChannelNumberSeparator</numpadperiod>
+ </keyboard>
+ </RadioGuide>
+ <FileManager>
+ <keyboard>
+ <space>Highlight</space>
+ <delete>Delete</delete>
+ <m>Move</m>
+ <r>Rename</r>
+ <play_pause mod="longpress">Highlight</play_pause>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </FileManager>
+ <MusicPlaylist>
+ <keyboard>
+ <n>Back</n>
+ <delete>Delete</delete>
+ <u>MoveItemUp</u>
+ <d>MoveItemDown</d>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </MusicPlaylist>
+ <MusicPlaylistEditor>
+ <keyboard>
+ <u>MoveItemUp</u>
+ <d>MoveItemDown</d>
+ <delete>Delete</delete>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </MusicPlaylistEditor>
+ <Music>
+ <keyboard>
+ <n>Playlist</n>
+ <q>Queue</q>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </Music>
+ <FullscreenVideo>
+ <keyboard>
+ <f>FastForward</f>
+ <r>Rewind</r>
+ <period>StepForward</period>
+ <comma>StepBack</comma>
+ <backspace>Fullscreen</backspace>
+ <backspace mod="longpress">Stop</backspace>
+ <browser_back>Fullscreen</browser_back>
+ <browser_back mod="longpress">Stop</browser_back>
+ <quote>Seek(-7)</quote> <!-- Replaces smallstepback -->
+ <opensquarebracket>BigStepForward</opensquarebracket>
+ <closesquarebracket>BigStepBack</closesquarebracket>
+ <return>OSD</return>
+ <enter>OSD</enter>
+ <return mod="longpress">PlayPause</return>
+ <enter mod="longpress">PlayPause</enter>
+ <m>OSD</m>
+ <menu>OSD</menu>
+ <i>Info</i>
+ <o>PlayerProcessInfo</o>
+ <o mod="ctrl,shift">PlayerDebug</o>
+ <o mod="alt">PlayerDebugVideo</o>
+ <z>AspectRatio</z>
+ <zoom>AspectRatio</zoom>
+ <t>ShowSubtitles</t>
+ <t mod="ctrl">SubtitleAlign</t>
+ <l>NextSubtitle</l>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ <up>ChapterOrBigStepForward</up>
+ <down>ChapterOrBigStepBack</down>
+ <up mod="longpress">AudioNextLanguage</up>
+ <down mod="longpress">NextSubtitle</down>
+ <left mod="alt">PlayerControl(tempodown)</left>
+ <right mod="alt">PlayerControl(tempoup)</right>
+ <a>AudioDelay</a>
+ <a mod="ctrl">AudioNextLanguage</a>
+ <escape>Fullscreen</escape>
+ <c>Playlist</c>
+ <v>ActivateWindow(Teletext)</v>
+ <v mod="ctrl">VideoNextStream</v>
+ <text>ActivateWindow(Teletext)</text>
+ <up mod="ctrl">SubtitleShiftUp</up>
+ <down mod="ctrl">SubtitleShiftDown</down>
+ <pageup>SkipNext</pageup>
+ <pagedown>SkipPrevious</pagedown>
+ <plus mod="ctrl">VolAmpUp</plus>
+ <equals mod="ctrl">VolAmpUp</equals>
+ <minus mod="ctrl">VolAmpDown</minus>
+ <b mod="ctrl">CreateBookmark</b>
+ <b mod="alt">CreateEpisodeBookmark</b>
+ <f11 mod="alt">CycleToneMapMethod</f11>
+ </keyboard>
+ </FullscreenVideo>
+ <FullscreenGame>
+ <keyboard>
+ <f>FastForward</f>
+ <r>Rewind</r>
+ <backspace>OSD</backspace>
+ <backspace mod="longpress">Stop</backspace>
+ <browser_back>OSD</browser_back>
+ <browser_back mod="longpress">Stop</browser_back>
+ <return>OSD</return>
+ <enter>OSD</enter>
+ <m>OSD</m>
+ <menu>OSD</menu>
+ <i>Info</i>
+ <o>CodecInfo</o>
+ <z>AspectRatio</z>
+ <zoom>AspectRatio</zoom>
+ <escape>OSD</escape>
+ </keyboard>
+ </FullscreenGame>
+ <GameOSD>
+ <keyboard>
+ <m>OSD</m>
+ <menu>OSD</menu>
+ </keyboard>
+ </GameOSD>
+ <GameSaves>
+ <keyboard>
+ <delete>delete</delete>
+ </keyboard>
+ </GameSaves>
+ <InGameSaves>
+ <keyboard>
+ <delete>delete</delete>
+ </keyboard>
+ </InGameSaves>
+ <VideoTimeSeek>
+ <keyboard>
+ <return>Select</return>
+ <enter>Select</enter>
+ </keyboard>
+ </VideoTimeSeek>
+ <FullscreenInfo>
+ <keyboard>
+ <f>FastForward</f>
+ <r>Rewind</r>
+ <period>StepForward</period>
+ <o>PlayerProcessInfo</o>
+ <i>Back</i>
+ <d mod="ctrl">Back</d>
+ <m>OSD</m>
+ <menu>OSD</menu>
+ <return mod="longpress">PlayPause</return>
+ <enter mod="longpress">PlayPause</enter>
+ </keyboard>
+ </FullscreenInfo>
+ <PlayerControls>
+ <keyboard>
+ <m mod="ctrl">Back</m>
+ </keyboard>
+ </PlayerControls>
+ <Visualisation>
+ <keyboard>
+ <f>FastForward</f>
+ <r>Rewind</r>
+ <period>SkipNext</period>
+ <comma>SkipPrevious</comma>
+ <pageup>IncreaseRating</pageup>
+ <pagedown>DecreaseRating</pagedown>
+ <backspace>Fullscreen</backspace>
+ <backspace mod="longpress">Stop</backspace>
+ <browser_back>Fullscreen</browser_back>
+ <browser_back mod="longpress">Stop</browser_back>
+ <return>OSD</return>
+ <return mod="longpress">PlayPause</return>
+ <enter>OSD</enter>
+ <enter mod="longpress">PlayPause</enter>
+ <m>OSD</m>
+ <menu>OSD</menu>
+ <i>Info</i>
+ <p>ActivateWindow(VisualisationPresetList)</p>
+ <v>Addon.Default.OpenSettings(xbmc.player.musicviz)</v>
+ <text>Addon.Default.OpenSettings(xbmc.player.musicviz)</text>
+ <n>ActivateWindow(MusicPlaylist)</n>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ <left mod="longpress">Rewind</left>
+ <right mod="longpress">FastForward</right>
+ <up>SkipNext</up>
+ <down>SkipPrevious</down>
+ <o>PlayerProcessInfo</o>
+ <l>LockPreset</l>
+ <escape>FullScreen</escape>
+ </keyboard>
+ </Visualisation>
+ <MusicOSD>
+ <keyboard>
+ <f>FastForward</f>
+ <r>Rewind</r>
+ <period>SkipNext</period>
+ <comma>SkipPrevious</comma>
+ <m>Back</m>
+ <menu>Back</menu>
+ <i>Info</i>
+ <o>PlayerProcessInfo</o>
+ <p>ActivateWindow(VisualisationPresetList)</p>
+ <v>Addon.Default.OpenSettings(xbmc.player.musicviz)</v>
+ <text>Addon.Default.OpenSettings(xbmc.player.musicviz)</text>
+ <n>ActivateWindow(MusicPlaylist)</n>
+ </keyboard>
+ </MusicOSD>
+ <VisualisationPresetList>
+ <keyboard>
+ <f>FastForward</f>
+ <r>Rewind</r>
+ <period>SkipNext</period>
+ <comma>SkipPrevious</comma>
+ <m>Back</m>
+ <i>Info</i>
+ <o>PlayerProcessInfo</o>
+ <p>Back</p>
+ <v>Back</v>
+ <text>Back</text>
+ <n>ActivateWindow(MusicPlaylist)</n>
+ </keyboard>
+ </VisualisationPresetList>
+ <SlideShow>
+ <keyboard>
+ <zero>ZoomNormal</zero>
+ <one>ZoomLevel1</one>
+ <two>ZoomLevel2</two>
+ <three>ZoomLevel3</three>
+ <four>ZoomLevel4</four>
+ <five>ZoomLevel5</five>
+ <six>ZoomLevel6</six>
+ <seven>ZoomLevel7</seven>
+ <eight>ZoomLevel8</eight>
+ <nine>ZoomLevel9</nine>
+ <i>Info</i>
+ <o>Info</o>
+ <period>NextPicture</period>
+ <comma>PreviousPicture</comma>
+ <plus>ZoomIn</plus>
+ <minus>ZoomOut</minus>
+ <return>Rotate</return>
+ <enter>Rotate</enter>
+ <r>Rotate</r>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </SlideShow>
+ <ScreenCalibration>
+ <keyboard>
+ <return>NextCalibration</return>
+ <enter>NextCalibration</enter>
+ <d>ResetCalibration</d>
+ <r>NextResolution</r>
+ </keyboard>
+ </ScreenCalibration>
+ <ScreenCalibration>
+ <keyboard>
+ <return>NextCalibration</return>
+ <enter>NextCalibration</enter>
+ <d>ResetCalibration</d>
+ </keyboard>
+ </ScreenCalibration>
+ <VideoOSD>
+ <keyboard>
+ <m>Back</m>
+ <menu>Back</menu>
+ <g mod="ctrl">Back</g> <!-- MCE Guide button -->
+ <i>Info</i>
+ <o>PlayerProcessInfo</o>
+ </keyboard>
+ </VideoOSD>
+ <VideoMenu>
+ <keyboard>
+ <opensquarebracket>BigStepForward</opensquarebracket>
+ <closesquarebracket>BigStepBack</closesquarebracket>
+ <m>OSD</m>
+ <menu>OSD</menu>
+ <i>Info</i>
+ <o>PlayerProcessInfo</o>
+ <z>AspectRatio</z>
+ <zoom>AspectRatio</zoom>
+ <t>ShowSubtitles</t>
+ <l>NextSubtitle</l>
+ <a>AudioDelay</a>
+ <escape>Fullscreen</escape>
+ <return>Select</return>
+ <enter>Select</enter> <!-- backspace>Fullscreen</backspace -->
+ <pageup>SkipNext</pageup>
+ <pagedown>SkipPrevious</pagedown>
+ </keyboard>
+ </VideoMenu>
+ <OSDVideoSettings>
+ <keyboard>
+ <i>Info</i>
+ <o>PlayerProcessInfo</o>
+ </keyboard>
+ </OSDVideoSettings>
+ <OSDAudioSettings>
+ <keyboard>
+ <i>Info</i>
+ <o>PlayerProcessInfo</o>
+ </keyboard>
+ </OSDAudioSettings>
+ <VideoBookmarks>
+ <keyboard>
+ <delete>Delete</delete>
+ </keyboard>
+ </VideoBookmarks>
+ <Videos>
+ <keyboard>
+ <delete>Delete</delete>
+ <n>Playlist</n>
+ <w>ToggleWatched</w>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </Videos>
+ <VideoPlaylist>
+ <keyboard>
+ <n>Back</n>
+ <delete>Delete</delete>
+ <u>MoveItemUp</u>
+ <d>MoveItemDown</d>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </VideoPlaylist>
+ <Pictures>
+ <keyboard>
+ <delete>Delete</delete>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </Pictures>
+ <ContextMenu>
+ <keyboard>
+ <c>Back</c>
+ <menu>Back</menu>
+ </keyboard>
+ </ContextMenu>
+ <MusicInformation>
+ <keyboard>
+ <i>Back</i>
+ <d mod="ctrl">Back</d>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </MusicInformation>
+ <MovieInformation>
+ <keyboard>
+ <i>Back</i>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </MovieInformation>
+ <PictureInfo>
+ <keyboard>
+ <period>NextPicture</period>
+ <comma>PreviousPicture</comma>
+ <i>Back</i>
+ <d mod="ctrl">Back</d>
+ <o>Back</o>
+ <space>Pause</space>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </PictureInfo>
+ <Teletext>
+ <keyboard>
+ <v>Back</v>
+ <text>Back</text>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </keyboard>
+ </Teletext>
+ <Favourites>
+ <keyboard>
+ <backspace>Close</backspace>
+ <browser_back>Close</browser_back>
+ <u>MoveItemUp</u>
+ <d>MoveItemDown</d>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </Favourites>
+ <FavouritesBrowser>
+ <keyboard>
+ <u>MoveItemUp</u>
+ <d>MoveItemDown</d>
+ <delete>Delete</delete>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </FavouritesBrowser>
+ <NumericInput>
+ <keyboard>
+ <backspace>Close</backspace>
+ <browser_back>Close</browser_back>
+ </keyboard>
+ </NumericInput>
+ <FullscreenLiveTV>
+ <keyboard>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ <up>Up</up>
+ <down>Down</down>
+ <return>OSD</return>
+ <enter>OSD</enter>
+ <g>ActivateWindow(PVRChannelGuide)</g>
+ <c>ActivateWindow(PVROSDChannels)</c>
+ <return mod="longpress">ActivateWindow(PVROSDChannels)</return>
+ <enter mod="longpress">ActivateWindow(PVROSDChannels)</enter>
+ <pageup>ChannelUp</pageup>
+ <pagedown>ChannelDown</pagedown>
+ <period mod="longpress">ChannelNumberSeparator</period>
+ <numpadperiod>ChannelNumberSeparator</numpadperiod>
+ </keyboard>
+ </FullscreenLiveTV>
+ <FullscreenRadio>
+ <keyboard>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ <up>Up</up>
+ <down>Down</down>
+ <return>OSD</return>
+ <enter>OSD</enter>
+ <g>ActivateWindow(PVRChannelGuide)</g>
+ <c>ActivateWindow(PVROSDChannels)</c>
+ <return mod="longpress">ActivateWindow(PVROSDChannels)</return>
+ <enter mod="longpress">ActivateWindow(PVROSDChannels)</enter>
+ <pageup>ChannelUp</pageup>
+ <pagedown>ChannelDown</pagedown>
+ <period mod="longpress">ChannelNumberSeparator</period>
+ <numpadperiod>ChannelNumberSeparator</numpadperiod>
+ </keyboard>
+ </FullscreenRadio>
+ <FullscreenLiveTvPreview>
+ <keyboard>
+ <return>Select</return>
+ <enter>Select</enter>
+ </keyboard>
+ </FullscreenLiveTvPreview>
+ <FullscreenRadioPreview>
+ <keyboard>
+ <return>Select</return>
+ <enter>Select</enter>
+ </keyboard>
+ </FullscreenRadioPreview>
+ <FullscreenLiveTvInput>
+ <keyboard>
+ <return>Select</return>
+ <enter>Select</enter>
+ <period>ChannelNumberSeparator</period>
+ <numpadperiod>ChannelNumberSeparator</numpadperiod>
+ </keyboard>
+ </FullscreenLiveTvInput>
+ <FullscreenRadioInput>
+ <keyboard>
+ <return>Select</return>
+ <enter>Select</enter>
+ <period>ChannelNumberSeparator</period>
+ <numpadperiod>ChannelNumberSeparator</numpadperiod>
+ </keyboard>
+ </FullscreenRadioInput>
+ <PVROSDChannels>
+ <keyboard>
+ <period mod="longpress">ChannelNumberSeparator</period>
+ <numpadperiod>ChannelNumberSeparator</numpadperiod>
+ <backspace>Close</backspace>
+ <escape>Close</escape>
+ <browser_back>Close</browser_back>
+ </keyboard>
+ </PVROSDChannels>
+ <PVRChannelGuide>
+ <keyboard>
+ <backspace>Close</backspace>
+ <escape>Close</escape>
+ <browser_back>Close</browser_back>
+ </keyboard>
+ </PVRChannelGuide>
+ <PVRSettings>
+ <keyboard>
+ <backspace>PreviousMenu</backspace>
+ <browser_back>PreviousMenu</browser_back>
+ </keyboard>
+ </PVRSettings>
+ <FileBrowser>
+ <keyboard>
+ <space>Highlight</space>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </FileBrowser>
+ <ShutdownMenu>
+ <keyboard>
+ <s>Back</s>
+ </keyboard>
+ </ShutdownMenu>
+ <AddonInformation>
+ <keyboard>
+ <i>Back</i>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </AddonInformation>
+ <AddonSettings>
+ <keyboard>
+ <delete>Delete</delete>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </AddonSettings>
+ <Addon>
+ <keyboard>
+ <f1>Red</f1>
+ <red>Red</red>
+ <f2>Green</f2>
+ <green>Green</green>
+ <f3>Yellow</f3>
+ <yellow>Yellow</yellow>
+ <f4>Blue</f4>
+ <blue>Blue</blue>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </Addon>
+ <Programs>
+ <keyboard>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </Programs>
+ <Settings>
+ <keyboard>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </Settings>
+ <MediaFilter>
+ <keyboard>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </MediaFilter>
+ <Weather>
+ <keyboard>
+ <backspace mod="longpress">ActivateWindow(Home)</backspace>
+ </keyboard>
+ </Weather>
+ <PlayerProcessInfo>
+ <keyboard>
+ <o>PlayerProcessInfo</o>
+ </keyboard>
+ </PlayerProcessInfo>
+ <TextViewer>
+ <keyboard>
+ <t>ToggleFont</t>
+ </keyboard>
+ </TextViewer>
+</keymap>
diff --git a/system/keymaps/mouse.xml b/system/keymaps/mouse.xml
new file mode 100644
index 0000000..3bb3f43
--- /dev/null
+++ b/system/keymaps/mouse.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of mouse keys to actions within Kodi. -->
+<!-- -->
+<!-- The format is: -->
+<!-- <window> -->
+<!-- <device> -->
+<!-- <button>action</button> -->
+<!-- </device> -->
+<!-- </window> -->
+<!-- -->
+<!-- The <global> section is a fall through - they will only be used if the button is -->
+<!-- not used in the current window's section. -->
+<!-- -->
+<!-- Actions can be built-in functions. -->
+<!-- eg <middleclick>ActivateWindow(Music)</middleclick> -->
+<!-- would automatically go to Music on the press of the middle mouse button. -->
+<!-- -->
+<!-- -->
+<!-- An empty action removes the corresponding mapping from default and parent keymaps. -->
+<!-- This is different from a "noop" action, which disables a button. -->
+<!-- -->
+<!-- Button Ids: -->
+<!-- 0: left -->
+<!-- 1: right -->
+<!-- 2: middle -->
+<!-- 3/4/5/6: extra -->
+<!-- -->
+<!-- More documentation on keymaps can be found on http://kodi.wiki/view/keymaps -->
+<keymap>
+ <global>
+ <mouse>
+ <leftclick>leftclick</leftclick>
+ <rightclick>rightclick</rightclick>
+ <middleclick>middleclick</middleclick>
+ <doubleclick id="0">doubleclick</doubleclick>
+ <longclick id="0">contextmenu</longclick>
+ <longclick id="2">Menu</longclick> <!-- access to the blade menu via long right-click -->
+ <wheeldown>wheeldown</wheeldown>
+ <wheelup>wheelup</wheelup>
+ <mousedrag>mousedrag</mousedrag>
+ <mousedragend>mousedragend</mousedragend>
+ <mousemove>mousemove</mousemove>
+ </mouse>
+ </global>
+ <SlideShow>
+ <mouse>
+ <leftclick>Pause</leftclick>
+ <rightclick>PreviousMenu</rightclick>
+ <wheelup>PreviousPicture</wheelup>
+ <wheeldown>NextPicture</wheeldown>
+ </mouse>
+ </SlideShow>
+ <FullscreenVideo>
+ <mouse>
+ <rightclick>Info</rightclick>
+ </mouse>
+ </FullscreenVideo>
+ <FullscreenGame>
+ <mouse>
+ <rightclick>Info</rightclick>
+ </mouse>
+ </FullscreenGame>
+ <contextmenu> <!-- Give a way out of the context menu without actually having to select something. -->
+ <mouse>
+ <rightclick>back</rightclick>
+ </mouse>
+ </contextmenu>
+</keymap>
diff --git a/system/keymaps/nyxboard/keyboard.xml b/system/keymaps/nyxboard/keyboard.xml
new file mode 100644
index 0000000..d868419
--- /dev/null
+++ b/system/keymaps/nyxboard/keyboard.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Mappings for the Motorola Nyxboard remote -->
+<keymap>
+ <global>
+ <keyboard>
+ <home>ActivateWindow(Home)</home>
+ <f3>OSD</f3> <!-- EPG: same as Guide (ctrl-G) on MCE remote -->
+ <f3 mod="shift">ActivateWindow(videos)</f3> <!-- Red -->
+ <f4 mod="shift">ActivateWindow(music)</f4> <!-- Green -->
+ <f5 mod="shift">ActivateWindow(pictures)</f5> <!-- Yellow -->
+ <f6 mod="shift">ActivateWindow(programs)</f6> <!-- Blue -->
+ <f4>ContextMenu</f4> <!-- User button -->
+ </keyboard>
+ </global>
+</keymap>
diff --git a/system/keymaps/osmc/osmc_remote.xml b/system/keymaps/osmc/osmc_remote.xml
new file mode 100644
index 0000000..79f392e
--- /dev/null
+++ b/system/keymaps/osmc/osmc_remote.xml
@@ -0,0 +1,576 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- The second and third generation OSMC remotes use i and c keys that stop functioning with some keyboard languages in OSMC. -->
+<!-- We have remapped those keys in OSMC to kpleftparen and kprightparen with udev to overcome this issue. This file maps those keys to -->
+<!-- Kodi actions and adds tweaks to provide enhanced function. Home was remapped in v1&2 for consistency. The buttons map in Kodi as... -->
+<!-- -->
+<!-- OSMC with udev remap non-OSMCv1 non-OSMCv2 non-OSMCv3 -->
+<!-- Home = escape <key id="61467"> Home = home Home = home Home = escape -->
+<!-- Info = leftbracket <key id="61480"> Info = Info = i Info = i -->
+<!-- Up = up <key id="61568"> Up = up Up = up Up = up -->
+<!-- Down = down <key id="61569"> Down = down Down = down Down = down -->
+<!-- Left = left <key id="61570"> Left = left Left = left Left = left -->
+<!-- Right = right <key id="61571"> Right = right Right = right Right = right -->
+<!-- OK = return <key id="61453"> OK = return OK = return OK = return -->
+<!-- Back = browser_back <key id="61616"> Back = browser_back Back = browser_back Back = browser_back -->
+<!-- Menu = rightbracket <key id="61481"> Menu = Menu = c Menu = c -->
+<!-- Play = play_pause <key id="61629"> Play = play_pause Play = play_pause Play = play_pause -->
+<!-- Stop = stop <key id="61628"> Stop = stop Stop = stop Stop = stop -->
+<!-- Vol- = volume_down <key id="61624"> RW = rewind Vol- = minus Vol- = minus -->
+<!-- Vol+ = volume_up <key id="61625"> FF = fastforward Vol+ = equals Vol+ = equals -->
+<!-- -->
+<!-- Keymap created by DarwinDesign version 20-11-02 -->
+<!-- -->
+<keymap>
+ <global>
+ <keyboard>
+ <escape>PreviousMenu</escape>
+ <home>PreviousMenu</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ <leftbracket>Info</leftbracket>
+ <i>Info</i>
+ <leftbracket mod="longpress">noop</leftbracket> <!-- stops cycling -->
+ <i mod="longpress">noop</i> <!-- stops cycling -->
+ <left>Left</left>
+ <right>Right</right>
+ <up>Up</up>
+ <down>Down</down>
+ <return>Select</return>
+ <return mod="longpress">noop</return> <!-- removes default context menu & stops cycling -->
+ <browser_back>Back</browser_back>
+ <rightbracket>ContextMenu</rightbracket>
+ <c>ContextMenu</c>
+ <rightbracket mod="longpress">Menu</rightbracket>
+ <c mod="longpress">Menu</c>
+ <play_pause>PlayPause</play_pause>
+ <p>PlayPause</p>
+ <play_pause mod="longpress">noop</play_pause> <!-- removes default info & stops cycling -->
+ <p mod="longpress">noop</p>
+ <stop>Stop</stop>
+ <x>Stop</x>
+ <volume_down>VolumeDown</volume_down>
+ <volume_up>VolumeUp</volume_up>
+ <f2>Notification(OSMC Remote Controller, Low Battery Please Replace,5000)</f2>
+ </keyboard>
+ </global>
+ <Home>
+ <keyboard>
+ <escape>CECActivateSource</escape>
+ <home>CECActivateSource</home>
+ <escape mod="longpress">CECStandby</escape>
+ <home mod="longpress">CECStandby</home>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <browser_back mod="longpress">ActivateWindow(ShutdownMenu)</browser_back>
+ <return mod="longpress">ReloadSkin()</return>
+ <play_pause mod="longpress">UpdateLibrary(video)</play_pause>
+ <p mod="longpress">UpdateLibrary(video)</p>
+ </keyboard>
+ </Home>
+ <VirtualKeyboard>
+ <keyboard>
+ <rightbracket mod="longpress">noop</rightbracket>
+ <c mod="longpress">noop</c>
+ <up mod="longpress">Shift</up>
+ <down mod="longpress">Symbols</down>
+ <return mod="longpress">Enter</return>
+ </keyboard>
+ </VirtualKeyboard>
+ <FileManager>
+ <keyboard>
+ <right mod="longpress">Highlight</right>
+ <left mod="longpress">Highlight</left>
+ </keyboard>
+ </FileManager>
+ <FullscreenVideo>
+ <keyboard>
+ <escape>ActivateWindow(videobookmarks)</escape>
+ <home>ActivateWindow(videobookmarks)</home>
+ <escape mod="longpress">playerdebug</escape>
+ <home mod="longpress">playerdebug</home>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <return mod="longpress">Playlist</return>
+ <up mod="longpress">SkipNext</up>
+ <down mod="longpress">SkipPrevious</down>
+ <left mod="longpress">AudioDelay</left>
+ <right mod="longpress">subtitledelay</right>
+ <rightbracket>ActivateWindow(osdvideosettings)</rightbracket>
+ <c>ActivateWindow(osdvideosettings)</c>
+ <rightbracket mod="longpress">ActivateWindow(osdaudiosettings)</rightbracket>
+ <c mod="longpress">ActivateWindow(osdaudiosettings)</c>
+ <play_pause mod="longpress">showsubtitles</play_pause>
+ <p mod="longpress">showsubtitles</p>
+ <stop mod="longpress">ActivateWindow(osdsubtitlesettings)</stop>
+ <x mod="longpress">ActivateWindow(osdsubtitlesettings)</x>
+ </keyboard>
+ </FullscreenVideo>
+ <FullscreenGame>
+ <keyboard>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <rightbracket>OSD</rightbracket>
+ <c>OSD</c>
+ </keyboard>
+ </FullscreenGame>
+ <FullscreenInfo>
+ <keyboard>
+ <leftbracket>Back</leftbracket>
+ <i>Back</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <rightbracket>Back</rightbracket>
+ <c>Back</c>
+ </keyboard>
+ </FullscreenInfo>
+ <Visualisation>
+ <keyboard>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ <return mod="longpress">ActivateWindow(MusicPlaylist)</return>
+ <rightbracket>Addon.Default.OpenSettings(xbmc.player.musicviz)</rightbracket>
+ <c>Addon.Default.OpenSettings(xbmc.player.musicviz)</c>
+ <rightbracket mod="longpress">ActivateWindow(VisualisationPresetList)</rightbracket>
+ <c mod="longpress">ActivateWindow(VisualisationPresetList)</c>
+ <p/>
+ </keyboard>
+ </Visualisation>
+ <MusicOSD>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <return mod="longpress">back</return>
+ <rightbracket>Addon.Default.OpenSettings(xbmc.player.musicviz)</rightbracket>
+ <c>Addon.Default.OpenSettings(xbmc.player.musicviz)</c>
+ <rightbracket mod="longpress">ActivateWindow(VisualisationPresetList)</rightbracket>
+ <c mod="longpress">ActivateWindow(VisualisationPresetList)</c>
+ <p/>
+ </keyboard>
+ </MusicOSD>
+ <VisualisationPresetList>
+ <keyboard>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <rightbracket>back</rightbracket>
+ <c>back</c>
+ <p/>
+ </keyboard>
+ </VisualisationPresetList>
+ <slideshow>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <play_pause>pause</play_pause>
+ <p>pause</p>
+ <up mod="longpress">ZoomIn</up>
+ <down mod="longpress">ZoomOut</down>
+ <return mod="longpress">ZoomNormal</return>
+ <rightbracket></rightbracket> <!-- removes mapping from osmc-classic -->
+ </keyboard>
+ </slideshow>
+ <VideoOSD>
+ <keyboard>
+ <escape>ActivateWindow(videobookmarks)</escape>
+ <home>ActivateWindow(videobookmarks)</home>
+ <escape mod="longpress">playerdebug</escape>
+ <home mod="longpress">playerdebug</home>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <up mod="longpress">SkipNext</up>
+ <down mod="longpress">SkipPrevious</down>
+ <left mod="longpress">AudioDelay</left>
+ <right mod="longpress">subtitledelay</right>
+ <rightbracket>ActivateWindow(osdvideosettings)</rightbracket>
+ <return mod="longpress">back</return>
+ <c>ActivateWindow(osdvideosettings)</c>
+ <rightbracket mod="longpress">ActivateWindow(osdaudiosettings)</rightbracket>
+ <c mod="longpress">ActivateWindow(osdaudiosettings)</c>
+ <play_pause mod="longpress">showsubtitles</play_pause>
+ <p mod="longpress">showsubtitles</p>
+ <stop mod="longpress">ActivateWindow(osdsubtitlesettings)</stop>
+ <x mod="longpress">ActivateWindow(osdsubtitlesettings)</x>
+ </keyboard>
+ </VideoOSD>
+ <VideoMenu>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <rightbracket></rightbracket> <!-- removes mapping from osmc-classic -->
+ </keyboard>
+ </VideoMenu>
+ <OSDVideoSettings>
+ <keyboard>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <rightbracket>back</rightbracket>
+ <c>back</c>
+ <stop>back</stop>
+ <x>back</x>
+ </keyboard>
+ </OSDVideoSettings>
+ <OSDAudioSettings>
+ <keyboard>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <rightbracket>back</rightbracket>
+ <c>back</c>
+ <stop>back</stop>
+ <x>back</x>
+ </keyboard>
+ </OSDAudioSettings>
+ <osdsubtitlesettings>
+ <keyboard>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <rightbracket>back</rightbracket>
+ <c>back</c>
+ <stop>back</stop>
+ <x>back</x>
+ </keyboard>
+ </osdsubtitlesettings>
+ <VideoBookmarks>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ <rightbracket mod="longpress">back</rightbracket>
+ <c mod="longpress">back</c>
+ </keyboard>
+ </VideoBookmarks>
+ <Videos>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ <return mod="longpress">SendClick(14)</return> <!-- Toggle view between unwatched and all videos -->
+ <play_pause mod="longpress">togglewatched</play_pause>
+ <p mod="longpress">togglewatched</p>
+ </keyboard>
+ </Videos>
+ <VideoPlaylist>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ <return mod="longpress">Back</return>
+ </keyboard>
+ </VideoPlaylist>
+ <ContextMenu>
+ <keyboard>
+ <rightbracket>Back</rightbracket>
+ <c>Back</c>
+ </keyboard>
+ </ContextMenu>
+ <MusicInformation>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ <leftbracket>Back</leftbracket>
+ <i>Back</i>
+ <leftbracket mod="longpress">noop</leftbracket> <!-- stops cycling -->
+ <i mod="longpress">noop</i> <!-- stops cycling -->
+ <rightbracket>Back</rightbracket>
+ <c>Back</c>
+ </keyboard>
+ </MusicInformation>
+ <MusicPlaylist>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ <return mod="longpress">back</return>
+ </keyboard>
+ </MusicPlaylist>
+ <SongInformation>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ <leftbracket>Back</leftbracket>
+ <i>Back</i>
+ <leftbracket mod="longpress">noop</leftbracket> <!-- stops cycling -->
+ <i mod="longpress">noop</i> <!-- stops cycling -->
+ <rightbracket>Back</rightbracket>
+ <c>Back</c>
+ </keyboard>
+ </SongInformation>
+ <MovieInformation>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ <leftbracket>Back</leftbracket>
+ <i>Back</i>
+ <leftbracket mod="longpress">noop</leftbracket> <!-- stops cycling -->
+ <i mod="longpress">noop</i> <!-- stops cycling -->
+ <rightbracket>Back</rightbracket>
+ <c>Back</c>
+ </keyboard>
+ </MovieInformation>
+ <PictureInfo>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ <leftbracket>Back</leftbracket>
+ <i>Back</i>
+ <leftbracket mod="longpress">noop</leftbracket> <!-- stops cycling -->
+ <i mod="longpress">noop</i> <!-- stops cycling -->
+ <rightbracket>Back</rightbracket>
+ <c>Back</c>
+ </keyboard>
+ </PictureInfo>
+ <FullscreenLiveTV>
+ <keyboard>
+ <rightbracket>ActivateWindow(PVROSDChannels)</rightbracket>
+ <c>ActivateWindow(PVROSDChannels)</c>
+ <leftbracket>info</leftbracket>
+ <i>info</i>
+ <leftbracket mod="longpress">playerprocessinfo</leftbracket>
+ <i mod="longpress">playerprocessinfo</i>
+ <left mod="longpress">AudioDelay</left>
+ <right mod="longpress">subtitledelay</right>
+ <return mod="longpress">Record</return>
+ <play_pause mod="longpress">showsubtitles</play_pause>
+ <p mod="longpress">showsubtitles</p>
+ <stop mod="longpress">ActivateWindow(Teletext)</stop>
+ <x mod="longpress">ActivateWindow(Teletext)</x>
+ </keyboard>
+ </FullscreenLiveTV>
+ <TVGuide>
+ <keyboard>
+ <return mod="longpress">Record</return>
+ </keyboard>
+ </TVGuide>
+ <FullscreenRadio>
+ <keyboard>
+ <rightbracket>ActivateWindow(PVROSDChannels)</rightbracket>
+ <c>ActivateWindow(PVROSDChannels)</c>
+ </keyboard>
+ </FullscreenRadio>
+ <AddonInformation>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ <leftbracket>Back</leftbracket>
+ <i>Back</i>
+ <leftbracket mod="longpress">noop</leftbracket> <!-- stops cycling -->
+ <i mod="longpress">noop</i> <!-- stops cycling -->
+ <rightbracket>Back</rightbracket>
+ <c>Back</c>
+ </keyboard>
+ </AddonInformation>
+ <PlayerProcessInfo>
+ <keyboard>
+ <leftbracket>back</leftbracket>
+ <i>back</i>
+ <rightbracket>ActivateWindow(osdvideosettings)</rightbracket>
+ <c>ActivateWindow(osdvideosettings)</c>
+ <rightbracket mod="longpress">noop</rightbracket>
+ <c mod="longpress">noop</c>
+ <stop mod="longpress">ActivateWindow(osdsubtitlesettings)</stop>
+ <x mod="longpress">ActivateWindow(osdsubtitlesettings)</x>
+ </keyboard>
+ </PlayerProcessInfo>
+ <yesnodialog> <!-- Added to allow CEC when update dialog box appears -->
+ <keyboard>
+ <escape>CECActivateSource</escape>
+ <home>CECActivateSource</home>
+ <escape mod="longpress">CECStandby</escape>
+ <home mod="longpress">CECStandby</home>
+ </keyboard>
+ </yesnodialog>
+ <selectdialog>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ </keyboard>
+ </selectdialog>
+ <contextmenu>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ </keyboard>
+ </contextmenu>
+ <addonsettings>
+ <keyboard>
+ <escape>back</escape>
+ <home>back</home>
+ </keyboard>
+ </addonsettings>
+ <addonbrowser>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </addonbrowser>
+ <filemanager>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </filemanager>
+ <interfacesettings>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </interfacesettings>
+ <systeminfo>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </systeminfo>
+ <eventlog>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </eventlog>
+ <playersettings>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </playersettings>
+ <mediasettings>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </mediasettings>
+ <pvrsettings>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </pvrsettings>
+ <servicesettings>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </servicesettings>
+ <gamesettings>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </gamesettings>
+ <profiles>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </profiles>
+ <systemsettings>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </systemsettings>
+ <music>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </music>
+ <pictures>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </pictures>
+ <skinsettings>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </skinsettings>
+ <musicplaylisteditor>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </musicplaylisteditor>
+ <games>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </games>
+ <programs>
+ <keyboard>
+ <escape>ActivateWindow(Home)</escape>
+ <home>ActivateWindow(Home)</home>
+ <escape mod="longpress">fullscreen</escape>
+ <home mod="longpress">fullscreen</home>
+ </keyboard>
+ </programs>
+ </keymap>
diff --git a/system/keymaps/remote.xml b/system/keymaps/remote.xml
new file mode 100644
index 0000000..c122b99
--- /dev/null
+++ b/system/keymaps/remote.xml
@@ -0,0 +1,720 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of remote keys to actions within Kodi. -->
+<!-- -->
+<!-- The format is: -->
+<!-- <window> -->
+<!-- <device> -->
+<!-- <button>action</button> -->
+<!-- </device> -->
+<!-- </window> -->
+<!-- -->
+<!-- The <global> section is a fall through - they will only be used if the button is -->
+<!-- not used in the current window's section. -->
+<!-- -->
+<!-- Actions can be built-in functions. -->
+<!-- eg <B>ActivateWindow(Music)</B> -->
+<!-- would automatically go to Music on the press of the B button. -->
+<!-- -->
+<!-- An empty action removes the corresponding mapping from default and parent keymaps. -->
+<!-- This is different from a "noop" action, which disables a button. -->
+<!-- -->
+<!-- More documentation on keymaps can be found on http://kodi.wiki/view/keymaps -->
+<keymap>
+ <global>
+ <remote>
+ <play>PlayPause</play>
+ <pause>Pause</pause>
+ <stop>Stop</stop>
+ <forward>FastForward</forward>
+ <reverse>Rewind</reverse>
+ <left>Left</left>
+ <right>Right</right>
+ <up>Up</up>
+ <down>Down</down>
+ <select>Select</select>
+ <enter>FullScreen</enter>
+ <pageplus>PageUp</pageplus>
+ <pageminus>PageDown</pageminus>
+ <back>Back</back>
+ <menu>ContextMenu</menu>
+ <contentsmenu>PreviousMenu</contentsmenu>
+ <rootmenu>PreviousMenu</rootmenu>
+ <title>ContextMenu</title>
+ <info>Info</info>
+ <skipplus>SkipNext</skipplus>
+ <skipminus>SkipPrevious</skipminus>
+ <display>FullScreen</display>
+ <start>PreviousMenu</start>
+ <record>Record</record>
+ <eject>EjectTray()</eject>
+ <volumeplus>VolumeUp</volumeplus>
+ <volumeminus>VolumeDown</volumeminus>
+ <mute>Mute</mute>
+ <power>ShutDown()</power>
+ <myvideo>ActivateWindow(Videos)</myvideo>
+ <mymusic>ActivateWindow(Music)</mymusic>
+ <mypictures>ActivateWindow(Pictures)</mypictures>
+ <mytv>ActivateWindow(Videos,TvShows)</mytv>
+ <guide>ActivateWindow(TVGuide)</guide>
+ <livetv>ActivateWindow(TVChannels)</livetv>
+ <liveradio>ActivateWindow(RadioChannels)</liveradio>
+ <recordedtv>ActivateWindow(TVRecordings)</recordedtv>
+ <epgsearch>ActivateWindow(TVSearch)</epgsearch>
+ <red>ActivateWindow(TVChannels)</red>
+ <green>ActivateWindow(Videos)</green>
+ <yellow>ActivateWindow(Music)</yellow>
+ <blue>ActivateWindow(Pictures)</blue>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>JumpSMS2</two>
+ <three>JumpSMS3</three>
+ <four>JumpSMS4</four>
+ <five>JumpSMS5</five>
+ <six>JumpSMS6</six>
+ <seven>JumpSMS7</seven>
+ <eight>JumpSMS8</eight>
+ <nine>JumpSMS9</nine>
+ <print>Screenshot</print>
+ </remote>
+ </global>
+ <Home>
+ <remote>
+ <clear>ActivateWindow(Weather)</clear>
+ <hash>ActivateWindow(Settings)</hash>
+ </remote>
+ </Home>
+ <TVRecordings>
+ <remote>
+ <clear>Delete</clear>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </remote>
+ </TVRecordings>
+ <TVTimers>
+ <remote>
+ <clear>Delete</clear>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </remote>
+ </TVTimers>
+ <TVTimerRules>
+ <remote>
+ <clear>Delete</clear>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </remote>
+ </TVTimerRules>
+ <RadioRecordings>
+ <remote>
+ <clear>Delete</clear>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </remote>
+ </RadioRecordings>
+ <RadioTimers>
+ <remote>
+ <clear>Delete</clear>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </remote>
+ </RadioTimers>
+ <RadioTimerRules>
+ <remote>
+ <clear>Delete</clear>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </remote>
+ </RadioTimerRules>
+ <FileManager>
+ <remote>
+ <clear>Delete</clear>
+ <zero>Highlight</zero>
+ <star>Move</star>
+ <hash>Rename</hash>
+ </remote>
+ </FileManager>
+ <FileBrowser>
+ <remote>
+ <zero>Highlight</zero>
+ </remote>
+ </FileBrowser>
+ <MusicPlaylist>
+ <remote>
+ <clear>Delete</clear>
+ <zero>Delete</zero>
+ </remote>
+ </MusicPlaylist>
+ <MusicPlaylistEditor>
+ <remote>
+ <zero>Queue</zero>
+ </remote>
+ </MusicPlaylistEditor>
+ <Music>
+ <remote>
+ <zero>Queue</zero>
+ <star>Queue</star>
+ </remote>
+ </Music>
+ <Pictures>
+ <remote>
+ <clear>Delete</clear>
+ </remote>
+ </Pictures>
+ <FullscreenVideo>
+ <remote>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ <up>ChapterOrBigStepForward</up>
+ <down>ChapterOrBigStepBack</down>
+ <back>Back</back>
+ <menu>OSD</menu>
+ <contentsmenu>OSD</contentsmenu>
+ <rootmenu>OSD</rootmenu>
+ <start>OSD</start>
+ <select>OSD</select>
+ <title>PlayerProcessInfo</title>
+ <info>Info</info>
+ <guide>ActivateWindow(TVGuide)</guide>
+ <teletext>ActivateWindow(Teletext)</teletext>
+ <subtitle>NextSubtitle</subtitle>
+ <star>NextSubtitle</star>
+ <language>AudioNextLanguage</language>
+ <playlist>Playlist</playlist>
+ <hash>AudioNextLanguage</hash>
+ <pageplus>SkipNext</pageplus>
+ <pageminus>SkipPrevious</pageminus>
+ </remote>
+ </FullscreenVideo>
+ <FullscreenGame>
+ <remote>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ <back>Back</back>
+ <menu>OSD</menu>
+ <contentsmenu>OSD</contentsmenu>
+ <rootmenu>OSD</rootmenu>
+ <start>OSD</start>
+ <select>OSD</select>
+ <title>CodecInfo</title>
+ <info>Info</info>
+ </remote>
+ </FullscreenGame>
+ <VideoTimeSeek>
+ <remote>
+ <select>Select</select>
+ <enter>Select</enter>
+ </remote>
+ </VideoTimeSeek>
+ <FullscreenInfo>
+ <remote>
+ <title>PlayerProcessInfo</title>
+ <info>Back</info>
+ <menu>OSD</menu>
+ <contentsmenu>OSD</contentsmenu>
+ <rootmenu>OSD</rootmenu>
+ </remote>
+ </FullscreenInfo>
+ <PlayerControls>
+ <remote>
+ <menu>Back</menu>
+ <contentsmenu>Back</contentsmenu>
+ <rootmenu>Back</rootmenu>
+ </remote>
+ </PlayerControls>
+ <Visualisation>
+ <remote>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ <up>SkipNext</up>
+ <down>SkipPrevious</down>
+ <pageplus>IncreaseRating</pageplus>
+ <pageminus>DecreaseRating</pageminus>
+ <back>Back</back>
+ <title>PlayerProcessInfo</title>
+ <select>OSD</select>
+ <menu>OSD</menu>
+ <contentsmenu>OSD</contentsmenu>
+ <rootmenu>OSD</rootmenu>
+ <start>OSD</start>
+ <info>Info</info>
+ <guide>ActivateWindow(TVGuide)</guide>
+ <playlist>ActivateWindow(PVROSDChannels)</playlist>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ </remote>
+ </Visualisation>
+ <MusicOSD>
+ <remote>
+ <menu>Back</menu>
+ <contentsmenu>Back</contentsmenu>
+ <rootmenu>Back</rootmenu>
+ <title>Info</title>
+ <info>PlayerProcessInfo</info>
+ </remote>
+ </MusicOSD>
+ <VisualisationPresetList>
+ <remote>
+ <menu>Back</menu>
+ <contentsmenu>Back</contentsmenu>
+ <rootmenu>Back</rootmenu>
+ </remote>
+ </VisualisationPresetList>
+ <SlideShow>
+ <remote>
+ <zero>ZoomNormal</zero>
+ <one>ZoomLevel1</one>
+ <two>ZoomLevel2</two>
+ <three>ZoomLevel3</three>
+ <four>ZoomLevel4</four>
+ <five>ZoomLevel5</five>
+ <six>ZoomLevel6</six>
+ <seven>ZoomLevel7</seven>
+ <eight>ZoomLevel8</eight>
+ <nine>ZoomLevel9</nine>
+ <info>Info</info>
+ <skipplus>NextPicture</skipplus>
+ <skipminus>PreviousPicture</skipminus>
+ <title>Info</title>
+ <select>Rotate</select>
+ </remote>
+ </SlideShow>
+ <ScreenCalibration>
+ <remote>
+ <select>NextCalibration</select>
+ <zero>ResetCalibration</zero>
+ <display>NextResolution</display>
+ <xbox>NextResolution</xbox>
+ </remote>
+ </ScreenCalibration>
+ <ScreenCalibration>
+ <remote>
+ <select>NextCalibration</select>
+ <zero>ResetCalibration</zero>
+ </remote>
+ </ScreenCalibration>
+ <VideoOSD>
+ <remote>
+ <menu>Back</menu>
+ <contentsmenu>Back</contentsmenu>
+ <rootmenu>Back</rootmenu>
+ <start>Back</start>
+ </remote>
+ </VideoOSD>
+ <VideoMenu>
+ <remote>
+ <menu>OSD</menu>
+ <contentsmenu>OSD</contentsmenu>
+ <rootmenu>OSD</rootmenu>
+ <info>Info</info>
+ <title>PlayerProcessInfo</title>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <play>Select</play>
+ <pageplus>SkipNext</pageplus>
+ <pageminus>SkipPrevious</pageminus>
+ </remote>
+ </VideoMenu>
+ <OSDVideoSettings>
+ <remote>
+ <menu>Back</menu>
+ <contentsmenu>Back</contentsmenu>
+ <rootmenu>Back</rootmenu>
+ <start>Back</start>
+ </remote>
+ </OSDVideoSettings>
+ <OSDAudioSettings>
+ <remote>
+ <menu>Back</menu>
+ <contentsmenu>Back</contentsmenu>
+ <rootmenu>Back</rootmenu>
+ <start>Back</start>
+ </remote>
+ </OSDAudioSettings>
+ <VideoBookmarks>
+ <remote>
+ <menu>Back</menu>
+ <contentsmenu>Back</contentsmenu>
+ <rootmenu>Back</rootmenu>
+ <start>Back</start>
+ <zero>Delete</zero>
+ </remote>
+ </VideoBookmarks>
+ <Videos>
+ <remote>
+ <zero>Queue</zero>
+ <clear>Delete</clear>
+ </remote>
+ </Videos>
+ <VideoPlaylist>
+ <remote>
+ <clear>Delete</clear>
+ <zero>Delete</zero>
+ </remote>
+ </VideoPlaylist>
+ <VirtualKeyboard>
+ <remote>
+ <back>Back</back>
+ <star>Shift</star>
+ <hash>Symbols</hash>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <enter>Enter</enter>
+ <pageminus>CursorLeft</pageminus>
+ <pageplus>CursorRight</pageplus>
+ </remote>
+ </VirtualKeyboard>
+ <ContextMenu>
+ <remote>
+ <title>Back</title>
+ </remote>
+ </ContextMenu>
+ <Programs>
+ <remote>
+ <info>info</info>
+ </remote>
+ </Programs>
+ <NumericInput>
+ <remote>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <enter>Enter</enter>
+ <back>Back</back>
+ </remote>
+ </NumericInput>
+ <Weather>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </Weather>
+ <Settings>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </Settings>
+ <AddonBrowser>
+ <remote>
+ </remote>
+ </AddonBrowser>
+ <AddonInformation>
+ <remote>
+ <back>Close</back>
+ </remote>
+ </AddonInformation>
+ <AddonSettings>
+ <remote>
+ <back>Close</back>
+ </remote>
+ </AddonSettings>
+ <TextViewer>
+ <remote>
+ <back>Close</back>
+ </remote>
+ </TextViewer>
+ <PlayerSettings>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </PlayerSettings>
+ <MediaSettings>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </MediaSettings>
+ <SystemSettings>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </SystemSettings>
+ <ServiceSettings>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </ServiceSettings>
+ <InterfaceSettings>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </InterfaceSettings>
+ <Profiles>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </Profiles>
+ <systeminfo>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </systeminfo>
+ <shutdownmenu>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </shutdownmenu>
+ <submenu>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </submenu>
+ <MusicInformation>
+ <remote>
+ <info>Back</info>
+ </remote>
+ </MusicInformation>
+ <MovieInformation>
+ <remote>
+ <info>Back</info>
+ </remote>
+ </MovieInformation>
+ <LockSettings>
+ <remote>
+ <menu>Back</menu>
+ <contentsmenu>Back</contentsmenu>
+ <rootmenu>Back</rootmenu>
+ </remote>
+ </LockSettings>
+ <ProfileSettings>
+ <remote>
+ <menu>Back</menu>
+ <contentsmenu>Back</contentsmenu>
+ <rootmenu>Back</rootmenu>
+ </remote>
+ </ProfileSettings>
+ <PictureInfo>
+ <remote>
+ <skipplus>NextPicture</skipplus>
+ <skipminus>PreviousPicture</skipminus>
+ <info>Back</info>
+ </remote>
+ </PictureInfo>
+ <Teletext>
+ <remote>
+ <zero>number0</zero>
+ <one>number1</one>
+ <two>number2</two>
+ <three>number3</three>
+ <four>number4</four>
+ <five>number5</five>
+ <six>number6</six>
+ <seven>number7</seven>
+ <eight>number8</eight>
+ <nine>number9</nine>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ <info>Info</info>
+ <menu>Back</menu>
+ <contentsmenu>Back</contentsmenu>
+ <rootmenu>Back</rootmenu>
+ <start>Back</start>
+ <teletext>Back</teletext>
+ </remote>
+ </Teletext>
+ <Favourites>
+ <remote>
+ <back>Close</back>
+ </remote>
+ </Favourites>
+ <FullscreenLiveTV>
+ <remote>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ <up>Up</up>
+ <down>Down</down>
+ <pageplus>ChannelUp</pageplus>
+ <pageminus>ChannelDown</pageminus>
+ </remote>
+ </FullscreenLiveTV>
+ <FullscreenRadio>
+ <remote>
+ <left>StepBack</left>
+ <right>StepForward</right>
+ <up>Up</up>
+ <down>Down</down>
+ <pageplus>ChannelUp</pageplus>
+ <pageminus>ChannelDown</pageminus>
+ </remote>
+ </FullscreenRadio>
+ <FullscreenLiveTvPreview>
+ <remote>
+ <select>Select</select>
+ </remote>
+ </FullscreenLiveTvPreview>
+ <FullscreenRadioPreview>
+ <remote>
+ <select>Select</select>
+ </remote>
+ </FullscreenRadioPreview>
+ <FullscreenLiveTvInput>
+ <remote>
+ <select>Select</select>
+ </remote>
+ </FullscreenLiveTvInput>
+ <FullscreenRadioInput>
+ <remote>
+ <select>Select</select>
+ </remote>
+ </FullscreenRadioInput>
+ <PVROSDChannels>
+ <remote>
+ <back>Close</back>
+ <start>Close</start>
+ <playlist>Close</playlist>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>number2</two>
+ <three>number3</three>
+ <four>number4</four>
+ <five>number5</five>
+ <six>number6</six>
+ <seven>number7</seven>
+ <eight>number8</eight>
+ <nine>number9</nine>
+ </remote>
+ </PVROSDChannels>
+ <PVRChannelGuide>
+ <remote>
+ <back>Close</back>
+ <start>Close</start>
+ <guide>Close</guide>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>number2</two>
+ <three>number3</three>
+ <four>number4</four>
+ <five>number5</five>
+ <six>number6</six>
+ <seven>number7</seven>
+ <eight>number8</eight>
+ <nine>number9</nine>
+ </remote>
+ </PVRChannelGuide>
+ <TVChannels>
+ <remote>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>number2</two>
+ <three>number3</three>
+ <four>number4</four>
+ <five>number5</five>
+ <six>number6</six>
+ <seven>number7</seven>
+ <eight>number8</eight>
+ <nine>number9</nine>
+ </remote>
+ </TVChannels>
+ <TVGuide>
+ <remote>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>number2</two>
+ <three>number3</three>
+ <four>number4</four>
+ <five>number5</five>
+ <six>number6</six>
+ <seven>number7</seven>
+ <eight>number8</eight>
+ <nine>number9</nine>
+ </remote>
+ </TVGuide>
+ <RadioChannels>
+ <remote>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>number2</two>
+ <three>number3</three>
+ <four>number4</four>
+ <five>number5</five>
+ <six>number6</six>
+ <seven>number7</seven>
+ <eight>number8</eight>
+ <nine>number9</nine>
+ </remote>
+ </RadioChannels>
+ <RadioGuide>
+ <remote>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>number2</two>
+ <three>number3</three>
+ <four>number4</four>
+ <five>number5</five>
+ <six>number6</six>
+ <seven>number7</seven>
+ <eight>number8</eight>
+ <nine>number9</nine>
+ </remote>
+ </RadioGuide>
+ <PVRSettings>
+ <remote>
+ <back>PreviousMenu</back>
+ </remote>
+ </PVRSettings>
+ <Addon>
+ <remote>
+ <red>Red</red>
+ <green>Green</green>
+ <yellow>Yellow</yellow>
+ <blue>Blue</blue>
+ </remote>
+ </Addon>
+ <PlayerProcessInfo>
+ <remote>
+ <title>PlayerProcessInfo</title>
+ </remote>
+ </PlayerProcessInfo>
+</keymap>
diff --git a/system/keymaps/touchscreen.xml b/system/keymaps/touchscreen.xml
new file mode 100644
index 0000000..56a42c8
--- /dev/null
+++ b/system/keymaps/touchscreen.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file contains the mapping of touch gestures to actions within Kodi. -->
+<!-- -->
+<!-- The format is: -->
+<!-- <window> -->
+<!-- <device> -->
+<!-- <gesture>action</gesture> -->
+<!-- </device> -->
+<!-- </window> -->
+<!-- -->
+<!-- The <global> section is a fall through - they will only be used if the button is -->
+<!-- not used in the current window's section. -->
+<!-- -->
+<!-- Actions can be built-in functions. -->
+<!-- eg <tap pointers="2">ActivateWindow(Music)</tap> -->
+<!-- would automatically go to Music when two fingers tap the screen at once. -->
+<!-- -->
+<!-- -->
+<!-- An empty action removes the corresponding mapping from default and parent keymaps. -->
+<!-- This is different from a "noop" action, which disables a button. -->
+<!-- -->
+<!-- More documentation on keymaps can be found on http://kodi.wiki/view/keymaps -->
+<keymap>
+ <global>
+ <touch>
+ <tap>LeftClick</tap>
+ <longpress>RightClick</longpress>
+ <tap pointers="2">RightClick</tap>
+ <pan>PanGesture</pan>
+ <swipe direction="left">SwipeLeft</swipe>
+ <swipe direction="left" pointers="2">Back</swipe>
+ <swipe direction="right">SwipeRight</swipe>
+ <swipe direction="right" pointers="2">Menu</swipe> <!-- Easier access to the side blade menu on touchscreens. -->
+ <swipe direction="up">SwipeUp</swipe>
+ <swipe direction="down">SwipeDown</swipe>
+ <swipe direction="up" pointers="3">SwitchPlayer</swipe>
+ <swipe direction="down" pointers="3">ActivateWindow(PlayerControls)</swipe>
+ </touch>
+ </global>
+ <FileManager>
+ <touch>
+ <tap>Select</tap>
+ <swipe direction="left">Highlight</swipe>
+ <swipe direction="right">Highlight</swipe>
+ </touch>
+ </FileManager>
+ <FullScreenVideo>
+ <touch>
+ <swipe direction="left">StepBack</swipe>
+ <swipe direction="right">StepForward</swipe>
+ <swipe direction="up">ChapterOrBigStepForward</swipe>
+ <swipe direction="down">ChapterOrBigStepBack</swipe>
+ <swipe direction="up" pointers="2">SkipNext</swipe>
+ <swipe direction="down" pointers="2">SkipPrevious</swipe>
+ <tap pointers="2">Playlist</tap>
+ <tap pointers="3">PlayPause</tap>
+ </touch>
+ </FullScreenVideo>
+ <FullScreenGame>
+ <touch>
+ <swipe direction="left">StepBack</swipe>
+ <swipe direction="right">StepForward</swipe>
+ <swipe direction="left" pointers="2">Seek(-7)</swipe>
+ <tap pointers="3">PlayPause</tap>
+ </touch>
+ </FullScreenGame>
+ <PlayerControls>
+ <touch>
+ <swipe direction="down" pointers="3">Back</swipe>
+ </touch>
+ </PlayerControls>
+ <Visualisation>
+ <touch>
+ <swipe direction="left">StepBack</swipe>
+ <swipe direction="right">StepForward</swipe>
+ <swipe direction="up">SkipNext</swipe>
+ <swipe direction="down">SkipPrevious</swipe>
+ <swipe direction="up" pointers="2">SkipNext</swipe>
+ <swipe direction="down" pointers="2">SkipPrevious</swipe>
+ <tap pointers="2">Playlist</tap>
+ <tap pointers="3">PlayPause</tap>
+ </touch>
+ </Visualisation>
+ <SlideShow>
+ <touch>
+ <zoom>ZoomGesture</zoom>
+ <rotate>RotateGesture</rotate>
+ <swipe direction="right" pointers="2">PreviousPicture</swipe> <!-- right/left are flipped here to make picture flipping feel more natural on touch screens. Two pointers are used in order to avoid conflicting with the panning gesture on zoomed-in images. -->
+ <swipe direction="left" pointers="2">NextPicture</swipe>
+ <tap pointers="2">Pause</tap>
+ <tap pointers="3">Info</tap>
+ <longpress>Back</longpress>
+ </touch>
+ </SlideShow>
+ <ScreenCalibration>
+ <touch>
+ <swipe direction="up">Up</swipe>
+ <swipe direction="down">Down</swipe>
+ <swipe direction="right">Right</swipe>
+ <swipe direction="left">Left</swipe>
+ <tap pointers="1">NextCalibration</tap>
+ </touch>
+ </ScreenCalibration>
+ <VideoMenu>
+ <touch>
+ <swipe direction="up" pointers="2">SkipNext</swipe>
+ <swipe direction="down" pointers="2">SkipPrevious</swipe>
+ </touch>
+ </VideoMenu>
+ <ContextMenu>
+ <touch>
+ <swipe direction="left" pointers="3">Back</swipe> <!-- backs out of "switch player" -->
+ <swipe direction="right" pointers="3">Back</swipe>
+ </touch>
+ </ContextMenu>
+ <PictureInfo>
+ <touch>
+ <tap pointers="3">Back</tap>
+ </touch>
+ </PictureInfo>
+ <FullScreenLiveTV>
+ <touch>
+ <swipe direction="up">Up</swipe>
+ <swipe direction="down">Down</swipe>
+ </touch>
+ </FullScreenLiveTV>
+ <FullScreenRadio>
+ <touch>
+ <swipe direction="up">ChannelUp</swipe>
+ <swipe direction="down">ChannelDown</swipe>
+ </touch>
+ </FullScreenRadio>
+</keymap>
diff --git a/system/keymaps/wetek-play/keyboard.xml b/system/keymaps/wetek-play/keyboard.xml
new file mode 100644
index 0000000..2a8edc5
--- /dev/null
+++ b/system/keymaps/wetek-play/keyboard.xml
@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<keymap>
+ <Global>
+ <keyboard>
+ <play_pause>Playpause</play_pause>
+ <play_pause mod="longpress">Info</play_pause>
+ <f2>ActivateWindow(TVGuide)</f2>
+ <f3>ActivateWindow(Home)</f3>
+ <f4>ContextMenu</f4>
+ <f4 mod="longpress">Menu</f4>
+ <f6>Info</f6>
+ <f6 mod="longpress">Playpause</f6>
+ <f7>ContextMenu</f7>
+ <f7 mod="longpress">Menu</f7>
+ <f11>ShowSubtitles</f11>
+ <escape>Back</escape>
+ <escape mod="longpress">ActivateWindow(Home)</escape>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>JumpSMS2</two>
+ <three>JumpSMS3</three>
+ <four>JumpSMS4</four>
+ <five>JumpSMS5</five>
+ <six>JumpSMS6</six>
+ <seven>JumpSMS7</seven>
+ <eight>JumpSMS8</eight>
+ <nine>JumpSMS9</nine>
+ </keyboard>
+ </Global>
+ <Home>
+ <keyboard>
+ <backspace>ActivateWindow(FavouritesBrowser)</backspace>
+ <backspace mod="longpress">ActivateWindow(ShutdownMenu)</backspace>
+ <browser_back>ActivateWindow(FavouritesBrowser)</browser_back>
+ <browser_back mod="longpress">ActivateWindow(ShutdownMenu)</browser_back>
+ <escape>ActivateWindow(FavouritesBrowser)</escape>
+ <escape mod="longpress">ActivateWindow(ShutdownMenu)</escape>
+ </keyboard>
+ </Home>
+ <FullscreenVideo>
+ <keyboard>
+ <f4>Playlist</f4>
+ <f7>Playlist</f7>
+ <escape>Stop</escape>
+ <escape mod="longpress">Fullscreen</escape>
+ <backspace>Stop</backspace>
+ <backspace mod="longpress">Fullscreen</backspace>
+ <browser_back>Stop</browser_back>
+ <browser_back mod="longpress">Fullscreen</browser_back>
+ <return>PlayPause</return>
+ <return mod="longpress">OSD</return>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <backspace mod="longpress">FullScreen</backspace>
+ <browser_back mod="longpress">FullScreen</browser_back>
+ <escape mod="longpress">FullScreen</escape>
+ <up mod="longpress">SkipNext</up>
+ <down mod="longpress">SkipPrevious</down>
+ <left mod="longpress">Rewind</left>
+ <right mod="longpress">FastForward</right>
+ </keyboard>
+ </FullscreenVideo>
+ <Visualisation>
+ <keyboard>
+ <f4>Playlist</f4>
+ <f7>Playlist</f7>
+ <return>PlayPause</return>
+ <return mod="longpress">OSD</return>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <backspace mod="longpress">Stop</backspace>
+ <browser_back mod="longpress">Stop</browser_back>
+ <escape mod="longpress">Stop</escape>
+ </keyboard>
+ </Visualisation>
+ <VirtualKeyboard>
+ <keyboard>
+ <f1>Backspace</f1>
+ <f2>Shift</f2>
+ <f6>Enter</f6>
+ <play_pause>Enter</play_pause>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <backspace>Backspace</backspace>
+ <browser_back>PreviousMenu</browser_back>
+ <escape>PreviousMenu</escape>
+ </keyboard>
+ </VirtualKeyboard>
+ <VideoMenu>
+ <keyboard>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <return mod="longpress">OSD</return>
+ <enter mod="longpress">OSD</enter>
+ </keyboard>
+ </VideoMenu>
+ <NumericInput>
+ <keyboard>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ </keyboard>
+ </NumericInput>
+ <Teletext>
+ <keyboard>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ </keyboard>
+ </Teletext>
+ <VideoOSD>
+ <keyboard>
+ <return mod="longpress">Back</return>
+ <enter mod="longpress">Back</enter>
+ </keyboard>
+ </VideoOSD>
+ <ContextMenu>
+ <keyboard>
+ <f4>Back</f4>
+ <f7>Back</f7>
+ </keyboard>
+ </ContextMenu>
+ <PVROSDChannels>
+ <keyboard>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ <f4>Close</f4>
+ <f7>Close</f7>
+ </keyboard>
+ </PVROSDChannels>
+ <TVChannels>
+ <keyboard>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ </keyboard>
+ </TVChannels>
+ <PVRChannelGuide>
+ <keyboard>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ </keyboard>
+ </PVRChannelGuide>
+ <TVGuide>
+ <keyboard>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ </keyboard>
+ </TVGuide>
+ <RadioChannels>
+ <keyboard>
+ <zero>Number0</zero>
+ <one>Number1</one>
+ <two>Number2</two>
+ <three>Number3</three>
+ <four>Number4</four>
+ <five>Number5</five>
+ <six>Number6</six>
+ <seven>Number7</seven>
+ <eight>Number8</eight>
+ <nine>Number9</nine>
+ </keyboard>
+ </RadioChannels>
+ <FullscreenLiveTV>
+ <keyboard>
+ <return>OSD</return>
+ <enter>OSD</enter>
+ </keyboard>
+ </FullscreenLiveTV>
+ <FullscreenRadio>
+ <keyboard>
+ <return>OSD</return>
+ <enter>OSD</enter>
+ </keyboard>
+ </FullscreenRadio>
+ <SlideShow>
+ <keyboard>
+ <up>ZoomIn</up>
+ <down>ZoomOut</down>
+ <left>PreviousPicture</left>
+ <right>NextPicture</right>
+ <up mod="longpress">Up</up> <!-- Longpress on direction keys for panning when zoomed in -->
+ <down mod="longpress">Down</down>
+ <left mod="longpress">Left</left>
+ <right mod="longpress">Right</right>
+ <backspace>Stop</backspace>
+ <browser_back>Stop</browser_back>
+ <return mod="longpress">Info</return>
+ <enter mod="longpress">Info</enter>
+ </keyboard>
+ </SlideShow>
+ <FileManager>
+ <keyboard>
+ <right mod="longpress">Highlight</right>
+ <left mod="longpress">Highlight</left>
+ </keyboard>
+ </FileManager>
+</keymap>
diff --git a/system/library/music/addons.xml b/system/library/music/addons.xml
new file mode 100644
index 0000000..2514d23
--- /dev/null
+++ b/system/library/music/addons.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="150" type="folder">
+ <label>1038</label>
+ <icon>DefaultAddonMusic.png</icon>
+ <path>addons://sources/audio/</path>
+</node>
diff --git a/system/library/music/albums.xml b/system/library/music/albums.xml
new file mode 100644
index 0000000..4c0e8d6
--- /dev/null
+++ b/system/library/music/albums.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="30" type="filter" visible="Library.HasContent(Music)">
+ <label>132</label>
+ <icon>DefaultMusicAlbums.png</icon>
+ <content>albums</content>
+</node>
diff --git a/system/library/music/artists.xml b/system/library/music/artists.xml
new file mode 100644
index 0000000..9372593
--- /dev/null
+++ b/system/library/music/artists.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="20" type="filter" visible="Library.HasContent(Music)">
+ <label>133</label>
+ <icon>DefaultMusicArtists.png</icon>
+ <content>artists</content>
+</node>
diff --git a/system/library/music/boxsets.xml b/system/library/music/boxsets.xml
new file mode 100644
index 0000000..e7f36e2
--- /dev/null
+++ b/system/library/music/boxsets.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="99" type="folder" visible="Library.HasContent(Boxsets)">
+ <label>38074</label>
+ <icon>DefaultSets.png</icon>
+ <path>musicdb://albums/?boxset=true</path>
+</node>
diff --git a/system/library/music/compilations.xml b/system/library/music/compilations.xml
new file mode 100644
index 0000000..8e9879a
--- /dev/null
+++ b/system/library/music/compilations.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="100" type="folder" visible="Library.HasContent(Compilations)">
+ <label>521</label>
+ <icon>DefaultMusicCompilations.png</icon>
+ <path>musicdb://albums/?compilation=true</path>
+</node>
diff --git a/system/library/music/files.xml b/system/library/music/files.xml
new file mode 100644
index 0000000..cb8f799
--- /dev/null
+++ b/system/library/music/files.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="140" type="folder">
+ <label>744</label>
+ <icon>DefaultFolder.png</icon>
+ <path>sources://music/</path>
+</node>
diff --git a/system/library/music/genres.xml b/system/library/music/genres.xml
new file mode 100644
index 0000000..e5eb7e4
--- /dev/null
+++ b/system/library/music/genres.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="10" type="filter" visible="Library.HasContent(Music)">
+ <label>135</label>
+ <icon>DefaultMusicGenres.png</icon>
+ <content>artists</content>
+ <group>genres</group>
+</node>
diff --git a/system/library/music/musicroles/albumartists.xml b/system/library/music/musicroles/albumartists.xml
new file mode 100644
index 0000000..3a3b076
--- /dev/null
+++ b/system/library/music/musicroles/albumartists.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="80" type="folder">
+ <label>38043</label>
+ <icon>DefaultMusicArtists.png</icon>
+ <path>musicdb://artists/?albumartistsonly=true</path>
+</node>
diff --git a/system/library/music/musicroles/allartists.xml b/system/library/music/musicroles/allartists.xml
new file mode 100644
index 0000000..22beac1
--- /dev/null
+++ b/system/library/music/musicroles/allartists.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="90" type="folder">
+ <label>38044</label>
+ <icon>DefaultMusicArtists.png</icon>
+ <path>musicdb://artists/?albumartistsonly=false</path>
+</node>
diff --git a/system/library/music/musicroles/allcontributors.xml b/system/library/music/musicroles/allcontributors.xml
new file mode 100644
index 0000000..7eaad39
--- /dev/null
+++ b/system/library/music/musicroles/allcontributors.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="100" type="folder">
+ <label>38045</label>
+ <icon>DefaultMusicArtists.png</icon>
+ <path>musicdb://artists/?roleid=-1000&amp;albumartistsonly=false</path>
+</node>
diff --git a/system/library/music/musicroles/allroles.xml b/system/library/music/musicroles/allroles.xml
new file mode 100644
index 0000000..19f5840
--- /dev/null
+++ b/system/library/music/musicroles/allroles.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="110" type="folder">
+ <label>38046</label>
+ <icon>DefaultMusicRoles.png</icon>
+ <path>musicdb://roles/?albumartistsonly=false</path>
+</node>
diff --git a/system/library/music/musicroles/arrangers.xml b/system/library/music/musicroles/arrangers.xml
new file mode 100644
index 0000000..09d43e6
--- /dev/null
+++ b/system/library/music/musicroles/arrangers.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="50" type="folder" visible="Library.HasContent(Role, Arranger)">
+ <label>29988</label>
+ <icon>DefaultMusicGenres.png</icon>
+ <path>musicdb://artists/?role=Arranger&amp;albumartistsonly=false</path>
+</node>
diff --git a/system/library/music/musicroles/composers.xml b/system/library/music/musicroles/composers.xml
new file mode 100644
index 0000000..752be53
--- /dev/null
+++ b/system/library/music/musicroles/composers.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="10" type="folder" visible="Library.HasContent(Role, Composer)">
+ <label>29989</label>
+ <icon>DefaultMusicGenres.png</icon>
+ <path>musicdb://artists/?role=Composer&amp;albumartistsonly=false</path>
+</node>
diff --git a/system/library/music/musicroles/conductors.xml b/system/library/music/musicroles/conductors.xml
new file mode 100644
index 0000000..67fac18
--- /dev/null
+++ b/system/library/music/musicroles/conductors.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="20" type="folder" visible="Library.HasContent(Role, Conductor)">
+ <label>29990</label>
+ <icon>DefaultMusicGenres.png</icon>
+ <path>musicdb://artists/?role=Conductor&amp;albumartistsonly=false</path>
+</node>
diff --git a/system/library/music/musicroles/djmixers.xml b/system/library/music/musicroles/djmixers.xml
new file mode 100644
index 0000000..b58d36d
--- /dev/null
+++ b/system/library/music/musicroles/djmixers.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="60" type="folder" visible="Library.HasContent(Role, DJMixer)">
+ <label>29991</label>
+ <icon>DefaultMusicGenres.png</icon>
+ <path>musicdb://artists/?role=DJMixer&amp;albumartistsonly=false</path>
+</node>
diff --git a/system/library/music/musicroles/index.xml b/system/library/music/musicroles/index.xml
new file mode 100644
index 0000000..e13b3df
--- /dev/null
+++ b/system/library/music/musicroles/index.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="130" type="folder" visible="Library.HasContent(Music)">
+ <label>29994</label>
+ <icon>DefaultMusicRoles.png</icon>
+</node>
diff --git a/system/library/music/musicroles/lyricists.xml b/system/library/music/musicroles/lyricists.xml
new file mode 100644
index 0000000..b821adc
--- /dev/null
+++ b/system/library/music/musicroles/lyricists.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="40" type="folder" visible="Library.HasContent(Role, Lyricist)">
+ <label>29992</label>
+ <icon>DefaultMusicGenres.png</icon>
+ <path>musicdb://artists/?role=Lyricist&amp;albumartistsonly=false</path>
+</node>
diff --git a/system/library/music/musicroles/orchestras.xml b/system/library/music/musicroles/orchestras.xml
new file mode 100644
index 0000000..a7fe0fa
--- /dev/null
+++ b/system/library/music/musicroles/orchestras.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="30" type="folder" visible="Library.HasContent(Role, Orchestra)">
+ <label>29993</label>
+ <icon>DefaultMusicGenres.png</icon>
+ <path>musicdb://artists/?role=Orchestra&amp;albumartistsonly=false</path>
+</node>
diff --git a/system/library/music/musicroles/remixers.xml b/system/library/music/musicroles/remixers.xml
new file mode 100644
index 0000000..b42003a
--- /dev/null
+++ b/system/library/music/musicroles/remixers.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<node order="70" type="folder" visible="Library.HasContent(Role, Remixer)">
+ <label>29987</label>
+ <icon>DefaultMusicGenres.png</icon>
+ <path>musicdb://artists/?role=Remixer&amp;albumartistsonly=false</path>
+</node>
diff --git a/system/library/music/musicvideos/albums.xml b/system/library/music/musicvideos/albums.xml
new file mode 100644
index 0000000..1a5800f
--- /dev/null
+++ b/system/library/music/musicvideos/albums.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="50" type="filter">
+ <label>132</label>
+ <icon>DefaultMusicAlbums.png</icon>
+ <content>musicvideos</content>
+ <group>albums</group>
+</node>
diff --git a/system/library/music/musicvideos/artists.xml b/system/library/music/musicvideos/artists.xml
new file mode 100644
index 0000000..4a1697f
--- /dev/null
+++ b/system/library/music/musicvideos/artists.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="40" type="filter">
+ <label>133</label>
+ <icon>DefaultMusicArtists.png</icon>
+ <content>musicvideos</content>
+ <group>artists</group>
+</node>
diff --git a/system/library/music/musicvideos/directors.xml b/system/library/music/musicvideos/directors.xml
new file mode 100644
index 0000000..2c8c005
--- /dev/null
+++ b/system/library/music/musicvideos/directors.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="60" type="filter">
+ <label>20348</label>
+ <icon>DefaultDirector.png</icon>
+ <content>musicvideos</content>
+ <group>directors</group>
+</node>
diff --git a/system/library/music/musicvideos/genres.xml b/system/library/music/musicvideos/genres.xml
new file mode 100644
index 0000000..597be8e
--- /dev/null
+++ b/system/library/music/musicvideos/genres.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="10" type="filter">
+ <label>135</label>
+ <icon>DefaultGenre.png</icon>
+ <content>musicvideos</content>
+ <group>genres</group>
+</node>
diff --git a/system/library/music/musicvideos/index.xml b/system/library/music/musicvideos/index.xml
new file mode 100644
index 0000000..bca6360
--- /dev/null
+++ b/system/library/music/musicvideos/index.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="110" visible="Library.HasContent(MusicVideos)">
+ <label>20389</label>
+ <icon>DefaultMusicVideos.png</icon>
+</node>
diff --git a/system/library/music/musicvideos/studios.xml b/system/library/music/musicvideos/studios.xml
new file mode 100644
index 0000000..83b9bb1
--- /dev/null
+++ b/system/library/music/musicvideos/studios.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="70" type="filter">
+ <label>20388</label>
+ <icon>DefaultStudios.png</icon>
+ <content>musicvideos</content>
+ <group>studios</group>
+</node>
diff --git a/system/library/music/musicvideos/tags.xml b/system/library/music/musicvideos/tags.xml
new file mode 100644
index 0000000..a53de4c
--- /dev/null
+++ b/system/library/music/musicvideos/tags.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="80" type="filter">
+ <label>20459</label>
+ <icon>DefaultTags.png</icon>
+ <content>musicvideos</content>
+ <group>tags</group>
+</node>
diff --git a/system/library/music/musicvideos/titles.xml b/system/library/music/musicvideos/titles.xml
new file mode 100644
index 0000000..6d57aed
--- /dev/null
+++ b/system/library/music/musicvideos/titles.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="20" type="filter">
+ <label>10024</label>
+ <icon>DefaultMusicVideoTitle.png</icon>
+ <content>musicvideos</content>
+ <order direction="ascending">title</order>
+</node>
diff --git a/system/library/music/musicvideos/years.xml b/system/library/music/musicvideos/years.xml
new file mode 100644
index 0000000..61348da
--- /dev/null
+++ b/system/library/music/musicvideos/years.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="30" type="filter">
+ <label>652</label>
+ <icon>DefaultYear.png</icon>
+ <content>musicvideos</content>
+ <group>years</group>
+</node>
diff --git a/system/library/music/playlists.xml b/system/library/music/playlists.xml
new file mode 100644
index 0000000..751abc5
--- /dev/null
+++ b/system/library/music/playlists.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="120" type="folder">
+ <label>136</label>
+ <icon>DefaultMusicPlaylists.png</icon>
+ <path>special://musicplaylists/</path>
+</node>
diff --git a/system/library/music/recentlyaddedalbums.xml b/system/library/music/recentlyaddedalbums.xml
new file mode 100644
index 0000000..c17bdda
--- /dev/null
+++ b/system/library/music/recentlyaddedalbums.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="80" type="folder" visible="Library.HasContent(Music)">
+ <label>359</label>
+ <icon>DefaultMusicRecentlyAdded.png</icon>
+ <path>musicdb://recentlyaddedalbums/</path>
+</node>
diff --git a/system/library/music/recentlyplayedalbums.xml b/system/library/music/recentlyplayedalbums.xml
new file mode 100644
index 0000000..0359e2d
--- /dev/null
+++ b/system/library/music/recentlyplayedalbums.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="90" type="folder" visible="Library.HasContent(Music)">
+ <label>517</label>
+ <icon>DefaultMusicRecentlyPlayed.png</icon>
+ <path>musicdb://recentlyplayedalbums/</path>
+</node>
diff --git a/system/library/music/singles.xml b/system/library/music/singles.xml
new file mode 100644
index 0000000..aa99bcc
--- /dev/null
+++ b/system/library/music/singles.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="40" type="folder" visible="Library.HasContent(Singles)">
+ <label>1050</label>
+ <icon>DefaultMusicSongs.png</icon>
+ <path>musicdb://singles/</path>
+</node>
diff --git a/system/library/music/songs.xml b/system/library/music/songs.xml
new file mode 100644
index 0000000..2f3d23f
--- /dev/null
+++ b/system/library/music/songs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="50" type="filter" visible="Library.HasContent(Music)">
+ <label>134</label>
+ <icon>DefaultMusicSongs.png</icon>
+ <content>songs</content>
+</node>
diff --git a/system/library/music/sources.xml b/system/library/music/sources.xml
new file mode 100644
index 0000000..49ff0d6
--- /dev/null
+++ b/system/library/music/sources.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="135" type="folder">
+ <label>39031</label>
+ <icon>DefaultMusicSources.png</icon>
+ <path>musicdb://sources</path>
+</node>
diff --git a/system/library/music/top100/index.xml b/system/library/music/top100/index.xml
new file mode 100644
index 0000000..b8737a2
--- /dev/null
+++ b/system/library/music/top100/index.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="70" type="folder" visible="Library.HasContent(Music)">
+ <label>271</label>
+ <icon>DefaultMusicTop100.png</icon>
+</node>
diff --git a/system/library/music/top100/top100albums.xml b/system/library/music/top100/top100albums.xml
new file mode 100644
index 0000000..36d69db
--- /dev/null
+++ b/system/library/music/top100/top100albums.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="20" type="filter">
+ <label>10505</label>
+ <icon>DefaultMusicTop100Albums.png</icon>
+ <content>albums</content>
+ <match>all</match>
+ <rule field="playcount" operator="greaterthan">
+ <value>0</value>
+ </rule>
+ <limit>100</limit>
+ <order direction="descending">playcount</order>
+</node>
diff --git a/system/library/music/top100/top100songs.xml b/system/library/music/top100/top100songs.xml
new file mode 100644
index 0000000..c5aba9a
--- /dev/null
+++ b/system/library/music/top100/top100songs.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="10" type="filter">
+ <label>10504</label>
+ <icon>DefaultMusicTop100Songs.png</icon>
+ <content>songs</content>
+ <match>all</match>
+ <rule field="playcount" operator="greaterthan">
+ <value>0</value>
+ </rule>
+ <limit>100</limit>
+ <order direction="descending">playcount</order>
+</node>
diff --git a/system/library/music/years.xml b/system/library/music/years.xml
new file mode 100644
index 0000000..55016ad
--- /dev/null
+++ b/system/library/music/years.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="60" type="filter" visible="Library.HasContent(Music)">
+ <label>652</label>
+ <icon>DefaultMusicYears.png</icon>
+ <content>albums</content>
+ <group>years</group>
+</node>
diff --git a/system/library/video/addons.xml b/system/library/video/addons.xml
new file mode 100644
index 0000000..5d3fb42
--- /dev/null
+++ b/system/library/video/addons.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="60" type="folder">
+ <label>1037</label>
+ <icon>DefaultAddonVideo.png</icon>
+ <path>addons://sources/video/</path>
+</node>
diff --git a/system/library/video/files.xml b/system/library/video/files.xml
new file mode 100644
index 0000000..398fd53
--- /dev/null
+++ b/system/library/video/files.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="40" type="folder">
+ <label>744</label>
+ <icon>DefaultFolder.png</icon>
+ <path>sources://video/</path>
+</node>
diff --git a/system/library/video/movies/actors.xml b/system/library/video/movies/actors.xml
new file mode 100644
index 0000000..d07f08b
--- /dev/null
+++ b/system/library/video/movies/actors.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="50" type="filter">
+ <label>344</label>
+ <icon>DefaultActor.png</icon>
+ <content>movies</content>
+ <group>actors</group>
+</node>
+
diff --git a/system/library/video/movies/country.xml b/system/library/video/movies/country.xml
new file mode 100644
index 0000000..55014fb
--- /dev/null
+++ b/system/library/video/movies/country.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="90" type="filter">
+ <label>20451</label>
+ <icon>DefaultCountry.png</icon>
+ <content>movies</content>
+ <group>countries</group>
+</node>
diff --git a/system/library/video/movies/directors.xml b/system/library/video/movies/directors.xml
new file mode 100644
index 0000000..88c739a
--- /dev/null
+++ b/system/library/video/movies/directors.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="60" type="filter">
+ <label>20348</label>
+ <icon>DefaultDirector.png</icon>
+ <content>movies</content>
+ <group>directors</group>
+</node>
diff --git a/system/library/video/movies/genres.xml b/system/library/video/movies/genres.xml
new file mode 100644
index 0000000..1baa40e
--- /dev/null
+++ b/system/library/video/movies/genres.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="20" type="filter">
+ <label>135</label>
+ <icon>DefaultGenre.png</icon>
+ <content>movies</content>
+ <group>genres</group>
+</node>
diff --git a/system/library/video/movies/index.xml b/system/library/video/movies/index.xml
new file mode 100644
index 0000000..d7083e7
--- /dev/null
+++ b/system/library/video/movies/index.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="10" visible="Library.HasContent(Movies)">
+ <label>342</label>
+ <icon>DefaultMovies.png</icon>
+</node>
diff --git a/system/library/video/movies/recentlyaddedmovies.xml b/system/library/video/movies/recentlyaddedmovies.xml
new file mode 100644
index 0000000..14aa8f0
--- /dev/null
+++ b/system/library/video/movies/recentlyaddedmovies.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="10" type="folder">
+ <label>20382</label>
+ <icon>DefaultRecentlyAddedMovies.png</icon>
+ <path>videodb://recentlyaddedmovies/</path>
+</node>
diff --git a/system/library/video/movies/sets.xml b/system/library/video/movies/sets.xml
new file mode 100644
index 0000000..8e0a678
--- /dev/null
+++ b/system/library/video/movies/sets.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="80" type="filter" visible="Library.HasContent(MovieSets)">
+ <label>20434</label>
+ <icon>DefaultSets.png</icon>
+ <content>movies</content>
+ <group>sets</group>
+</node>
diff --git a/system/library/video/movies/studios.xml b/system/library/video/movies/studios.xml
new file mode 100644
index 0000000..da414a8
--- /dev/null
+++ b/system/library/video/movies/studios.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="70" type="filter">
+ <label>20388</label>
+ <icon>DefaultStudios.png</icon>
+ <content>movies</content>
+ <group>studios</group>
+</node>
diff --git a/system/library/video/movies/tags.xml b/system/library/video/movies/tags.xml
new file mode 100644
index 0000000..7ff906d
--- /dev/null
+++ b/system/library/video/movies/tags.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="100" type="filter">
+ <label>20459</label>
+ <icon>DefaultTags.png</icon>
+ <content>movies</content>
+ <group>tags</group>
+</node>
diff --git a/system/library/video/movies/titles.xml b/system/library/video/movies/titles.xml
new file mode 100644
index 0000000..4f668eb
--- /dev/null
+++ b/system/library/video/movies/titles.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="30" type="filter">
+ <label>10024</label>
+ <icon>DefaultMovieTitle.png</icon>
+ <content>movies</content>
+ <order direction="ascending">sorttitle</order>
+</node>
diff --git a/system/library/video/movies/years.xml b/system/library/video/movies/years.xml
new file mode 100644
index 0000000..1df7e69
--- /dev/null
+++ b/system/library/video/movies/years.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="40" type="filter">
+ <label>652</label>
+ <icon>DefaultYear.png</icon>
+ <content>movies</content>
+ <group>years</group>
+</node>
diff --git a/system/library/video/musicvideos/albums.xml b/system/library/video/musicvideos/albums.xml
new file mode 100644
index 0000000..9432641
--- /dev/null
+++ b/system/library/video/musicvideos/albums.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="60" type="filter">
+ <label>132</label>
+ <icon>DefaultMusicAlbums.png</icon>
+ <content>musicvideos</content>
+ <group>albums</group>
+</node>
diff --git a/system/library/video/musicvideos/artists.xml b/system/library/video/musicvideos/artists.xml
new file mode 100644
index 0000000..24dbcb6
--- /dev/null
+++ b/system/library/video/musicvideos/artists.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="50" type="filter">
+ <label>133</label>
+ <icon>DefaultMusicArtists.png</icon>
+ <content>musicvideos</content>
+ <group>artists</group>
+</node>
diff --git a/system/library/video/musicvideos/directors.xml b/system/library/video/musicvideos/directors.xml
new file mode 100644
index 0000000..7a6f55c
--- /dev/null
+++ b/system/library/video/musicvideos/directors.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="70" type="filter">
+ <label>20348</label>
+ <icon>DefaultDirector.png</icon>
+ <content>musicvideos</content>
+ <group>directors</group>
+</node>
diff --git a/system/library/video/musicvideos/genres.xml b/system/library/video/musicvideos/genres.xml
new file mode 100644
index 0000000..cf5b6b0
--- /dev/null
+++ b/system/library/video/musicvideos/genres.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="20" type="filter">
+ <label>135</label>
+ <icon>DefaultGenre.png</icon>
+ <content>musicvideos</content>
+ <group>genres</group>
+</node>
diff --git a/system/library/video/musicvideos/index.xml b/system/library/video/musicvideos/index.xml
new file mode 100644
index 0000000..9526eea
--- /dev/null
+++ b/system/library/video/musicvideos/index.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="30" visible="Library.HasContent(MusicVideos)">
+ <label>20389</label>
+ <icon>DefaultMusicVideos.png</icon>
+</node>
diff --git a/system/library/video/musicvideos/recentlyaddedmusicvideos.xml b/system/library/video/musicvideos/recentlyaddedmusicvideos.xml
new file mode 100644
index 0000000..39b5177
--- /dev/null
+++ b/system/library/video/musicvideos/recentlyaddedmusicvideos.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="10" type="folder">
+ <label>20382</label>
+ <icon>DefaultRecentlyAddedMusicVideos.png</icon>
+ <path>videodb://recentlyaddedmusicvideos/</path>
+</node>
diff --git a/system/library/video/musicvideos/studios.xml b/system/library/video/musicvideos/studios.xml
new file mode 100644
index 0000000..3729dfe
--- /dev/null
+++ b/system/library/video/musicvideos/studios.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="80" type="filter">
+ <label>20388</label>
+ <icon>DefaultStudios.png</icon>
+ <content>musicvideos</content>
+ <group>studios</group>
+</node>
diff --git a/system/library/video/musicvideos/tags.xml b/system/library/video/musicvideos/tags.xml
new file mode 100644
index 0000000..93b1b27
--- /dev/null
+++ b/system/library/video/musicvideos/tags.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="90" type="filter">
+ <label>20459</label>
+ <icon>DefaultTags.png</icon>
+ <content>musicvideos</content>
+ <group>tags</group>
+</node>
diff --git a/system/library/video/musicvideos/titles.xml b/system/library/video/musicvideos/titles.xml
new file mode 100644
index 0000000..1eee37d
--- /dev/null
+++ b/system/library/video/musicvideos/titles.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="30" type="filter">
+ <label>10024</label>
+ <icon>DefaultMusicVideoTitle.png</icon>
+ <content>musicvideos</content>
+ <order direction="ascending">title</order>
+</node>
diff --git a/system/library/video/musicvideos/years.xml b/system/library/video/musicvideos/years.xml
new file mode 100644
index 0000000..a39d3bc
--- /dev/null
+++ b/system/library/video/musicvideos/years.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="40" type="filter">
+ <label>652</label>
+ <icon>DefaultYear.png</icon>
+ <content>musicvideos</content>
+ <group>years</group>
+</node>
diff --git a/system/library/video/playlists.xml b/system/library/video/playlists.xml
new file mode 100644
index 0000000..a65012f
--- /dev/null
+++ b/system/library/video/playlists.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="50" type="folder">
+ <label>136</label>
+ <icon>DefaultVideoPlaylists.png</icon>
+ <path>special://videoplaylists/</path>
+</node>
diff --git a/system/library/video/tvshows/actors.xml b/system/library/video/tvshows/actors.xml
new file mode 100644
index 0000000..c3f78cd
--- /dev/null
+++ b/system/library/video/tvshows/actors.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="60" type="filter">
+ <label>344</label>
+ <icon>DefaultActor.png</icon>
+ <content>tvshows</content>
+ <group>actors</group>
+</node>
diff --git a/system/library/video/tvshows/genres.xml b/system/library/video/tvshows/genres.xml
new file mode 100644
index 0000000..bb6eb5e
--- /dev/null
+++ b/system/library/video/tvshows/genres.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="30" type="filter">
+ <label>135</label>
+ <icon>DefaultGenre.png</icon>
+ <content>tvshows</content>
+ <group>genres</group>
+</node>
diff --git a/system/library/video/tvshows/index.xml b/system/library/video/tvshows/index.xml
new file mode 100644
index 0000000..e5848dc
--- /dev/null
+++ b/system/library/video/tvshows/index.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="20" visible="Library.HasContent(TVShows)">
+ <label>20343</label>
+ <icon>DefaultTVShows.png</icon>
+</node>
diff --git a/system/library/video/tvshows/inprogressshows.xml b/system/library/video/tvshows/inprogressshows.xml
new file mode 100644
index 0000000..3c0797e
--- /dev/null
+++ b/system/library/video/tvshows/inprogressshows.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="20" type="folder">
+ <label>575</label>
+ <icon>DefaultInProgressShows.png</icon>
+ <path>videodb://inprogresstvshows/</path>
+</node>
diff --git a/system/library/video/tvshows/recentlyaddedepisodes.xml b/system/library/video/tvshows/recentlyaddedepisodes.xml
new file mode 100644
index 0000000..6ea98f6
--- /dev/null
+++ b/system/library/video/tvshows/recentlyaddedepisodes.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="10" type="folder">
+ <label>20382</label>
+ <icon>DefaultRecentlyAddedEpisodes.png</icon>
+ <path>videodb://recentlyaddedepisodes/</path>
+</node>
diff --git a/system/library/video/tvshows/studios.xml b/system/library/video/tvshows/studios.xml
new file mode 100644
index 0000000..1a99f69
--- /dev/null
+++ b/system/library/video/tvshows/studios.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="70" type="filter">
+ <label>20388</label>
+ <icon>DefaultStudios.png</icon>
+ <content>tvshows</content>
+ <group>studios</group>
+</node>
diff --git a/system/library/video/tvshows/tags.xml b/system/library/video/tvshows/tags.xml
new file mode 100644
index 0000000..9be3a70
--- /dev/null
+++ b/system/library/video/tvshows/tags.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="80" type="filter">
+ <label>20459</label>
+ <icon>DefaultTags.png</icon>
+ <content>tvshows</content>
+ <group>tags</group>
+</node>
diff --git a/system/library/video/tvshows/titles.xml b/system/library/video/tvshows/titles.xml
new file mode 100644
index 0000000..d5326fe
--- /dev/null
+++ b/system/library/video/tvshows/titles.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="40" type="filter">
+ <label>10024</label>
+ <icon>DefaultTVShowTitle.png</icon>
+ <content>tvshows</content>
+ <order direction="ascending">sorttitle</order>
+</node>
diff --git a/system/library/video/tvshows/years.xml b/system/library/video/tvshows/years.xml
new file mode 100644
index 0000000..4e41685
--- /dev/null
+++ b/system/library/video/tvshows/years.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="50" type="filter">
+ <label>652</label>
+ <icon>DefaultYear.png</icon>
+ <content>tvshows</content>
+ <group>years</group>
+</node>
diff --git a/system/library/video_flat/addons.xml b/system/library/video_flat/addons.xml
new file mode 100644
index 0000000..a34eb27
--- /dev/null
+++ b/system/library/video_flat/addons.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="100" type="folder">
+ <label>1037</label>
+ <icon>DefaultAddonVideo.png</icon>
+ <path>addons://sources/video/</path>
+</node>
diff --git a/system/library/video_flat/files.xml b/system/library/video_flat/files.xml
new file mode 100644
index 0000000..4fd56c0
--- /dev/null
+++ b/system/library/video_flat/files.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="80" type="folder">
+ <label>744</label>
+ <icon>DefaultFolder.png</icon>
+ <path>sources://video/</path>
+</node>
diff --git a/system/library/video_flat/inprogressshows.xml b/system/library/video_flat/inprogressshows.xml
new file mode 100644
index 0000000..dface4d
--- /dev/null
+++ b/system/library/video_flat/inprogressshows.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="40" type="folder" visible="Library.HasContent(TVShows)">
+ <label>626</label>
+ <icon>DefaultInProgressShows.png</icon>
+ <path>videodb://inprogresstvshows/</path>
+</node>
diff --git a/system/library/video_flat/movies.xml b/system/library/video_flat/movies.xml
new file mode 100644
index 0000000..1e1720c
--- /dev/null
+++ b/system/library/video_flat/movies.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="10" type="filter" visible="Library.HasContent(Movies)">
+ <label>342</label>
+ <icon>DefaultMovies.png</icon>
+ <content>movies</content>
+ <order direction="ascending">sorttitle</order>
+</node>
diff --git a/system/library/video_flat/musicvideos.xml b/system/library/video_flat/musicvideos.xml
new file mode 100644
index 0000000..a63945f
--- /dev/null
+++ b/system/library/video_flat/musicvideos.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="30" type="filter" visible="Library.HasContent(MusicVideos)">
+ <label>20389</label>
+ <icon>DefaultMusicVideos.png</icon>
+ <content>musicvideos</content>
+ <order direction="ascending">title</order>
+</node>
diff --git a/system/library/video_flat/playlists.xml b/system/library/video_flat/playlists.xml
new file mode 100644
index 0000000..4cc2aec
--- /dev/null
+++ b/system/library/video_flat/playlists.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="90" type="folder">
+ <label>136</label>
+ <icon>DefaultVideoPlaylists.png</icon>
+ <path>special://videoplaylists/</path>
+</node>
diff --git a/system/library/video_flat/recentlyaddedepisodes.xml b/system/library/video_flat/recentlyaddedepisodes.xml
new file mode 100644
index 0000000..44dcd0b
--- /dev/null
+++ b/system/library/video_flat/recentlyaddedepisodes.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="60" type="folder" visible="Library.HasContent(TVShows)">
+ <label>20387</label>
+ <icon>DefaultRecentlyAddedEpisodes.png</icon>
+ <path>videodb://recentlyaddedepisodes/</path>
+</node>
diff --git a/system/library/video_flat/recentlyaddedmovies.xml b/system/library/video_flat/recentlyaddedmovies.xml
new file mode 100644
index 0000000..214c4dc
--- /dev/null
+++ b/system/library/video_flat/recentlyaddedmovies.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="50" type="folder" visible="Library.HasContent(Movies)">
+ <label>20386</label>
+ <icon>DefaultRecentlyAddedMovies.png</icon>
+ <path>videodb://recentlyaddedmovies/</path>
+</node>
diff --git a/system/library/video_flat/recentlyaddedmusicvideos.xml b/system/library/video_flat/recentlyaddedmusicvideos.xml
new file mode 100644
index 0000000..e03a9e4
--- /dev/null
+++ b/system/library/video_flat/recentlyaddedmusicvideos.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="70" type="folder" visible="Library.HasContent(MusicVideos)">
+ <label>20390</label>
+ <icon>DefaultRecentlyAddedMusicVideos.png</icon>
+ <path>videodb://recentlyaddedmusicvideos/</path>
+</node>
diff --git a/system/library/video_flat/tvshows.xml b/system/library/video_flat/tvshows.xml
new file mode 100644
index 0000000..6509bd8
--- /dev/null
+++ b/system/library/video_flat/tvshows.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<node order="20" type="filter" visible="Library.HasContent(TVShows)">
+ <label>20343</label>
+ <icon>DefaultTVShows.png</icon>
+ <content>tvshows</content>
+ <order direction="ascending">sorttitle</order>
+</node>
diff --git a/system/peripherals.xml b/system/peripherals.xml
new file mode 100644
index 0000000..a110c0d
--- /dev/null
+++ b/system/peripherals.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<peripherals>
+ <peripheral vendor_product="1915:003B,22B8:003B" bus="usb" name="Motorola Nyxboard Hybrid" mapTo="nyxboard">
+ <setting key="do_not_use_custom_keymap" type="bool" value="0" label="35009" order="1" />
+ <setting key="keymap" value="nyxboard" label="35007" configurable="0" />
+ <setting key="enable_flip_commands" type="bool" value="1" label="36005" order="2" />
+ <setting key="flip_keyboard" value="VideoLibrary.Search" label="36002" order="3" />
+ <setting key="flip_remote" value="Dialog.Close(virtualkeyboard)" label="36003" order="4" />
+ </peripheral>
+
+ <peripheral bus="cec" name="CEC Adapter" mapTo="cec">
+ <setting key="enabled" type="bool" value="1" label="305" order="1" />
+ <setting key="activate_source" type="bool" value="1" label="36020" order="2" />
+ <setting key="wake_devices" type="enum" value="36037" label="36007" lvalues="36037|36038|36039|231" order="3" />
+ <setting key="standby_devices" type="enum" value="36037" label="36008" lvalues="36037|36038|36039|231" order="4" />
+ <setting key="send_inactive_source" type="bool" value="1" label="36025" order="5" />
+ <setting key="cec_standby_screensaver" type="bool" value="0" label="36009" order="6" />
+ <setting key="cec_wake_screensaver" type="bool" value="1" label="36010" order="7" />
+ <setting key="standby_pc_on_tv_standby" type="enum" value="13011" label="36029" order="8" lvalues="36028|13005|13011|13010|13009|36044|36045" />
+ <setting key="standby_tv_on_pc_standby" type="bool" value="1" label="36026" order="9" />
+ <setting key="use_tv_menu_language" type="bool" value="1" label="36018" order="10" />
+ <setting key="pause_playback_on_deactivate" type="bool" value="1" label="36033" configurable="0" />
+ <setting key="pause_or_stop_playback_on_deactivate" type="enum" value="231" label="36033" order="11" lvalues="231|36044|36045" />
+ <setting key="connected_device" type="enum" label="36019" value="36037" lvalues="36037|36038" order="12" />
+ <setting key="cec_hdmi_port" type="int" value="1" min="1" max="15" label="36015" order="13" />
+ <setting key="physical_address" type="string" label="36021" value="0" order="14" />
+ <setting key="power_avr_on_as" type="bool" label="36046" value="0" order="15" />
+
+ <setting key="tv_vendor" type="int" value="0" configurable="0" />
+ <setting key="device_name" type="string" value="Kodi" configurable="0" />
+ <setting key="wake_devices_advanced" type="string" value="" configurable="0" />
+ <setting key="standby_devices_advanced" type="string" value="" configurable="0" />
+ <setting key="double_tap_timeout_ms" type="int" min="50" max="1000" step="50" value="300" label="36047" order="16" />
+ <setting key="button_repeat_rate_ms" type="int" min="0" max="250" step="10" value="0" label="36048" order="17" />
+ <setting key="button_release_delay_ms" type="int" min="0" max="500" step="50" value="0" label="36049" order="18" />
+ <setting key="device_type" type="enum" value="36051" label="36013" lvalues="36051|36052|36053" order="19" />
+ </peripheral>
+
+ <peripheral vendor_product="2548:1001,2548:1002" bus="usb" name="Pulse-Eight CEC Adapter" mapTo="cec">
+ <!-- This entry will not create a CPeripheralCecAdapter instance, since it's filtered out in CPeripherals::CreatePeripheral,
+ but it will ensure that a warning is displayed when an adapter is inserted, but libCEC is not present or couldn't be loaded.
+ Since libCEC is now used to scan for devices, the warning will not be displayed without this mapping -->
+ </peripheral>
+
+ <peripheral vendor_product="15C2:32,15C2:33,15C2:34,15C2:35,15C2:36,15C2:37,15C2:38,15C2:39,15C2:3A,15C2:3B,15C2:3C,15C2:3D,15C2:3E,15C2:3F,15C2:41,15C2:42,15C2:43,15C2:44,15C2:45,15C2:46" bus="usb" name="iMON HID device" mapTo="imon">
+ <setting key="do_not_use_custom_keymap" type="bool" value="1" label="35009" configurable="0"/>
+ <setting key="disable_winjoystick" type="bool" value="1" label="35102" order="1" />
+ </peripheral>
+
+ <peripheral vendor_product="2252:0106,22A1:2801" bus="usb" name="WETEK Play remote" mapTo="hid">
+ <setting key="do_not_use_custom_keymap" type="bool" value="0" label="35009" order="1" />
+ <setting key="keymap" value="wetek-play" label="35007" configurable="0" />
+ </peripheral>
+
+ <peripheral vendor_product="2252:1037,2017:1688,2017:1689,2017:1690" bus="usb" name="OSMC RF Remote" mapTo="hid">
+ <setting key="do_not_use_custom_keymap" type="bool" value="0" label="35009" order="1"/>
+ <setting key="keymap" value="osmc" label="35007" configurable="1"/>
+ </peripheral>
+
+ <peripheral class="joystick" name="joystick" mapTo="joystick">
+ <setting key="appearance" type="addon" addontype="kodi.game.controller" label="480" order="1"/>
+ <setting key="left_stick_deadzone" type="float" label="35078" order="2" value="0.2" min="0.0" step="0.05" max="1.0" />
+ <setting key="right_stick_deadzone" type="float" label="35079" order="3" value="0.2" min="0.0" step="0.05" max="1.0" />
+ </peripheral>
+
+</peripherals>
diff --git a/system/playercorefactory.xml b/system/playercorefactory.xml
new file mode 100644
index 0000000..f928311
--- /dev/null
+++ b/system/playercorefactory.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<playercorefactory>
+ <players>
+ <!-- These are compiled-in as re-ordering them would break scripts
+ The following aliases may also be used:
+ audiodefaultplayer, videodefaultplayer, videodefaultVideoPlayer
+ <player name="VideoPlayer" audio="true" video="true" />
+ <player name="VideoPlayer" /> placeholder for MPlayer
+ <player name="PAPlayer" audio="true" />
+ -->
+ </players>
+
+ <rules name="system rules">
+ <rule name="mms/udp" protocols="mms|mmsh|udp" player="VideoPlayer" />
+ <rule name="lastfm/shout" protocols="lastfm|shout" player="PAPlayer" />
+ <rule name="rtmp" protocols="rtmp" player="videodefaultplayer" />
+
+ <!-- VideoPlayer can play standard rtsp streams -->
+ <rule name="rtsp" protocols="rtsp" filetypes="!(rm|ra)" player="PAPlayer" />
+
+ <!-- Internet streams -->
+ <rule name="streams" internetstream="true">
+ <rule name="aacp/sdp" mimetypes="audio/aacp|application/sdp" player="VideoPlayer" />
+ <rule name="mp2" mimetypes="application/octet-stream" filetypes="mp2" player="PAPlayer" />
+ </rule>
+
+ <!-- DVDs -->
+ <rule name="dvd" dvd="true" player="VideoPlayer" />
+ <rule name="discimage" discimage="true" game="false" player="VideoPlayer" />
+
+ <!-- Only VideoPlayer can handle these normally -->
+ <rule name="sdp/asf" filetypes="sdp|asf" player="VideoPlayer" />
+
+ <!-- Pass these to VideoPlayer as we do not know if they are audio or video -->
+ <rule name="nsv" filetypes="nsv" player="VideoPlayer" />
+
+ <!-- pvr radio channels should be played by VideoPlayer because they need buffering -->
+ <rule name="radio" filetypes="pvr" filename=".*/radio/.*" player="VideoPlayer" />
+ </rules>
+</playercorefactory>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/10-autohint.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/10-autohint.conf
new file mode 100644
index 0000000..3a8b94e
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/10-autohint.conf
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- debian/autohint.conf -->
+<fontconfig>
+<!-- Use the Autohinter -->
+ <match target="font">
+ <edit name="autohint" mode="assign"><bool>true</bool></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/10-no-sub-pixel.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/10-no-sub-pixel.conf
new file mode 100644
index 0000000..b3c3dac
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/10-no-sub-pixel.conf
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!-- Enable sub-pixel rendering -->
+ <match target="font">
+ <edit name="rgba" mode="assign"><const>none</const></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-bgr.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-bgr.conf
new file mode 100644
index 0000000..8b05fcd
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-bgr.conf
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!-- Enable sub-pixel rendering -->
+ <match target="font">
+ <edit name="rgba" mode="assign"><const>bgr</const></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-rgb.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-rgb.conf
new file mode 100644
index 0000000..dd1aa6d
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-rgb.conf
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!-- Enable sub-pixel rendering -->
+ <match target="font">
+ <edit name="rgba" mode="assign"><const>rgb</const></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-vbgr.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-vbgr.conf
new file mode 100644
index 0000000..e1fb404
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-vbgr.conf
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!-- Enable sub-pixel rendering -->
+ <match target="font">
+ <edit name="rgba" mode="assign"><const>vbgr</const></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-vrgb.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-vrgb.conf
new file mode 100644
index 0000000..8c4fdfc
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/10-sub-pixel-vrgb.conf
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!-- Enable sub-pixel rendering -->
+ <match target="font">
+ <edit name="rgba" mode="assign"><const>vrgb</const></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/10-unhinted.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/10-unhinted.conf
new file mode 100644
index 0000000..82c069c
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/10-unhinted.conf
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- debian/unhinted.conf -->
+<fontconfig>
+<!-- Disable hinting -->
+ <match target="font">
+ <edit name="hinting" mode="assign"><bool>false</bool></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/20-fix-globaladvance.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/20-fix-globaladvance.conf
new file mode 100644
index 0000000..a62162c
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/20-fix-globaladvance.conf
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+ Some Asian fonts misadvertise themselves as monospaced when
+ in fact they are dual-spaced (half and full). This makes
+ FreeType very confused as it forces all widths to match.
+ Undo this magic by disabling the width forcing code -->
+ <match target="font">
+ <test name="family"><string>GulimChe</string></test>
+ <edit name="globaladvance"><bool>false</bool></edit>
+ </match>
+
+ <match target="font">
+ <test name="family"><string>DotumChe</string></test>
+ <edit name="globaladvance"><bool>false</bool></edit>
+ </match>
+
+ <match target="font">
+ <test name="family"><string>BatangChe</string></test>
+ <edit name="globaladvance"><bool>false</bool></edit>
+ </match>
+
+ <match target="font">
+ <test name="family"><string>GungsuhChe</string></test>
+ <edit name="globaladvance"><bool>false</bool></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/20-lohit-gujarati.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/20-lohit-gujarati.conf
new file mode 100644
index 0000000..1c29d0d
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/20-lohit-gujarati.conf
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+
+<!-- Available Gujarti fonts look much better without hinting -->
+
+ <match target="font">
+ <test name="family"><string>Lohit Gujarati</string></test>
+ <edit name="hinting"><bool>false</bool></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/20-unhint-small-vera.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/20-unhint-small-vera.conf
new file mode 100644
index 0000000..51999c5
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/20-unhint-small-vera.conf
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+ The Bitstream Vera fonts have GASP entries suggesting that hinting be
+ disabled below 8 ppem, but FreeType ignores those, preferring to use
+ the data found in the instructed hints. The initial Vera release
+ didn't include the right instructions in the 'prep' table. Fix this
+ by disabling hinting manually at smaller sizes (< 8ppem)
+ -->
+
+ <match target="font">
+ <test name="family">
+ <string>Bitstream Vera Sans</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Bitstream Vera Serif</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Bitstream Vera Sans Mono</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/30-amt-aliases.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/30-amt-aliases.conf
new file mode 100644
index 0000000..d6df67e
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/30-amt-aliases.conf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+ AMT provides metric and shape compatible fonts for these three web font
+ families.
+ -->
+ <alias>
+ <family>Times New Roman</family>
+ <accept><family>Thorndale AMT</family></accept>
+ </alias>
+ <alias>
+ <family>Arial</family>
+ <accept><family>Albany AMT</family></accept>
+ </alias>
+ <alias>
+ <family>Courier New</family>
+ <accept><family>Cumberland AMT</family></accept>
+ </alias>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/30-urw-aliases.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/30-urw-aliases.conf
new file mode 100644
index 0000000..cf90dd5
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/30-urw-aliases.conf
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+ URW provides metric and shape compatible fonts for these 10 Adobe families.
+ -->
+ <alias>
+ <family>Avant Garde</family>
+ <accept><family>URW Gothic L</family></accept>
+ </alias>
+ <alias>
+ <family>Bookman</family>
+ <accept><family>URW Bookman L</family></accept>
+ </alias>
+ <alias>
+ <family>Courier</family>
+ <accept><family>Nimbus Mono L</family></accept>
+ </alias>
+ <alias>
+ <family>Helvetica</family>
+ <accept><family>Nimbus Sans L</family></accept>
+ </alias>
+ <alias>
+ <family>New Century Schoolbook</family>
+ <accept><family>Century Schoolbook L</family></accept>
+ </alias>
+ <alias>
+ <family>Palatino</family>
+ <accept><family>URW Palladio L</family></accept>
+ </alias>
+ <alias>
+ <family>Times</family>
+ <accept><family>Nimbus Roman No9 L</family></accept>
+ </alias>
+ <alias>
+ <family>Zapf Chancery</family>
+ <accept><family>URW Chancery L</family></accept>
+ </alias>
+ <alias>
+ <family>Zapf Dingbats</family>
+ <accept><family>Dingbats</family></accept>
+ </alias>
+ <match target="pattern">
+ <test name="family">
+ <string>Symbol</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Standard Symbols L</string>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/40-generic.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/40-generic.conf
new file mode 100644
index 0000000..84e85e4
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/40-generic.conf
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ Mark common families with their generics so we'll get
+ something reasonable
+-->
+
+<!--
+ Serif faces
+ -->
+ <alias>
+ <family>Bitstream Vera Serif</family>
+ <family>DejaVu Serif</family>
+ <family>Times New Roman</family>
+ <family>Times</family>
+ <family>Nimbus Roman No9 L</family>
+ <family>Luxi Serif</family>
+ <family>Kochi Mincho</family>
+ <family>AR PL SungtiL GB</family>
+ <family>AR PL Mingti2L Big5</family>
+ <family>MS 明朝</family>
+ <family>Baekmuk Batang</family>
+ <family>FreeSerif</family>
+ <family>MgOpen Canonica</family>
+ <default><family>serif</family></default>
+ </alias>
+<!--
+ Sans-serif faces
+ -->
+ <alias>
+ <family>Bitstream Vera Sans</family>
+ <family>DejaVu Sans</family>
+ <family>Helvetica</family>
+ <family>Arial</family>
+ <family>Verdana</family>
+ <family>Albany AMT</family>
+ <family>Nimbus Sans L</family>
+ <family>Luxi Sans</family>
+ <family>Kochi Gothic</family>
+ <family>AR PL KaitiM GB</family>
+ <family>AR PL KaitiM Big5</family>
+ <family>MS ゴシック</family>
+ <family>Baekmuk Dotum</family>
+ <family>SimSun</family>
+ <family>FreeSans</family>
+ <family>MgOpen Modata</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+<!--
+ Monospace faces
+ -->
+ <alias>
+ <family>Bitstream Vera Sans Mono</family>
+ <family>DejaVu Sans Mono</family>
+ <family>Courier</family>
+ <family>Courier New</family>
+ <family>Andale Mono</family>
+ <family>Luxi Mono</family>
+ <family>Cumberland AMT</family>
+ <family>Nimbus Mono L</family>
+ <family>NSimSun</family>
+ <family>FreeMono</family>
+ <default><family>monospace</family></default>
+ </alias>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/49-sansserif.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/49-sansserif.conf
new file mode 100644
index 0000000..c6209a7
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/49-sansserif.conf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ If the font still has no generic name, add sans-serif
+ -->
+ <match target="pattern">
+ <test qual="all" name="family" compare="not_eq">
+ <string>sans-serif</string>
+ </test>
+ <test qual="all" name="family" compare="not_eq">
+ <string>serif</string>
+ </test>
+ <test qual="all" name="family" compare="not_eq">
+ <string>monospace</string>
+ </test>
+ <edit name="family" mode="append_last">
+ <string>sans-serif</string>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/50-user.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/50-user.conf
new file mode 100644
index 0000000..9a38a40
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/50-user.conf
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.avail/50-user.conf file to configure system font access -->
+<fontconfig>
+ <!-- Load per-user customization file -->
+ <include ignore_missing="yes">~/.fonts.conf</include>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/51-local.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/51-local.conf
new file mode 100644
index 0000000..d35046e
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/51-local.conf
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.avail/51-local.conf file to configure system font access -->
+<fontconfig>
+ <!-- Load local system customization file -->
+ <include ignore_missing="yes">local.conf</include>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/60-latin.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/60-latin.conf
new file mode 100644
index 0000000..06cdd7e
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/60-latin.conf
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>Bitstream Vera Serif</family>
+ <family>DejaVu Serif</family>
+ <family>Times New Roman</family>
+ <family>Thorndale AMT</family>
+ <family>Luxi Serif</family>
+ <family>Nimbus Roman No9 L</family>
+ <family>Times</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>Bitstream Vera Sans</family>
+ <family>DejaVu Sans</family>
+ <family>Verdana</family>
+ <family>Arial</family>
+ <family>Albany AMT</family>
+ <family>Luxi Sans</family>
+ <family>Nimbus Sans L</family>
+ <family>Helvetica</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>Bitstream Vera Sans Mono</family>
+ <family>DejaVu Sans Mono</family>
+ <family>Andale Mono</family>
+ <family>Courier New</family>
+ <family>Cumberland AMT</family>
+ <family>Luxi Mono</family>
+ <family>Nimbus Mono L</family>
+ <family>Courier</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/65-fonts-persian.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/65-fonts-persian.conf
new file mode 100644
index 0000000..4c9f81c
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/65-fonts-persian.conf
@@ -0,0 +1,539 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.d/10-fonts-persian.conf -->
+<!--
+ fonts-persian.conf
+ To configure Persian fonts from The FarsiWeb Project.
+
+ Copyright (C) 2005 Sharif FarsiWeb, Inc. <license@farsiweb.info>
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of Sharif FarsiWeb, Inc. not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. Sharif FarsiWeb, Inc. makes no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ SHARIF FARSIWEB, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+
+ ChangeLog:
+ 2005-04-03 Behdad Esfahbod: Initial revision.
+ 2005-10-09 Behdad Esfahbod: Turned off back-slant and Tahoma sections.
+ 2005-11-30 Behdad Esfahbod: Set Titr substitution size to 24 points.
+
+ Todo:
+ Add generic font "fantasy". Add some fonts into that category.
+ Maybe add a "cursive" generic font.
+ -->
+<fontconfig>
+
+
+<!--
+ We don't want weak bindings. So got to use the syntactical expansion
+ of alias tag to do binding=same :(. Please support that in alias.
+ -->
+
+
+<!-- Deprecated fonts are discouraged -->
+
+ <!-- Nesf[2] is officially deprecated and has problematic tables -->
+ <match>
+ <test name="family">
+ <string>Nesf</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Nesf2</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Nesf2</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Persian_sansserif_default</string>
+ </edit>
+ </match>
+
+ <!-- Tahoma looks awful (TURNED-OFF) -->
+ <!--match>
+ <test name="family">
+ <string>Tahoma</string>
+ </test>
+ <edit name="family" mode="prepend" binding="same">
+ <string>Persian_sansserif_default</string>
+ </edit>
+ </match-->
+
+<!-- Name changes and spelling variant aliases -->
+
+ <!-- Changed due to trademark problems -->
+ <match>
+ <test name="family">
+ <string>Nazanin</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Nazli</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Lotus</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Lotoos</string>
+ </edit>
+ </match>
+
+ <!-- Changed due to transcription orthography -->
+ <match>
+ <test name="family">
+ <string>Yaqut</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Yaghoot</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Yagut</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Yaghoot</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Yaghut</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Yaghoot</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Traffic</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Terafik</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Ferdowsi</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Ferdosi</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Fantezy</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Fantezi</string>
+ </edit>
+ </match>
+
+
+<!-- Classify fonts. -->
+
+ <!-- Persian_title class -->
+ <match>
+ <test name="family">
+ <string>Jadid</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_title</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Titr</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_title</string>
+ </edit>
+ </match>
+
+ <!-- Persian_fantasy class -->
+ <match>
+ <test name="family">
+ <string>Kamran</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Homa</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_fantasy</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Homa</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Kamran</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_fantasy</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Fantezi</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_fantasy</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Tabassom</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_fantasy</string>
+ </edit>
+ </match>
+
+ <!-- Persian_square class -->
+ <match>
+ <test name="family">
+ <string>Arshia</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Nasim</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Elham</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Farnaz</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Farnaz</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Elham</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Sina</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ </match>
+
+<!-- Font ordering per class -->
+
+ <!-- Persian_title class -->
+ <match>
+ <test name="family">
+ <string>Persian_title</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_serif</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Jadid</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+ <!-- Persian_fantasy class -->
+ <match>
+ <test name="family">
+ <string>Persian_fantasy</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Tabassom</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Fantezi</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Kamran</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Homa</string>
+ </edit>
+ </match>
+
+ <!-- Persian_square class -->
+ <match>
+ <test name="family">
+ <string>Persian_square</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_serif</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Sina</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Nasim</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Farnaz</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Elham</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Arshia</string>
+ </edit>
+ </match>
+
+<!-- Register the fonts that we actually do have -->
+
+ <match target="font">
+ <test name="family">
+ <string>Elham</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Homa</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Koodak</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Nazli</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Roya</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Terafik</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Titr</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+
+<!-- Our fonts should oblique to the other side (TURNED-OFF) -->
+
+ <match target="font">
+ <test name="foundry">
+ <!--string>farsiweb</string-->
+ <string>TURNED-OFF</string>
+ </test>
+ <test name="foundry">
+ <string>farsiweb</string>
+ </test>
+ <!-- check to see if the font is roman -->
+ <test name="slant">
+ <const>roman</const>
+ </test>
+ <!-- check to see if the pattern requested non-roman -->
+ <test target="pattern" name="slant" compare="not_eq">
+ <const>roman</const>
+ </test>
+ <!-- multiply the matrix to slant the font -->
+ <edit name="matrix" mode="assign">
+ <times>
+ <name>matrix</name>
+ <matrix><double>1</double><double>-0.2</double>
+ <double>0</double><double>1</double>
+ </matrix>
+ </times>
+ </edit>
+ <!-- pretend the font is oblique now -->
+ <edit name="slant" mode="assign">
+ <const>oblique</const>
+ </edit>
+ </match>
+
+
+<!--
+ We can't hint our fonts well, so turn off hinting.
+ Moreover, the bitmaps we have designed (well, they
+ have designed), suck, so disable them too.
+ -->
+
+ <match target="font">
+ <test name="foundry">
+ <string>farsiweb</string>
+ </test>
+ <edit name="autohint">
+ <bool>false</bool>
+ </edit>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ <edit name="embeddedbitmap">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+
+<!-- Alias our fonts to common families -->
+
+ <!-- Persian serif fonts -->
+ <alias>
+ <family>serif</family>
+ <accept>
+ <family>Nazli</family>
+ <family>Lotoos</family>
+ <family>Mitra</family>
+ <family>Ferdosi</family>
+ <family>Badr</family>
+ <family>Zar</family>
+ </accept>
+ </alias>
+
+ <!-- Persian sans-serif fonts -->
+ <alias>
+ <family>sans-serif</family>
+ <accept>
+ <family>Roya</family>
+ <family>Koodak</family>
+ <family>Terafik</family>
+ </accept>
+ </alias>
+
+ <!-- Persian monospace fonts -->
+ <alias>
+ <family>monospace</family>
+ <accept>
+ <!-- Not really monospace -->
+ <family>Terafik</family>
+ </accept>
+ </alias>
+
+
+<!-- Use Titr in titles -->
+
+ <!-- Both serif... -->
+ <match>
+ <test name="family">
+ <string>serif</string>
+ </test>
+ <test name="weight" compare="more_eq">
+ <int>200</int>
+ </test>
+ <test name="size" compare="more_eq">
+ <double>24</double>
+ </test>
+ <edit name="family" mode="prepend">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+ <!-- and sans-serif. -->
+ <match>
+ <test name="family">
+ <string>sans-serif</string>
+ </test>
+ <test name="weight" compare="more_eq">
+ <int>200</int>
+ </test>
+ <test name="size" compare="more_eq">
+ <double>24</double>
+ </test>
+ <edit name="family" mode="prepend">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+ <!-- and more. -->
+ <match>
+ <test name="family">
+ <string>Persian_sansserif_default</string>
+ </test>
+ <test name="weight" compare="more_eq">
+ <int>200</int>
+ </test>
+ <test name="size" compare="more_eq">
+ <double>24</double>
+ </test>
+ <edit name="family" mode="prepend" binding="same">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+
+<!-- Default substituted for deprecated sans-serif fonts -->
+
+ <match>
+ <test name="family">
+ <string>Persian_sansserif_default</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Roya</string>
+ </edit>
+ </match>
+
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/65-nonlatin.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/65-nonlatin.conf
new file mode 100644
index 0000000..f8dbb64
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/65-nonlatin.conf
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>Frank Ruehl</family>
+ <family>MgOpen Canonica</family>
+ <family>Kochi Mincho</family>
+ <family>AR PL SungtiL GB</family>
+ <family>AR PL Mingti2L Big5</family>
+ <family>MS 明朝</family>
+ <family>Baekmuk Batang</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>Nachlieli</family>
+ <family>MgOpen Modata</family>
+ <family>Kochi Gothic</family>
+ <family>AR PL KaitiM GB</family>
+ <family>AR PL KaitiM Big5</family>
+ <family>MS ゴシック</family>
+ <family>Baekmuk Dotum</family>
+ <family>SimSun</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>Miriam Mono</family>
+ <family>Kochi Gothic</family>
+ <family>AR PL KaitiM GB</family>
+ <family>Baekmuk Dotum</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/69-unifont.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/69-unifont.conf
new file mode 100644
index 0000000..a784af9
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/69-unifont.conf
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>FreeSerif</family>
+ <family>Code2000</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>FreeSans</family>
+ <family>Arial Unicode MS</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>FreeMono</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/70-no-bitmaps.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/70-no-bitmaps.conf
new file mode 100644
index 0000000..e8fb6a9
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/70-no-bitmaps.conf
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.d/no-bitmaps.conf -->
+<fontconfig>
+<!-- Reject bitmap fonts -->
+ <selectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="scalable"><bool>false</bool></patelt>
+ </pattern>
+ </rejectfont>
+ </selectfont>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/70-yes-bitmaps.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/70-yes-bitmaps.conf
new file mode 100644
index 0000000..c539c70
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/70-yes-bitmaps.conf
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/yes-bitmaps.conf -->
+<fontconfig>
+<!-- Accept bitmap fonts -->
+ <selectfont>
+ <acceptfont>
+ <pattern>
+ <patelt name="scalable"><bool>false</bool></patelt>
+ </pattern>
+ </acceptfont>
+ </selectfont>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/80-delicious.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/80-delicious.conf
new file mode 100644
index 0000000..701429b
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/80-delicious.conf
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.d/60-delicious.conf -->
+<fontconfig>
+<!-- Fix-ups for Delicious family -->
+
+<!-- Delicious 'heavy' variant says its Medium weight -->
+<match target="scan">
+ <test name="family">
+ <string>Delicious</string>
+ </test>
+ <test name="style">
+ <string>Heavy</string>
+ </test>
+ <edit name="weight">
+ <const>heavy</const>
+ </edit>
+</match>
+
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/90-synthetic.conf b/system/players/VideoPlayer/etc/fonts/conf.avail/90-synthetic.conf
new file mode 100644
index 0000000..9550c93
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/90-synthetic.conf
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ Artificial oblique for fonts without an italic or oblique version
+ -->
+
+ <match target="font">
+ <!-- check to see if the font is roman -->
+ <test name="slant">
+ <const>roman</const>
+ </test>
+ <!-- check to see if the pattern requested non-roman -->
+ <test target="pattern" name="slant" compare="not_eq">
+ <const>roman</const>
+ </test>
+ <!-- multiply the matrix to slant the font -->
+ <edit name="matrix" mode="assign">
+ <times>
+ <name>matrix</name>
+ <matrix><double>1</double><double>0.2</double>
+ <double>0</double><double>1</double>
+ </matrix>
+ </times>
+ </edit>
+ <!-- pretend the font is oblique now -->
+ <edit name="slant" mode="assign">
+ <const>oblique</const>
+ </edit>
+ <!-- and disable embedded bitmaps for artificial oblique -->
+ <edit name="embeddedbitmap" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+<!--
+ Synthetic emboldening for fonts that do not have bold face available
+ -->
+
+ <match target="font">
+ <!-- check to see if the font is just regular -->
+ <test name="weight" compare="less_eq">
+ <const>medium</const>
+ </test>
+ <!-- check to see if the pattern requests bold -->
+ <test target="pattern" name="weight" compare="more">
+ <const>medium</const>
+ </test>
+ <!--
+ set the embolden flag
+ needed for applications using cairo, e.g. gucharmap, gedit, ...
+ -->
+ <edit name="embolden" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <!--
+ set weight to bold
+ needed for applications using Xft directly, e.g. Firefox, ...
+ -->
+ <edit name="weight" mode="assign">
+ <const>bold</const>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.avail/README b/system/players/VideoPlayer/etc/fonts/conf.avail/README
new file mode 100644
index 0000000..79b0e96
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.avail/README
@@ -0,0 +1,48 @@
+conf.d/README
+
+Each file in this directory is a fontconfig configuration file. Fontconfig
+scans this directory, loading all files of the form [0-9][0-9]*. These files
+are normally installed in ../conf.avail and then symlinked here, allowing
+them to be easily installed and then enabled/disabled by adjusting the
+symlinks.
+
+The files are loaded in numeric order, the structure of the configuration
+has led to the following conventions in usage:
+
+ Files beginning with: Contain:
+
+ 00 through 09 Font directories
+ 10 through 19 system rendering defaults (AA, etc)
+ 10-autohint.conf
+ 10-no-sub-pixel.conf
+ 10-sub-pixel-bgr.conf
+ 10-sub-pixel-rgb.conf
+ 10-sub-pixel-vbgr.conf
+ 10-sub-pixel-vrgb.conf
+ 10-unhinted.conf
+ 20 through 29 font rendering options
+ 20-fix-globaladvance.conf
+ 20-lohit-gujarati.conf
+ 20-unhint-small-vera.conf
+ 30 through 39 family substitution
+ 30-urw-aliases.conf
+ 30-amt-aliases.conf
+ 40 through 49 generic identification, map family->generic
+ 40-generic-id.conf
+ 49-sansserif.conf
+ 50 through 59 alternate config file loading
+ 50-user.conf Load ~/.fonts.conf
+ 51-local.conf Load local.conf
+ 60 through 69 generic aliases
+ 60-latin.conf
+ 65-fonts-persian.conf
+ 65-nonlatin.conf
+ 69-unifont.conf
+ 70 through 79 select font (adjust which fonts are available)
+ 70-no-bitmaps.conf
+ 70-yes-bitmaps.conf
+ 80 through 89 match target="scan" (modify scanned patterns)
+ 80-delicious.conf
+ 90 through 98 font synthesis
+ 90-synthetic.conf
+
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/20-fix-globaladvance.conf b/system/players/VideoPlayer/etc/fonts/conf.d/20-fix-globaladvance.conf
new file mode 100644
index 0000000..a62162c
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/20-fix-globaladvance.conf
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+ Some Asian fonts misadvertise themselves as monospaced when
+ in fact they are dual-spaced (half and full). This makes
+ FreeType very confused as it forces all widths to match.
+ Undo this magic by disabling the width forcing code -->
+ <match target="font">
+ <test name="family"><string>GulimChe</string></test>
+ <edit name="globaladvance"><bool>false</bool></edit>
+ </match>
+
+ <match target="font">
+ <test name="family"><string>DotumChe</string></test>
+ <edit name="globaladvance"><bool>false</bool></edit>
+ </match>
+
+ <match target="font">
+ <test name="family"><string>BatangChe</string></test>
+ <edit name="globaladvance"><bool>false</bool></edit>
+ </match>
+
+ <match target="font">
+ <test name="family"><string>GungsuhChe</string></test>
+ <edit name="globaladvance"><bool>false</bool></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/20-lohit-gujarati.conf b/system/players/VideoPlayer/etc/fonts/conf.d/20-lohit-gujarati.conf
new file mode 100644
index 0000000..1c29d0d
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/20-lohit-gujarati.conf
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+
+<!-- Available Gujarti fonts look much better without hinting -->
+
+ <match target="font">
+ <test name="family"><string>Lohit Gujarati</string></test>
+ <edit name="hinting"><bool>false</bool></edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/20-unhint-small-vera.conf b/system/players/VideoPlayer/etc/fonts/conf.d/20-unhint-small-vera.conf
new file mode 100644
index 0000000..51999c5
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/20-unhint-small-vera.conf
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+ The Bitstream Vera fonts have GASP entries suggesting that hinting be
+ disabled below 8 ppem, but FreeType ignores those, preferring to use
+ the data found in the instructed hints. The initial Vera release
+ didn't include the right instructions in the 'prep' table. Fix this
+ by disabling hinting manually at smaller sizes (< 8ppem)
+ -->
+
+ <match target="font">
+ <test name="family">
+ <string>Bitstream Vera Sans</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Bitstream Vera Serif</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Bitstream Vera Sans Mono</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/30-amt-aliases.conf b/system/players/VideoPlayer/etc/fonts/conf.d/30-amt-aliases.conf
new file mode 100644
index 0000000..d6df67e
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/30-amt-aliases.conf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+ AMT provides metric and shape compatible fonts for these three web font
+ families.
+ -->
+ <alias>
+ <family>Times New Roman</family>
+ <accept><family>Thorndale AMT</family></accept>
+ </alias>
+ <alias>
+ <family>Arial</family>
+ <accept><family>Albany AMT</family></accept>
+ </alias>
+ <alias>
+ <family>Courier New</family>
+ <accept><family>Cumberland AMT</family></accept>
+ </alias>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/30-urw-aliases.conf b/system/players/VideoPlayer/etc/fonts/conf.d/30-urw-aliases.conf
new file mode 100644
index 0000000..cf90dd5
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/30-urw-aliases.conf
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+ URW provides metric and shape compatible fonts for these 10 Adobe families.
+ -->
+ <alias>
+ <family>Avant Garde</family>
+ <accept><family>URW Gothic L</family></accept>
+ </alias>
+ <alias>
+ <family>Bookman</family>
+ <accept><family>URW Bookman L</family></accept>
+ </alias>
+ <alias>
+ <family>Courier</family>
+ <accept><family>Nimbus Mono L</family></accept>
+ </alias>
+ <alias>
+ <family>Helvetica</family>
+ <accept><family>Nimbus Sans L</family></accept>
+ </alias>
+ <alias>
+ <family>New Century Schoolbook</family>
+ <accept><family>Century Schoolbook L</family></accept>
+ </alias>
+ <alias>
+ <family>Palatino</family>
+ <accept><family>URW Palladio L</family></accept>
+ </alias>
+ <alias>
+ <family>Times</family>
+ <accept><family>Nimbus Roman No9 L</family></accept>
+ </alias>
+ <alias>
+ <family>Zapf Chancery</family>
+ <accept><family>URW Chancery L</family></accept>
+ </alias>
+ <alias>
+ <family>Zapf Dingbats</family>
+ <accept><family>Dingbats</family></accept>
+ </alias>
+ <match target="pattern">
+ <test name="family">
+ <string>Symbol</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Standard Symbols L</string>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/40-generic.conf b/system/players/VideoPlayer/etc/fonts/conf.d/40-generic.conf
new file mode 100644
index 0000000..84e85e4
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/40-generic.conf
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ Mark common families with their generics so we'll get
+ something reasonable
+-->
+
+<!--
+ Serif faces
+ -->
+ <alias>
+ <family>Bitstream Vera Serif</family>
+ <family>DejaVu Serif</family>
+ <family>Times New Roman</family>
+ <family>Times</family>
+ <family>Nimbus Roman No9 L</family>
+ <family>Luxi Serif</family>
+ <family>Kochi Mincho</family>
+ <family>AR PL SungtiL GB</family>
+ <family>AR PL Mingti2L Big5</family>
+ <family>MS 明朝</family>
+ <family>Baekmuk Batang</family>
+ <family>FreeSerif</family>
+ <family>MgOpen Canonica</family>
+ <default><family>serif</family></default>
+ </alias>
+<!--
+ Sans-serif faces
+ -->
+ <alias>
+ <family>Bitstream Vera Sans</family>
+ <family>DejaVu Sans</family>
+ <family>Helvetica</family>
+ <family>Arial</family>
+ <family>Verdana</family>
+ <family>Albany AMT</family>
+ <family>Nimbus Sans L</family>
+ <family>Luxi Sans</family>
+ <family>Kochi Gothic</family>
+ <family>AR PL KaitiM GB</family>
+ <family>AR PL KaitiM Big5</family>
+ <family>MS ゴシック</family>
+ <family>Baekmuk Dotum</family>
+ <family>SimSun</family>
+ <family>FreeSans</family>
+ <family>MgOpen Modata</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+<!--
+ Monospace faces
+ -->
+ <alias>
+ <family>Bitstream Vera Sans Mono</family>
+ <family>DejaVu Sans Mono</family>
+ <family>Courier</family>
+ <family>Courier New</family>
+ <family>Andale Mono</family>
+ <family>Luxi Mono</family>
+ <family>Cumberland AMT</family>
+ <family>Nimbus Mono L</family>
+ <family>NSimSun</family>
+ <family>FreeMono</family>
+ <default><family>monospace</family></default>
+ </alias>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/49-sansserif.conf b/system/players/VideoPlayer/etc/fonts/conf.d/49-sansserif.conf
new file mode 100644
index 0000000..c6209a7
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/49-sansserif.conf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ If the font still has no generic name, add sans-serif
+ -->
+ <match target="pattern">
+ <test qual="all" name="family" compare="not_eq">
+ <string>sans-serif</string>
+ </test>
+ <test qual="all" name="family" compare="not_eq">
+ <string>serif</string>
+ </test>
+ <test qual="all" name="family" compare="not_eq">
+ <string>monospace</string>
+ </test>
+ <edit name="family" mode="append_last">
+ <string>sans-serif</string>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/50-user.conf b/system/players/VideoPlayer/etc/fonts/conf.d/50-user.conf
new file mode 100644
index 0000000..9a38a40
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/50-user.conf
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.avail/50-user.conf file to configure system font access -->
+<fontconfig>
+ <!-- Load per-user customization file -->
+ <include ignore_missing="yes">~/.fonts.conf</include>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/51-local.conf b/system/players/VideoPlayer/etc/fonts/conf.d/51-local.conf
new file mode 100644
index 0000000..d35046e
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/51-local.conf
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.avail/51-local.conf file to configure system font access -->
+<fontconfig>
+ <!-- Load local system customization file -->
+ <include ignore_missing="yes">local.conf</include>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/60-latin.conf b/system/players/VideoPlayer/etc/fonts/conf.d/60-latin.conf
new file mode 100644
index 0000000..06cdd7e
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/60-latin.conf
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>Bitstream Vera Serif</family>
+ <family>DejaVu Serif</family>
+ <family>Times New Roman</family>
+ <family>Thorndale AMT</family>
+ <family>Luxi Serif</family>
+ <family>Nimbus Roman No9 L</family>
+ <family>Times</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>Bitstream Vera Sans</family>
+ <family>DejaVu Sans</family>
+ <family>Verdana</family>
+ <family>Arial</family>
+ <family>Albany AMT</family>
+ <family>Luxi Sans</family>
+ <family>Nimbus Sans L</family>
+ <family>Helvetica</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>Bitstream Vera Sans Mono</family>
+ <family>DejaVu Sans Mono</family>
+ <family>Andale Mono</family>
+ <family>Courier New</family>
+ <family>Cumberland AMT</family>
+ <family>Luxi Mono</family>
+ <family>Nimbus Mono L</family>
+ <family>Courier</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/65-fonts-persian.conf b/system/players/VideoPlayer/etc/fonts/conf.d/65-fonts-persian.conf
new file mode 100644
index 0000000..4c9f81c
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/65-fonts-persian.conf
@@ -0,0 +1,539 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.d/10-fonts-persian.conf -->
+<!--
+ fonts-persian.conf
+ To configure Persian fonts from The FarsiWeb Project.
+
+ Copyright (C) 2005 Sharif FarsiWeb, Inc. <license@farsiweb.info>
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of Sharif FarsiWeb, Inc. not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. Sharif FarsiWeb, Inc. makes no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ SHARIF FARSIWEB, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+
+ ChangeLog:
+ 2005-04-03 Behdad Esfahbod: Initial revision.
+ 2005-10-09 Behdad Esfahbod: Turned off back-slant and Tahoma sections.
+ 2005-11-30 Behdad Esfahbod: Set Titr substitution size to 24 points.
+
+ Todo:
+ Add generic font "fantasy". Add some fonts into that category.
+ Maybe add a "cursive" generic font.
+ -->
+<fontconfig>
+
+
+<!--
+ We don't want weak bindings. So got to use the syntactical expansion
+ of alias tag to do binding=same :(. Please support that in alias.
+ -->
+
+
+<!-- Deprecated fonts are discouraged -->
+
+ <!-- Nesf[2] is officially deprecated and has problematic tables -->
+ <match>
+ <test name="family">
+ <string>Nesf</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Nesf2</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Nesf2</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Persian_sansserif_default</string>
+ </edit>
+ </match>
+
+ <!-- Tahoma looks awful (TURNED-OFF) -->
+ <!--match>
+ <test name="family">
+ <string>Tahoma</string>
+ </test>
+ <edit name="family" mode="prepend" binding="same">
+ <string>Persian_sansserif_default</string>
+ </edit>
+ </match-->
+
+<!-- Name changes and spelling variant aliases -->
+
+ <!-- Changed due to trademark problems -->
+ <match>
+ <test name="family">
+ <string>Nazanin</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Nazli</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Lotus</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Lotoos</string>
+ </edit>
+ </match>
+
+ <!-- Changed due to transcription orthography -->
+ <match>
+ <test name="family">
+ <string>Yaqut</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Yaghoot</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Yagut</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Yaghoot</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Yaghut</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Yaghoot</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Traffic</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Terafik</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Ferdowsi</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Ferdosi</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Fantezy</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Fantezi</string>
+ </edit>
+ </match>
+
+
+<!-- Classify fonts. -->
+
+ <!-- Persian_title class -->
+ <match>
+ <test name="family">
+ <string>Jadid</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_title</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Titr</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_title</string>
+ </edit>
+ </match>
+
+ <!-- Persian_fantasy class -->
+ <match>
+ <test name="family">
+ <string>Kamran</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Homa</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_fantasy</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Homa</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Kamran</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_fantasy</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Fantezi</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_fantasy</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Tabassom</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_fantasy</string>
+ </edit>
+ </match>
+
+ <!-- Persian_square class -->
+ <match>
+ <test name="family">
+ <string>Arshia</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Nasim</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Elham</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Farnaz</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Farnaz</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Elham</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ </match>
+ <match>
+ <test name="family">
+ <string>Sina</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ </match>
+
+<!-- Font ordering per class -->
+
+ <!-- Persian_title class -->
+ <match>
+ <test name="family">
+ <string>Persian_title</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_serif</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Jadid</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+ <!-- Persian_fantasy class -->
+ <match>
+ <test name="family">
+ <string>Persian_fantasy</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_square</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Tabassom</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Fantezi</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Kamran</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Homa</string>
+ </edit>
+ </match>
+
+ <!-- Persian_square class -->
+ <match>
+ <test name="family">
+ <string>Persian_square</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Persian_serif</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Sina</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Nasim</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Farnaz</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Elham</string>
+ </edit>
+ <edit name="family" mode="append" binding="same">
+ <string>Arshia</string>
+ </edit>
+ </match>
+
+<!-- Register the fonts that we actually do have -->
+
+ <match target="font">
+ <test name="family">
+ <string>Elham</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Homa</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Koodak</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Nazli</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Roya</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Terafik</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Titr</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+
+<!-- Our fonts should oblique to the other side (TURNED-OFF) -->
+
+ <match target="font">
+ <test name="foundry">
+ <!--string>farsiweb</string-->
+ <string>TURNED-OFF</string>
+ </test>
+ <test name="foundry">
+ <string>farsiweb</string>
+ </test>
+ <!-- check to see if the font is roman -->
+ <test name="slant">
+ <const>roman</const>
+ </test>
+ <!-- check to see if the pattern requested non-roman -->
+ <test target="pattern" name="slant" compare="not_eq">
+ <const>roman</const>
+ </test>
+ <!-- multiply the matrix to slant the font -->
+ <edit name="matrix" mode="assign">
+ <times>
+ <name>matrix</name>
+ <matrix><double>1</double><double>-0.2</double>
+ <double>0</double><double>1</double>
+ </matrix>
+ </times>
+ </edit>
+ <!-- pretend the font is oblique now -->
+ <edit name="slant" mode="assign">
+ <const>oblique</const>
+ </edit>
+ </match>
+
+
+<!--
+ We can't hint our fonts well, so turn off hinting.
+ Moreover, the bitmaps we have designed (well, they
+ have designed), suck, so disable them too.
+ -->
+
+ <match target="font">
+ <test name="foundry">
+ <string>farsiweb</string>
+ </test>
+ <edit name="autohint">
+ <bool>false</bool>
+ </edit>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ <edit name="embeddedbitmap">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+
+<!-- Alias our fonts to common families -->
+
+ <!-- Persian serif fonts -->
+ <alias>
+ <family>serif</family>
+ <accept>
+ <family>Nazli</family>
+ <family>Lotoos</family>
+ <family>Mitra</family>
+ <family>Ferdosi</family>
+ <family>Badr</family>
+ <family>Zar</family>
+ </accept>
+ </alias>
+
+ <!-- Persian sans-serif fonts -->
+ <alias>
+ <family>sans-serif</family>
+ <accept>
+ <family>Roya</family>
+ <family>Koodak</family>
+ <family>Terafik</family>
+ </accept>
+ </alias>
+
+ <!-- Persian monospace fonts -->
+ <alias>
+ <family>monospace</family>
+ <accept>
+ <!-- Not really monospace -->
+ <family>Terafik</family>
+ </accept>
+ </alias>
+
+
+<!-- Use Titr in titles -->
+
+ <!-- Both serif... -->
+ <match>
+ <test name="family">
+ <string>serif</string>
+ </test>
+ <test name="weight" compare="more_eq">
+ <int>200</int>
+ </test>
+ <test name="size" compare="more_eq">
+ <double>24</double>
+ </test>
+ <edit name="family" mode="prepend">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+ <!-- and sans-serif. -->
+ <match>
+ <test name="family">
+ <string>sans-serif</string>
+ </test>
+ <test name="weight" compare="more_eq">
+ <int>200</int>
+ </test>
+ <test name="size" compare="more_eq">
+ <double>24</double>
+ </test>
+ <edit name="family" mode="prepend">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+ <!-- and more. -->
+ <match>
+ <test name="family">
+ <string>Persian_sansserif_default</string>
+ </test>
+ <test name="weight" compare="more_eq">
+ <int>200</int>
+ </test>
+ <test name="size" compare="more_eq">
+ <double>24</double>
+ </test>
+ <edit name="family" mode="prepend" binding="same">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+
+<!-- Default substituted for deprecated sans-serif fonts -->
+
+ <match>
+ <test name="family">
+ <string>Persian_sansserif_default</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Roya</string>
+ </edit>
+ </match>
+
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/65-nonlatin.conf b/system/players/VideoPlayer/etc/fonts/conf.d/65-nonlatin.conf
new file mode 100644
index 0000000..f8dbb64
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/65-nonlatin.conf
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>Frank Ruehl</family>
+ <family>MgOpen Canonica</family>
+ <family>Kochi Mincho</family>
+ <family>AR PL SungtiL GB</family>
+ <family>AR PL Mingti2L Big5</family>
+ <family>MS 明朝</family>
+ <family>Baekmuk Batang</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>Nachlieli</family>
+ <family>MgOpen Modata</family>
+ <family>Kochi Gothic</family>
+ <family>AR PL KaitiM GB</family>
+ <family>AR PL KaitiM Big5</family>
+ <family>MS ゴシック</family>
+ <family>Baekmuk Dotum</family>
+ <family>SimSun</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>Miriam Mono</family>
+ <family>Kochi Gothic</family>
+ <family>AR PL KaitiM GB</family>
+ <family>Baekmuk Dotum</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/69-unifont.conf b/system/players/VideoPlayer/etc/fonts/conf.d/69-unifont.conf
new file mode 100644
index 0000000..a784af9
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/69-unifont.conf
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>FreeSerif</family>
+ <family>Code2000</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>FreeSans</family>
+ <family>Arial Unicode MS</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>FreeMono</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/80-delicious.conf b/system/players/VideoPlayer/etc/fonts/conf.d/80-delicious.conf
new file mode 100644
index 0000000..701429b
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/80-delicious.conf
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.d/60-delicious.conf -->
+<fontconfig>
+<!-- Fix-ups for Delicious family -->
+
+<!-- Delicious 'heavy' variant says its Medium weight -->
+<match target="scan">
+ <test name="family">
+ <string>Delicious</string>
+ </test>
+ <test name="style">
+ <string>Heavy</string>
+ </test>
+ <edit name="weight">
+ <const>heavy</const>
+ </edit>
+</match>
+
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/conf.d/90-synthetic.conf b/system/players/VideoPlayer/etc/fonts/conf.d/90-synthetic.conf
new file mode 100644
index 0000000..9550c93
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/conf.d/90-synthetic.conf
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ Artificial oblique for fonts without an italic or oblique version
+ -->
+
+ <match target="font">
+ <!-- check to see if the font is roman -->
+ <test name="slant">
+ <const>roman</const>
+ </test>
+ <!-- check to see if the pattern requested non-roman -->
+ <test target="pattern" name="slant" compare="not_eq">
+ <const>roman</const>
+ </test>
+ <!-- multiply the matrix to slant the font -->
+ <edit name="matrix" mode="assign">
+ <times>
+ <name>matrix</name>
+ <matrix><double>1</double><double>0.2</double>
+ <double>0</double><double>1</double>
+ </matrix>
+ </times>
+ </edit>
+ <!-- pretend the font is oblique now -->
+ <edit name="slant" mode="assign">
+ <const>oblique</const>
+ </edit>
+ <!-- and disable embedded bitmaps for artificial oblique -->
+ <edit name="embeddedbitmap" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+<!--
+ Synthetic emboldening for fonts that do not have bold face available
+ -->
+
+ <match target="font">
+ <!-- check to see if the font is just regular -->
+ <test name="weight" compare="less_eq">
+ <const>medium</const>
+ </test>
+ <!-- check to see if the pattern requests bold -->
+ <test target="pattern" name="weight" compare="more">
+ <const>medium</const>
+ </test>
+ <!--
+ set the embolden flag
+ needed for applications using cairo, e.g. gucharmap, gedit, ...
+ -->
+ <edit name="embolden" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <!--
+ set weight to bold
+ needed for applications using Xft directly, e.g. Firefox, ...
+ -->
+ <edit name="weight" mode="assign">
+ <const>bold</const>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/fonts.conf b/system/players/VideoPlayer/etc/fonts/fonts.conf
new file mode 100644
index 0000000..9e2067c
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/fonts.conf
@@ -0,0 +1,156 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/fonts.conf file to configure system font access -->
+<fontconfig>
+
+<!--
+ DO NOT EDIT THIS FILE.
+ IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.
+ LOCAL CHANGES BELONG IN 'local.conf'.
+
+ The intent of this standard configuration file is to be adequate for
+ most environments. If you have a reasonably normal environment and
+ have found problems with this configuration, they are probably
+ things that others will also want fixed. Please submit any
+ problems to the fontconfig bugzilla system located at fontconfig.org
+
+ Note that the normal 'make install' procedure for fontconfig is to
+ replace any existing fonts.conf file with the new version. Place
+ any local customizations in local.conf which this file references.
+
+ Keith Packard
+-->
+
+<!-- Font directory list -->
+
+<!--
+ Uncomment this directory if we need libass and fontconfig to access all system fonts.
+ The drawback is the long initial indexing time by fontconfig, and mkv files usually
+ include their fonts.
+ <dir>WINDOWSFONTDIR</dir>
+-->
+ <dir>media/Fonts</dir> <!-- used by an installed XBMC -->
+ <dir>../../media/Fonts</dir> <!-- used when running in Visual Studio -->
+ <dir>~/.fonts</dir>
+
+<!-- Font cache directory list -->
+
+ <cachedir>WINDOWSTEMPDIR_FONTCONFIG_CACHE</cachedir>
+ <cachedir>~/.fontconfig</cachedir>
+
+<!--
+ Accept deprecated 'mono' alias, replacing it with 'monospace'
+-->
+ <match target="pattern">
+ <test qual="any" name="family">
+ <string>mono</string>
+ </test>
+ <edit name="family" mode="assign">
+ <string>monospace</string>
+ </edit>
+ </match>
+
+<!--
+ Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
+-->
+ <match target="pattern">
+ <test qual="any" name="family">
+ <string>sans serif</string>
+ </test>
+ <edit name="family" mode="assign">
+ <string>sans-serif</string>
+ </edit>
+ </match>
+
+<!--
+ Accept deprecated 'sans' alias, replacing it with 'sans-serif'
+-->
+ <match target="pattern">
+ <test qual="any" name="family">
+ <string>sans</string>
+ </test>
+ <edit name="family" mode="assign">
+ <string>sans-serif</string>
+ </edit>
+ </match>
+
+<!--
+ Load local system customization file
+-->
+ <include ignore_missing="yes">conf.d</include>
+
+ <config>
+<!--
+ These are the default Unicode chars that are expected to be blank
+ in fonts. All other blank chars are assumed to be broken and
+ won't appear in the resulting charsets
+ -->
+ <blank>
+ <int>0x0020</int> <!-- SPACE -->
+ <int>0x00A0</int> <!-- NO-BREAK SPACE -->
+ <int>0x00AD</int> <!-- SOFT HYPHEN -->
+ <int>0x034F</int> <!-- COMBINING GRAPHEME JOINER -->
+ <int>0x0600</int> <!-- ARABIC NUMBER SIGN -->
+ <int>0x0601</int> <!-- ARABIC SIGN SANAH -->
+ <int>0x0602</int> <!-- ARABIC FOOTNOTE MARKER -->
+ <int>0x0603</int> <!-- ARABIC SIGN SAFHA -->
+ <int>0x06DD</int> <!-- ARABIC END OF AYAH -->
+ <int>0x070F</int> <!-- SYRIAC ABBREVIATION MARK -->
+ <int>0x115F</int> <!-- HANGUL CHOSEONG FILLER -->
+ <int>0x1160</int> <!-- HANGUL JUNGSEONG FILLER -->
+ <int>0x1680</int> <!-- OGHAM SPACE MARK -->
+ <int>0x17B4</int> <!-- KHMER VOWEL INHERENT AQ -->
+ <int>0x17B5</int> <!-- KHMER VOWEL INHERENT AA -->
+ <int>0x180E</int> <!-- MONGOLIAN VOWEL SEPARATOR -->
+ <int>0x2000</int> <!-- EN QUAD -->
+ <int>0x2001</int> <!-- EM QUAD -->
+ <int>0x2002</int> <!-- EN SPACE -->
+ <int>0x2003</int> <!-- EM SPACE -->
+ <int>0x2004</int> <!-- THREE-PER-EM SPACE -->
+ <int>0x2005</int> <!-- FOUR-PER-EM SPACE -->
+ <int>0x2006</int> <!-- SIX-PER-EM SPACE -->
+ <int>0x2007</int> <!-- FIGURE SPACE -->
+ <int>0x2008</int> <!-- PUNCTUATION SPACE -->
+ <int>0x2009</int> <!-- THIN SPACE -->
+ <int>0x200A</int> <!-- HAIR SPACE -->
+ <int>0x200B</int> <!-- ZERO WIDTH SPACE -->
+ <int>0x200C</int> <!-- ZERO WIDTH NON-JOINER -->
+ <int>0x200D</int> <!-- ZERO WIDTH JOINER -->
+ <int>0x200E</int> <!-- LEFT-TO-RIGHT MARK -->
+ <int>0x200F</int> <!-- RIGHT-TO-LEFT MARK -->
+ <int>0x2028</int> <!-- LINE SEPARATOR -->
+ <int>0x2029</int> <!-- PARAGRAPH SEPARATOR -->
+ <int>0x202A</int> <!-- LEFT-TO-RIGHT EMBEDDING -->
+ <int>0x202B</int> <!-- RIGHT-TO-LEFT EMBEDDING -->
+ <int>0x202C</int> <!-- POP DIRECTIONAL FORMATTING -->
+ <int>0x202D</int> <!-- LEFT-TO-RIGHT OVERRIDE -->
+ <int>0x202E</int> <!-- RIGHT-TO-LEFT OVERRIDE -->
+ <int>0x202F</int> <!-- NARROW NO-BREAK SPACE -->
+ <int>0x205F</int> <!-- MEDIUM MATHEMATICAL SPACE -->
+ <int>0x2060</int> <!-- WORD JOINER -->
+ <int>0x2061</int> <!-- FUNCTION APPLICATION -->
+ <int>0x2062</int> <!-- INVISIBLE TIMES -->
+ <int>0x2063</int> <!-- INVISIBLE SEPARATOR -->
+ <int>0x206A</int> <!-- INHIBIT SYMMETRIC SWAPPING -->
+ <int>0x206B</int> <!-- ACTIVATE SYMMETRIC SWAPPING -->
+ <int>0x206C</int> <!-- INHIBIT ARABIC FORM SHAPING -->
+ <int>0x206D</int> <!-- ACTIVATE ARABIC FORM SHAPING -->
+ <int>0x206E</int> <!-- NATIONAL DIGIT SHAPES -->
+ <int>0x206F</int> <!-- NOMINAL DIGIT SHAPES -->
+ <int>0x3000</int> <!-- IDEOGRAPHIC SPACE -->
+ <int>0x3164</int> <!-- HANGUL FILLER -->
+ <int>0xFEFF</int> <!-- ZERO WIDTH NO-BREAK SPACE -->
+ <int>0xFFA0</int> <!-- HALFWIDTH HANGUL FILLER -->
+ <int>0xFFF9</int> <!-- INTERLINEAR ANNOTATION ANCHOR -->
+ <int>0xFFFA</int> <!-- INTERLINEAR ANNOTATION SEPARATOR -->
+ <int>0xFFFB</int> <!-- INTERLINEAR ANNOTATION TERMINATOR -->
+ </blank>
+<!--
+ Rescan configuration every 30 seconds when FcFontSetList is called
+ -->
+ <rescan>
+ <int>30</int>
+ </rescan>
+ </config>
+
+</fontconfig>
diff --git a/system/players/VideoPlayer/etc/fonts/fonts.dtd b/system/players/VideoPlayer/etc/fonts/fonts.dtd
new file mode 100644
index 0000000..d323a38
--- /dev/null
+++ b/system/players/VideoPlayer/etc/fonts/fonts.dtd
@@ -0,0 +1,222 @@
+<!-- This is the Document Type Definition for font configuration files -->
+<!ELEMENT fontconfig (dir |
+ cache |
+ cachedir |
+ include |
+ config |
+ selectfont |
+ match |
+ alias)* >
+
+<!--
+ Add a directory that provides fonts
+-->
+<!ELEMENT dir (#PCDATA)>
+<!ATTLIST dir xml:space (default|preserve) 'preserve'>
+
+<!--
+ Define the per-user file that holds cache font information.
+
+ If the filename begins with '~', it is replaced with the users
+ home directory path.
+-->
+<!ELEMENT cache (#PCDATA)>
+<!ATTLIST cache xml:space (default|preserve) 'preserve'>
+
+<!--
+ Add a directory that is searched for font cache files.
+ These hold per-directory cache data and are searched in
+ order for each directory. When writing cache files, the first
+ directory which allows the cache file to be created is used.
+
+ A leading '~' in a directory name is replaced with the users
+ home directory path.
+-->
+<!ELEMENT cachedir (#PCDATA)>
+<!ATTLIST cachedir xml:space (default|preserve) 'preserve'>
+
+<!--
+ Reference another configuration file; note that this
+ is another complete font configuration file and not
+ just a file included by the XML parser.
+
+ Set 'ignore_missing' to 'yes' if errors are to be ignored.
+
+ If the filename begins with '~', it is replaced with the users
+ home directory path.
+-->
+<!ELEMENT include (#PCDATA)>
+<!ATTLIST include
+ ignore_missing (no|yes) "no"
+ xml:space (default|preserve) "preserve">
+
+<!--
+ Global library configuration data
+ -->
+<!ELEMENT config (blank|rescan)*>
+
+<!--
+ Specify the set of Unicode encoding values which
+ represent glyphs that are allowed to contain no
+ data. With this list, fontconfig can examine
+ fonts for broken glyphs and eliminate them from
+ the set of valid Unicode chars. This idea
+ was borrowed from Mozilla
+ -->
+<!ELEMENT blank (int)*>
+
+<!--
+ Aliases are just a special case for multiple match elements
+
+ They are syntactically equivalent to:
+
+ <match>
+ <test name="family">
+ <string value=[family]/>
+ </test>
+ <edit name="family" mode="prepend">
+ <string value=[prefer]/>
+ ...
+ </edit>
+ <edit name="family" mode="append">
+ <string value=[accept]/>
+ ...
+ </edit>
+ <edit name="family" mode="append_last">
+ <string value=[default]/>
+ ...
+ </edit>
+ </match>
+-->
+<!--
+ Periodically rescan the font configuration and
+ directories to synch internal state with filesystem
+ -->
+<!ELEMENT rescan (int)>
+
+<!--
+ Edit list of available fonts at startup/reload time
+ -->
+<!ELEMENT selectfont (rejectfont | acceptfont)* >
+
+<!ELEMENT rejectfont (glob | pattern)*>
+
+<!ELEMENT acceptfont (glob | pattern)*>
+
+<!ELEMENT glob (#PCDATA)>
+
+<!ELEMENT pattern (patelt)*>
+
+<!ENTITY % constant 'int|double|string|matrix|bool|charset|const'>
+
+<!ELEMENT patelt (%constant;)*>
+<!ATTLIST patelt
+ name CDATA #REQUIRED>
+
+<!ELEMENT alias (family*, prefer?, accept?, default?)>
+<!ELEMENT prefer (family)*>
+<!ELEMENT accept (family)*>
+<!ELEMENT default (family)*>
+<!ELEMENT family (#PCDATA)>
+<!ATTLIST family xml:space (default|preserve) 'preserve'>
+
+<!ENTITY % expr 'int|double|string|matrix|bool|charset
+ |name|const
+ |or|and|eq|not_eq|less|less_eq|more|more_eq|contains|not_contains
+ |plus|minus|times|divide|not|if|floor|ceil|round|trunc'>
+
+<!--
+ Match and edit patterns.
+
+ If 'target' is 'pattern', execute the match before selecting a font.
+ if 'target' is 'font', execute the match on the result of a font
+ selection.
+-->
+<!ELEMENT match (test*, edit*)>
+<!ATTLIST match
+ target (pattern|font|scan) "pattern">
+
+<!--
+ Match a field in a pattern
+
+ if 'qual' is 'any', then the match succeeds if any value in the field matches.
+ if 'qual' is 'all', then the match succeeds only if all values match.
+ if 'qual' is 'first', then the match succeeds only if the first value matches.
+ if 'qual' is 'not_first', then the match succeeds only if any value other than
+ the first matches.
+ For match elements with target=font, if test 'target' is 'pattern',
+ then the test is applied to the pattern used in matching rather than
+ to the resulting font.
+
+ Match elements with target=scan are applied as fonts are scanned.
+ They edit the pattern generated from the scanned font and affect
+ what the fontconfig database contains.
+-->
+<!ELEMENT test (%expr;)*>
+<!ATTLIST test
+ qual (any|all|first|not_first) "any"
+ name CDATA #REQUIRED
+ target (pattern|font|default) "default"
+ compare (eq|not_eq|less|less_eq|more|more_eq|contains|not_contains) "eq">
+
+<!--
+ Edit a field in a pattern
+
+ The enclosed values are used together to edit the list of values
+ associated with 'name'.
+
+ If 'name' matches one of those used in a test element for this match element:
+ if 'mode' is 'assign', replace the matched value.
+ if 'mode' is 'assign_replace', replace all of the values
+ if 'mode' is 'prepend', insert before the matched value
+ if 'mode' is 'append', insert after the matched value
+ if 'mode' is 'prepend_first', insert before all of the values
+ if 'mode' is 'append_last', insert after all of the values
+ If 'name' doesn't match any of those used in a test element:
+ if 'mode' is 'assign' or 'assign_replace, replace all of the values
+ if 'mode' is 'prepend' or 'prepend_first', insert before all of the values
+ if 'mode' is 'append' or 'append_last', insert after all of the values
+-->
+<!ELEMENT edit (%expr;)*>
+<!ATTLIST edit
+ name CDATA #REQUIRED
+ mode (assign|assign_replace|prepend|append|prepend_first|append_last) "assign"
+ binding (weak|strong|same) "weak">
+
+<!--
+ Elements of expressions follow
+-->
+<!ELEMENT int (#PCDATA)>
+<!ATTLIST int xml:space (default|preserve) 'preserve'>
+<!ELEMENT double (#PCDATA)>
+<!ATTLIST double xml:space (default|preserve) 'preserve'>
+<!ELEMENT string (#PCDATA)>
+<!ATTLIST string xml:space (default|preserve) 'preserve'>
+<!ELEMENT matrix (double,double,double,double)>
+<!ELEMENT bool (#PCDATA)>
+<!ELEMENT charset (#PCDATA)>
+<!ATTLIST charset xml:space (default|preserve) 'preserve'>
+<!ELEMENT name (#PCDATA)>
+<!ATTLIST name xml:space (default|preserve) 'preserve'>
+<!ELEMENT const (#PCDATA)>
+<!ATTLIST const xml:space (default|preserve) 'preserve'>
+<!ELEMENT or (%expr;)*>
+<!ELEMENT and (%expr;)*>
+<!ELEMENT eq ((%expr;), (%expr;))>
+<!ELEMENT not_eq ((%expr;), (%expr;))>
+<!ELEMENT less ((%expr;), (%expr;))>
+<!ELEMENT less_eq ((%expr;), (%expr;))>
+<!ELEMENT more ((%expr;), (%expr;))>
+<!ELEMENT more_eq ((%expr;), (%expr;))>
+<!ELEMENT contains ((%expr;), (%expr;))>
+<!ELEMENT not_contains ((%expr;), (%expr;))>
+<!ELEMENT plus (%expr;)*>
+<!ELEMENT minus (%expr;)*>
+<!ELEMENT times (%expr;)*>
+<!ELEMENT divide (%expr;)*>
+<!ELEMENT not (%expr;)>
+<!ELEMENT if ((%expr;), (%expr;), (%expr;))>
+<!ELEMENT floor (%expr;)>
+<!ELEMENT ceil (%expr;)>
+<!ELEMENT round (%expr;)>
+<!ELEMENT trunc (%expr;)>
diff --git a/system/settings/android.xml b/system/settings/android.xml
new file mode 100644
index 0000000..661a978
--- /dev/null
+++ b/system/settings/android.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings version="1">
+ <section id="system">
+ <category id="display">
+ <group id="1">
+ <setting id="videoscreen.screen">
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.fakefullscreen">
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.blankdisplays">
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.limitgui" type="integer" label="37021" help="36548">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="37026">0</option> <!-- auto -->
+ <option label="37028">720</option> <!-- 720 -->
+ <option label="37046">1080</option> <!-- 1080 -->
+ <option label="37030">9999</option> <!-- unlimited -->
+ </options>
+ </constraints>
+ <control type="spinner" format="string" />
+ <control type="edit" format="integer" />
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="interface">
+ <category id="regional">
+ <group id="2">
+ <setting id="locale.timezonecountry">
+ <visible>false</visible>
+ </setting>
+ <setting id="locale.timezone">
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ </section>
+</settings>
diff --git a/system/settings/darwin.xml b/system/settings/darwin.xml
new file mode 100644
index 0000000..55c98ad
--- /dev/null
+++ b/system/settings/darwin.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings version="1">
+ <section id="system">
+ <category id="display">
+ <group id="1">
+ <setting id="videoscreen.resolution" label="131" />
+ <setting id="videoscreen.fakefullscreen">
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ <category id="audio">
+ <group id="1">
+ <setting id="audiooutput.channels" help="36367" />
+ </group>
+ <group id="3">
+ <setting id="audiooutput.eac3passthrough">
+ <visible>false</visible>
+ </setting>
+ <setting id="audiooutput.truehdpassthrough">
+ <visible>false</visible>
+ </setting>
+ <setting id="audiooutput.dtshdpassthrough">
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ <category id="input">
+ <group id="3">
+ <setting id="input.appleremotemode" type="integer" label="13600" help="36416">
+ <level>1</level>
+ <default>1</default> <!-- APPLE_REMOTE_STANDARD -->
+ <constraints>
+ <options>
+ <option label="13610">0</option> <!-- APPLE_REMOTE_DISABLED -->
+ <option label="13611">1</option> <!-- APPLE_REMOTE_STANDARD -->
+ <option label="13612">2</option> <!-- APPLE_REMOTE_UNIVERSAL -->
+ <option label="13613">3</option> <!-- APPLE_REMOTE_MULTIREMOTE -->
+ </options>
+ </constraints>
+ <control type="list" format="string"/>
+ </setting>
+ <setting id="input.appleremotealwayson" type="boolean" label="13602" help="36417">
+ <level>4</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="input.appleremotemode" operator="!is">0</dependency> <!-- APPLE_REMOTE_DISABLED -->
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="input.appleremotesequencetime" type="integer" label="13603" help="36418">
+ <level>1</level>
+ <default>500</default>
+ <constraints>
+ <minimum label="351">50</minimum>
+ <step>50</step>
+ <maximum>1000</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="input.appleremotemode" operator="is">2</dependency> <!-- APPLE_REMOTE_UNIVERSAL -->
+ </dependencies>
+ <control type="spinner" format="string">
+ <formatlabel>14046</formatlabel>
+ </control>
+ </setting>
+ </group>
+ </category>
+ </section>
+</settings>
diff --git a/system/settings/darwin_ios.xml b/system/settings/darwin_ios.xml
new file mode 100644
index 0000000..b94522a
--- /dev/null
+++ b/system/settings/darwin_ios.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings version="1">
+ <section id="player" label="14200" help="">
+ <category id="videoplayer">
+ <group id="2">
+ <setting id="videoplayer.adjustrefreshrate">
+ <visible>false</visible>
+ </setting>
+ </group>
+ <group id="3">
+ <setting id="videoplayer.hqscalers">
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ <category id="discs">
+ <group id="3">
+ <visible>false</visible>
+ </group>
+ </category>
+ </section>
+ <section id="system">
+ <category id="display">
+ <group id="1">
+ <setting id="videoscreen.resolution">
+ <default>17</default> <!-- RES_CUSTOM -->
+ </setting>
+ <setting id="videoscreen.fakefullscreen">
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.blankdisplays">
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.delayrefreshchange">
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ <category id="audio">
+ <group id="1">
+ <setting id="audiooutput.audiodevice" type="string">
+ <default>Default</default>
+ <visible>false</visible>
+ </setting>
+ </group>
+ <group id="3">
+ <setting id="audiooutput.passthroughdevice" type="string">
+ <default>Default</default>
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ <category id="input">
+ <group id="1">
+ <setting id="input.peripherals">
+ <visible>false</visible>
+ </setting>
+ </group>
+ <group id="2">
+ <setting id="input.enablemouse">
+ <visible>false</visible>
+ </setting>
+ </group>
+ <group id="3">
+ <setting id="input.appleremotemode" type="integer" label="13600" help="36416">
+ <visible>false</visible>
+ </setting>
+ <setting id="input.appleremotesequencetime" type="integer" label="13603" help="36418">
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ <category id="logging">
+ <group id="1">
+ <setting id="debug.sharelog" type="action" label="39118">
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="interface">
+ <category id="skin">
+ <group id="1">
+ <setting id="lookandfeel.skin" type="addon">
+ <default>skin.estouchy</default>
+ </setting>
+ </group>
+ </category>
+ </section>
+</settings>
diff --git a/system/settings/darwin_osx.xml b/system/settings/darwin_osx.xml
new file mode 100644
index 0000000..5d73f3b
--- /dev/null
+++ b/system/settings/darwin_osx.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings version="1">
+ <section id="system">
+ <category id="input">
+ <group id="3">
+ <setting id="input.appleremotealwayson">
+ <level>1</level>
+ </setting>
+ </group>
+ </category>
+ </section>
+</settings>
diff --git a/system/settings/darwin_tvos.xml b/system/settings/darwin_tvos.xml
new file mode 100644
index 0000000..05bc49f
--- /dev/null
+++ b/system/settings/darwin_tvos.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings>
+ <section id="interface">
+ <category id="screensaver">
+ <visible>false</visible>
+ <group id="1">
+ <setting id="screensaver.mode">
+ <default></default>
+ </setting>
+ <setting id="screensaver.usemusicvisinstead">
+ <default>false</default>
+ </setting>
+ <setting id="screensaver.usedimonpause">
+ <default>false</default>
+ </setting>
+ </group>
+ </category>
+ <category id="masterlock">
+ <visible>false</visible>
+ </category>
+ </section>
+ <section id="system">
+ <category id="input">
+ <group id="1">
+ <setting id="input.peripherals">
+ <visible>false</visible>
+ </setting>
+ </group>
+ <group id="2">
+ <setting id="input.enablemouse">
+ <default>false</default>
+ <visible>false</visible>
+ </setting>
+ <setting id="input.controllerconfig">
+ <visible>false</visible>
+ </setting>
+ </group>
+ <!-- Apple Remote -->
+ <group id="3">
+ <setting id="input.appleremotemode">
+ <visible>false</visible>
+ </setting>
+ <setting id="input.appleremotesequencetime">
+ <visible>false</visible>
+ </setting>
+ </group>
+ <!-- Apple TV -->
+ <group id="4" label="13601">
+ <!-- Siri remote idle timer -->
+ <setting id="input.siriremoteidletimerenabled" type="boolean" label="24160" help="24161">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="input.siriremoteidletime" type="integer" label="24154" help="24155">
+ <level>1</level>
+ <default>60</default>
+ <constraints>
+ <options>
+ <option label="24156">30</option>
+ <option label="24157">60</option>
+ <option label="24158">90</option>
+ <option label="24159">120</option>
+ </options>
+ </constraints>
+ <control type="list" format="integer" />
+ <dependencies>
+ <dependency type="enable" setting="input.siriremoteidletimerenabled">true</dependency>
+ </dependencies>
+ </setting>
+ <!-- Siri remote sensitivity -->
+ <setting id="input.siriremotehorizontalsensitivity" type="integer" label="34009" help="24163">
+ <level>2</level>
+ <default>500</default>
+ <constraints>
+ <minimum>50</minimum>
+ <step>50</step>
+ <maximum>1450</maximum>
+ </constraints>
+ <control type="spinner" format="integer" delayed="false"/>
+ </setting>
+ <setting id="input.siriremoteverticalsensitivity" type="integer" label="34010" help="24163">
+ <level>2</level>
+ <default>650</default>
+ <constraints>
+ <minimum>50</minimum>
+ <step>50</step>
+ <maximum>1450</maximum>
+ </constraints>
+ <control type="spinner" format="integer" delayed="false"/>
+ </setting>
+ <setting id="input.tvosusekodikeyboard" type="boolean" label="24162" help="34008">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="player">
+ <category id="videoplayer">
+ <group id="3">
+ <setting id="videoplayer.hqscalers">
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ <category id="discs">
+ <group id="3" label="620">
+ <visible>false</visible>
+ </group>
+ </category>
+ </section>
+ <section id="services" label="14036" help="36319">
+ <category id="airplay" label="1273" help="36602">
+ <visible>false</visible>
+ </category>
+ </section>
+ <section id="system">
+ <category id="display">
+ <group id="1">
+ <setting id="videoscreen.fakefullscreen">
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.blankdisplays">
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.resolution" type="integer" parent="videoscreen.screen" label="169" help="36352">
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.vsync" type="integer" label="13105" help="36356">
+ <default>2</default> <!-- VSYNC_ALWAYS -->
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ <category id="audio">
+ <group id="1">
+ <setting id="audiooutput.audiodevice" type="string">
+ <default>Default</default>
+ <visible>false</visible>
+ </setting>
+ </group>
+ <group id="3">
+ <setting id="audiooutput.passthroughdevice" type="string">
+ <default>Default</default>
+ <visible>false</visible>
+ </setting>
+ <setting id="audiooutput.supportdtshdcpudecoding" type="boolean">
+ <default>false</default>
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ <category id="powermanagement">
+ <group id="1">
+ <visible>false</visible>
+ </group>
+ </category>
+ </section>
+</settings>
diff --git a/system/settings/freebsd.xml b/system/settings/freebsd.xml
new file mode 120000
index 0000000..fde0ce7
--- /dev/null
+++ b/system/settings/freebsd.xml
@@ -0,0 +1 @@
+linux.xml \ No newline at end of file
diff --git a/system/settings/linux.xml b/system/settings/linux.xml
new file mode 100644
index 0000000..531974f
--- /dev/null
+++ b/system/settings/linux.xml
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings version="1">
+ <section id="player">
+ <category id="videoplayer">
+ <group id="3">
+ <setting id="videoplayer.usevdpau" type="boolean" label="13425" help="36155">
+ <requirement>HAVE_LIBVDPAU</requirement>
+ <visible>false</visible>
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevdpaumixer" type="boolean" label="13437" help="36421">
+ <requirement>HAVE_LIBVDPAU</requirement>
+ <visible>false</visible>
+ <level>2</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevdpau" operator="is">true</condition> <!-- USE VDPAU -->
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevdpaumpeg2" type="boolean" parent="videoplayer.usevdpau" label="13441" help="13442">
+ <requirement>HAVE_LIBVDPAU</requirement>
+ <visible>false</visible>
+ <level>3</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevdpau" operator="is">true</condition> <!-- USE VDPAU -->
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevdpaumpeg4" type="boolean" parent="videoplayer.usevdpau" label="13443" help="13444">
+ <requirement>HAVE_LIBVDPAU</requirement>
+ <visible>false</visible>
+ <level>3</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevdpau" operator="is">true</condition> <!-- USE VDPAU -->
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevdpauvc1" type="boolean" parent="videoplayer.usevdpau" label="13445" help="13446">
+ <requirement>HAVE_LIBVDPAU</requirement>
+ <visible>false</visible>
+ <level>3</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevdpau" operator="is">true</condition> <!-- USE VDPAU -->
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevaapi" type="boolean" label="13426" help="36156">
+ <requirement>HAVE_LIBVA</requirement>
+ <visible>false</visible>
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevaapimpeg2" type="boolean" parent="videoplayer.usevaapi" label="13447" help="13448">
+ <requirement>HAVE_LIBVA</requirement>
+ <visible>false</visible>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevaapi" operator="is">true</condition>
+ </dependency>
+ </dependencies>
+ <level>3</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevaapimpeg4" type="boolean" parent="videoplayer.usevaapi" label="13449" help="13450">
+ <requirement>HAVE_LIBVA</requirement>
+ <visible>false</visible>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevaapi" operator="is">true</condition>
+ </dependency>
+ </dependencies>
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevaapivc1" type="boolean" parent="videoplayer.usevaapi" label="13451" help="13452">
+ <requirement>HAVE_LIBVA</requirement>
+ <visible>false</visible>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevaapi" operator="is">true</condition>
+ </dependency>
+ </dependencies>
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevaapivp8" type="boolean" parent="videoplayer.usevaapi" label="13453" help="13454">
+ <requirement>HAVE_LIBVA</requirement>
+ <visible>false</visible>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevaapi" operator="is">true</condition>
+ </dependency>
+ </dependencies>
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevaapivp9" type="boolean" parent="videoplayer.usevaapi" label="13455" help="13456">
+ <requirement>HAVE_LIBVA</requirement>
+ <visible>false</visible>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevaapi" operator="is">true</condition>
+ </dependency>
+ </dependencies>
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevaapihevc" type="boolean" parent="videoplayer.usevaapi" label="13460" help="13461">
+ <requirement>HAVE_LIBVA</requirement>
+ <visible>false</visible>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevaapi" operator="is">true</condition>
+ </dependency>
+ </dependencies>
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevaapiav1" type="boolean" parent="videoplayer.usevaapi" label="13468" help="13469">
+ <requirement>HAVE_LIBVA</requirement>
+ <visible>false</visible>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevaapi" operator="is">true</condition>
+ </dependency>
+ </dependencies>
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.prefervaapirender" type="boolean" parent="videoplayer.usevaapi" label="13457" help="36433">
+ <requirement>HAVE_LIBVA</requirement>
+ <visible>false</visible>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.usevaapi" operator="is">true</condition>
+ </dependency>
+ </dependencies>
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.useprimedecoder" type="boolean" label="13430" help="36172">
+ <requirement>HAS_GLES</requirement>
+ <visible>false</visible>
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.useprimedecoderforhw" type="boolean" parent="videoplayer.useprimedecoder" label="13438" help="36172">
+ <requirement>HAS_GLES</requirement>
+ <visible>false</visible>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="videoplayer.useprimedecoder" operator="is">true</condition>
+ </dependency>
+ </dependencies>
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.useprimerenderer" type="integer" label="13462" help="13463">
+ <requirement>HAS_GLES</requirement>
+ <visible>false</visible>
+ <level>2</level>
+ <default>1</default>
+ <constraints>
+ <options>
+ <option label="13464">0</option> <!-- DIRECT -->
+ <option label="13465">1</option> <!-- GLES -->
+ </options>
+ </constraints>
+ <control type="spinner" format="string" />
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="system">
+ <category id="display">
+ <group id="1">
+ <setting id="videoscreen.fakefullscreen">
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.hwscalingfilter" type="boolean" label="39151" help="39152">
+ <visible>false</visible>
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoscreen.limitguisize" type="integer" label="37021" help="36548">
+ <visible>false</visible>
+ <level>3</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="37030">0</option> <!-- Unlimited -->
+ <option label="37028">1</option> <!-- 720 -->
+ <option label="13466">2</option> <!-- 1080 / 720 (>30Hz) -->
+ <option label="37046">3</option> <!-- 1080 -->
+ <option label="13467">4</option> <!-- Unlimited / 1080 (>30Hz) -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videoscreen.limitedrange" type="boolean" label="36042" help="36359">
+ <level>3</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="input">
+ <group id="4" label="35150">
+ <setting id="input.libinputkeyboardlayout" type="string" label="407" help="36436">
+ <level>0</level>
+ <default>us</default>
+ <visible>false</visible>
+ <constraints>
+ <options>libinputkeyboardlayout</options>
+ </constraints>
+ <control type="list" format="string">
+ <multiselect>false</multiselect>
+ </control>
+ </setting>
+ </group>
+ </category>
+ </section>
+</settings>
diff --git a/system/settings/settings.xml b/system/settings/settings.xml
new file mode 100755
index 0000000..0898ee7
--- /dev/null
+++ b/system/settings/settings.xml
@@ -0,0 +1,4059 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings version="1">
+ <section id="player" label="14200" help="38100">
+ <category id="videoplayer" label="14215" help="38103">
+ <group id="1" label="14230">
+ <setting id="videoplayer.autoplaynextitem" type="list[integer]" label="13433" help="36152">
+ <constraints>
+ <options>
+ <option label="20389">0</option> <!-- musicvideos -->
+ <option label="20343">1</option> <!-- tvshows -->
+ <option label="20360">2</option> <!-- episodes -->
+ <option label="20342">3</option> <!-- movies -->
+ <option label="21345">4</option> <!-- uncategorized -->
+ </options>
+ <delimiter>,</delimiter>
+ </constraints>
+ <level>0</level>
+ <default></default>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ <hidevalue>false</hidevalue>
+ </control>
+ </setting>
+ <setting id="videoplayer.seeksteps" type="list[integer]" label="13556" help="37042">
+ <level>1</level>
+ <default>-600,-300,-180,-60,-30,-10,10,30,60,180,300,600</default>
+ <constraints>
+ <options>videoseeksteps</options>
+ <delimiter>,</delimiter>
+ <minimumitems>2</minimumitems>
+ </constraints>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ </control>
+ </setting>
+ <setting id="videoplayer.seekdelay" type="integer" label="13557" help="37043">
+ <level>1</level>
+ <default>750</default>
+ <constraints>
+ <minimum label="231">0</minimum> <!-- None -->
+ <step>250</step>
+ <maximum>3000</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14046</formatlabel>
+ </control>
+ </setting>
+ </group>
+ <group id="2" label="19177">
+ <setting id="videoplayer.adjustrefreshrate" type="integer" label="170" help="36164">
+ <level>1</level>
+ <default>0</default> <!-- ADJUST_REFRESHRATE_OFF -->
+ <constraints>
+ <options>
+ <option label="351">0</option> <!-- ADJUST_REFRESHRATE_OFF -->
+ <option label="36035">1</option> <!-- ADJUST_REFRESHRATE_ALWAYS -->
+ <option label="36036">2</option> <!-- ADJUST_REFRESHRATE_ON_STARTSTOP -->
+ <option label="36050">3</option> <!-- ADJUST_REFRESHRATE_ON_START -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videoplayer.usedisplayasclock" type="boolean" label="13510" help="36166">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.errorinaspect" type="integer" label="22021" help="36170">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>1</step>
+ <maximum>20</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14047</formatlabel>
+ </control>
+ </setting>
+ <setting id="videoplayer.stretch43" type="integer" label="173" help="36171">
+ <level>2</level>
+ <default>0</default> <!-- ViewModeNormal -->
+ <constraints>
+ <options>
+ <option label="630">0</option> <!-- ViewModeNormal -->
+ <option label="633">3</option> <!-- ViewModeWideZoom -->
+ <option label="634">4</option> <!-- ViewModeStretch16x9 -->
+ <option label="644">7</option> <!-- ViewModeStretch16x9 - nonlinear -->
+ <option label="631">1</option> <!-- ViewModeZoom -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ <group id="3" label="14231">
+ <setting id="videoplayer.rendermethod" type="integer" label="13415" help="36153">
+ <level>2</level>
+ <default>0</default> <!-- RENDER_METHOD_AUTO -->
+ <constraints>
+ <options>rendermethods</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videoplayer.hqscalers" type="integer" parent="videoplayer.rendermethod" label="13435" help="36154">
+ <level>2</level>
+ <default>20</default>
+ <constraints>
+ <minimum>0</minimum>
+ <step>10</step>
+ <maximum>100</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14047</formatlabel>
+ </control>
+ </setting>
+ <setting id="videoplayer.usemediacodecsurface" type="boolean" label="13440" help="36544">
+ <requirement>HAS_MEDIACODEC</requirement>
+ <level>2</level>
+ <default>true</default>
+ <updates>
+ <update type="change" />
+ </updates>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usemediacodec" type="boolean" label="13439" help="36544">
+ <requirement>HAS_MEDIACODEC</requirement>
+ <level>2</level>
+ <default>true</default>
+ <updates>
+ <update type="change" />
+ </updates>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usedxva2" type="boolean" label="13427" help="36158">
+ <requirement>HasDXVA2</requirement>
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevtb" type="boolean" label="13429" help="36160">
+ <requirement>HasVTB</requirement>
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="winsystem.ishdrdisplay" type="boolean" label="13436" help="36299">
+ <dependencies>
+ <dependency type="visible">
+ <condition on="property" name="ishdrdisplay" />
+ </dependency>
+ </dependencies>
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="4" label="14232">
+ <setting id="videoplayer.stereoscopicplaybackmode" type="integer" label="36520" help="36537">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="36521">0</option> <!-- ASK -->
+ <option label="36524">1</option> <!-- Preferred mode -->
+ <option label="36509">2</option> <!-- Monoscopic / 2D -->
+ <option label="36028">100</option> <!-- Ignore -->
+ </options>
+ </constraints>
+ <control type="spinner" format="integer" delayed="true"/>
+ </setting>
+ <setting id="videoplayer.quitstereomodeonstop" type="boolean" label="36526" help="36538">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="5" label="14233">
+ <setting id="videoplayer.teletextenabled" type="boolean" label="23050" help="36174">
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.teletextscale" type="boolean" parent="videoplayer.teletextenabled" label="23055" help="36175">
+ <level>3</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable" setting="videoplayer.teletextenabled" operator="is">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="musicplayer" label="14216" help="38104">
+ <group id="1" label="14230">
+ <setting id="musicplayer.autoplaynextitem" type="boolean" label="489" help="36265">
+ <level>0</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musicplayer.queuebydefault" type="boolean" label="14084" help="36266">
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musicplayer.seeksteps" type="list[integer]" label="13556" help="37042">
+ <level>1</level>
+ <default>-60,-30,-10,10,30,60</default>
+ <constraints>
+ <options>videoseeksteps</options>
+ <delimiter>,</delimiter>
+ <minimumitems>2</minimumitems>
+ </constraints>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ </control>
+ </setting>
+ <setting id="musicplayer.seekdelay" type="integer" label="13557" help="37043">
+ <level>1</level>
+ <default>750</default>
+ <constraints>
+ <minimum label="231">0</minimum> <!-- None -->
+ <step>250</step>
+ <maximum>3000</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14046</formatlabel>
+ </control>
+ </setting>
+ </group>
+ <group id="2" label="19177">
+ <setting id="musicplayer.crossfade" type="integer" label="13314" help="36271">
+ <level>1</level>
+ <default>0</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>1</step>
+ <maximum>15</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14045</formatlabel>
+ </control>
+ </setting>
+ <setting id="musicplayer.crossfadealbumtracks" type="boolean" parent="musicplayer.crossfade" label="13400" help="36272">
+ <level>1</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable" setting="musicplayer.crossfade" operator="!is">0</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="musicplayer.visualisation" type="addon" label="250" help="36273">
+ <level>0</level>
+ <default></default>
+ <constraints>
+ <addontype>xbmc.player.musicviz</addontype>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ <setting id="musicplayer.replaygaintype" type="integer" label="638" help="36267">
+ <level>3</level>
+ <default>1</default> <!-- REPLAY_GAIN_ALBUM -->
+ <constraints>
+ <options>
+ <option label="351">0</option> <!-- REPLAY_GAIN_NONE -->
+ <option label="639">2</option> <!-- REPLAY_GAIN_TRACK -->
+ <option label="640">1</option> <!-- REPLAY_GAIN_ALBUM -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="musicplayer.replaygainpreamp" type="integer" parent="musicplayer.replaygaintype" label="641" help="36268">
+ <level>3</level>
+ <default>89</default>
+ <constraints>
+ <minimum>77</minimum>
+ <step>1</step>
+ <maximum>101</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14050</formatlabel>
+ </control>
+ <dependencies>
+ <dependency type="enable" setting="musicplayer.replaygaintype" operator="!is">0</dependency>
+ </dependencies>
+ </setting>
+ <setting id="musicplayer.replaygainnogainpreamp" type="integer" parent="musicplayer.replaygaintype" label="642" help="36269">
+ <level>3</level>
+ <default>89</default>
+ <constraints>
+ <minimum>77</minimum>
+ <step>1</step>
+ <maximum>101</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14050</formatlabel>
+ </control>
+ <dependencies>
+ <dependency type="enable" setting="musicplayer.replaygaintype" operator="!is">0</dependency>
+ </dependencies>
+ </setting>
+ <setting id="musicplayer.replaygainavoidclipping" type="boolean" parent="musicplayer.replaygaintype" label="643" help="36270">
+ <level>3</level>
+ <default>false</default>
+ <control type="toggle" />
+ <dependencies>
+ <dependency type="enable" setting="musicplayer.replaygaintype" operator="!is">0</dependency>
+ </dependencies>
+ </setting>
+ </group>
+ </category>
+ <category id="discs" label="14087" help="36193">
+ <group id="1" label="446">
+ <setting id="dvds.autorun" type="boolean" label="14088" help="36194">
+ <requirement>HAS_DVD_DRIVE</requirement>
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="dvds.playerregion" type="integer" label="21372" help="36195">
+ <level>1</level>
+ <default>0</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>1</step>
+ <maximum>8</maximum>
+ </constraints>
+ <control type="spinner" format="string" />
+ </setting>
+ <setting id="dvds.automenu" type="boolean" label="21882" help="36196">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="2" label="14234">
+ <requirement>HAVE_LIBBLURAY</requirement>
+ <setting id="bluray.playerregion" type="integer" label="14121" help="38017">
+ <level>1</level>
+ <default>1</default> <!-- region A -->
+ <constraints>
+ <options>
+ <option label="14122">1</option> <!-- region A -->
+ <option label="14123">2</option> <!-- region B -->
+ <option label="14124">4</option> <!-- region C -->
+ </options>
+ </constraints>
+ <control type="spinner" format="string" />
+ </setting>
+ <setting id="disc.playback" type="integer" label="14102" help="37031">
+ <level>1</level>
+ <default>0</default> <!-- default -->
+ <constraints>
+ <options>
+ <option label="14104">0</option> <!-- show simplified menu -->
+ <option label="25003">1</option> <!-- show disc menu -->
+ <option label="14103">2</option> <!-- play main movie -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ <group id="3" label="620">
+ <setting id="audiocds.autoaction" type="integer" label="14097" help="36283">
+ <requirement>HAS_DVD_DRIVE</requirement>
+ <level>1</level>
+ <default>0</default> <!-- AUTOCD_NONE -->
+ <constraints>
+ <options>audiocdactions</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="audiocds.usecddb" type="boolean" label="227" help="36284">
+ <requirement>HAS_DVD_DRIVE</requirement>
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="audiocds.recordingpath" type="path" label="20000" help="36285">
+ <requirement>HAS_CDDA_RIPPER</requirement>
+ <level>3</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="button" format="path">
+ <heading>657</heading>
+ </control>
+ </setting>
+ <setting id="audiocds.trackpathformat" type="string" label="13307" help="36286">
+ <requirement>HAS_CDDA_RIPPER</requirement>
+ <level>3</level>
+ <default>%A/%A - %B/[%N. ][%A - ]%T</default>
+ <control type="edit" format="string">
+ <heading>16016</heading>
+ </control>
+ </setting>
+ <setting id="audiocds.encoder" type="addon" label="621" help="36287">
+ <requirement>HAS_CDDA_RIPPER</requirement>
+ <level>3</level>
+ <default>audioencoder.kodi.builtin.aac</default>
+ <constraints>
+ <addontype>kodi.audioencoder</addontype>
+ </constraints>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ <setting id="audiocds.settings" parent="audiocds.encoder" type="action" label="21417" help="37025">
+ <requirement>HAS_CDDA_RIPPER</requirement>
+ <level>3</level>
+ <dependencies>
+ <dependency type="enable">
+ <condition on="property" name="AddonHasSettings" setting="audiocds.encoder" />
+ </dependency>
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="audiocds.ejectonrip" type="boolean" label="14099" help="36291">
+ <requirement>HAS_CDDA_RIPPER</requirement>
+ <level>3</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="pictures" label="14217" help="38105">
+ <group id="1" label="108">
+ <setting id="slideshow.staytime" type="integer" label="12378" help="36312">
+ <level>0</level>
+ <default>5</default>
+ <constraints>
+ <minimum>1</minimum>
+ <step>1</step>
+ <maximum>100</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14045</formatlabel>
+ </control>
+ </setting>
+ <setting id="slideshow.displayeffects" type="boolean" label="12379" help="36313">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="slideshow.shuffle" type="boolean" label="13319" help="36314">
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="slideshow.highqualitydownscaling" type="boolean" label="36619" help="36620">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="language" label="14218" help="38106">
+ <group id="1" label="14221">
+ <setting id="locale.audiolanguage" type="string" label="285" help="36119">
+ <level>0</level>
+ <default>mediadefault</default>
+ <constraints>
+ <options>audiostreamlanguages</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videoplayer.preferdefaultflag" type="boolean" label="37040" help="37041">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="2" label="287">
+ <setting id="locale.subtitlelanguage" type="string" label="286" help="36120">
+ <level>0</level>
+ <default>original</default>
+ <constraints>
+ <options>subtitlestreamlanguages</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ <group id="3" label="37032">
+ <setting id="accessibility.audiovisual" type="boolean" label="37034" help="37035">
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="accessibility.audiohearing" type="boolean" label="37036" help="37037">
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="accessibility.subhearing" type="boolean" label="37038" help="37039">
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="subtitles" label="287" help="37033">
+ <group id="1" label="39186">
+ <setting id="subtitles.align" type="integer" label="21460" help="36192">
+ <level>2</level>
+ <default>2</default> <!-- Align::BOTTOM_OUTSIDE -->
+ <constraints>
+ <options>
+ <option label="21461">0</option> <!-- Align::MANUAL -->
+ <option label="21462">1</option> <!-- Align::BOTTOM_INSIDE -->
+ <option label="21463">2</option> <!-- Align::BOTTOM_OUTSIDE -->
+ <option label="21464">3</option> <!-- Align::TOP_INSIDE -->
+ <option label="21465">4</option> <!-- Align::TOP_OUTSIDE -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="subtitles.fontname" type="string" label="14089" help="36185">
+ <level>1</level>
+ <default>DEFAULT</default>
+ <constraints>
+ <options>subtitlesfonts</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="subtitles.fontsize" type="integer" label="289" help="36186">
+ <level>3</level>
+ <default>42</default> <!-- in pixels -->
+ <constraints>
+ <minimum>12</minimum>
+ <step>2</step>
+ <maximum>74</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="subtitles.fontname" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="subtitles.style" type="integer" label="736" help="36187">
+ <level>3</level>
+ <default>0</default> <!-- FontStyle::NORMAL -->
+ <constraints>
+ <options>
+ <option label="738">0</option> <!-- FontStyle::NORMAL -->
+ <option label="739">1</option> <!-- FontStyle::BOLD -->
+ <option label="740">2</option> <!-- FontStyle::ITALIC -->
+ <option label="741">3</option> <!-- FontStyle::BOLD_ITALIC -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="subtitles.colorpick" type="string" label="737" help="36188">
+ <level>3</level>
+ <default>FFFFFFFF</default> <!-- White -->
+ <control type="colorbutton" />
+ </setting>
+ <setting id="subtitles.opacity" type="integer" label="752" help="36295">
+ <level>3</level>
+ <default>100</default>
+ <control type="slider" format="percentage" range="0,100" />
+ </setting>
+ <setting id="subtitles.bordersize" type="integer" label="39159">
+ <level>3</level>
+ <default>25</default>
+ <dependencies>
+ <dependency type="enable" setting="subtitles.backgroundtype" operator="!is">2</dependency>
+ </dependencies>
+ <control type="slider" format="percentage" range="0,100" />
+ </setting>
+ <setting id="subtitles.bordercolorpick" type="string" label="39160">
+ <level>3</level>
+ <default>FF000000</default> <!-- Black -->
+ <dependencies>
+ <dependency type="enable" setting="subtitles.backgroundtype" operator="!is">2</dependency>
+ </dependencies>
+ <control type="colorbutton" />
+ </setting>
+ <setting id="subtitles.blur" type="integer" label="39173">
+ <level>3</level>
+ <default>0</default>
+ <control type="slider" format="percentage" range="0,100" />
+ </setting>
+ <setting id="subtitles.backgroundtype" type="integer" label="39165" help="39169">
+ <level>3</level>
+ <default>0</default> <!-- BackgroundType::NONE -->
+ <constraints>
+ <options>
+ <option label="39188">0</option> <!-- BackgroundType::NONE -->
+ <option label="39166">1</option> <!-- BackgroundType::SHADOW -->
+ <option label="39167">2</option> <!-- BackgroundType::BOX -->
+ <option label="39168">3</option> <!-- BackgroundType::SQUAREBOX -->
+ </options>
+ </constraints>
+ <control type="list" format="integer" />
+ </setting>
+ <setting id="subtitles.bgcolorpick" type="string" parent="subtitles.backgroundtype" label="745" help="36228">
+ <level>3</level>
+ <default>FF000000</default> <!-- Black -->
+ <dependencies>
+ <dependency type="visible">
+ <or>
+ <condition setting="subtitles.backgroundtype">2</condition>
+ <condition setting="subtitles.backgroundtype">3</condition>
+ </or>
+ </dependency>
+ </dependencies>
+ <control type="colorbutton" />
+ </setting>
+ <setting id="subtitles.bgopacity" type="integer" parent="subtitles.backgroundtype" label="746" help="36230">
+ <level>3</level>
+ <default>80</default>
+ <dependencies>
+ <dependency type="visible">
+ <or>
+ <condition setting="subtitles.backgroundtype">2</condition>
+ <condition setting="subtitles.backgroundtype">3</condition>
+ </or>
+ </dependency>
+ </dependencies>
+ <control type="slider" format="percentage" range="0,100" />
+ </setting>
+ <setting id="subtitles.shadowcolor" type="string" parent="subtitles.backgroundtype" label="39171">
+ <level>3</level>
+ <default>FF000000</default> <!-- Black -->
+ <dependencies>
+ <dependency type="visible">
+ <or>
+ <condition setting="subtitles.backgroundtype">1</condition>
+ <condition setting="subtitles.backgroundtype">2</condition>
+ </or>
+ </dependency>
+ </dependencies>
+ <control type="colorbutton" />
+ </setting>
+ <setting id="subtitles.shadowopacity" type="integer" parent="subtitles.backgroundtype" label="39172">
+ <level>3</level>
+ <default>100</default>
+ <dependencies>
+ <dependency type="visible">
+ <or>
+ <condition setting="subtitles.backgroundtype">1</condition>
+ <condition setting="subtitles.backgroundtype">2</condition>
+ </or>
+ </dependency>
+ </dependencies>
+ <control type="slider" format="percentage" range="0,100" />
+ </setting>
+ <setting id="subtitles.shadowsize" type="integer" parent="subtitles.backgroundtype" label="39170">
+ <level>3</level>
+ <default>15</default>
+ <dependencies>
+ <dependency type="visible">
+ <or>
+ <condition setting="subtitles.backgroundtype">1</condition>
+ <condition setting="subtitles.backgroundtype">2</condition>
+ </or>
+ </dependency>
+ </dependencies>
+ <control type="slider" format="percentage" range="0,100" />
+ </setting>
+ <setting id="subtitles.marginvertical" type="number" label="39182" help="39183">
+ <level>3</level>
+ <default>4.95</default>
+ <constraints>
+ <minimum>0</minimum>
+ <step>0.05</step>
+ <maximum>50</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" on="property" operator="!is" name="isplaying" />
+ </dependencies>
+ <control type="slider" format="percentage">
+ <format>{:.2f} %</format>
+ </control>
+ </setting>
+ <setting id="subtitles.overridefonts" type="boolean" label="21368" help="36190">
+ <level>3</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" on="property" operator="!is" name="isplaying" />
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="subtitles.overridestyles" type="integer" label="39154" help="39155">
+ <level>3</level>
+ <default>0</default> <!-- OverrideStyles::DISABLED -->
+ <constraints>
+ <options>
+ <option label="13106">0</option> <!-- OverrideStyles::DISABLED -->
+ <option label="39156">1</option> <!-- OverrideStyles::POSITIONS -->
+ <option label="39157">2</option> <!-- OverrideStyles::STYLES -->
+ <option label="39158">3</option> <!-- OverrideStyles::STYLES_POSITIONS -->
+ </options>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" on="property" operator="!is" name="isplaying" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="subtitles.stereoscopicdepth" type="integer" label="36545" help="36546">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <minimum>0</minimum>
+ <step>1</step>
+ <maximum>10</maximum>
+ </constraints>
+ <control type="spinner" format="integer" delayed="true"/>
+ </setting>
+ <setting id="subtitles.charset" type="string" label="735" help="36189">
+ <level>1</level>
+ <default>DEFAULT</default>
+ <constraints>
+ <options>charsets</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ <group id="3" label="39187">
+ <setting id="subtitles.parsecaptions" type="boolean" label="24130" help="24131">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="subtitles.captionsalign" parent="subtitles.parsecaptions" type="integer" label="39161">
+ <level>2</level>
+ <default>0</default> <!-- HorizontalAlign::LEFT -->
+ <constraints>
+ <options>
+ <option label="39162">0</option> <!-- HorizontalAlign::LEFT -->
+ <option label="39163">1</option> <!-- HorizontalAlign::CENTER -->
+ <option label="39164">2</option> <!-- HorizontalAlign::RIGHT -->
+ </options>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="subtitles.parsecaptions" operator="is">true</dependency>
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ <group id="4" label="14235">
+ <setting id="subtitles.languages" type="list[string]" label="24111" help="24112">
+ <level>1</level>
+ <default>English</default>
+ <constraints>
+ <options>subtitledownloadlanguages</options>
+ <delimiter>,</delimiter>
+ <minimumitems>1</minimumitems>
+ </constraints>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ </control>
+ </setting>
+ <setting id="subtitles.storagemode" type="integer" label="24115" help="24106">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="24124">0</option> <!-- SUBTITLE_STORAGEMODE_MOVIEPATH -->
+ <option label="24125">1</option> <!-- SUBTITLE_STORAGEMODE_CUSTOMPATH -->
+ </options>
+ </constraints>
+ <control type="list" format="integer" />
+ </setting>
+ <setting id="subtitles.custompath" parent="subtitles.storagemode" type="path" label="21366" help="36191">
+ <level>2</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ <writable>false</writable>
+ <sources>
+ <source>videos</source>
+ </sources>
+ </constraints>
+ <control type="button" format="path">
+ <heading>657</heading>
+ </control>
+ </setting>
+ <setting id="subtitles.pauseonsearch" type="boolean" label="24105" help="24123">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="subtitles.downloadfirst" type="boolean" label="24126" help="24127">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="subtitles.tv" type="addon" label="24116" help="24117">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ <addontype>xbmc.subtitle.module</addontype>
+ </constraints>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ <setting id="subtitles.movie" type="addon" label="24118" help="24119">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ <addontype>xbmc.subtitle.module</addontype>
+ </constraints>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="media" label="14211" help="38101">
+ <category id="library" label="14202" help="39004">
+ <group id="1" label="14226">
+ <setting id="source.videos" type="action" label="14242" help="39005">
+ <level>1</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="source.music" type="action" label="14243" help="39006">
+ <level>1</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="source.pictures" type="action" label="14244" help="39007">
+ <level>1</level>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ <group id="2" label="14236">
+ <setting id="videolibrary.updateonstartup" type="boolean" label="14245" help="36146">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videolibrary.backgroundupdate" type="boolean" label="14246" help="36147">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videolibrary.cleanup" type="action" label="14247" help="36148">
+ <level>2</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="videolibrary.export" type="action" label="14248" help="36149">
+ <level>2</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="videolibrary.import" type="action" label="14249" help="36150">
+ <level>2</level>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ <group id="3" label="14237">
+ <setting id="musiclibrary.updateonstartup" type="boolean" label="14245" help="36259">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musiclibrary.backgroundupdate" type="boolean" label="14246" help="36147">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musiclibrary.cleanup" type="action" label="14247" help="36148">
+ <level>2</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="musiclibrary.export" type="action" label="14248" help="36262">
+ <level>2</level>
+ <control type="button" format="action" />
+ </setting>
+ <!-- Hidden settings edited using CGUIDialogMusicExportSettings -->
+ <setting id="musiclibrary.exportfiletype" type="integer" label="38304" help="">
+ <level>4</level>
+ <default>0</default>
+ </setting>
+ <setting id="musiclibrary.exportfolder" type="string" label="38305" help="">
+ <level>4</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ </setting>
+ <setting id="musiclibrary.exportitems" type="integer" label="" help="">
+ <level>4</level>
+ <default>48</default> <!-- Albums + Album Artists -->
+ </setting>
+ <setting id="musiclibrary.exportunscraped" type="boolean" label="" help="">
+ <level>4</level>
+ <default>false</default>
+ </setting>
+ <setting id="musiclibrary.exportoverwrite" type="boolean" label="" help="">
+ <level>4</level>
+ <default>false</default>
+ </setting>
+ <setting id="musiclibrary.exportartwork" type="boolean" label="" help="">
+ <level>4</level>
+ <default>false</default>
+ </setting>
+ <setting id="musiclibrary.exportskipnfo" type="boolean" label="" help="">
+ <level>4</level>
+ <default>false</default>
+ </setting>
+ <setting id="musiclibrary.import" type="action" label="14249" help="36263">
+ <level>2</level>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ </category>
+ <category id="filelists" label="16000" help="36121">
+ <group id="1" label="593">
+ <setting id="filelists.showparentdiritems" type="boolean" label="13306" help="36122">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="filelists.ignorethewhensorting" type="boolean" label="13399" help="36124">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="2" label="744">
+ <setting id="filelists.showextensions" type="boolean" label="497" help="36123">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="filelists.showaddsourcebuttons" type="boolean" label="21382" help="36126">
+ <level>1</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable">
+ <or>
+ <condition on="property" name="ProfileCanWriteSources" />
+ <condition on="property" name="IsMasterUser" />
+ </or>
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="filelists.showhidden" type="boolean" label="21330" help="36127">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="filelists.allowfiledeletion" type="boolean" label="14071" help="36125">
+ <level>2</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable">
+ <or>
+ <condition on="property" operator="!is" name="ProfileHasFilesLocked" />
+ <condition on="property" name="IsMasterUser" />
+ </or>
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="video" label="14215" help="38107">
+ <group id="1" label="593">
+ <setting id="myvideos.selectaction" type="integer" label="22079" help="36177">
+ <level>0</level>
+ <default>1</default> <!-- SELECT_ACTION_PLAY_OR_RESUME -->
+ <constraints>
+ <options>
+ <option label="22080">0</option> <!-- SELECT_ACTION_CHOOSE -->
+ <option label="208">1</option> <!-- SELECT_ACTION_PLAY_OR_RESUME -->
+ <option label="13404">2</option> <!-- SELECT_ACTION_RESUME -->
+ <option label="22081">3</option> <!-- SELECT_ACTION_INFO -->
+ <option label="13347">7</option> <!-- SELECT_ACTION_QUEUE -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="myvideos.usetags" type="boolean" label="21343" help="21344">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="myvideos.extractflags" type="boolean" label="20433" help="36178">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="myvideos.extractchapterthumbs" type="boolean" label="37044" help="37045">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="2" label="744">
+ <setting id="myvideos.stackvideos" type="boolean" label="20435" help="36182">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="myvideos.replacelabels" type="boolean" label="20419" help="36179">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="3" label="14022">
+ <setting id="videolibrary.showallitems" type="boolean" label="38011" help="38012">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videolibrary.showunwatchedplots" type="list[integer]" label="20369" help="36141">
+ <level>0</level>
+ <default>0,1,2</default> <!-- Show plot for both -->
+ <constraints>
+ <options>
+ <option label="39115">0</option> <!-- Show plot for unwatched movies only -->
+ <option label="39116">1</option> <!-- Show plot for unwatched tv show episodes only -->
+ <option label="39114">2</option> <!-- Show thumb for unwatched tv show episodes only -->
+ </options>
+ <delimiter>,</delimiter>
+ </constraints>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ <hidevalue>false</hidevalue>
+ </control>
+ </setting>
+ <setting id="videolibrary.groupmoviesets" type="boolean" label="20458" help="36145">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videolibrary.groupsingleitemsets" type="boolean" label="20470" help="36157">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="myvideos.flatten" type="boolean" label="20456" help="36183">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videolibrary.flattentvshows" type="integer" label="20412" help="36144">
+ <level>2</level>
+ <default>1</default> <!-- if only one season -->
+ <constraints>
+ <options>
+ <option label="20420">0</option> <!-- never -->
+ <option label="20421">1</option> <!-- if only one season -->
+ <option label="20422">2</option> <!-- always -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videolibrary.showemptytvshows" type="boolean" label="20471" help="36163">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videolibrary.tvshowsselectfirstunwatcheditem" type="integer" label="21416" help="21466">
+ <level>2</level>
+ <default>0</default> <!-- Never -->
+ <constraints>
+ <options>
+ <option label="20420">0</option> <!-- Never -->
+ <option label="21471">1</option> <!-- On first entry -->
+ <option label="20422">2</option> <!-- Always -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videolibrary.tvshowsincludeallseasonsandspecials" type="integer" parent="videolibrary.tvshowsselectfirstunwatcheditem" label="21472" help="21473">
+ <level>2</level>
+ <default>0</default> <!-- Neither -->
+ <constraints>
+ <options>
+ <option label="21474">0</option> <!-- Neither -->
+ <option label="21475">1</option> <!-- Both -->
+ <option label="21476">2</option> <!-- Just All Seasons -->
+ <option label="21477">3</option> <!-- Just Specials -->
+ </options>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="videolibrary.tvshowsselectfirstunwatcheditem" operator="!is">0</dependency> <!-- Never -->
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videolibrary.moviesetsfolder" type="path" label="20226" help="36300">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ <sources>
+ <source>files</source>
+ <source>pictures</source>
+ <source>videos</source>
+ </sources>
+ <writable>false</writable>
+ </constraints>
+ <control type="button" format="path">
+ <heading>657</heading>
+ </control>
+ </setting>
+ <setting id="videolibrary.musicvideosallperformers" type="boolean" label="20472" help="36308">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="4" label="39123">
+ <!-- Hidden setting indicating video art settings have been migrated from old advancedsettings.xml format-->
+ <setting id="videolibrary.artsettingsupdated" type="boolean" label="0" help="">
+ <level>4</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videolibrary.artworklevel" type="integer" label="39137" help="39138">
+ <level>1</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="39140">0</option> <!-- VIDEOLIBRARY_ARTWORK_LEVEL_ALL -->
+ <option label="39141">1</option> <!-- VIDEOLIBRARY_ARTWORK_LEVEL_BASIC -->
+ <option label="39142">2</option> <!-- VIDEOLIBRARY_ARTWORK_LEVEL_CUSTOM -->
+ <option label="231">3</option> <!-- VIDEOLIBRARY_ARTWORK_LEVEL_NONE -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videolibrary.movieartwhitelist" type="list[string]" parent="videolibrary.artworklevel" label="39143" help="39144">
+ <level>2</level>
+ <default></default>
+ <constraints>
+ <options>
+ <option>clearart</option>
+ <option>discart</option>
+ <option>keyart</option>
+ <option>banner</option>
+ <option>landscape</option>
+ <option>clearlogo</option>
+ </options>
+ <delimiter>, </delimiter>
+ <allownewoption>true</allownewoption>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videolibrary.artworklevel" operator="is">2</dependency>
+ </dependencies>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ <addbuttonlabel>13516</addbuttonlabel>
+ </control>
+ </setting>
+ <setting id="videolibrary.tvshowartwhitelist" type="list[string]" parent="videolibrary.artworklevel" label="39145" help="39146">
+ <level>2</level>
+ <default></default>
+ <constraints>
+ <options>
+ <option>clearart</option>
+ <option>discart</option>
+ <option>keyart</option>
+ <option>banner</option>
+ <option>landscape</option>
+ <option>clearlogo</option>
+ </options>
+ <delimiter>, </delimiter>
+ <allownewoption>true</allownewoption>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videolibrary.artworklevel" operator="is">2</dependency>
+ </dependencies>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ <addbuttonlabel>13516</addbuttonlabel>
+ </control>
+ </setting>
+ <setting id="videolibrary.episodeartwhitelist" type="list[string]" parent="videolibrary.artworklevel" label="39147" help="39148">
+ <level>2</level>
+ <default></default>
+ <constraints>
+ <options>
+ <option>fanart</option>
+ </options>
+ <delimiter>, </delimiter>
+ <allownewoption>true</allownewoption>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videolibrary.artworklevel" operator="is">2</dependency>
+ </dependencies>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ <addbuttonlabel>13516</addbuttonlabel>
+ </control>
+ </setting>
+ <setting id="videolibrary.musicvideoartwhitelist" type="list[string]" parent="videolibrary.artworklevel" label="39149" help="39150">
+ <level>2</level>
+ <default></default>
+ <constraints>
+ <options>
+ <option>clearart</option>
+ <option>discart</option>
+ <option>banner</option>
+ <option>landscape</option>
+ <option>clearlogo</option>
+ </options>
+ <delimiter>, </delimiter>
+ <allownewoption>true</allownewoption>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videolibrary.artworklevel" operator="is">2</dependency>
+ </dependencies>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ <addbuttonlabel>13516</addbuttonlabel>
+ </control>
+ </setting>
+ <setting id="videolibrary.actorthumbs" type="boolean" label="20402" help="36143">
+ <level>2</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="visible" setting="videolibrary.artworklevel" operator="!is">3</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="myvideos.extractthumb" type="boolean" label="38190" help="36180">
+ <level>1</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="visible" setting="videolibrary.artworklevel" operator="!is">3</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="music" label="14216" help="38108">
+ <group id="1" label="39121">
+ <setting id="musiclibrary.showallitems" type="boolean" label="38011" help="38012">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musiclibrary.showcompilationartists" type="boolean" label="13414" help="36255">
+ <level>0</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musiclibrary.showdiscs" type="boolean" label="13522" help="13523">
+ <level>0</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musiclibrary.useartistsortname" type="boolean" label="20228" help="36294">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musiclibrary.useoriginaldate" type="boolean" label="13524" help="13525">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="2" label="39122">
+ <setting id="musiclibrary.downloadinfo" type="boolean" label="20192" help="36256">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musiclibrary.artistsfolder" type="path" label="20223" help="36293">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="button" format="path">
+ <heading>657</heading>
+ </control>
+ </setting>
+ <setting id="musiclibrary.albumsscraper" type="addon" label="20193" help="36257">
+ <level>1</level>
+ <default>metadata.generic.albums</default>
+ <constraints>
+ <addontype>xbmc.metadata.scraper.albums</addontype>
+ </constraints>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ <setting id="musiclibrary.artistsscraper" type="addon" label="20194" help="36258">
+ <level>1</level>
+ <default>metadata.generic.artists</default>
+ <constraints>
+ <addontype>xbmc.metadata.scraper.artists</addontype>
+ </constraints>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ <setting id="musiclibrary.overridetags" type="boolean" label="20220" help="20221">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="3" label="39123">
+ <!-- Hidden setting indicating music art settings have been migrated from old advancedsettings.xml format-->
+ <setting id="musiclibrary.artsettings" type="boolean" label="0" help="">
+ <level>4</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musiclibrary.artworklevel" type="integer" label="39137" help="39138">
+ <level>1</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="39140">0</option> <!-- MUSICLIBRARY_ARTWORK_LEVEL_ALL -->
+ <option label="39141">1</option> <!-- MUSICLIBRARY_ARTWORK_LEVEL_BASIC -->
+ <option label="39142">2</option> <!-- MUSICLIBRARY_ARTWORK_LEVEL_CUSTOM -->
+ <option label="231">3</option> <!-- MUSICLIBRARY_ARTWORK_LEVEL_NONE -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="musiclibrary.usealllocalart" type="boolean" parent="musiclibrary.artworklevel" label="39127" help="39128">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ <dependencies>
+ <dependency type="visible" setting="musiclibrary.artworklevel" operator="is">2</dependency>
+ </dependencies>
+ </setting>
+ <setting id="musiclibrary.useallremoteart" type="boolean" parent="musiclibrary.artworklevel" label="39129" help="39130">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ <dependencies>
+ <dependency type="visible" setting="musiclibrary.artworklevel" operator="is">2</dependency>
+ </dependencies>
+ </setting>
+ <setting id="musiclibrary.artistartwhitelist" type="list[string]" parent="musiclibrary.artworklevel" label="39131" help="39132">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <options>
+ <option>banner</option>
+ <option>clearart</option>
+ <option>clearlogo</option>
+ <option>landscape</option>
+ <option>fanart</option>
+ </options>
+ <delimiter>, </delimiter>
+ <allownewoption>true</allownewoption>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="musiclibrary.artworklevel" operator="is">2</dependency>
+ <dependency type="enable">
+ <or>
+ <condition setting="musiclibrary.usealllocalart" operator="is" >false</condition>
+ <condition setting="musiclibrary.useallremoteart" operator="is">false</condition>
+ </or>
+ </dependency>
+ </dependencies>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ <addbuttonlabel>13516</addbuttonlabel>
+ </control>
+ </setting>
+ <setting id="musiclibrary.albumartwhitelist" type="list[string]" parent="musiclibrary.artworklevel" label="39133" help="39134">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <options>
+ <option>discart</option>
+ <option>back</option>
+ <option>spine</option>
+ <option>3dcase</option>
+ <option>3dflat</option>
+ <option>3dface</option>
+ </options>
+ <delimiter>, </delimiter>
+ <allownewoption>true</allownewoption>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="musiclibrary.artworklevel" operator="is">2</dependency>
+ <dependency type="enable">
+ <or>
+ <condition setting="musiclibrary.usealllocalart" operator="is" >false</condition>
+ <condition setting="musiclibrary.useallremoteart" operator="is">false</condition>
+ </or>
+ </dependency>
+ </dependencies>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ <addbuttonlabel>13516</addbuttonlabel>
+ </control>
+ </setting>
+ <setting id="musiclibrary.musicthumbs" type="list[string]" label="39135" help="39136">
+ <level>3</level>
+ <default>folder.jpg, cover.jpg, cover.jpeg, thumb.jpg</default>
+ <constraints>
+ <options>
+ <option>folder.jpg</option>
+ <option>cover.jpg</option>
+ <option>cover.jpeg</option>
+ <option>thumb.jpg</option>
+ </options>
+ <delimiter>, </delimiter>
+ <allowempty>true</allowempty>
+ <allownewoption>true</allownewoption>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="musiclibrary.artworklevel" operator="!is">3</dependency>
+ </dependencies>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ </control>
+ </setting>
+ <setting id="musiclibrary.preferonlinealbumart" type="boolean" label="20224" help="20225">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ <dependencies>
+ <dependency type="enable" setting="musiclibrary.artworklevel" operator="!is">3</dependency>
+ </dependencies>
+ </setting>
+ </group>
+ <group id="4" label="128">
+ <setting id="musicfiles.selectaction" type="boolean" label="12381" help="38112">
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musicfiles.trackformat" type="string" label="13307" help="36275">
+ <level>3</level>
+ <default>[%N. ]%A - %T</default>
+ <control type="edit" format="string">
+ <heading>16016</heading>
+ </control>
+ </setting>
+ <setting id="musicfiles.nowplayingtrackformat" type="string" label="13307" help="36277">
+ <level>4</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="edit" format="string">
+ <heading>16016</heading>
+ </control>
+ </setting>
+ <setting id="musicfiles.librarytrackformat" type="string" label="13307" help="36279">
+ <level>4</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="edit" format="string">
+ <heading>16016</heading>
+ </control>
+ </setting>
+ <setting id="musicfiles.findremotethumbs" type="boolean" label="14059" help="36281">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="musicfiles.usetags" type="boolean" label="39125" help="36274">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="mymusic" label="0" help="0">
+ <group id="1">
+ <setting id="mymusic.songthumbinvis" type="boolean" label="0" help="36302">
+ <level>4</level>
+ <default>false</default>
+ </setting>
+ <setting id="mymusic.defaultlibview" type="string" label="0" help="36303">
+ <level>4</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ </setting>
+ </group>
+ </category>
+ <category id="pictures" label="14217" help="38109">
+ <group id="1" label="744">
+ <setting id="pictures.usetags" type="boolean" label="38207" help="38208">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pictures.generatethumbs" type="boolean" label="13360" help="36307">
+ <level>0</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pictures.showvideos" type="boolean" label="22022" help="36309">
+ <level>0</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pictures.displayresolution" type="integer" label="169" help="36310">
+ <visible>false</visible> <!-- not properly respected -->
+ <level>0</level>
+ <default>14</default> <!-- RES_AUTORES -->
+ <constraints>
+ <options>resolutions</options>
+ </constraints>
+ <control type="spinner" format="string" />
+ </setting>
+ </group>
+ </category>
+ <category id="scrapers" label="0" help="36197">
+ <visible>false</visible>
+ <group id="1">
+ <setting id="scrapers.moviesdefault" type="addon" label="21413" help="36198">
+ <level>4</level>
+ <default>metadata.themoviedb.org.python</default>
+ <constraints>
+ <addontype>xbmc.metadata.scraper.movies</addontype>
+ </constraints>
+ </setting>
+ <setting id="scrapers.tvshowsdefault" type="addon" label="21414" help="36199">
+ <level>4</level>
+ <default>metadata.tvshows.themoviedb.org.python</default>
+ <constraints>
+ <addontype>xbmc.metadata.scraper.tvshows</addontype>
+ </constraints>
+ </setting>
+ <setting id="scrapers.musicvideosdefault" type="addon" label="21415" help="36200">
+ <level>4</level>
+ <default>metadata.local</default>
+ <constraints>
+ <addontype>xbmc.metadata.scraper.musicvideos</addontype>
+ </constraints>
+ <updates>
+ <update type="change" />
+ </updates>
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="pvr" label="14204" help="36201">
+ <category id="pvrmanager" label="128" help="36202">
+ <group id="1" label="19279">
+ <setting id="pvrmanager.addons" type="action" label="19345" help="19346">
+ <level>1</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="pvrclient.menuhook" type="action" label="19280" help="36252">
+ <level>1</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="pvrmanager.clientpriorities" type="action" label="19240" help="36210">
+ <level>2</level>
+ <dependencies>
+ <dependency type="visible" on="property" name="pvrsettingvisible" setting="pvrmanager.clientpriorities" operator="is">true</dependency>
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ <group id="2" label="14303">
+ <setting id="pvrmanager.resetdb" type="action" label="19185" help="36209">
+ <level>1</level>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ </category>
+ <category id="pvrmenu" label="14301" help="36211">
+ <group id="1" label="128">
+ <setting id="pvrmanager.syncchannelgroups" type="boolean" label="19221" help="36204">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrmanager.backendchannelorder" type="boolean" label="19231" help="36205">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrmanager.usebackendchannelnumbersalways" type="boolean" label="19329" help="36358">
+ <level>3</level>
+ <dependencies>
+ <dependency type="visible" on="property" name="pvrsettingvisible" setting="pvrmanager.usebackendchannelnumbersalways" operator="is">true</dependency>
+ </dependencies>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrmanager.usebackendchannelnumbers" type="boolean" label="19234" help="36206">
+ <level>2</level>
+ <dependencies>
+ <dependency type="visible">
+ <or>
+ <condition type="visible" on="property" name="pvrsettingvisible" setting="pvrmanager.usebackendchannelnumbers" operator="is">true</condition>
+ <condition setting="pvrmanager.usebackendchannelnumbersalways" operator="is">true</condition>
+ </or>
+ </dependency>
+ </dependencies>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrmanager.startgroupchannelnumbersfromone" type="boolean" parent="pvrmanager.usebackendchannelnumbers" label="19316" help="36306">
+ <level>2</level>
+ <dependencies>
+ <dependency type="visible" on="property" name="pvrsettingvisible" setting="pvrmanager.usebackendchannelnumbers" operator="is">true</dependency>
+ <dependency type="enable" setting="pvrmanager.usebackendchannelnumbers" operator="is">false</dependency>
+ </dependencies>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrmanager.channelmanager" type="action" label="19199" help="36207">
+ <level>1</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="pvrmanager.groupmanager" type="action" label="19048" help="36213">
+ <level>1</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="pvrmanager.channelscan" type="action" label="19117" help="36208">
+ <level>1</level>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ <group id="2" label="14302">
+ <setting id="pvrmenu.iconpath" type="path" label="19018" help="36216">
+ <level>2</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ <writable>false</writable>
+ </constraints>
+ <control type="button" format="path">
+ <heading>657</heading>
+ </control>
+ </setting>
+ <setting id="pvrmenu.searchicons" type="action" label="19167" help="36217">
+ <level>2</level>
+ <dependencies>
+ <dependency type="enable">
+ <and>
+ <condition setting="pvrmenu.iconpath" operator="!is"></condition>
+ </and>
+ </dependency>
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ </category>
+ <category id="epg" label="22020" help="36218">
+ <group id="1" label="128">
+ <setting id="epg.pastdaystodisplay" type="integer" label="19229" help="36219">
+ <level>2</level>
+ <default>1</default>
+ <constraints>
+ <minimum>0</minimum>
+ <step>1</step>
+ <maximum>31</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>17999</formatlabel>
+ </control>
+ </setting>
+ <setting id="epg.futuredaystodisplay" type="integer" label="19182" help="36220">
+ <level>2</level>
+ <default>3</default>
+ <constraints>
+ <minimum>1</minimum>
+ <step>1</step>
+ <maximum>31</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>17999</formatlabel>
+ </control>
+ </setting>
+ <setting id="epg.selectaction" type="integer" label="22079" help="36424">
+ <level>1</level>
+ <default>2</default> <!-- EPG_SELECT_ACTION_INFO -->
+ <constraints>
+ <options>
+ <option label="36425">0</option> <!-- EPG_SELECT_ACTION_CONTEXT_MENU -->
+ <option label="36426">1</option> <!-- EPG_SELECT_ACTION_SWITCH -->
+ <option label="36427">2</option> <!-- EPG_SELECT_ACTION_INFO -->
+ <option label="36428">3</option> <!-- EPG_SELECT_ACTION_RECORD -->
+ <option label="19096">5</option> <!-- EPG_SELECT_ACTION_SMART_SELECT -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="epg.hidenoinfoavailable" type="boolean" label="19268" help="36224">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="2" label="14303">
+ <setting id="epg.epgupdate" type="integer" label="19071" help="36221">
+ <level>2</level>
+ <default>120</default>
+ <constraints>
+ <minimum>15</minimum>
+ <step>15</step>
+ <maximum>2880</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14044</formatlabel>
+ </control>
+ </setting>
+ <setting id="epg.preventupdateswhileplayingtv" type="boolean" label="19230" help="36222">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="epg.resetepg" type="action" label="19185" help="36225">
+ <level>1</level>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ </category>
+ <category id="pvrplayback" label="19177" help="36226">
+ <group id="1" label="128">
+ <setting id="pvrplayback.switchtofullscreenchanneltypes" type="integer" label="19171" help="36227">
+ <level>1</level>
+ <default>3</default> <!-- TV and radio channels -->
+ <constraints>
+ <options>
+ <option label="20420">0</option> <!-- Never -->
+ <option label="19180">1</option> <!-- TV channels -->
+ <option label="19183">2</option> <!-- Radio channels -->
+ <option label="19250">3</option> <!-- TV and radio channels -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="pvrmanager.preselectplayingchannel" type="boolean" label="19269" help="36214">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrmenu.displaychannelinfo" type="integer" label="19178" help="36212">
+ <level>2</level>
+ <default>5</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>1</step>
+ <maximum>15</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14045</formatlabel>
+ </control>
+ </setting>
+ <setting id="pvrmenu.closechannelosdonswitch" type="boolean" label="19303" help="36235">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrplayback.confirmchannelswitch" type="boolean" label="19281" help="36231">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrplayback.channelentrytimeout" type="integer" label="19073" help="36232">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <minimum>0</minimum>
+ <step>250</step>
+ <maximum>10000</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14046</formatlabel>
+ </control>
+ </setting>
+ <setting id="pvrplayback.delaymarklastwatched" type="integer" label="19195" help="36236">
+ <level>3</level>
+ <default>0</default>
+ <constraints>
+ <minimum>0</minimum>
+ <step>30</step>
+ <maximum>600</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14045</formatlabel>
+ </control>
+ </setting>
+ <setting id="pvrplayback.signalquality" type="boolean" label="19037" help="36229">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrplayback.fps" type="integer" label="19108" help="36261">
+ <level>0</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="351">0</option> <!-- OFF -->
+ <option label="211">1</option> <!-- 50Hz -->
+ <option label="212">2</option> <!-- 59.94Hz -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ <group id="2" label="14304">
+ <setting id="pvrplayback.enableradiords" type="boolean" label="29980" help="29981">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrplayback.trafficadvisory" type="boolean" label="29982" help="29983">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ <dependencies>
+ <dependency type="enable" setting="pvrplayback.enableradiords">true</dependency>
+ </dependencies>
+ </setting>
+ <setting id="pvrplayback.trafficadvisoryvolume" type="integer" label="29984" help="29985">
+ <level>2</level>
+ <default>10</default>
+ <constraints>
+ <minimum>0</minimum>
+ <step>1</step>
+ <maximum>20</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14050</formatlabel>
+ </control>
+ <dependencies>
+ <dependency type="enable" setting="pvrplayback.enableradiords">true</dependency>
+ <dependency type="enable" setting="pvrplayback.trafficadvisory">true</dependency>
+ </dependencies>
+ </setting>
+ </group>
+ </category>
+ <category id="pvrrecord" label="19043" help="36233">
+ <group id="1" label="128">
+ <setting id="pvrrecord.instantrecordaction" type="integer" label="19086" help="36254">
+ <level>1</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="19087">0</option> <!-- Record current show -->
+ <option label="19088">1</option> <!-- Record for a fixed time period -->
+ <option label="19089">2</option> <!-- Ask what to do -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="pvrrecord.instantrecordtime" type="integer" label="19172" help="36234">
+ <level>1</level>
+ <default>120</default>
+ <constraints>
+ <minimum>1</minimum>
+ <step>1</step>
+ <maximum>720</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14044</formatlabel>
+ </control>
+ </setting>
+ <setting id="pvrrecord.marginstart" type="integer" label="19175" help="36237">
+ <level>2</level>
+ <default>0</default> <!-- 0 mins -->
+ <constraints>
+ <options>pvrrecordmargins</options>
+ </constraints>
+ <control type="list" format="string"/>
+ </setting>
+ <setting id="pvrrecord.marginend" type="integer" label="19176" help="36238">
+ <level>2</level>
+ <default>0</default> <!-- 0 mins -->
+ <constraints>
+ <options>pvrrecordmargins</options>
+ </constraints>
+ <control type="list" format="string"/>
+ </setting>
+ <setting id="pvrrecord.timernotifications" type="boolean" label="19233" help="36239">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrrecord.grouprecordings" type="boolean" label="" help="">
+ <default>true</default>
+ <level>4</level>
+ </setting>
+ </group>
+ </category>
+ <category id="pvrreminders" label="19215" help="36296">
+ <group id="1" label="128">
+ <setting id="pvrreminders.autoclosedelay" type="integer" label="19313" help="36297">
+ <level>1</level>
+ <default>10</default>
+ <constraints>
+ <minimum>1</minimum>
+ <step>1</step>
+ <maximum>60</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14045</formatlabel>
+ </control>
+ </setting>
+ <setting id="pvrreminders.autorecord" type="boolean" label="19314" help="36298">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrreminders.autoswitch" type="boolean" label="19330" help="36434">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="pvrpowermanagement" label="14095" help="36240">
+ <group id="1" label="128">
+ <setting id="pvrpowermanagement.enabled" type="boolean" label="305" help="36241">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrpowermanagement.backendidletime" type="integer" label="19244" help="36242">
+ <level>2</level>
+ <default>15</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>5</step>
+ <maximum>360</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="pvrpowermanagement.enabled" operator="is">true</dependency>
+ </dependencies>
+ <control type="spinner" format="string">
+ <formatlabel>14044</formatlabel>
+ </control>
+ </setting>
+ <setting id="pvrpowermanagement.setwakeupcmd" type="string" label="19245" help="36243">
+ <level>2</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="pvrpowermanagement.enabled" operator="is">true</dependency>
+ </dependencies>
+ <control type="edit" format="string" />
+ </setting>
+ <setting id="pvrpowermanagement.prewakeup" type="integer" label="19246" help="36244">
+ <level>2</level>
+ <default>15</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>1</step>
+ <maximum>60</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="pvrpowermanagement.enabled" operator="is">true</dependency>
+ </dependencies>
+ <control type="spinner" format="string">
+ <formatlabel>14044</formatlabel>
+ </control>
+ </setting>
+ <setting id="pvrpowermanagement.dailywakeup" type="boolean" label="19247" help="36245">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ <dependencies>
+ <dependency type="enable" setting="pvrpowermanagement.enabled" operator="is">true</dependency>
+ </dependencies>
+ </setting>
+ <setting id="pvrpowermanagement.dailywakeuptime" type="string" label="19248" help="36246">
+ <level>2</level>
+ <default>00:00:00</default>
+ <control type="edit" format="string" />
+ <dependencies>
+ <dependency type="enable" setting="pvrpowermanagement.enabled" operator="is">true</dependency>
+ </dependencies>
+ </setting>
+ </group>
+ </category>
+ <category id="pvrparental" label="19259" help="36247">
+ <access>CheckPVRParentalPin</access>
+ <group id="1" label="128">
+ <setting id="pvrparental.enabled" type="boolean" label="449" help="36248">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="pvrparental.pin" type="string" label="19261" help="36249">
+ <level>2</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="pvrparental.enabled">true</dependency>
+ </dependencies>
+ <control type="edit" format="integer" delayed="false">
+ <hidden>true</hidden>
+ <verifynew>true</verifynew>
+ </control>
+ </setting>
+ <setting id="pvrparental.duration" type="integer" label="19260" help="36250">
+ <level>2</level>
+ <default>300</default>
+ <constraints>
+ <minimum>5</minimum>
+ <step>5</step>
+ <maximum>1200</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="pvrparental.enabled">true</dependency>
+ </dependencies>
+ <control type="spinner" format="string">
+ <formatlabel>14045</formatlabel>
+ </control>
+ </setting>
+ </group>
+ </category>
+ <category id="pvrclient" label="19279" help="36251">
+ </category>
+ <category id="pvrtimers" label="" help="">
+ <group id="1">
+ <setting id="pvrtimers.hidedisabledtimers" type="boolean" label="" help="">
+ <default>false</default>
+ <level>4</level>
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="services" label="14036" help="36319">
+ <category id="general" label="16000" help="36320">
+ <group id="1" label="13000">
+ <setting id="services.devicename" type="string" label="1271" help="36321">
+ <level>0</level>
+ <default>Kodi</default>
+ <control type="edit" format="string" />
+ </setting>
+ </group>
+ <group id="2" label="1259">
+ <requirement>HAS_ZEROCONF</requirement>
+ <setting id="services.zeroconf" type="boolean" label="1260" help="36342">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="3">
+ <requirement>HAS_ZEROCONF</requirement>
+ <setting id="services.deviceuuid" type="string">
+ <visible>false</visible>
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="edit" format="string" />
+ </setting>
+ </group>
+ </category>
+ <category id="control" label="14223" help="36327">
+ <group id="1" label="33101">
+ <requirement>HAS_WEB_SERVER</requirement>
+ <setting id="services.webserver" type="boolean" label="263" help="36328">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.webserverport" type="integer" parent="services.webserver" label="730" help="36329">
+ <level>1</level>
+ <default>8080</default>
+ <constraints>
+ <minimum>1</minimum>
+ <step>1</step>
+ <maximum>65535</maximum>
+ </constraints>
+ <updates>
+ <update type="change" />
+ </updates>
+ <control type="edit" format="integer" />
+ </setting>
+ <setting id="services.webserverauthentication" parent="services.webserver" type="boolean" label="1052" help="1053">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.webserverusername" type="string" parent="services.webserver" label="1048" help="36330">
+ <level>1</level>
+ <default>kodi</default>
+ <updates>
+ <update type="change" />
+ </updates>
+ <control type="edit" format="string" />
+ </setting>
+ <setting id="services.webserverpassword" type="string" parent="services.webserver" label="733" help="36331">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="edit" format="string">
+ <hidden>true</hidden>
+ </control>
+ </setting>
+ <setting id="services.webserverssl" type="boolean" parent="services.webserver" label="729" help="36899">
+ <requirement>WEBSERVER_HAS_SSL</requirement>
+ <level>1</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="services.webserver">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.webskin" type="addon" label="199" help="36332">
+ <level>1</level>
+ <default>webinterface.default</default>
+ <constraints>
+ <addontype>xbmc.webinterface</addontype>
+ </constraints>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ </group>
+ <group id="2" label="14275">
+ <setting id="services.esenabled" type="boolean" label="14276" help="36334">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.esport" type="integer" label="792" help="36335">
+ <level>4</level>
+ <default>9777</default>
+ <constraints>
+ <minimum>1</minimum>
+ <step>1</step>
+ <maximum>65535</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="services.esenabled">true</dependency>
+ </dependencies>
+ <control type="edit" format="integer" />
+ </setting>
+ <setting id="services.esportrange" type="integer" label="793" help="36336">
+ <level>4</level>
+ <default>10</default>
+ <constraints>
+ <minimum>1</minimum>
+ <step>1</step>
+ <maximum>100</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="services.esenabled">true</dependency>
+ </dependencies>
+ <control type="spinner" format="integer" />
+ </setting>
+ <setting id="services.esmaxclients" type="integer" label="797" help="36337">
+ <level>4</level>
+ <default>20</default>
+ <constraints>
+ <minimum>1</minimum>
+ <step>1</step>
+ <maximum>100</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="services.esenabled">true</dependency>
+ </dependencies>
+ <control type="spinner" format="integer" />
+ </setting>
+ <setting id="services.esallinterfaces" type="boolean" label="14277" help="36338">
+ <level>1</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="services.esenabled" operator="is">true</condition>
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.esinitialdelay" type="integer" label="795" help="36339">
+ <level>4</level>
+ <default>750</default>
+ <constraints>
+ <minimum>5</minimum>
+ <step>5</step>
+ <maximum>10000</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="services.esenabled">true</dependency>
+ </dependencies>
+ <control type="spinner" format="integer" />
+ </setting>
+ <setting id="services.escontinuousdelay" type="integer" label="796" help="36340">
+ <level>4</level>
+ <default>25</default>
+ <constraints>
+ <minimum>5</minimum>
+ <step>5</step>
+ <maximum>10000</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="services.esenabled">true</dependency>
+ </dependencies>
+ <control type="spinner" format="integer" />
+ </setting>
+ </group>
+ </category>
+ <category id="upnp" label="20187" help="36322">
+ <requirement>HAS_UPNP</requirement>
+ <group id="1" label="16000">
+ <setting id="services.upnp" type="boolean" label="21358" help="39017">
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.upnpserver" type="boolean" parent="services.upnp" label="21360" help="36323">
+ <level>0</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="services.upnp">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.upnpannounce" type="boolean" parent="services.upnpserver" label="20188" help="36324">
+ <level>2</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable">
+ <and>
+ <condition setting="services.upnp" operator="is">true</condition>
+ <condition setting="services.upnpserver" operator="is">true</condition>
+ </and>
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.upnplookforexternalsubtitles" type="boolean" parent="services.upnpserver" label="20222" help="36420">
+ <level>2</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable">
+ <and>
+ <condition setting="services.upnp" operator="is">true</condition>
+ <condition setting="services.upnpserver" operator="is">true</condition>
+ </and>
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.upnpcontroller" type="boolean" parent="services.upnpserver" label="21361" help="36326">
+ <level>2</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable">
+ <and>
+ <condition setting="services.upnp" operator="is">true</condition>
+ <condition setting="services.upnpserver" operator="is">true</condition>
+ </and>
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.upnprenderer" type="boolean" label="21881" help="36325">
+ <level>1</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="services.upnp">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="airplay" label="1273" help="36602">
+ <requirement>HAS_AIRPLAY</requirement>
+ <group id="1" label="16000">
+ <setting id="services.airplay" type="boolean" label="1270" help="36343">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.airplayvolumecontrol" type="boolean" parent="services.airplay" label="1269" help="36541">
+ <level>2</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable" setting="services.airplay">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.airplayvideosupport" type="boolean" parent="services.airplay" label="1268" help="36549">
+ <level>3</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="services.airplay">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.useairplaypassword" type="boolean" parent="services.airplayvideosupport" label="1272" help="36344">
+ <level>1</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="services.airplay">true</dependency>
+ <dependency type="enable" setting="services.airplayvideosupport">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="services.airplaypassword" type="string" parent="services.useairplaypassword" label="733" help="36345">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="services.useairplaypassword">true</dependency>
+ </dependencies>
+ <control type="edit" format="string">
+ <hidden>true</hidden>
+ </control>
+ </setting>
+ </group>
+ </category>
+ <category id="smb" label="1200" help="36346">
+ <requirement>HAS_FILESYSTEM_SMB</requirement>
+ <group id="1" label="16000">
+ <setting id="smb.workgroup" type="string" label="1202" help="36348">
+ <level>2</level>
+ <default>WORKGROUP</default>
+ <control type="edit" format="string" />
+ </setting>
+ </group>
+ <group id="2" label="36627">
+ <setting id="smb.winsserver" type="string" label="1207" help="36347">
+ <level>2</level>
+ <default>0.0.0.0</default>
+ <control type="edit" format="ip" />
+ </setting>
+ <setting id="smb.minprotocol" type="integer" label="36628" help="36629">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="36623">0</option>
+ <option label="36624">1</option>
+ <option label="36625">2</option>
+ <option label="36626">3</option>
+ </options>
+ </constraints>
+ <control type="list" format="integer" />
+ </setting>
+ <setting id="smb.maxprotocol" type="integer" label="36621" help="36622">
+ <level>2</level>
+ <default>3</default>
+ <constraints>
+ <options>
+ <option label="36623">0</option>
+ <option label="36624">1</option>
+ <option label="36625">2</option>
+ <option label="36626">3</option>
+ </options>
+ </constraints>
+ <control type="list" format="integer" />
+ </setting>
+ <setting id="smb.legacysecurity" type="boolean" label="36630" help="36631">
+ <level>2</level>
+ <default>false</default>
+ <control type="toggle" />
+ <dependencies>
+ <dependency type="enable">
+ <condition setting="smb.maxprotocol" operator="is">1</condition>
+ </dependency>
+ </dependencies>
+ </setting>
+ </group>
+ <group id="3" label="37047">
+ <setting id="services.wsdiscovery" type="boolean" label="37048" help="37049">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="nfs" label="1201" help="36356">
+ <requirement>HAS_FILESYSTEM_NFS</requirement>
+ <group id="1" label="16000">
+ <setting id="nfs.version" type="integer" label="37051" help="37052">
+ <level>2</level>
+ <default>3</default>
+ <constraints>
+ <minimum>3</minimum>
+ <step>1</step>
+ <maximum>4</maximum>
+ </constraints>
+ <control type="spinner" format="integer" />
+ </setting>
+ </group>
+ </category>
+ <category id="weather" label="8" help="36316">
+ <group id="1" label="16000">
+ <setting id="weather.currentlocation" type="integer" label="0" help="36317">
+ <level>4</level>
+ <default>1</default>
+ <control type="spinner" format="string" />
+ </setting>
+ <setting id="weather.addon" type="addon" label="24029" help="36318">
+ <level>0</level>
+ <default></default>
+ <constraints>
+ <addontype>xbmc.python.weather</addontype>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ <setting id="weather.addonsettings" type="action" parent="weather.addon" label="21417" help="36419">
+ <level>0</level>
+ <dependencies>
+ <dependency type="enable" on="property" name="AddonHasSettings" setting="weather.addon" />
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="games" label="15016" help="35200">
+ <category id="gamesgeneral" label="16000">
+ <group id="1" label="35201">
+ <setting id="gamesgeneral.enable" type="boolean">
+ <visible>false</visible>
+ <level>0</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="gamesgeneral.showosdhelp" type="boolean">
+ <visible>false</visible>
+ <level>0</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="gamesgeneral.enableautosave" type="boolean" label="35253" help="35254">
+ <level>0</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="gamesgeneral.enablerewind" type="boolean" label="35203" help="35204">
+ <level>0</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="gamesgeneral.rewindtime" type="integer" label="35205" help="35206">
+ <level>2</level>
+ <default>60</default>
+ <constraints>
+ <minimum>10</minimum>
+ <step>10</step>
+ <maximum>600</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="gamesgeneral.enablerewind">true</dependency>
+ </dependencies>
+ <control type="slider" format="integer">
+ <popup>true</popup>
+ <formatlabel>14045</formatlabel>
+ </control>
+ </setting>
+ </group>
+ </category>
+ <category id="gamesachievements" label="15312">
+ <group id="1" label="15313">
+ <setting id="gamesachievements.username" type="string" label="1048" help="35262">
+ <level>0</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="edit" format="string"/>
+ </setting>
+ <setting id="gamesachievements.password" type="string" label="733" help="35263">
+ <level>0</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="edit" format="string">
+ <hidden>true</hidden>
+ </control>
+ </setting>
+ <setting id="gamesachievements.token" type="string">
+ <visible>false</visible>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="edit" format="string"/>
+ </setting>
+ <setting id="gamesachievements.loggedin" type="boolean" label="35268" help="35269">
+ <visible>true</visible>
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="system" label="13000" help="36349">
+ <category id="display" label="14220" help="36603">
+ <group id="1" label="16000">
+ <setting id="videoscreen.monitor" type="string" label="246" help="">
+ <requirement>
+ <or>
+ <condition>HAVE_X11</condition>
+ <condition>HAVE_WAYLAND</condition>
+ <condition>HAVE_OSX</condition>
+ <condition>HAS_DX</condition>
+ <condition>HAVE_IOS</condition>
+ <condition>HAVE_GBM</condition>
+ </or>
+ </requirement>
+ <level>0</level>
+ <default>Default</default>
+ <constraints>
+ <options>monitors</options>
+ </constraints>
+ <control type="spinner" format="string" delayed="true" />
+ </setting>
+ <setting id="videoscreen.screen" type="integer" label="240" help="36351">
+ <level>0</level>
+ <default>0</default>
+ <constraints>
+ <options>screens</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="videoscreen.screenmode" />
+ </dependencies>
+ <control type="spinner" format="string" delayed="true" />
+ </setting>
+ <setting id="videoscreen.resolution" type="integer" parent="videoscreen.screen" label="169" help="36352">
+ <level>0</level>
+ <default>16</default> <!-- RES_DESKTOP -->
+ <constraints>
+ <options>resolutions</options>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="videoscreen.screen" operator="!is">-1</dependency> <!-- DM_WINDOWED -->
+ <dependency type="update" setting="videoscreen.screen" />
+ <dependency type="update" setting="videoscreen.screenmode" />
+ <dependency type="update" setting="videoscreen.monitor" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videoscreen.screenmode" type="string" parent="videoscreen.screen" label="243" help="36353">
+ <requirement>IsStandAlone</requirement>
+ <level>0</level>
+ <default>DESKTOP</default>
+ <constraints>
+ <options>refreshrates</options>
+ </constraints>
+ <updates>
+ <update type="change" />
+ </updates>
+ <dependencies>
+ <dependency type="enable" setting="videoscreen.screen" operator="!is">-1</dependency> <!-- DM_WINDOWED -->
+ <dependency type="update" setting="videoscreen.screen" />
+ <dependency type="update" setting="videoscreen.resolution" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videoscreen.fakefullscreen" type="boolean" parent="videoscreen.screen" label="14083" help="36354">
+ <level>1</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable" setting="videoscreen.screen" operator="!is">-1</dependency> <!-- DM_WINDOWED -->
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoscreen.blankdisplays" type="boolean" parent="videoscreen.screen" label="13130" help="36355">
+ <level>1</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="videoscreen.screen" operator="!is">-1</dependency> <!-- DM_WINDOWED -->
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoscreen.delayrefreshchange" type="integer" parent="videoscreen.screen" label="13550" help="36165">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <options>refreshchangedelays</options>
+ </constraints>
+ <control type="spinner" format="string" />
+ </setting>
+ <setting id="videoscreen.guisdrpeakluminance" type="integer" label="36097" help="36547">
+ <requirement>HAS_DX</requirement>
+ <dependencies>
+ <dependency type="visible">
+ <condition on="property" name="ishdrdisplay" />
+ </dependency>
+ </dependencies>
+ <level>2</level>
+ <default>60</default>
+ <control type="slider" format="percentage" range="0,100" />
+ </setting>
+ <setting id="videoscreen.10bitsurfaces" type="integer" label="36098" help="36578">
+ <requirement>HAS_DX</requirement>
+ <level>3</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="13416">0</option> <!-- AUTO -->
+ <option label="20420">1</option> <!-- NEVER -->
+ <option label="20422">2</option> <!-- ALWAYS -->
+ </options>
+ </constraints>
+ <control type="spinner" format="string" />
+ </setting>
+ <setting id="videoscreen.dither" type="boolean" label="36099" help="36598">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ </requirement>
+ <level>3</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoscreen.ditherdepth" type="integer" label="36100" help="36599">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ </requirement>
+ <level>3</level>
+ <default>8</default>
+ <constraints>
+ <minimum>2</minimum>
+ <step>1</step>
+ <maximum>8</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videoscreen.dither" operator="is">true</dependency>
+ </dependencies>
+ <control type="spinner" format="integer" />
+ </setting>
+ <setting id="videoscreen.cmsenabled" type="boolean" label="36560" help="36561">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ </requirement>
+ <level>3</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoscreen.cmsmode" type="integer" label="36562" help="36563">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ </requirement>
+ <level>3</level>
+ <default>0</default>
+ <constraints>
+ <options>cmsmodes</options>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videoscreen.cmsenabled" operator="is">true</dependency>
+ </dependencies>
+ <control type="list" format="integer"/>
+ </setting>
+ <setting id="videoscreen.cms3dlut" type="string" label="36564" help="36565">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ </requirement>
+ <level>3</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videoscreen.cmsenabled" operator="is">true</dependency>
+ <dependency type="visible" setting="videoscreen.cmsmode" operator="is">0</dependency>
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="videoscreen.displayprofile" type="string" label="36566" help="36567">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ <and>
+ <condition>HAVE_LCMS2</condition>
+ </and>
+ </requirement>
+ <level>3</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videoscreen.cmsenabled" operator="is">true</dependency>
+ <dependency type="visible" setting="videoscreen.cmsmode" operator="is">1</dependency>
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="videoscreen.cmswhitepoint" type="integer" label="36568" help="36569">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ <and>
+ <condition>HAVE_LCMS2</condition>
+ </and>
+ </requirement>
+ <level>3</level>
+ <default>0</default>
+ <constraints>
+ <options>cmswhitepoints</options>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videoscreen.cmsenabled" operator="is">true</dependency>
+ <dependency type="visible" setting="videoscreen.cmsmode" operator="is">1</dependency>
+ </dependencies>
+ <control type="list" format="integer"/>
+ </setting>
+ <setting id="videoscreen.cmsprimaries" type="integer" label="36570" help="36571">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ <and>
+ <condition>HAVE_LCMS2</condition>
+ </and>
+ </requirement>
+ <level>3</level>
+ <default>0</default>
+ <constraints>
+ <options>cmsprimaries</options>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videoscreen.cmsenabled" operator="is">true</dependency>
+ <dependency type="visible" setting="videoscreen.cmsmode" operator="is">1</dependency>
+ </dependencies>
+ <control type="list" format="integer"/>
+ </setting>
+ <setting id="videoscreen.cmsgammamode" type="integer" label="36572" help="36573">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ <and>
+ <condition>HAVE_LCMS2</condition>
+ </and>
+ </requirement>
+ <level>3</level>
+ <default>0</default>
+ <constraints>
+ <options>cmsgammamodes</options>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videoscreen.cmsenabled" operator="is">true</dependency>
+ <dependency type="visible" setting="videoscreen.cmsmode" operator="is">1</dependency>
+ </dependencies>
+ <control type="list" format="integer"/>
+ </setting>
+ <setting id="videoscreen.cmsgamma" type="integer" label="36574" help="36575">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ <and>
+ <condition>HAVE_LCMS2</condition>
+ </and>
+ </requirement>
+ <level>3</level>
+ <default>220</default>
+ <constraints>
+ <minimum>160</minimum>
+ <step>005</step>
+ <maximum>280</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videoscreen.cmsenabled" operator="is">true</dependency>
+ <dependency type="visible" setting="videoscreen.cmsmode" operator="is">1</dependency>
+ <dependency type="visible" setting="videoscreen.cmsgammamode" operator="!is">0</dependency>
+ </dependencies>
+ <control type="spinner" format="integer" />
+ </setting>
+ <setting id="videoscreen.cmslutsize" type="integer" label="36576" help="36577">
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ </requirement>
+ <level>3</level>
+ <default>6</default>
+ <constraints>
+ <minimum>4</minimum>
+ <step>1</step>
+ <maximum>8</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="visible" setting="videoscreen.cmsenabled" operator="is">true</dependency>
+ <dependency type="visible" setting="videoscreen.cmsmode" operator="is">1</dependency>
+ </dependencies>
+ <control type="spinner" format="integer" />
+ </setting>
+ </group>
+ <group id="2" label="14126">
+ <setting id="videoscreen.whitelist" type="list[string]" parent="videoscreen.screen" label="14126" help="36443">
+ <level>3</level>
+ <default></default>
+ <constraints>
+ <options>modes</options>
+ <delimiter>,</delimiter>
+ <minimumitems>0</minimumitems>
+ </constraints>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ </control>
+ </setting>
+ <setting id="videoscreen.whitelistpulldown" type="boolean" parent="videoscreen.whitelist" label="14127" help="36444">
+ <level>3</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="videoscreen.whitelist" operator="!is"></dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoscreen.whitelistdoublerefreshrate" type="boolean" parent="videoscreen.whitelist" label="14128" help="36445">
+ <level>3</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="videoscreen.whitelist" operator="!is"></dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="3" label="14232">
+ <setting id="videoscreen.stereoscopicmode" type="integer" label="36500" help="36539">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <options>stereoscopicmodes</options>
+ </constraints>
+ <control type="list" format="integer"/>
+ </setting>
+ <setting id="videoscreen.preferedstereoscopicmode" parent="videoscreen.stereoscopicmode" type="integer" label="36524" help="36540">
+ <level>2</level>
+ <default>100</default> <!-- ENUM RENDER_STEREO_MODE_AUTO -->
+ <constraints>
+ <options>preferedstereoscopicviewmodes</options>
+ </constraints>
+ <updates>
+ <update type="change" />
+ </updates>
+ <control type="list" format="integer"/>
+ </setting>
+ </group>
+ <group id="4" label="496">
+ <setting id="videoscreen.noofbuffers" type="integer" label="36043" help="36552">
+ <level>2</level>
+ <default>3</default> <!-- triple buffers -->
+ <constraints>
+ <minimum>2</minimum>
+ <step>1</step>
+ <maximum>3</maximum>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="videoscreen.guicalibration" type="action" label="214" help="36357">
+ <level>3</level>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ </category>
+ <category id="audio" label="14221" help="36360">
+ <group id="1" label="14250">
+ <setting id="audiooutput.audiodevice" type="string" label="545" help="36371">
+ <level>0</level>
+ <default>Default</default> <!-- will be properly set on startup -->
+ <constraints>
+ <options>audiodevices</options>
+ </constraints>
+ <control type="list" format="string" />
+ <updates>
+ <update type="change" />
+ </updates>
+ </setting>
+ <setting id="audiooutput.channels" type="integer" label="34100" help="36362">
+ <level>0</level>
+ <default>1</default> <!-- AE_CH_LAYOUT_2_0 -->
+ <dependencies>
+ <dependency type="visible" on="property" name="aesettingvisible" setting="audiooutput.audiodevice">audiooutput.channels</dependency>
+ </dependencies>
+ <constraints>
+ <options>
+ <option label="34101">1</option> <!-- AE_CH_LAYOUT_2_0 -->
+ <option label="34102">2</option> <!-- AE_CH_LAYOUT_2_1 -->
+ <option label="34103">3</option> <!-- AE_CH_LAYOUT_3_0 -->
+ <option label="34104">4</option> <!-- AE_CH_LAYOUT_3_1 -->
+ <option label="34105">5</option> <!-- AE_CH_LAYOUT_4_0 -->
+ <option label="34106">6</option> <!-- AE_CH_LAYOUT_4_1 -->
+ <option label="34107">7</option> <!-- AE_CH_LAYOUT_5_0 -->
+ <option label="34108">8</option> <!-- AE_CH_LAYOUT_5_1 -->
+ <option label="34109">9</option> <!-- AE_CH_LAYOUT_7_0 -->
+ <option label="34110">10</option> <!-- AE_CH_LAYOUT_7_1 -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="audiooutput.config" type="integer" label="337" help="36361">
+ <level>2</level>
+ <default>2</default>
+ <constraints>
+ <options>
+ <option label="338">1</option>
+ <option label="339">2</option>
+ <option label="420">3</option>
+ </options>
+ </constraints>
+ <control type="list" format="integer" />
+ </setting>
+ <setting id="audiooutput.volumesteps" type="integer" label="1302" help="36442">
+ <level>1</level>
+ <default>90</default>
+ <constraints>
+ <minimum>10</minimum>
+ <step>5</step>
+ <maximum>90</maximum>
+ </constraints>
+ <control type="list" format="integer" />
+ </setting>
+ <setting id="audiooutput.maintainoriginalvolume" type="boolean" label="346" help="36533">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="audiooutput.stereoupmix" type="boolean" label="252" help="36364">
+ <level>2</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="visible" on="property" name="aesettingvisible" setting="audiooutput.channels">audiooutput.stereoupmix</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="audiooutput.processquality" type="integer" label="13505" help="36169">
+ <requirement>HAS_AE_QUALITY_LEVELS</requirement>
+ <level>2</level>
+ <default>30</default> <!-- AE_QUALITY_MID -->
+ <constraints>
+ <options>aequalitylevels</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="audiooutput.atempothreshold" type="integer" label="13517" help="13518">
+ <level>3</level>
+ <default>2</default> <!-- 2% -->
+ <constraints>
+ <minimum>0</minimum>
+ <step>1</step>
+ <maximum>100</maximum>
+ </constraints>
+ <control type="edit" format="integer" />
+ </setting>
+ <setting id="audiooutput.samplerate" type="integer" label="458" help="36523">
+ <level>2</level>
+ <default>48000</default>
+ <dependencies>
+ <dependency type="visible">
+ <and>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.audiodevice">audiooutput.samplerate</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.samplerate</condition>
+ </and>
+ </dependency>
+ </dependencies>
+ <constraints>
+ <options>
+ <option label="34124">44100</option>
+ <option label="34125">48000</option>
+ <option label="34126">88200</option>
+ <option label="34127">96000</option>
+ <option label="34128">192000</option>
+ <option label="34129">352800</option>
+ <option label="34130">384000</option>
+ </options>
+ </constraints>
+ <control type="list" format="integer" />
+ </setting>
+ <setting id="audiooutput.streamsilence" type="integer" label="421" help="34111">
+ <level>2</level>
+ <default>1</default>
+ <constraints>
+ <options>audiostreamsilence</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="audiooutput.streamnoise" type="boolean" label="34112" help="34113">
+ <level>2</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="2" label="15108">
+ <setting id="audiooutput.guisoundmode" type="integer" label="34120" help="36373">
+ <level>0</level>
+ <default>1</default> <!-- AE_SOUND_IDLE -->
+ <constraints>
+ <options>
+ <option label="34121">1</option> <!-- AE_SOUND_IDLE -->
+ <option label="34122">2</option> <!-- AE_SOUND_ALWAYS -->
+ <option label="34123">0</option> <!-- AE_SOUND_OFF -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="audiooutput.guisoundvolume" type="integer" label="13376" help="39176">
+ <level>1</level>
+ <default>100</default>
+ <control type="slider" format="percentage" range="0,100" />
+ </setting>
+ <setting id="lookandfeel.soundskin" type="addon" label="24006" help="36110">
+ <level>0</level>
+ <default>resource.uisounds.kodi</default>
+ <dependencies>
+ <dependency type="enable" setting="audiooutput.guisoundmode" operator="!is">0</dependency>
+ </dependencies>
+ <constraints>
+ <addontype>kodi.resource.uisounds</addontype>
+ <allowempty>true</allowempty>
+ </constraints>
+ <updates>
+ <update type="change" />
+ </updates>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ </group>
+ <group id="3" label="14252">
+ <setting id="audiooutput.passthrough" type="boolean" label="348" help="36368">
+ <level>1</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="visible">
+ <and>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.audiodevice">audiooutput.passthrough</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.passthrough</condition>
+ </and>
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="audiooutput.passthroughdevice" type="string" label="546" help="36372">
+ <level>1</level>
+ <default>Default</default> <!-- will be properly set on startup -->
+ <dependencies>
+ <dependency type="visible">
+ <and>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.passthrough">audiooutput.passthrough</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.passthrough</condition>
+ </and>
+ </dependency>
+ <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency>
+ </dependencies>
+ <constraints>
+ <options>audiodevicespassthrough</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="audiooutput.ac3passthrough" type="boolean" label="364" help="36365">
+ <level>2</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="visible" on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.passthrough</dependency>
+ <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="audiooutput.ac3transcode" type="boolean" parent="audiooutput.ac3passthrough" label="667" help="36429">
+ <level>2</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable">
+ <and>
+ <condition setting="audiooutput.passthrough" operator="is">true</condition>
+ <condition setting="audiooutput.ac3passthrough" operator="is">true</condition>
+ </and>
+ </dependency>
+ <dependency type="visible">
+ <and>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.ac3transcode</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.channels">audiooutput.ac3transcode</condition>
+ </and>
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="audiooutput.eac3passthrough" type="boolean" label="448" help="37016">
+ <level>2</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="visible">
+ <and>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.eac3passthrough</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.passthroughdevice">audiooutput.eac3passthrough</condition>
+ </and>
+ </dependency>
+ <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="audiooutput.dtspassthrough" type="boolean" label="254" help="36366">
+ <level>2</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="visible">
+ <and>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.dtspassthrough</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.passthroughdevice">audiooutput.dtspassthrough</condition>
+ </and>
+ </dependency>
+ <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="audiooutput.truehdpassthrough" type="boolean" label="349" help="36369">
+ <level>2</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="visible">
+ <and>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.truehdpassthrough</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.passthroughdevice">audiooutput.truehdpassthrough</condition>
+ </and>
+ </dependency>
+ <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="audiooutput.dtshdpassthrough" type="boolean" label="347" help="36370">
+ <level>2</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="visible">
+ <and>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.dtshdpassthrough</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.passthroughdevice">audiooutput.dtshdpassthrough</condition>
+ </and>
+ </dependency>
+ <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="audiooutput.dtshdcorefallback" type="boolean" parent="audiooutput.dtshdpassthrough" label="2203" help="2204">
+ <level>2</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="visible">
+ <and>
+ <condition setting="audiooutput.dtshdpassthrough" operator="is">false</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.dtshdpassthrough</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.passthroughdevice">audiooutput.dtshdpassthrough</condition>
+ </and>
+ </dependency>
+ <dependency type="enable">
+ <and>
+ <condition setting="audiooutput.passthrough" operator="is">true</condition>
+ </and>
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="input" label="14125" help="36374">
+ <group id="1" label="35000">
+ <setting id="input.peripherals" type="action" label="35000" help="36375">
+ <level>1</level>
+ <dependencies>
+ <dependency type="enable" on="property" name="HasPeripherals" />
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="input.peripherallibraries" type="action" label="35047" help="35048">
+ <level>1</level>
+ <dependencies>
+ <dependency type="enable" on="property" name="HasPeripheralLibraries" />
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ </group>
+ <group id="2" label="14094">
+ <setting id="input.enablemouse" type="boolean" label="21369" help="36377">
+ <level>2</level>
+ <control type="toggle" />
+ <default>true</default>
+ </setting>
+ <setting id="input.enablejoystick" type="boolean" label="35100" help="36378">
+ <level>2</level>
+ <control type="toggle" />
+ <default>true</default>
+ </setting>
+ <setting id="input.asknewcontrollers" type="boolean">
+ <level>0</level>
+ <control type="toggle" />
+ <default>true</default>
+ <visible>false</visible>
+ </setting>
+ <setting id="input.controllerconfig" type="action" label="35063" help="35064">
+ <level>0</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="input.rumblenotify" type="boolean" label="35053" help="35054">
+ <level>1</level>
+ <dependencies>
+ <dependency type="visible" on="property" name="HasRumbleFeature" />
+ </dependencies>
+ <control type="toggle" />
+ <default>false</default>
+ </setting>
+ <setting id="input.testrumble" type="action" label="35051" help="35052">
+ <level>2</level>
+ <dependencies>
+ <dependency type="visible" on="property" name="HasRumbleFeature" />
+ <dependency type="enable" on="property" name="HasRumbleController" />
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="input.controllerpoweroff" type="boolean" label="35088" help="35089">
+ <level>1</level>
+ <dependencies>
+ <dependency type="visible" on="property" name="HasPowerOffFeature" />
+ </dependencies>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ <group id="3" label="13600">
+ </group>
+ </category>
+ <category id="network" label="798" help="36379">
+ <group id="1" label="16000">
+ <setting id="network.usehttpproxy" type="boolean" label="708" help="36380">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="network.httpproxytype" type="integer" parent="network.usehttpproxy" label="1180" help="36381">
+ <level>1</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="1181">0</option> <!-- PROXY_HTTP -->
+ <option label="1186">5</option> <!-- PROXY_HTTPS -->
+ <option label="1182">1</option> <!-- PROXY_SOCKS4 -->
+ <option label="1183">2</option> <!-- PROXY_SOCKS4A -->
+ <option label="1184">3</option> <!-- PROXY_SOCKS5 -->
+ <option label="1185">4</option> <!-- PROXY_SOCKS5_REMOTE -->
+ </options>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="network.usehttpproxy">true</dependency>
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="network.httpproxyserver" type="string" parent="network.usehttpproxy" label="706" help="36382">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="network.usehttpproxy">true</dependency>
+ </dependencies>
+ <control type="edit" format="string" />
+ </setting>
+ <setting id="network.httpproxyport" type="integer" parent="network.usehttpproxy" label="730" help="36383">
+ <level>1</level>
+ <default>8080</default>
+ <constraints>
+ <minimum>1</minimum>
+ <step>1</step>
+ <maximum>65535</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="network.usehttpproxy">true</dependency>
+ </dependencies>
+ <control type="edit" format="integer" />
+ </setting>
+ <setting id="network.httpproxyusername" type="string" parent="network.usehttpproxy" label="1048" help="36384">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="network.usehttpproxy">true</dependency>
+ </dependencies>
+ <control type="edit" format="string" />
+ </setting>
+ <setting id="network.httpproxypassword" type="string" parent="network.usehttpproxy" label="733" help="36385">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="network.usehttpproxy">true</dependency>
+ </dependencies>
+ <control type="edit" format="string">
+ <hidden>true</hidden>
+ </control>
+ </setting>
+ <setting id="network.bandwidth" type="integer" label="14041" help="36386">
+ <level>1</level>
+ <default>0</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>512</step>
+ <maximum>102400</maximum>
+ </constraints>
+ <control type="list" format="string">
+ <formatlabel>14048</formatlabel>
+ </control>
+ </setting>
+ </group>
+ </category>
+ <category id="powermanagement" label="14095" help="36387">
+ <group id="1" label="14255">
+ <setting id="powermanagement.displaysoff" type="integer" label="1450" help="36388">
+ <level>0</level>
+ <default>0</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>5</step>
+ <maximum>120</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14044</formatlabel>
+ </control>
+ </setting>
+ <setting id="powermanagement.shutdowntime" type="integer" label="357" help="36389">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>5</step>
+ <maximum>120</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14044</formatlabel>
+ </control>
+ </setting>
+ <setting id="powermanagement.shutdownstate" type="integer" label="13008" help="36390">
+ <level>2</level>
+ <default>0</default> <!-- POWERSTATE_QUIT -->
+ <constraints>
+ <options>shutdownstates</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="powermanagement.waitfornetwork" type="integer" label="39011" help="39012">
+ <level>2</level>
+ <default>0</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>1</step>
+ <maximum>30</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14045</formatlabel>
+ </control>
+ </setting>
+ </group>
+ <group id="2" label="14256">
+ <setting id="powermanagement.wakeonaccess" type="boolean" label="13026" help="36350">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="addons" label="24001" help="36610">
+ <group id="1" label="16000">
+ <setting id="general.addonupdates" type="integer" label="36605" help="36611">
+ <level>0</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="36606">0</option> <!-- AUTO_UPDATES_ON -->
+ <option label="36607">1</option> <!-- AUTO_UPDATES_NOTIFY -->
+ <option label="36608">2</option> <!-- AUTO_UPDATES_NEVER -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="general.addonnotifications" type="boolean" label="36609" help="36612">
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ <dependencies>
+ <dependency type="enable" setting="general.addonupdates">0</dependency>
+ </dependencies>
+ </setting>
+ <setting id="addons.managedependencies" type="action" label="24996" help="36613">
+ <level>2</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="addons.removeorphaneddependencies" type="action" label="36638" help="36639">
+ <level>2</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="addons.showrunning" type="action" label="24994" help="36614">
+ <level>2</level>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="addons.unknownsources" type="boolean" label="36615" help="36616">
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="addons.updatemode" type="integer" parent="addons.unknownsources" label="36422" help="36423">
+ <level>1</level>
+ <default>0</default>
+ <constraints>
+ <options>
+ <option label="36437">0</option> <!-- OFFICIAL_ONLY -->
+ <option label="36438">1</option> <!-- ANY_REPOSITORY -->
+ </options>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="addons.unknownsources" operator="is">true</dependency>
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ </category>
+ <category id="logging" label="14092" help="36391">
+ <group id="1" label="14260">
+ <setting id="debug.showloginfo" type="boolean" label="20191" help="36392">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="debug.extralogging" type="boolean" label="666" help="36394">
+ <level>1</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="debug.setextraloglevel" type="list[integer]" parent="debug.extralogging" label="668" help="36534">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <options>loggingcomponents</options>
+ <delimiter>,</delimiter>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="debug.extralogging" operator="is">true</dependency>
+ </dependencies>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ <hidevalue>true</hidevalue>
+ </control>
+ </setting>
+ <setting id="debug.screenshotpath" type="path" label="20004" help="36393">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <control type="button" format="path">
+ <heading>657</heading>
+ </control>
+ </setting>
+ </group>
+ <group id="2" label="14111">
+ <setting id="eventlog.enabled" type="boolean" label="14112" help="36460">
+ <level>1</level>
+ <default>true</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="eventlog.enablednotifications" type="boolean" parent="eventlog.enabled" label="14113" help="36461">
+ <level>1</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="eventlog.enabled" operator="is">true</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="eventlog.show" type="action" label="14114" help="36431">
+ <level>1</level>
+ <dependencies>
+ <dependency type="enable" setting="eventlog.enabled" operator="is">true</dependency>
+ </dependencies>
+ <control type="button" format="action">
+ <hidevalue>true</hidevalue>
+ </control>
+ </setting>
+ </group>
+ </category>
+ <category id="cache" label="439" help="36399">
+ <visible>false</visible>
+ <group id="1">
+ <setting id="cache.harddisk" type="integer" label="14025" help="36400">
+ <level>4</level>
+ <default>256</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>256</step>
+ <maximum>4096</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14049</formatlabel>
+ </control>
+ </setting>
+ </group>
+ <group id="2">
+ <setting id="cachevideo.dvdrom" type="integer" label="14026" help="36401">
+ <level>4</level>
+ <default>2048</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>256</step>
+ <maximum>16384</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14049</formatlabel>
+ </control>
+ </setting>
+ <setting id="cachevideo.lan" type="integer" label="14027" help="36402">
+ <level>4</level>
+ <default>2048</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>256</step>
+ <maximum>16384</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14049</formatlabel>
+ </control>
+ </setting>
+ <setting id="cachevideo.internet" type="integer" label="14028" help="36403">
+ <level>4</level>
+ <default>4096</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>256</step>
+ <maximum>16384</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14049</formatlabel>
+ </control>
+ </setting>
+ </group>
+ <group id="3">
+ <setting id="cacheaudio.dvdrom" type="integer" label="14030" help="36404">
+ <level>4</level>
+ <default>256</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>256</step>
+ <maximum>4096</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14049</formatlabel>
+ </control>
+ </setting>
+ <setting id="cacheaudio.lan" type="integer" label="14031" help="36405">
+ <level>4</level>
+ <default>256</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>256</step>
+ <maximum>4096</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14049</formatlabel>
+ </control>
+ </setting>
+ <setting id="cacheaudio.internet" type="integer" label="14032" help="36406">
+ <level>4</level>
+ <default>256</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>256</step>
+ <maximum>4096</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14049</formatlabel>
+ </control>
+ </setting>
+ </group>
+ <group id="4">
+ <setting id="cachedvd.dvdrom" type="integer" label="14034" help="36407">
+ <level>4</level>
+ <default>2048</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>256</step>
+ <maximum>16384</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14049</formatlabel>
+ </control>
+ </setting>
+ <setting id="cachedvd.lan" type="integer" label="14060" help="36408">
+ <level>4</level>
+ <default>2048</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>256</step>
+ <maximum>16384</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14049</formatlabel>
+ </control>
+ </setting>
+ </group>
+ <group id="5">
+ <setting id="cacheunknown.internet" type="integer" label="4096" help="36409">
+ <level>4</level>
+ <default>4096</default>
+ <constraints>
+ <minimum label="351">0</minimum>
+ <step>256</step>
+ <maximum>16384</maximum>
+ </constraints>
+ <control type="spinner" format="string">
+ <formatlabel>14049</formatlabel>
+ </control>
+ </setting>
+ </group>
+ </category>
+ <category id="paths" label="" help="36410">
+ <group id="1">
+ <setting id="system.playlistspath" type="path" label="20006" help="36411">
+ <level>4</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ </setting>
+ </group>
+ </category>
+ <category id="general" label="" help="36412">
+ <group id="1">
+ <setting id="general.addonforeignfilter" type="boolean" label="0" help="36415">
+ <level>4</level>
+ <default>false</default>
+ </setting>
+ <setting id="general.addonbrokenfilter" type="boolean" label="0" help="36415">
+ <level>4</level>
+ <default>true</default>
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="interface" label="14206" help="38102">
+ <category id="skin" label="166" help="36102">
+ <group id="1" label="24997">
+ <setting id="lookandfeel.skin" type="addon" label="166" help="36103">
+ <level>0</level>
+ <default>skin.estuary</default>
+ <constraints>
+ <addontype>xbmc.gui.skin</addontype>
+ </constraints>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ <setting id="lookandfeel.skinsettings" type="action" parent="lookandfeel.skin" label="14261" help="36104">
+ <level>0</level>
+ <dependencies>
+ <dependency type="enable" on="property" name="AddonHasSettings" setting="lookandfeel.skin" />
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="lookandfeel.skintheme" type="string" parent="lookandfeel.skin" label="15111" help="36105">
+ <level>1</level>
+ <default>SKINDEFAULT</default>
+ <constraints>
+ <options>skinthemes</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="lookandfeel.skin" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="lookandfeel.skincolors" type="string" parent="lookandfeel.skin" label="14078" help="36106">
+ <level>1</level>
+ <default>SKINDEFAULT</default>
+ <constraints>
+ <options>skincolors</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="lookandfeel.skin" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="lookandfeel.font" type="string" parent="lookandfeel.skin" label="13303" help="36107">
+ <level>1</level>
+ <default>Default</default>
+ <constraints>
+ <options>skinfonts</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="lookandfeel.skin" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="lookandfeel.skinzoom" type="integer" parent="lookandfeel.skin" label="20109" help="36108">
+ <level>1</level>
+ <default>0</default>
+ <constraints>
+ <minimum>-30</minimum>
+ <step>2</step>
+ <maximum>30</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="lookandfeel.skin" />
+ </dependencies>
+ <control type="spinner" format="string">
+ <formatlabel>14047</formatlabel>
+ </control>
+ </setting>
+ <setting id="lookandfeel.stereostrength" type="integer" label="36550" help="36551">
+ <level>2</level>
+ <default>5</default>
+ <constraints>
+ <minimum>0</minimum>
+ <step>1</step>
+ <maximum>10</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="lookandfeel.skin" />
+ </dependencies>
+ <control type="spinner" format="string" />
+ </setting>
+ <setting id="lookandfeel.enablerssfeeds" type="boolean" label="13305" help="36111">
+ <level>0</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ <setting id="lookandfeel.rssedit" type="string" parent="lookandfeel.enablerssfeeds" label="21450" help="36112">
+ <level>1</level>
+ <default></default>
+ <constraints>
+ <allowempty>true</allowempty>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="lookandfeel.enablerssfeeds">true</dependency>
+ </dependencies>
+ <control type="button" format="action">
+ <hidevalue>true</hidevalue>
+ </control>
+ </setting>
+ </group>
+ </category>
+ <category id="regional" label="14222" help="36113">
+ <group id="1" label="14218">
+ <setting id="locale.language" type="addon" label="248" help="36114">
+ <level>0</level>
+ <default>resource.language.en_gb</default>
+ <constraints>
+ <addontype>kodi.resource.language</addontype>
+ </constraints>
+ <control type="button" format="addon">
+ <show more="false" details="false">all</show>
+ </control>
+ </setting>
+ <setting id="locale.charset" type="string" label="14091" help="36116">
+ <level>1</level>
+ <default>DEFAULT</default>
+ <constraints>
+ <options>charsets</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="locale.language" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="locale.keyboardlayouts" type="list[string]" label="310" help="36432">
+ <level>0</level>
+ <default>English QWERTY</default>
+ <constraints>
+ <options>keyboardlayouts</options>
+ <delimiter>|</delimiter>
+ <minimumitems>1</minimumitems>
+ <maximumitems>3</maximumitems>
+ </constraints>
+ <control type="list" format="string">
+ <multiselect>true</multiselect>
+ </control>
+ </setting>
+ <setting id="locale.activekeyboardlayout" type="string" label="0" help="0">
+ <level>4</level>
+ <default>English QWERTY</default>
+ </setting>
+ </group>
+ <group id="2" label="14270">
+ <setting id="locale.country" type="string" label="14271" help="36115">
+ <level>0</level>
+ <default>USA (12h)</default>
+ <constraints>
+ <options>regions</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="locale.language" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="locale.timezonecountry" type="string" label="14079" help="36117">
+ <level>1</level>
+ <default>default</default> <!-- will be properly set on startup -->
+ <constraints>
+ <options>timezonecountries</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="locale.timezone" type="string" label="14080" help="36118">
+ <level>1</level>
+ <default>default</default> <!-- will be properly set on startup -->
+ <constraints>
+ <options>timezones</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="locale.timezonecountry" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="locale.shortdateformat" type="string" label="14109" help="36173">
+ <level>2</level>
+ <default>regional</default>
+ <constraints>
+ <options>shortdateformats</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="locale.country" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="locale.longdateformat" type="string" label="14110" help="36215">
+ <level>2</level>
+ <default>regional</default>
+ <constraints>
+ <options>longdateformats</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="locale.country" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="locale.timeformat" type="string" label="14107" help="36167">
+ <level>2</level>
+ <default>regional</default>
+ <constraints>
+ <options>timeformats</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="locale.country" />
+ <dependency type="update" setting="locale.use24hourclock" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="locale.use24hourclock" type="string" label="14108" help="36168">
+ <level>2</level>
+ <default>regional</default>
+ <constraints>
+ <options>24hourclockformats</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="locale.country" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="locale.temperatureunit" type="string" label="14105" help="36140">
+ <level>2</level>
+ <default>regional</default>
+ <constraints>
+ <options>temperatureunits</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="locale.country" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="locale.speedunit" type="string" label="14106" help="36142">
+ <level>2</level>
+ <default>regional</default>
+ <constraints>
+ <options>speedunits</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="locale.country" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ </category>
+ <category id="screensaver" label="360" help="36128">
+ <group id="1" label="16000">
+ <setting id="screensaver.mode" type="addon" label="356" help="36130">
+ <level>0</level>
+ <default>default</default> <!-- will be properly set on startup -->
+ <constraints>
+ <addontype>xbmc.ui.screensaver</addontype>
+ <allowempty>true</allowempty>
+ </constraints>
+ <updates>
+ <update type="change" />
+ </updates>
+ <control type="button" format="addon">
+ <show more="true" details="true">installed</show>
+ </control>
+ </setting>
+ <setting id="screensaver.settings" parent="screensaver.mode" type="action" label="21417" help="36131">
+ <level>1</level>
+ <dependencies>
+ <dependency type="enable">
+ <and>
+ <condition on="setting" setting="screensaver.mode" operator="!is"></condition>
+ <condition on="property" name="AddonHasSettings" setting="screensaver.mode" />
+ </and>
+ </dependency>
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="screensaver.preview" type="action" parent="screensaver.mode" label="1000" help="36132">
+ <level>1</level>
+ <dependencies>
+ <dependency type="enable" setting="screensaver.mode" operator="!is"></dependency>
+ </dependencies>
+ <control type="button" format="action" />
+ </setting>
+ <setting id="screensaver.time" type="integer" label="355" help="36129">
+ <level>0</level>
+ <default>3</default>
+ <constraints>
+ <minimum>1</minimum>
+ <step>1</step>
+ <maximum>60</maximum>
+ </constraints>
+ <dependencies>
+ <dependency type="enable" setting="screensaver.mode" operator="!is"></dependency>
+ </dependencies>
+ <control type="spinner" format="string">
+ <formatlabel>14044</formatlabel>
+ </control>
+ </setting>
+ <setting id="screensaver.usemusicvisinstead" type="boolean" label="13392" help="36133">
+ <level>0</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable" setting="screensaver.mode" operator="!is"></dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="screensaver.usedimonpause" type="boolean" label="22014" help="36134">
+ <level>1</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable">
+ <and>
+ <condition setting="screensaver.mode" operator="!is">screensaver.xbmc.builtin.dim</condition>
+ <condition setting="screensaver.mode" operator="!is"></condition>
+ </and>
+ </dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ <category id="masterlock" label="12360" help="36395">
+ <access>CheckMasterLock</access>
+ <group id="1" label="16000">
+ <setting id="masterlock.lockcode" type="action" label="20100" help="36396">
+ <level>1</level>
+ <control type="button" format="action">
+ <hidevalue>true</hidevalue>
+ </control>
+ </setting>
+ <setting id="masterlock.startuplock" type="boolean" parent="masterlock.lockcode" label="20076" help="36397">
+ <level>1</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" on="property" name="ProfileLockMode" operator="!is">0</dependency>
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="masterlock.maxretries" type="integer" label="12362" help="36398">
+ <level>4</level>
+ <default>3</default>
+ <constraints>
+ <minimum>3</minimum>
+ <step>1</step>
+ <maximum>100</maximum>
+ </constraints>
+ <control type="spinner" format="integer" />
+ </setting>
+ </group>
+ </category>
+ <category id="other" label="14224" help="36292">
+ <group id="2" label="14227">
+ <setting id="lookandfeel.startupaction" type="integer" label="39100" help="36161">
+ <level>0</level>
+ <default>0</default> <!-- STARTUP_ACTION_NONE -->
+ <constraints>
+ <options>
+ <option label="231">0</option> <!-- STARTUP_ACTION_NONE -->
+ <option label="39101">1</option> <!-- STARTUP_ACTION_PLAY_TV -->
+ <option label="39102">2</option> <!-- STARTUP_ACTION_PLAY_RADIO -->
+ </options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ <setting id="lookandfeel.startupwindow" type="integer" label="512" help="36109">
+ <level>0</level>
+ <default>10000</default> <!-- WINDOW_HOME -->
+ <constraints>
+ <options>startupwindows</options>
+ </constraints>
+ <dependencies>
+ <dependency type="update" setting="lookandfeel.skin" />
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ </category>
+ <category id="window" label="0" help="36135">
+ <visible>false</visible>
+ <group id="1">
+ <setting id="window.width" type="integer" label="0" help="36136">
+ <level>4</level>
+ <default>720</default>
+ </setting>
+ <setting id="window.height" type="integer" label="0" help="36137">
+ <level>4</level>
+ <default>480</default>
+ </setting>
+ </group>
+ </category>
+ </section>
+</settings>
diff --git a/system/settings/win10.xml b/system/settings/win10.xml
new file mode 100644
index 0000000..c735691
--- /dev/null
+++ b/system/settings/win10.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings version="1">
+ <section id="system">
+ <category id="display">
+ <group id="1">
+ <setting id="videoscreen.fakefullscreen">
+ <default>true</default>
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.blankdisplays">
+ <default>false</default>
+ <visible>false</visible>
+ </setting>
+ <setting id="videoscreen.monitor">
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ <category id="audio">
+ <group id="1">
+ <setting id="audiooutput.audiodevice">
+ <level>0</level>
+ <default>XAUDIO:default</default>
+ </setting>
+ </group>
+ <group id="3">
+ <setting id="audiooutput.passthroughdevice">
+ <level>1</level>
+ <default>WASAPI:default</default>
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="pvr">
+ <category id="pvrpowermanagement">
+ <setting id="pvrpowermanagement.setwakeupcmd">
+ <default></default>
+ <visible>false</visible>
+ </setting>
+ </category>
+ </section>
+ <section id="games">
+ <category id="gamesgeneral">
+ <group id="1">
+ <setting id="gamesgeneral.enable">
+ <default>false</default>
+ </setting>
+ </group>
+ </category>
+ </section>
+</settings>
diff --git a/system/settings/win32.xml b/system/settings/win32.xml
new file mode 100644
index 0000000..bafa5ea
--- /dev/null
+++ b/system/settings/win32.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings version="1">
+ <section id="interface" label="14206" help="38102">
+ <category id="window" label="0" help="36135">
+ <visible>false</visible>
+ <group id="1">
+ <setting id="window.top" type="integer" label="0" help="36136">
+ <level>4</level>
+ <default>0</default>
+ </setting>
+ <setting id="window.left" type="integer" label="0" help="36136">
+ <level>4</level>
+ <default>0</default>
+ </setting>
+ </group>
+ </category>
+ </section>
+</settings>
diff --git a/system/settings/windows.xml b/system/settings/windows.xml
new file mode 100644
index 0000000..163cb5c
--- /dev/null
+++ b/system/settings/windows.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings version="1">
+ <section id="services">
+ <category id="general">
+ <group id="2">
+ <setting id="services.zeroconf">
+ <default>false</default>
+ </setting>
+ </group>
+ </category>
+ <category id="smb">
+ <group id="1">
+ <visible>false</visible>
+ </group>
+ <group id="2">
+ <visible>false</visible>
+ </group>
+ </category>
+ </section>
+ <section id="system">
+ <category id="audio">
+ <group id="1">
+ <setting id="audiooutput.audiodevice" type="string" label="545" help="36371">
+ <level>0</level>
+ <default>DIRECTSOUND:default</default>
+ <constraints>
+ <options>audiodevices</options>
+ </constraints>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ <group id="3">
+ <setting id="audiooutput.passthroughdevice" type="string" label="546" help="36372">
+ <level>1</level>
+ <default>DIRECTSOUND:default</default>
+ <constraints>
+ <options>audiodevicespassthrough</options>
+ </constraints>
+ <dependencies>
+ <dependency type="visible">
+ <and>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.audiodevice">audiooutput.passthrough</condition>
+ <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.passthrough</condition>
+ </and>
+ </dependency>
+ </dependencies>
+ <control type="list" format="string" />
+ </setting>
+ </group>
+ </category>
+ <category id="display">
+ <group id="1">
+ <setting id="videoscreen.limitedrange" type="boolean" label="36042" help="36359">
+ <level>3</level>
+ <default>false</default>
+ <control type="toggle" />
+ </setting>
+ </group>
+ </category>
+ </section>
+ <section id="interface">
+ <category id="regional">
+ <group id="2">
+ <setting id="locale.timezonecountry">
+ <visible>false</visible>
+ </setting>
+ <setting id="locale.timezone">
+ <visible>false</visible>
+ </setting>
+ </group>
+ </category>
+ </section>
+</settings>
diff --git a/system/shaders/GL/1.2/gl_convolution-4x4.glsl b/system/shaders/GL/1.2/gl_convolution-4x4.glsl
new file mode 100644
index 0000000..8c97423
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_convolution-4x4.glsl
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+uniform sampler2D img;
+uniform vec2 stepxy;
+uniform float m_stretch;
+uniform float m_alpha;
+varying vec2 m_cord;
+uniform sampler1D kernelTex;
+
+vec4 weight(float pos)
+{
+#if defined(HAS_FLOAT_TEXTURE)
+ return texture1D(kernelTex, pos);
+#else
+ return texture1D(kernelTex, pos) * 2.0 - 1.0;
+#endif
+}
+
+vec2 stretch(vec2 pos)
+{
+#if (XBMC_STRETCH)
+ // our transform should map [0..1] to itself, with f(0) = 0, f(1) = 1, f(0.5) = 0.5, and f'(0.5) = b.
+ // a simple curve to do this is g(x) = b(x-0.5) + (1-b)2^(n-1)(x-0.5)^n + 0.5
+ // where the power preserves sign. n = 2 is the simplest non-linear case (required when b != 1)
+ float x = pos.x - 0.5;
+ return vec2(mix(x * abs(x) * 2.0, x, m_stretch) + 0.5, pos.y);
+#else
+ return pos;
+#endif
+}
+
+vec3 pixel(float xpos, float ypos)
+{
+ return texture2D(img, vec2(xpos, ypos)).rgb;
+}
+
+vec3 line (float ypos, vec4 xpos, vec4 linetaps)
+{
+ return
+ pixel(xpos.r, ypos) * linetaps.r +
+ pixel(xpos.g, ypos) * linetaps.g +
+ pixel(xpos.b, ypos) * linetaps.b +
+ pixel(xpos.a, ypos) * linetaps.a;
+}
+
+vec4 process()
+{
+ vec4 rgb;
+ vec2 pos = stretch(m_cord) + stepxy * 0.5;
+ vec2 f = fract(pos / stepxy);
+
+ vec4 linetaps = weight(1.0 - f.x);
+ vec4 columntaps = weight(1.0 - f.y);
+
+ //make sure all taps added together is exactly 1.0, otherwise some (very small) distortion can occur
+ linetaps /= linetaps.r + linetaps.g + linetaps.b + linetaps.a;
+ columntaps /= columntaps.r + columntaps.g + columntaps.b + columntaps.a;
+
+ vec2 xystart = (-1.5 - f) * stepxy + pos;
+ vec4 xpos = vec4(xystart.x, xystart.x + stepxy.x, xystart.x + stepxy.x * 2.0, xystart.x + stepxy.x * 3.0);
+
+ rgb.rgb =
+ line(xystart.y , xpos, linetaps) * columntaps.r +
+ line(xystart.y + stepxy.y , xpos, linetaps) * columntaps.g +
+ line(xystart.y + stepxy.y * 2.0, xpos, linetaps) * columntaps.b +
+ line(xystart.y + stepxy.y * 3.0, xpos, linetaps) * columntaps.a;
+
+ rgb.a = m_alpha;
+
+ return rgb;
+}
diff --git a/system/shaders/GL/1.2/gl_convolution-6x6.glsl b/system/shaders/GL/1.2/gl_convolution-6x6.glsl
new file mode 100644
index 0000000..26c9f49
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_convolution-6x6.glsl
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+uniform sampler2D img;
+uniform vec2 stepxy;
+uniform float m_stretch;
+uniform float m_alpha;
+varying vec2 m_cord;
+uniform sampler1D kernelTex;
+
+vec3 weight(float pos)
+{
+#if defined(HAS_FLOAT_TEXTURE)
+ return texture1D(kernelTex, pos).rgb;
+#else
+ return texture1D(kernelTex, pos).rgb * 2.0 - 1.0;
+#endif
+}
+
+vec2 stretch(vec2 pos)
+{
+#if (XBMC_STRETCH)
+ // our transform should map [0..1] to itself, with f(0) = 0, f(1) = 1, f(0.5) = 0.5, and f'(0.5) = b.
+ // a simple curve to do this is g(x) = b(x-0.5) + (1-b)2^(n-1)(x-0.5)^n + 0.5
+ // where the power preserves sign. n = 2 is the simplest non-linear case (required when b != 1)
+ float x = pos.x - 0.5;
+ return vec2(mix(x * abs(x) * 2.0, x, m_stretch) + 0.5, pos.y);
+#else
+ return pos;
+#endif
+}
+
+vec3 pixel(float xpos, float ypos)
+{
+ return texture2D(img, vec2(xpos, ypos)).rgb;
+}
+
+vec3 line (float ypos, vec3 xpos1, vec3 xpos2, vec3 linetaps1, vec3 linetaps2)
+{
+ return
+ pixel(xpos1.r, ypos) * linetaps1.r +
+ pixel(xpos1.g, ypos) * linetaps2.r +
+ pixel(xpos1.b, ypos) * linetaps1.g +
+ pixel(xpos2.r, ypos) * linetaps2.g +
+ pixel(xpos2.g, ypos) * linetaps1.b +
+ pixel(xpos2.b, ypos) * linetaps2.b;
+}
+
+vec4 process()
+{
+ vec4 rgb;
+ vec2 pos = stretch(m_cord) + stepxy * 0.5;
+ vec2 f = fract(pos / stepxy);
+
+ vec3 linetaps1 = weight((1.0 - f.x) / 2.0);
+ vec3 linetaps2 = weight((1.0 - f.x) / 2.0 + 0.5);
+ vec3 columntaps1 = weight((1.0 - f.y) / 2.0);
+ vec3 columntaps2 = weight((1.0 - f.y) / 2.0 + 0.5);
+
+ //make sure all taps added together is exactly 1.0, otherwise some (very small) distortion can occur
+ float sum = linetaps1.r + linetaps1.g + linetaps1.b + linetaps2.r + linetaps2.g + linetaps2.b;
+ linetaps1 /= sum;
+ linetaps2 /= sum;
+ sum = columntaps1.r + columntaps1.g + columntaps1.b + columntaps2.r + columntaps2.g + columntaps2.b;
+ columntaps1 /= sum;
+ columntaps2 /= sum;
+
+ vec2 xystart = (-2.5 - f) * stepxy + pos;
+ vec3 xpos1 = vec3(xystart.x, xystart.x + stepxy.x, xystart.x + stepxy.x * 2.0);
+ vec3 xpos2 = vec3(xystart.x + stepxy.x * 3.0, xystart.x + stepxy.x * 4.0, xystart.x + stepxy.x * 5.0);
+
+ rgb.rgb =
+ line(xystart.y , xpos1, xpos2, linetaps1, linetaps2) * columntaps1.r +
+ line(xystart.y + stepxy.y , xpos1, xpos2, linetaps1, linetaps2) * columntaps2.r +
+ line(xystart.y + stepxy.y * 2.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps1.g +
+ line(xystart.y + stepxy.y * 3.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps2.g +
+ line(xystart.y + stepxy.y * 4.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps1.b +
+ line(xystart.y + stepxy.y * 5.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps2.b;
+
+ rgb.a = m_alpha;
+
+ return rgb;
+}
diff --git a/system/shaders/GL/1.2/gl_output.glsl b/system/shaders/GL/1.2/gl_output.glsl
new file mode 100644
index 0000000..d3294a8
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_output.glsl
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2010-2017 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+#if defined(XBMC_DITHER)
+uniform sampler2D m_dither;
+uniform float m_ditherquant;
+uniform vec2 m_dithersize;
+#endif
+#if defined(KODI_3DLUT)
+uniform float m_CLUTsize;
+uniform sampler3D m_CLUT;
+#endif
+
+void main()
+{
+ vec4 rgb = process();
+
+#if defined(KODI_3DLUT)
+ // FIXME: can this be optimized?
+ rgb = texture3D(m_CLUT, (rgb.rgb*(m_CLUTsize-1.0) + 0.5) / m_CLUTsize);
+#endif
+
+#if defined(XBMC_FULLRANGE)
+#if __VERSION__ <= 120
+ rgb = (rgb-(16.0/255.0)) * 255.0/219.0;
+#else
+ rgb = clamp((rgb-(16.0/255.0)) * 255.0/219.0, 0, 1);
+#endif
+#endif
+
+#if defined(XBMC_DITHER)
+ vec2 ditherpos = gl_FragCoord.xy / m_dithersize;
+ // ditherval is multiplied by 65536/(dither_size^2) to make it [0,1[
+ // FIXME: scale dither values before uploading?
+ float ditherval = texture2D(m_dither, ditherpos).r * 16.0;
+ rgb = floor(rgb * m_ditherquant + ditherval) / m_ditherquant;
+#endif
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/GL/1.2/gl_shader_frag_default.glsl b/system/shaders/GL/1.2/gl_shader_frag_default.glsl
new file mode 100644
index 0000000..d9aba5f
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_shader_frag_default.glsl
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+uniform vec4 m_unicol;
+
+// SM_DEFAULT shader
+void main ()
+{
+ gl_FragColor = m_unicol;
+}
diff --git a/system/shaders/GL/1.2/gl_shader_frag_fonts.glsl b/system/shaders/GL/1.2/gl_shader_frag_fonts.glsl
new file mode 100644
index 0000000..eed605f
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_shader_frag_fonts.glsl
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+uniform sampler2D m_samp0;
+varying vec4 m_cord0;
+varying vec4 m_colour;
+
+// SM_FONTS shader
+void main ()
+{
+ gl_FragColor.r = m_colour.r;
+ gl_FragColor.g = m_colour.g;
+ gl_FragColor.b = m_colour.b;
+ gl_FragColor.a = m_colour.a * texture2D(m_samp0, m_cord0.xy).r;
+}
diff --git a/system/shaders/GL/1.2/gl_shader_frag_multi.glsl b/system/shaders/GL/1.2/gl_shader_frag_multi.glsl
new file mode 100644
index 0000000..804a716
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_shader_frag_multi.glsl
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+uniform sampler2D m_samp0;
+uniform sampler2D m_samp1;
+varying vec4 m_cord0;
+varying vec4 m_cord1;
+
+// SM_MULTI shader
+void main ()
+{
+ gl_FragColor.rgba = (texture2D(m_samp0, m_cord0.xy) * texture2D(m_samp1, m_cord1.xy)).rgba;
+}
diff --git a/system/shaders/GL/1.2/gl_shader_frag_multi_blendcolor.glsl b/system/shaders/GL/1.2/gl_shader_frag_multi_blendcolor.glsl
new file mode 100644
index 0000000..20622d2
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_shader_frag_multi_blendcolor.glsl
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+uniform sampler2D m_samp0;
+uniform sampler2D m_samp1;
+varying vec4 m_cord0;
+varying vec4 m_cord1;
+uniform vec4 m_unicol;
+
+// SM_MULTI shader
+void main ()
+{
+ gl_FragColor.rgba = m_unicol * texture2D(m_samp0, m_cord0.xy) * texture2D(m_samp1, m_cord1.xy);
+}
diff --git a/system/shaders/GL/1.2/gl_shader_frag_texture.glsl b/system/shaders/GL/1.2/gl_shader_frag_texture.glsl
new file mode 100644
index 0000000..c15681f
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_shader_frag_texture.glsl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+uniform sampler2D m_samp0;
+uniform vec4 m_unicol;
+varying vec4 m_cord0;
+
+// SM_TEXTURE shader
+void main ()
+{
+ gl_FragColor.rgba = vec4(texture2D(m_samp0, m_cord0.xy).rgba * m_unicol);
+}
diff --git a/system/shaders/GL/1.2/gl_shader_frag_texture_noblend.glsl b/system/shaders/GL/1.2/gl_shader_frag_texture_noblend.glsl
new file mode 100644
index 0000000..16a1f8b
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_shader_frag_texture_noblend.glsl
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+uniform sampler2D m_samp0;
+varying vec4 m_cord0;
+
+// SM_TEXTURE_NOBLEND shader
+void main ()
+{
+ gl_FragColor.rgba = vec4(texture2D(m_samp0, m_cord0.xy).rgba);
+}
diff --git a/system/shaders/GL/1.2/gl_shader_vert.glsl b/system/shaders/GL/1.2/gl_shader_vert.glsl
new file mode 100644
index 0000000..7c10b5f
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_shader_vert.glsl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+attribute vec4 m_attrpos;
+attribute vec4 m_attrcol;
+attribute vec4 m_attrcord0;
+attribute vec4 m_attrcord1;
+varying vec4 m_cord0;
+varying vec4 m_cord1;
+varying vec4 m_colour;
+uniform mat4 m_proj;
+uniform mat4 m_model;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+ m_colour = m_attrcol;
+ m_cord0 = m_attrcord0;
+ m_cord1 = m_attrcord1;
+}
diff --git a/system/shaders/GL/1.2/gl_shader_vert_default.glsl b/system/shaders/GL/1.2/gl_shader_vert_default.glsl
new file mode 100644
index 0000000..554e15c
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_shader_vert_default.glsl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+attribute vec4 m_attrpos;
+uniform mat4 m_proj;
+uniform mat4 m_model;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+}
diff --git a/system/shaders/GL/1.2/gl_stretch.glsl b/system/shaders/GL/1.2/gl_stretch.glsl
new file mode 100644
index 0000000..9cc3388
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_stretch.glsl
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+uniform sampler2D img;
+uniform float m_stretch;
+uniform float m_alpha;
+varying vec2 m_cord;
+
+vec2 stretch(vec2 pos)
+{
+ // our transform should map [0..1] to itself, with f(0) = 0, f(1) = 1, f(0.5) = 0.5, and f'(0.5) = b.
+ // a simple curve to do this is g(x) = b(x-0.5) + (1-b)2^(n-1)(x-0.5)^n + 0.5
+ // where the power preserves sign. n = 2 is the simplest non-linear case (required when b != 1)
+ float x = pos.x - 0.5;
+ return vec2(mix(x * abs(x) * 2.0, x, m_stretch) + 0.5, pos.y);
+}
+
+void main()
+{
+ gl_FragColor.rgb = texture2D(img, stretch(m_cord)).rgb;
+ gl_FragColor.a = m_alpha;
+}
diff --git a/system/shaders/GL/1.2/gl_videofilter_frag.glsl b/system/shaders/GL/1.2/gl_videofilter_frag.glsl
new file mode 100644
index 0000000..ff7af3b
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_videofilter_frag.glsl
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+uniform sampler2D img;
+varying vec2 m_cord;
+
+void main()
+{
+ gl_FragColor.rgb = texture2D(img, m_cord).rgb;
+ gl_FragColor.a = gl_Color.a;
+}
diff --git a/system/shaders/GL/1.2/gl_videofilter_vertex.glsl b/system/shaders/GL/1.2/gl_videofilter_vertex.glsl
new file mode 100644
index 0000000..aa124b5
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_videofilter_vertex.glsl
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 120
+
+attribute vec4 m_attrpos;
+attribute vec2 m_attrcord;
+varying vec2 m_cord;
+uniform mat4 m_proj;
+uniform mat4 m_model;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+ m_cord = m_attrcord;
+}
diff --git a/system/shaders/GL/1.2/gl_yuv2rgb_basic.glsl b/system/shaders/GL/1.2/gl_yuv2rgb_basic.glsl
new file mode 100644
index 0000000..57c3a17
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_yuv2rgb_basic.glsl
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#if(XBMC_texture_rectangle)
+# extension GL_ARB_texture_rectangle : enable
+# define texture2D texture2DRect
+# define sampler2D sampler2DRect
+#endif
+
+uniform sampler2D m_sampY;
+uniform sampler2D m_sampU;
+uniform sampler2D m_sampV;
+varying vec2 m_cordY;
+varying vec2 m_cordU;
+varying vec2 m_cordV;
+uniform vec2 m_step;
+uniform mat4 m_yuvmat;
+uniform float m_stretch;
+uniform mat3 m_primMat;
+uniform float m_gammaDstInv;
+uniform float m_gammaSrc;
+uniform float m_alpha;
+
+vec2 stretch(vec2 pos)
+{
+#if (XBMC_STRETCH)
+ // our transform should map [0..1] to itself, with f(0) = 0, f(1) = 1, f(0.5) = 0.5, and f'(0.5) = b.
+ // a simple curve to do this is g(x) = b(x-0.5) + (1-b)2^(n-1)(x-0.5)^n + 0.5
+ // where the power preserves sign. n = 2 is the simplest non-linear case (required when b != 1)
+ #if(XBMC_texture_rectangle)
+ float x = (pos.x * m_step.x) - 0.5;
+ return vec2((mix(2.0 * x * abs(x), x, m_stretch) + 0.5) / m_step.x, pos.y);
+ #else
+ float x = pos.x - 0.5;
+ return vec2(mix(2.0 * x * abs(x), x, m_stretch) + 0.5, pos.y);
+ #endif
+#else
+ return pos;
+#endif
+}
+
+vec4 process()
+{
+ vec4 rgb;
+#if defined(XBMC_YV12)
+
+ vec4 yuv;
+ yuv.rgba = vec4( texture2D(m_sampY, stretch(m_cordY)).r
+ , texture2D(m_sampU, stretch(m_cordU)).r
+ , texture2D(m_sampV, stretch(m_cordV)).r
+ , 1.0 );
+
+ rgb = m_yuvmat * yuv;
+ rgb.a = m_alpha;
+
+#elif defined(XBMC_NV12)
+
+ vec4 yuv;
+ yuv.rgba = vec4( texture2D(m_sampY, stretch(m_cordY)).r
+ , texture2D(m_sampU, stretch(m_cordU)).rg
+ , 1.0 );
+
+ rgb = m_yuvmat * yuv;
+ rgb.a = m_alpha;
+
+#elif defined(XBMC_YUY2) || defined(XBMC_UYVY)
+
+#if(XBMC_texture_rectangle)
+ vec2 stepxy = vec2(1.0, 1.0);
+ vec2 pos = stretch(m_cordY);
+ pos = vec2(pos.x - 0.25, pos.y);
+ vec2 f = fract(pos);
+#else
+ vec2 stepxy = m_step;
+ vec2 pos = stretch(m_cordY);
+ pos = vec2(pos.x - stepxy.x * 0.25, pos.y);
+ vec2 f = fract(pos / stepxy);
+#endif
+
+ //y axis will be correctly interpolated by opengl
+ //x axis will not, so we grab two pixels at the center of two columns and interpolate ourselves
+ vec4 c1 = texture2D(m_sampY, vec2(pos.x + (0.5 - f.x) * stepxy.x, pos.y));
+ vec4 c2 = texture2D(m_sampY, vec2(pos.x + (1.5 - f.x) * stepxy.x, pos.y));
+
+ /* each pixel has two Y subpixels and one UV subpixel
+ YUV Y YUV
+ check if we're left or right of the middle Y subpixel and interpolate accordingly*/
+#ifdef XBMC_YUY2 //BGRA = YUYV
+ float leftY = mix(c1.b, c1.r, f.x * 2.0);
+ float rightY = mix(c1.r, c2.b, f.x * 2.0 - 1.0);
+ vec2 outUV = mix(c1.ga, c2.ga, f.x);
+#else //BGRA = UYVY
+ float leftY = mix(c1.g, c1.a, f.x * 2.0);
+ float rightY = mix(c1.a, c2.g, f.x * 2.0 - 1.0);
+ vec2 outUV = mix(c1.br, c2.br, f.x);
+#endif //XBMC_YUY2
+
+ float outY = mix(leftY, rightY, step(0.5, f.x));
+
+ vec4 yuv = vec4(outY, outUV, 1.0);
+ rgb = m_yuvmat * yuv;
+
+ rgb.a = m_alpha;
+
+#endif
+
+#if defined(XBMC_COL_CONVERSION)
+ rgb.rgb = pow(max(vec3(0), rgb.rgb), vec3(m_gammaSrc));
+ rgb.rgb = max(vec3(0), m_primMat * rgb.rgb);
+ rgb.rgb = pow(rgb.rgb, vec3(m_gammaDstInv));
+#endif
+
+ return rgb;
+}
diff --git a/system/shaders/GL/1.2/gl_yuv2rgb_vertex.glsl b/system/shaders/GL/1.2/gl_yuv2rgb_vertex.glsl
new file mode 100644
index 0000000..cdf3c56
--- /dev/null
+++ b/system/shaders/GL/1.2/gl_yuv2rgb_vertex.glsl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+attribute vec4 m_attrpos;
+attribute vec2 m_attrcordY;
+attribute vec2 m_attrcordU;
+attribute vec2 m_attrcordV;
+varying vec2 m_cordY;
+varying vec2 m_cordU;
+varying vec2 m_cordV;
+uniform mat4 m_proj;
+uniform mat4 m_model;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+ m_cordY = m_attrcordY;
+ m_cordU = m_attrcordU;
+ m_cordV = m_attrcordV;
+}
diff --git a/system/shaders/GL/1.5/gl_convolution-4x4.glsl b/system/shaders/GL/1.5/gl_convolution-4x4.glsl
new file mode 100644
index 0000000..2a6404e
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_convolution-4x4.glsl
@@ -0,0 +1,71 @@
+#version 150
+
+uniform sampler2D img;
+uniform vec2 stepxy;
+uniform float m_stretch;
+uniform float m_alpha;
+in vec2 m_cord;
+out vec4 fragColor;
+uniform sampler1D kernelTex;
+
+vec4 weight(float pos)
+{
+#if defined(HAS_FLOAT_TEXTURE)
+ return texture(kernelTex, pos);
+#else
+ return texture(kernelTex, pos) * 2.0 - 1.0;
+#endif
+}
+
+vec2 stretch(vec2 pos)
+{
+#if (XBMC_STRETCH)
+ // our transform should map [0..1] to itself, with f(0) = 0, f(1) = 1, f(0.5) = 0.5, and f'(0.5) = b.
+ // a simple curve to do this is g(x) = b(x-0.5) + (1-b)2^(n-1)(x-0.5)^n + 0.5
+ // where the power preserves sign. n = 2 is the simplest non-linear case (required when b != 1)
+ float x = pos.x - 0.5;
+ return vec2(mix(x * abs(x) * 2.0, x, m_stretch) + 0.5, pos.y);
+#else
+ return pos;
+#endif
+}
+
+vec3 pixel(float xpos, float ypos)
+{
+ return texture(img, vec2(xpos, ypos)).rgb;
+}
+
+vec3 line (float ypos, vec4 xpos, vec4 linetaps)
+{
+ return
+ pixel(xpos.r, ypos) * linetaps.r +
+ pixel(xpos.g, ypos) * linetaps.g +
+ pixel(xpos.b, ypos) * linetaps.b +
+ pixel(xpos.a, ypos) * linetaps.a;
+}
+
+vec4 process()
+{
+ vec4 rgb;
+ vec2 pos = stretch(m_cord) + stepxy * 0.5;
+ vec2 f = fract(pos / stepxy);
+
+ vec4 linetaps = weight(1.0 - f.x);
+ vec4 columntaps = weight(1.0 - f.y);
+
+ //make sure all taps added together is exactly 1.0, otherwise some (very small) distortion can occur
+ linetaps /= linetaps.r + linetaps.g + linetaps.b + linetaps.a;
+ columntaps /= columntaps.r + columntaps.g + columntaps.b + columntaps.a;
+
+ vec2 xystart = (-1.5 - f) * stepxy + pos;
+ vec4 xpos = vec4(xystart.x, xystart.x + stepxy.x, xystart.x + stepxy.x * 2.0, xystart.x + stepxy.x * 3.0);
+
+ rgb.rgb =
+ line(xystart.y , xpos, linetaps) * columntaps.r +
+ line(xystart.y + stepxy.y , xpos, linetaps) * columntaps.g +
+ line(xystart.y + stepxy.y * 2.0, xpos, linetaps) * columntaps.b +
+ line(xystart.y + stepxy.y * 3.0, xpos, linetaps) * columntaps.a;
+
+ rgb.a = m_alpha;
+ return rgb;
+}
diff --git a/system/shaders/GL/1.5/gl_convolution-6x6.glsl b/system/shaders/GL/1.5/gl_convolution-6x6.glsl
new file mode 100644
index 0000000..b4410cc
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_convolution-6x6.glsl
@@ -0,0 +1,83 @@
+#version 150
+
+uniform sampler2D img;
+uniform vec2 stepxy;
+uniform float m_stretch;
+uniform float m_alpha;
+in vec2 m_cord;
+out vec4 fragColor;
+uniform sampler1D kernelTex;
+
+vec3 weight(float pos)
+{
+#if defined(HAS_FLOAT_TEXTURE)
+ return texture(kernelTex, pos).rgb;
+#else
+ return texture(kernelTex, pos).rgb * 2.0 - 1.0;
+#endif
+}
+
+vec2 stretch(vec2 pos)
+{
+#if (XBMC_STRETCH)
+ // our transform should map [0..1] to itself, with f(0) = 0, f(1) = 1, f(0.5) = 0.5, and f'(0.5) = b.
+ // a simple curve to do this is g(x) = b(x-0.5) + (1-b)2^(n-1)(x-0.5)^n + 0.5
+ // where the power preserves sign. n = 2 is the simplest non-linear case (required when b != 1)
+ float x = pos.x - 0.5;
+ return vec2(mix(x * abs(x) * 2.0, x, m_stretch) + 0.5, pos.y);
+#else
+ return pos;
+#endif
+}
+
+vec3 pixel(float xpos, float ypos)
+{
+ return texture(img, vec2(xpos, ypos)).rgb;
+}
+
+vec3 line (float ypos, vec3 xpos1, vec3 xpos2, vec3 linetaps1, vec3 linetaps2)
+{
+ return
+ pixel(xpos1.r, ypos) * linetaps1.r +
+ pixel(xpos1.g, ypos) * linetaps2.r +
+ pixel(xpos1.b, ypos) * linetaps1.g +
+ pixel(xpos2.r, ypos) * linetaps2.g +
+ pixel(xpos2.g, ypos) * linetaps1.b +
+ pixel(xpos2.b, ypos) * linetaps2.b;
+}
+
+vec4 process()
+{
+ vec4 rgb;
+ vec2 pos = stretch(m_cord) + stepxy * 0.5;
+ vec2 f = fract(pos / stepxy);
+
+ vec3 linetaps1 = weight((1.0 - f.x) / 2.0);
+ vec3 linetaps2 = weight((1.0 - f.x) / 2.0 + 0.5);
+ vec3 columntaps1 = weight((1.0 - f.y) / 2.0);
+ vec3 columntaps2 = weight((1.0 - f.y) / 2.0 + 0.5);
+
+ //make sure all taps added together is exactly 1.0, otherwise some (very small) distortion can occur
+ float sum = linetaps1.r + linetaps1.g + linetaps1.b + linetaps2.r + linetaps2.g + linetaps2.b;
+ linetaps1 /= sum;
+ linetaps2 /= sum;
+ sum = columntaps1.r + columntaps1.g + columntaps1.b + columntaps2.r + columntaps2.g + columntaps2.b;
+ columntaps1 /= sum;
+ columntaps2 /= sum;
+
+ vec2 xystart = (-2.5 - f) * stepxy + pos;
+ vec3 xpos1 = vec3(xystart.x, xystart.x + stepxy.x, xystart.x + stepxy.x * 2.0);
+ vec3 xpos2 = vec3(xystart.x + stepxy.x * 3.0, xystart.x + stepxy.x * 4.0, xystart.x + stepxy.x * 5.0);
+
+ rgb.rgb =
+ line(xystart.y , xpos1, xpos2, linetaps1, linetaps2) * columntaps1.r +
+ line(xystart.y + stepxy.y , xpos1, xpos2, linetaps1, linetaps2) * columntaps2.r +
+ line(xystart.y + stepxy.y * 2.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps1.g +
+ line(xystart.y + stepxy.y * 3.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps2.g +
+ line(xystart.y + stepxy.y * 4.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps1.b +
+ line(xystart.y + stepxy.y * 5.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps2.b;
+
+ rgb.a = m_alpha;
+
+ return rgb;
+}
diff --git a/system/shaders/GL/1.5/gl_output.glsl b/system/shaders/GL/1.5/gl_output.glsl
new file mode 100644
index 0000000..9823102
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_output.glsl
@@ -0,0 +1,37 @@
+#if defined(XBMC_DITHER)
+uniform sampler2D m_dither;
+uniform float m_ditherquant;
+uniform vec2 m_dithersize;
+#endif
+#if defined(KODI_3DLUT)
+uniform float m_CLUTsize;
+uniform sampler3D m_CLUT;
+#endif
+
+void main()
+{
+ vec4 rgb = process();
+
+#if defined(KODI_3DLUT)
+ // FIXME: can this be optimized?
+ rgb = texture(m_CLUT, (rgb.rgb*(m_CLUTsize-1.0) + 0.5) / m_CLUTsize);
+#endif
+
+#if defined(XBMC_FULLRANGE)
+#if __VERSION__ <= 120
+ rgb = (rgb-(16.0/255.0)) * 255.0/219.0;
+#else
+ rgb = clamp((rgb-(16.0/255.0)) * 255.0/219.0, 0, 1);
+#endif
+#endif
+
+#if defined(XBMC_DITHER)
+ vec2 ditherpos = gl_FragCoord.xy / m_dithersize;
+ // ditherval is multiplied by 65536/(dither_size^2) to make it [0,1[
+ // FIXME: scale dither values before uploading?
+ float ditherval = texture(m_dither, ditherpos).r * 16.0;
+ rgb = floor(rgb * m_ditherquant + ditherval) / m_ditherquant;
+#endif
+
+ fragColor = rgb;
+}
diff --git a/system/shaders/GL/1.5/gl_shader_frag_default.glsl b/system/shaders/GL/1.5/gl_shader_frag_default.glsl
new file mode 100644
index 0000000..d57f576
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_shader_frag_default.glsl
@@ -0,0 +1,14 @@
+#version 150
+
+uniform vec4 m_unicol;
+out vec4 fragColor;
+
+// SM_DEFAULT shader
+void main ()
+{
+ fragColor = m_unicol;
+#if defined(KODI_LIMITED_RANGE)
+ fragColor.rgb *= (235.0-16.0) / 255.0;
+ fragColor.rgb += 16.0 / 255.0;
+#endif
+}
diff --git a/system/shaders/GL/1.5/gl_shader_frag_fonts.glsl b/system/shaders/GL/1.5/gl_shader_frag_fonts.glsl
new file mode 100644
index 0000000..1de6ddc
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_shader_frag_fonts.glsl
@@ -0,0 +1,19 @@
+#version 150
+
+uniform sampler2D m_samp0;
+in vec4 m_cord0;
+in vec4 m_colour;
+out vec4 fragColor;
+
+// SM_FONTS shader
+void main ()
+{
+ fragColor.r = m_colour.r;
+ fragColor.g = m_colour.g;
+ fragColor.b = m_colour.b;
+ fragColor.a = m_colour.a * texture(m_samp0, m_cord0.xy).r;
+#if defined(KODI_LIMITED_RANGE)
+ fragColor.rgb *= (235.0-16.0) / 255.0;
+ fragColor.rgb += 16.0 / 255.0;
+#endif
+}
diff --git a/system/shaders/GL/1.5/gl_shader_frag_multi.glsl b/system/shaders/GL/1.5/gl_shader_frag_multi.glsl
new file mode 100644
index 0000000..3e6412b
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_shader_frag_multi.glsl
@@ -0,0 +1,17 @@
+#version 150
+
+uniform sampler2D m_samp0;
+uniform sampler2D m_samp1;
+in vec4 m_cord0;
+in vec4 m_cord1;
+out vec4 fragColor;
+
+// SM_MULTI shader
+void main ()
+{
+ fragColor.rgba = (texture(m_samp0, m_cord0.xy) * texture(m_samp1, m_cord1.xy)).rgba;
+#if defined(KODI_LIMITED_RANGE)
+ fragColor.rgb *= (235.0-16.0) / 255.0;
+ fragColor.rgb += 16.0 / 255.0;
+#endif
+}
diff --git a/system/shaders/GL/1.5/gl_shader_frag_multi_blendcolor.glsl b/system/shaders/GL/1.5/gl_shader_frag_multi_blendcolor.glsl
new file mode 100644
index 0000000..96310ce
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_shader_frag_multi_blendcolor.glsl
@@ -0,0 +1,18 @@
+#version 150
+
+uniform sampler2D m_samp0;
+uniform sampler2D m_samp1;
+uniform vec4 m_unicol;
+in vec4 m_cord0;
+in vec4 m_cord1;
+out vec4 fragColor;
+
+// SM_MULTI shader
+void main ()
+{
+ fragColor.rgba = m_unicol * texture(m_samp0, m_cord0.xy) * texture(m_samp1, m_cord1.xy);
+#if defined(KODI_LIMITED_RANGE)
+ fragColor.rgb *= (235.0-16.0) / 255.0;
+ fragColor.rgb += 16.0 / 255.0;
+#endif
+}
diff --git a/system/shaders/GL/1.5/gl_shader_frag_texture.glsl b/system/shaders/GL/1.5/gl_shader_frag_texture.glsl
new file mode 100644
index 0000000..71b1d21
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_shader_frag_texture.glsl
@@ -0,0 +1,16 @@
+#version 150
+
+uniform sampler2D m_samp0;
+uniform vec4 m_unicol;
+in vec4 m_cord0;
+out vec4 fragColor;
+
+// SM_TEXTURE shader
+void main ()
+{
+ fragColor.rgba = vec4(texture(m_samp0, m_cord0.xy).rgba * m_unicol);
+#if defined(KODI_LIMITED_RANGE)
+ fragColor.rgb *= (235.0-16.0) / 255.0;
+ fragColor.rgb += 16.0 / 255.0;
+#endif
+}
diff --git a/system/shaders/GL/1.5/gl_shader_frag_texture_lim.glsl b/system/shaders/GL/1.5/gl_shader_frag_texture_lim.glsl
new file mode 100644
index 0000000..def4349
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_shader_frag_texture_lim.glsl
@@ -0,0 +1,15 @@
+#version 150
+
+uniform sampler2D m_samp0;
+uniform vec4 m_unicol;
+in vec4 m_cord0;
+out vec4 fragColor;
+
+// SM_TEXTURE shader
+void main ()
+{
+ fragColor.rgba = vec4(texture(m_samp0, m_cord0.xy).rgba * m_unicol);
+#if !defined(KODI_LIMITED_RANGE)
+ fragColor.rgb = clamp((fragColor.rgb-(16.0/255.0)) * 255.0/219.0, 0, 1);
+#endif
+}
diff --git a/system/shaders/GL/1.5/gl_shader_frag_texture_noblend.glsl b/system/shaders/GL/1.5/gl_shader_frag_texture_noblend.glsl
new file mode 100644
index 0000000..e5d627e
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_shader_frag_texture_noblend.glsl
@@ -0,0 +1,15 @@
+#version 150
+
+uniform sampler2D m_samp0;
+in vec4 m_cord0;
+out vec4 fragColor;
+
+// SM_TEXTURE_NOBLEND shader
+void main ()
+{
+ fragColor.rgba = vec4(texture(m_samp0, m_cord0.xy).rgba);
+#if defined(KODI_LIMITED_RANGE)
+ fragColor.rgb *= (235.0-16.0) / 255.0;
+ fragColor.rgb += 16.0 / 255.0;
+#endif
+}
diff --git a/system/shaders/GL/1.5/gl_shader_vert.glsl b/system/shaders/GL/1.5/gl_shader_vert.glsl
new file mode 100644
index 0000000..a856831
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_shader_vert.glsl
@@ -0,0 +1,20 @@
+#version 150
+
+in vec4 m_attrpos;
+in vec4 m_attrcol;
+in vec4 m_attrcord0;
+in vec4 m_attrcord1;
+out vec4 m_cord0;
+out vec4 m_cord1;
+out vec4 m_colour;
+uniform mat4 m_proj;
+uniform mat4 m_model;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+ m_colour = m_attrcol;
+ m_cord0 = m_attrcord0;
+ m_cord1 = m_attrcord1;
+}
diff --git a/system/shaders/GL/1.5/gl_shader_vert_default.glsl b/system/shaders/GL/1.5/gl_shader_vert_default.glsl
new file mode 100644
index 0000000..e4f2d7c
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_shader_vert_default.glsl
@@ -0,0 +1,11 @@
+#version 150
+
+in vec4 m_attrpos;
+uniform mat4 m_proj;
+uniform mat4 m_model;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+}
diff --git a/system/shaders/GL/1.5/gl_stretch.glsl b/system/shaders/GL/1.5/gl_stretch.glsl
new file mode 100644
index 0000000..9a31e54
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_stretch.glsl
@@ -0,0 +1,22 @@
+#version 150
+
+uniform sampler2D img;
+uniform float m_stretch;
+uniform float m_alpha;
+in vec2 m_cord;
+out vec4 fragColor;
+
+vec2 stretch(vec2 pos)
+{
+ // our transform should map [0..1] to itself, with f(0) = 0, f(1) = 1, f(0.5) = 0.5, and f'(0.5) = b.
+ // a simple curve to do this is g(x) = b(x-0.5) + (1-b)2^(n-1)(x-0.5)^n + 0.5
+ // where the power preserves sign. n = 2 is the simplest non-linear case (required when b != 1)
+ float x = pos.x - 0.5;
+ return vec2(mix(x * abs(x) * 2.0, x, m_stretch) + 0.5, pos.y);
+}
+
+void main()
+{
+ fragColor.rgb = texture(img, stretch(m_cord)).rgb;
+ fragColor.a = m_alpha;
+}
diff --git a/system/shaders/GL/1.5/gl_tonemap.glsl b/system/shaders/GL/1.5/gl_tonemap.glsl
new file mode 100644
index 0000000..a70dca2
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_tonemap.glsl
@@ -0,0 +1,50 @@
+#if (defined(KODI_TONE_MAPPING_REINHARD) || defined(KODI_TONE_MAPPING_ACES) || defined(KODI_TONE_MAPPING_HABLE))
+const float ST2084_m1 = 2610.0 / (4096.0 * 4.0);
+const float ST2084_m2 = (2523.0 / 4096.0) * 128.0;
+const float ST2084_c1 = 3424.0 / 4096.0;
+const float ST2084_c2 = (2413.0 / 4096.0) * 32.0;
+const float ST2084_c3 = (2392.0 / 4096.0) * 32.0;
+#endif
+
+#if defined(KODI_TONE_MAPPING_REINHARD)
+float reinhard(float x)
+{
+ return x * (1.0 + x / (m_toneP1 * m_toneP1)) / (1.0 + x);
+}
+#endif
+
+#if defined(KODI_TONE_MAPPING_ACES)
+vec3 aces(vec3 x)
+{
+ float A = 2.51;
+ float B = 0.03;
+ float C = 2.43;
+ float D = 0.59;
+ float E = 0.14;
+ return (x * (A * x + B)) / (x * (C * x + D) + E);
+}
+#endif
+
+#if defined(KODI_TONE_MAPPING_HABLE)
+vec3 hable(vec3 x)
+{
+ float A = 0.15;
+ float B = 0.5;
+ float C = 0.1;
+ float D = 0.2;
+ float E = 0.02;
+ float F = 0.3;
+ return ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F;
+}
+#endif
+
+#if (defined(KODI_TONE_MAPPING_ACES) || defined(KODI_TONE_MAPPING_HABLE))
+vec3 inversePQ(vec3 x)
+{
+ x = pow(max(x, 0.0), vec3(1.0 / ST2084_m2));
+ x = max(x - ST2084_c1, 0.0) / (ST2084_c2 - ST2084_c3 * x);
+ x = pow(x, vec3(1.0 / ST2084_m1));
+ return x;
+}
+#endif
+
diff --git a/system/shaders/GL/1.5/gl_videofilter_frag.glsl b/system/shaders/GL/1.5/gl_videofilter_frag.glsl
new file mode 100644
index 0000000..2eb4155
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_videofilter_frag.glsl
@@ -0,0 +1,12 @@
+#version 150
+
+uniform sampler2D img;
+uniform float m_alpha;
+in vec2 m_cord;
+out vec4 fragColor;
+
+void main()
+{
+ fragColor = texture(img, m_cord);
+ fragColor.a = m_alpha;
+}
diff --git a/system/shaders/GL/1.5/gl_videofilter_vertex.glsl b/system/shaders/GL/1.5/gl_videofilter_vertex.glsl
new file mode 100644
index 0000000..edb8847
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_videofilter_vertex.glsl
@@ -0,0 +1,14 @@
+#version 150
+
+in vec4 m_attrpos;
+in vec2 m_attrcord;
+out vec2 m_cord;
+uniform mat4 m_proj;
+uniform mat4 m_model;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+ m_cord = m_attrcord;
+}
diff --git a/system/shaders/GL/1.5/gl_yuv2rgb_basic.glsl b/system/shaders/GL/1.5/gl_yuv2rgb_basic.glsl
new file mode 100644
index 0000000..7d5605c
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_yuv2rgb_basic.glsl
@@ -0,0 +1,123 @@
+#version 150
+
+#if(XBMC_texture_rectangle)
+# define texture2D texture2DRect
+# define sampler2D sampler2DRect
+#endif
+
+uniform sampler2D m_sampY;
+uniform sampler2D m_sampU;
+uniform sampler2D m_sampV;
+uniform vec2 m_step;
+uniform mat4 m_yuvmat;
+uniform float m_stretch;
+uniform float m_alpha;
+uniform mat3 m_primMat;
+uniform float m_gammaDstInv;
+uniform float m_gammaSrc;
+uniform float m_toneP1;
+uniform float m_luminance;
+uniform vec3 m_coefsDst;
+in vec2 m_cordY;
+in vec2 m_cordU;
+in vec2 m_cordV;
+out vec4 fragColor;
+
+vec2 stretch(vec2 pos)
+{
+#if (XBMC_STRETCH)
+ // our transform should map [0..1] to itself, with f(0) = 0, f(1) = 1, f(0.5) = 0.5, and f'(0.5) = b.
+ // a simple curve to do this is g(x) = b(x-0.5) + (1-b)2^(n-1)(x-0.5)^n + 0.5
+ // where the power preserves sign. n = 2 is the simplest non-linear case (required when b != 1)
+ #if(XBMC_texture_rectangle)
+ float x = (pos.x * m_step.x) - 0.5;
+ return vec2((mix(2.0 * x * abs(x), x, m_stretch) + 0.5) / m_step.x, pos.y);
+ #else
+ float x = pos.x - 0.5;
+ return vec2(mix(2.0 * x * abs(x), x, m_stretch) + 0.5, pos.y);
+ #endif
+#else
+ return pos;
+#endif
+}
+
+vec4 process()
+{
+ vec4 rgb;
+ vec4 yuv;
+
+#if defined(XBMC_YV12)
+
+ yuv.rgba = vec4( texture(m_sampY, stretch(m_cordY)).r
+ , texture(m_sampU, stretch(m_cordU)).r
+ , texture(m_sampV, stretch(m_cordV)).r
+ , 1.0 );
+
+#elif defined(XBMC_NV12)
+
+ yuv.rgba = vec4( texture(m_sampY, stretch(m_cordY)).r
+ , texture(m_sampU, stretch(m_cordU)).rg
+ , 1.0 );
+
+#elif defined(XBMC_YUY2) || defined(XBMC_UYVY)
+
+ vec2 stepxy = m_step;
+ vec2 pos = stretch(m_cordY);
+ pos = vec2(pos.x - stepxy.x * 0.25, pos.y);
+ vec2 f = fract(pos / stepxy);
+
+ //y axis will be correctly interpolated by opengl
+ //x axis will not, so we grab two pixels at the center of two columns and interpolate ourselves
+ vec4 c1 = texture(m_sampY, vec2(pos.x + (0.5 - f.x) * stepxy.x, pos.y));
+ vec4 c2 = texture(m_sampY, vec2(pos.x + (1.5 - f.x) * stepxy.x, pos.y));
+
+ /* each pixel has two Y subpixels and one UV subpixel
+ YUV Y YUV
+ check if we're left or right of the middle Y subpixel and interpolate accordingly*/
+#ifdef XBMC_YUY2 //BGRA = YUYV
+ float leftY = mix(c1.b, c1.r, f.x * 2.0);
+ float rightY = mix(c1.r, c2.b, f.x * 2.0 - 1.0);
+ vec2 outUV = mix(c1.ga, c2.ga, f.x);
+#else //BGRA = UYVY
+ float leftY = mix(c1.g, c1.a, f.x * 2.0);
+ float rightY = mix(c1.a, c2.g, f.x * 2.0 - 1.0);
+ vec2 outUV = mix(c1.br, c2.br, f.x);
+#endif //XBMC_YUY2
+
+ float outY = mix(leftY, rightY, step(0.5, f.x));
+
+ yuv = vec4(outY, outUV, 1.0);
+
+#endif
+
+ rgb = m_yuvmat * yuv;
+ rgb.a = m_alpha;
+
+#if defined(XBMC_COL_CONVERSION)
+ rgb.rgb = pow(max(vec3(0), rgb.rgb), vec3(m_gammaSrc));
+ rgb.rgb = max(vec3(0), m_primMat * rgb.rgb);
+ rgb.rgb = pow(rgb.rgb, vec3(m_gammaDstInv));
+
+#if defined(KODI_TONE_MAPPING_REINHARD)
+ float luma = dot(rgb.rgb, m_coefsDst);
+ rgb.rgb *= reinhard(luma) / luma;
+
+#elif defined(KODI_TONE_MAPPING_ACES)
+ rgb.rgb = inversePQ(rgb.rgb);
+ rgb.rgb *= (10000.0 / m_luminance) * (2.0 / m_toneP1);
+ rgb.rgb = aces(rgb.rgb);
+ rgb.rgb *= (1.24 / m_toneP1);
+ rgb.rgb = pow(rgb.rgb, vec3(0.27));
+
+#elif defined(KODI_TONE_MAPPING_HABLE)
+ rgb.rgb = inversePQ(rgb.rgb);
+ rgb.rgb *= m_toneP1;
+ float wp = m_luminance / 100.0;
+ rgb.rgb = hable(rgb.rgb * wp) / hable(vec3(wp));
+ rgb.rgb = pow(rgb.rgb, vec3(1.0 / 2.2));
+#endif
+
+#endif
+
+ return rgb;
+}
diff --git a/system/shaders/GL/1.5/gl_yuv2rgb_vertex.glsl b/system/shaders/GL/1.5/gl_yuv2rgb_vertex.glsl
new file mode 100644
index 0000000..4772bd4
--- /dev/null
+++ b/system/shaders/GL/1.5/gl_yuv2rgb_vertex.glsl
@@ -0,0 +1,20 @@
+#version 150
+
+uniform mat4 m_proj;
+uniform mat4 m_model;
+in vec4 m_attrpos;
+in vec2 m_attrcordY;
+in vec2 m_attrcordU;
+in vec2 m_attrcordV;
+out vec2 m_cordY;
+out vec2 m_cordU;
+out vec2 m_cordV;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+ m_cordY = m_attrcordY;
+ m_cordU = m_attrcordU;
+ m_cordV = m_attrcordV;
+}
diff --git a/system/shaders/GL/4.0/gl_yuv2rgb_filter4.glsl b/system/shaders/GL/4.0/gl_yuv2rgb_filter4.glsl
new file mode 100644
index 0000000..8a4658c
--- /dev/null
+++ b/system/shaders/GL/4.0/gl_yuv2rgb_filter4.glsl
@@ -0,0 +1,141 @@
+#version 400
+
+#if(XBMC_texture_rectangle)
+# define texture2D texture2DRect
+# define sampler2D sampler2DRect
+#endif
+
+uniform sampler2D m_sampY;
+uniform sampler2D m_sampU;
+uniform sampler2D m_sampV;
+uniform vec2 m_step;
+uniform mat4 m_yuvmat;
+uniform float m_stretch;
+uniform float m_alpha;
+uniform sampler1D m_kernelTex;
+uniform mat3 m_primMat;
+uniform float m_gammaDstInv;
+uniform float m_gammaSrc;
+uniform float m_toneP1;
+uniform float m_luminance;
+uniform vec3 m_coefsDst;
+in vec2 m_cordY;
+in vec2 m_cordU;
+in vec2 m_cordV;
+out vec4 fragColor;
+
+vec2 stretch(vec2 pos)
+{
+#if (XBMC_STRETCH)
+ // our transform should map [0..1] to itself, with f(0) = 0, f(1) = 1, f(0.5) = 0.5, and f'(0.5) = b.
+ // a simple curve to do this is g(x) = b(x-0.5) + (1-b)2^(n-1)(x-0.5)^n + 0.5
+ // where the power preserves sign. n = 2 is the simplest non-linear case (required when b != 1)
+ #if(XBMC_texture_rectangle)
+ float x = (pos.x * m_step.x) - 0.5;
+ return vec2((mix(2.0 * x * abs(x), x, m_stretch) + 0.5) / m_step.x, pos.y);
+ #else
+ float x = pos.x - 0.5;
+ return vec2(mix(2.0 * x * abs(x), x, m_stretch) + 0.5, pos.y);
+ #endif
+#else
+ return pos;
+#endif
+}
+
+vec4[4] load4x4_0(sampler2D sampler, vec2 pos)
+{
+ vec4[4] tex4x4;
+ vec4 tex2x2 = textureGather(sampler, pos, 0);
+ tex4x4[0].xy = tex2x2.wz;
+ tex4x4[1].xy = tex2x2.xy;
+ tex2x2 = textureGatherOffset(sampler, pos, ivec2(2,0), 0);
+ tex4x4[0].zw = tex2x2.wz;
+ tex4x4[1].zw = tex2x2.xy;
+ tex2x2 = textureGatherOffset(sampler, pos, ivec2(0,2), 0);
+ tex4x4[2].xy = tex2x2.wz;
+ tex4x4[3].xy = tex2x2.xy;
+ tex2x2 = textureGatherOffset(sampler, pos, ivec2(2,2), 0);
+ tex4x4[2].zw = tex2x2.wz;
+ tex4x4[3].zw = tex2x2.xy;
+ return tex4x4;
+}
+
+float filter_0(sampler2D sampler, vec2 coord)
+{
+ vec2 pos = coord + m_step * 0.5;
+ vec2 f = fract(pos / m_step);
+
+ vec4 linetaps = texture(m_kernelTex, 1.0 - f.x);
+ vec4 coltaps = texture(m_kernelTex, 1.0 - f.y);
+ linetaps /= linetaps.r + linetaps.g + linetaps.b + linetaps.a;
+ coltaps /= coltaps.r + coltaps.g + coltaps.b + coltaps.a;
+ mat4 conv;
+ conv[0] = linetaps * coltaps.x;
+ conv[1] = linetaps * coltaps.y;
+ conv[2] = linetaps * coltaps.z;
+ conv[3] = linetaps * coltaps.w;
+
+ vec2 startPos = (-1.0 - f) * m_step + pos;
+ vec4[4] tex4x4 = load4x4_0(sampler, startPos);
+ vec4 imageLine0 = tex4x4[0];
+ vec4 imageLine1 = tex4x4[1];
+ vec4 imageLine2 = tex4x4[2];
+ vec4 imageLine3 = tex4x4[3];
+
+ return dot(imageLine0, conv[0]) +
+ dot(imageLine1, conv[1]) +
+ dot(imageLine2, conv[2]) +
+ dot(imageLine3, conv[3]);
+}
+
+vec4 process()
+{
+ vec4 rgb;
+ vec4 yuv;
+
+#if defined(XBMC_YV12)
+
+ yuv = vec4(filter_0(m_sampY, stretch(m_cordY)),
+ texture(m_sampU, stretch(m_cordU)).r,
+ texture(m_sampV, stretch(m_cordV)).r,
+ 1.0);
+
+#elif defined(XBMC_NV12)
+
+ yuv = vec4(filter_0(m_sampY, stretch(m_cordY)),
+ texture(m_sampU, stretch(m_cordU)).rg,
+ 1.0);
+
+#endif
+
+ rgb = m_yuvmat * yuv;
+ rgb.a = m_alpha;
+
+#if defined(XBMC_COL_CONVERSION)
+ rgb.rgb = pow(max(vec3(0), rgb.rgb), vec3(m_gammaSrc));
+ rgb.rgb = max(vec3(0), m_primMat * rgb.rgb);
+ rgb.rgb = pow(rgb.rgb, vec3(m_gammaDstInv));
+
+#if defined(KODI_TONE_MAPPING_REINHARD)
+ float luma = dot(rgb.rgb, m_coefsDst);
+ rgb.rgb *= reinhard(luma) / luma;
+
+#elif defined(KODI_TONE_MAPPING_ACES)
+ rgb.rgb = inversePQ(rgb.rgb);
+ rgb.rgb *= (10000.0 / m_luminance) * (2.0 / m_toneP1);
+ rgb.rgb = aces(rgb.rgb);
+ rgb.rgb *= (1.24 / m_toneP1);
+ rgb.rgb = pow(rgb.rgb, vec3(0.27));
+
+#elif defined(KODI_TONE_MAPPING_HABLE)
+ rgb.rgb = inversePQ(rgb.rgb);
+ rgb.rgb *= m_toneP1;
+ float wp = m_luminance / 100.0;
+ rgb.rgb = hable(rgb.rgb * wp) / hable(vec3(wp));
+ rgb.rgb = pow(rgb.rgb, vec3(1.0 / 2.2));
+#endif
+
+#endif
+
+ return rgb;
+}
diff --git a/system/shaders/GLES/2.0/gles_convolution-4x4.frag b/system/shaders/GLES/2.0/gles_convolution-4x4.frag
new file mode 100644
index 0000000..3043b10
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_convolution-4x4.frag
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision highp float;
+
+uniform sampler2D img;
+uniform vec2 stepxy;
+varying vec2 cord;
+uniform float m_alpha;
+uniform sampler2D kernelTex;
+
+vec4 weight(float pos)
+{
+#if defined(HAS_FLOAT_TEXTURE)
+ return texture2D(kernelTex, vec2(pos, 0.5));
+#else
+ return texture2D(kernelTex, vec2(pos - 0.5)) * 2.0 - 1.0;
+#endif
+}
+
+vec3 pixel(float xpos, float ypos)
+{
+ return texture2D(img, vec2(xpos, ypos)).rgb;
+}
+
+vec3 line (float ypos, vec4 xpos, vec4 linetaps)
+{
+ return pixel(xpos.r, ypos) * linetaps.r +
+ pixel(xpos.g, ypos) * linetaps.g +
+ pixel(xpos.b, ypos) * linetaps.b +
+ pixel(xpos.a, ypos) * linetaps.a;
+}
+
+void main()
+{
+ vec4 rgb;
+ vec2 pos = cord + stepxy * 0.5;
+ vec2 f = fract(pos / stepxy);
+
+ vec4 linetaps = weight(1.0 - f.x);
+ vec4 columntaps = weight(1.0 - f.y);
+
+ // make sure all taps added together is exactly 1.0, otherwise some (very small) distortion can occur
+ linetaps /= linetaps.r + linetaps.g + linetaps.b + linetaps.a;
+ columntaps /= columntaps.r + columntaps.g + columntaps.b + columntaps.a;
+
+ vec2 xystart = (-1.5 - f) * stepxy + pos;
+ vec4 xpos = vec4(xystart.x, xystart.x + stepxy.x, xystart.x + stepxy.x * 2.0, xystart.x + stepxy.x * 3.0);
+
+ rgb.rgb = line(xystart.y, xpos, linetaps) * columntaps.r +
+ line(xystart.y + stepxy.y, xpos, linetaps) * columntaps.g +
+ line(xystart.y + stepxy.y * 2.0, xpos, linetaps) * columntaps.b +
+ line(xystart.y + stepxy.y * 3.0, xpos, linetaps) * columntaps.a;
+
+ rgb.a = m_alpha;
+
+ gl_FragColor = rgb;
+}
+
diff --git a/system/shaders/GLES/2.0/gles_convolution-6x6.frag b/system/shaders/GLES/2.0/gles_convolution-6x6.frag
new file mode 100644
index 0000000..d043c75
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_convolution-6x6.frag
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision highp float;
+
+uniform sampler2D img;
+uniform vec2 stepxy;
+varying vec2 cord;
+uniform float m_alpha;
+uniform sampler2D kernelTex;
+
+vec3 weight(float pos)
+{
+#if defined(HAS_FLOAT_TEXTURE)
+ return texture2D(kernelTex, vec2(pos, 0.5)).rgb;
+#else
+ return texture2D(kernelTex, vec2(pos - 0.5)).rgb * 2.0 - 1.0;
+#endif
+}
+
+vec3 pixel(float xpos, float ypos)
+{
+ return texture2D(img, vec2(xpos, ypos)).rgb;
+}
+
+vec3 line (float ypos, vec3 xpos1, vec3 xpos2, vec3 linetaps1, vec3 linetaps2)
+{
+ return pixel(xpos1.r, ypos) * linetaps1.r +
+ pixel(xpos1.g, ypos) * linetaps2.r +
+ pixel(xpos1.b, ypos) * linetaps1.g +
+ pixel(xpos2.r, ypos) * linetaps2.g +
+ pixel(xpos2.g, ypos) * linetaps1.b +
+ pixel(xpos2.b, ypos) * linetaps2.b;
+}
+
+void main()
+{
+ vec4 rgb;
+ vec2 pos = cord + stepxy * 0.5;
+ vec2 f = fract(pos / stepxy);
+
+ vec3 linetaps1 = weight((1.0 - f.x) / 2.0);
+ vec3 linetaps2 = weight((1.0 - f.x) / 2.0 + 0.5);
+ vec3 columntaps1 = weight((1.0 - f.y) / 2.0);
+ vec3 columntaps2 = weight((1.0 - f.y) / 2.0 + 0.5);
+
+ // make sure all taps added together is exactly 1.0, otherwise some (very small) distortion can occur
+ float sum = linetaps1.r + linetaps1.g + linetaps1.b + linetaps2.r + linetaps2.g + linetaps2.b;
+ linetaps1 /= sum;
+ linetaps2 /= sum;
+ sum = columntaps1.r + columntaps1.g + columntaps1.b + columntaps2.r + columntaps2.g + columntaps2.b;
+ columntaps1 /= sum;
+ columntaps2 /= sum;
+
+ vec2 xystart = (-2.5 - f) * stepxy + pos;
+ vec3 xpos1 = vec3(xystart.x, xystart.x + stepxy.x, xystart.x + stepxy.x * 2.0);
+ vec3 xpos2 = vec3(xystart.x + stepxy.x * 3.0, xystart.x + stepxy.x * 4.0, xystart.x + stepxy.x * 5.0);
+
+ rgb.rgb = line(xystart.y, xpos1, xpos2, linetaps1, linetaps2) * columntaps1.r +
+ line(xystart.y + stepxy.y, xpos1, xpos2, linetaps1, linetaps2) * columntaps2.r +
+ line(xystart.y + stepxy.y * 2.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps1.g +
+ line(xystart.y + stepxy.y * 3.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps2.g +
+ line(xystart.y + stepxy.y * 4.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps1.b +
+ line(xystart.y + stepxy.y * 5.0, xpos1, xpos2, linetaps1, linetaps2) * columntaps2.b;
+
+ rgb.a = m_alpha;
+
+ gl_FragColor = rgb;
+}
+
diff --git a/system/shaders/GLES/2.0/gles_shader.vert b/system/shaders/GLES/2.0/gles_shader.vert
new file mode 100644
index 0000000..890acbb
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader.vert
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+attribute vec4 m_attrpos;
+attribute vec4 m_attrcol;
+attribute vec4 m_attrcord0;
+attribute vec4 m_attrcord1;
+varying vec4 m_cord0;
+varying vec4 m_cord1;
+varying lowp vec4 m_colour;
+uniform mat4 m_proj;
+uniform mat4 m_model;
+uniform mat4 m_coord0Matrix;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+ m_colour = m_attrcol;
+ m_cord0 = m_coord0Matrix * m_attrcord0;
+ m_cord1 = m_attrcord1;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_default.frag b/system/shaders/GLES/2.0/gles_shader_default.frag
new file mode 100644
index 0000000..f213360
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_default.frag
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision mediump float;
+uniform lowp vec4 m_unicol;
+
+void main ()
+{
+ vec4 rgb;
+
+ rgb = m_unicol;
+
+#if defined(KODI_LIMITED_RANGE)
+ rgb.rgb *= (235.0 - 16.0) / 255.0;
+ rgb.rgb += 16.0 / 255.0;
+#endif
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_fonts.frag b/system/shaders/GLES/2.0/gles_shader_fonts.frag
new file mode 100644
index 0000000..075d26f
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_fonts.frag
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision mediump float;
+uniform sampler2D m_samp0;
+varying vec4 m_cord0;
+varying lowp vec4 m_colour;
+
+void main ()
+{
+ vec4 rgb;
+
+ rgb.rgb = m_colour.rgb;
+ rgb.a = m_colour.a * texture2D(m_samp0, m_cord0.xy).a;
+
+#if defined(KODI_LIMITED_RANGE)
+ rgb.rgb *= (235.0 - 16.0) / 255.0;
+ rgb.rgb += 16.0 / 255.0;
+#endif
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_multi.frag b/system/shaders/GLES/2.0/gles_shader_multi.frag
new file mode 100644
index 0000000..9f28898
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_multi.frag
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision mediump float;
+uniform sampler2D m_samp0;
+uniform sampler2D m_samp1;
+varying vec4 m_cord0;
+varying vec4 m_cord1;
+
+void main ()
+{
+ vec4 rgb;
+
+ rgb = texture2D(m_samp0, m_cord0.xy) * texture2D(m_samp1, m_cord1.xy);
+
+#if defined(KODI_LIMITED_RANGE)
+ rgb.rgb *= (235.0 - 16.0) / 255.0;
+ rgb.rgb += 16.0 / 255.0;
+#endif
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_multi_blendcolor.frag b/system/shaders/GLES/2.0/gles_shader_multi_blendcolor.frag
new file mode 100644
index 0000000..35153da
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_multi_blendcolor.frag
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision mediump float;
+uniform sampler2D m_samp0;
+uniform sampler2D m_samp1;
+varying vec4 m_cord0;
+varying vec4 m_cord1;
+uniform lowp vec4 m_unicol;
+
+void main ()
+{
+ vec4 rgb;
+
+ rgb = m_unicol * texture2D(m_samp0, m_cord0.xy) * texture2D(m_samp1, m_cord1.xy);
+
+#if defined(KODI_LIMITED_RANGE)
+ rgb.rgb *= (235.0 - 16.0) / 255.0;
+ rgb.rgb += 16.0 / 255.0;
+#endif
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_rgba.frag b/system/shaders/GLES/2.0/gles_shader_rgba.frag
new file mode 100644
index 0000000..cdbb076
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_rgba.frag
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision mediump float;
+uniform sampler2D m_samp0;
+uniform sampler2D m_samp1;
+varying vec4 m_cord0;
+varying vec4 m_cord1;
+varying lowp vec4 m_colour;
+uniform int m_method;
+
+uniform float m_brightness;
+uniform float m_contrast;
+
+void main ()
+{
+ vec4 rgb;
+
+ rgb = texture2D(m_samp0, m_cord0.xy);
+ rgb *= m_contrast;
+ rgb += m_brightness;
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_rgba_blendcolor.frag b/system/shaders/GLES/2.0/gles_shader_rgba_blendcolor.frag
new file mode 100644
index 0000000..3f08da0
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_rgba_blendcolor.frag
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision mediump float;
+uniform sampler2D m_samp0;
+uniform sampler2D m_samp1;
+varying vec4 m_cord0;
+varying vec4 m_cord1;
+varying lowp vec4 m_colour;
+uniform int m_method;
+
+void main ()
+{
+ vec4 rgb;
+
+ rgb = texture2D(m_samp0, m_cord0.xy).rgba * m_colour;
+
+#if defined(KODI_LIMITED_RANGE)
+ rgb.rgb *= (235.0 - 16.0) / 255.0;
+ rgb.rgb += 16.0 / 255.0;
+#endif
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_rgba_bob.frag b/system/shaders/GLES/2.0/gles_shader_rgba_bob.frag
new file mode 100644
index 0000000..fd4a83b
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_rgba_bob.frag
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision highp float;
+uniform sampler2D m_samp0;
+uniform sampler2D m_samp1;
+varying vec4 m_cord0;
+varying vec4 m_cord1;
+varying lowp vec4 m_colour;
+uniform int m_method;
+uniform int m_field;
+uniform float m_step;
+
+uniform float m_brightness;
+uniform float m_contrast;
+
+void main ()
+{
+ vec2 source;
+ source = m_cord0.xy;
+
+ float temp1 = mod(source.y, 2.0 * m_step);
+ float temp2 = source.y - temp1;
+ source.y = temp2 + m_step / 2.0 - float(m_field) * m_step;
+
+ // Blend missing line
+ vec2 below;
+ float bstep = step(m_step, temp1);
+ below.x = source.x;
+ below.y = source.y + (2.0 * m_step * bstep);
+
+ vec4 color = mix(texture2D(m_samp0, source), texture2D(m_samp0, below), 0.5);
+ color *= m_contrast;
+ color += m_brightness;
+
+ gl_FragColor = color;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_rgba_bob_oes.frag b/system/shaders/GLES/2.0/gles_shader_rgba_bob_oes.frag
new file mode 100644
index 0000000..16894af
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_rgba_bob_oes.frag
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+#extension GL_OES_EGL_image_external : require
+
+precision highp float;
+uniform samplerExternalOES m_samp0;
+uniform samplerExternalOES m_samp1;
+varying vec4 m_cord0;
+varying vec4 m_cord1;
+varying lowp vec4 m_colour;
+uniform int m_method;
+uniform int m_field;
+uniform float m_step;
+
+uniform float m_brightness;
+uniform float m_contrast;
+
+void main ()
+{
+ vec2 source;
+ source = m_cord0.xy;
+
+ float temp1 = mod(source.y, 2.0 * m_step);
+ float temp2 = source.y - temp1;
+ source.y = temp2 + m_step / 2.0 - float(m_field) * m_step;
+
+ // Blend missing line
+ vec2 below;
+ float bstep = step(m_step, temp1);
+ below.x = source.x;
+ below.y = source.y + (2.0*m_step * bstep);
+
+ vec4 color = mix(texture2D(m_samp0, source), texture2D(m_samp0, below), 0.5);
+ color *= m_contrast;
+ color += m_brightness;
+
+ gl_FragColor = color;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_rgba_oes.frag b/system/shaders/GLES/2.0/gles_shader_rgba_oes.frag
new file mode 100644
index 0000000..2936954
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_rgba_oes.frag
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+#extension GL_OES_EGL_image_external : require
+
+precision mediump float;
+uniform samplerExternalOES m_samp0;
+varying vec4 m_cord0;
+
+uniform float m_brightness;
+uniform float m_contrast;
+
+void main ()
+{
+ vec4 rgb;
+
+ rgb = texture2D(m_samp0, m_cord0.xy);
+ rgb *= m_contrast;
+ rgb += m_brightness;
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_texture.frag b/system/shaders/GLES/2.0/gles_shader_texture.frag
new file mode 100644
index 0000000..a2ac2de
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_texture.frag
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision mediump float;
+uniform sampler2D m_samp0;
+uniform lowp vec4 m_unicol;
+varying vec4 m_cord0;
+
+void main ()
+{
+ vec4 rgb;
+
+ rgb = texture2D(m_samp0, m_cord0.xy).rgba * m_unicol;
+
+#if defined(KODI_LIMITED_RANGE)
+ rgb.rgb *= (235.0 - 16.0) / 255.0;
+ rgb.rgb += 16.0 / 255.0;
+#endif
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_texture_noalpha.frag b/system/shaders/GLES/2.0/gles_shader_texture_noalpha.frag
new file mode 100644
index 0000000..9f478ed
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_texture_noalpha.frag
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2019 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#version 100
+
+precision mediump float;
+uniform sampler2D m_samp0;
+varying vec4 m_cord0;
+
+void main ()
+{
+ vec3 rgb = texture2D(m_samp0, m_cord0.xy).rgb;
+
+#if defined(KODI_LIMITED_RANGE)
+ rgb *= (235.0 - 16.0) / 255.0;
+ rgb += 16.0 / 255.0;
+#endif
+
+ gl_FragColor = vec4(rgb, 1.0);
+}
diff --git a/system/shaders/GLES/2.0/gles_shader_texture_noblend.frag b/system/shaders/GLES/2.0/gles_shader_texture_noblend.frag
new file mode 100644
index 0000000..8cc66c9
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_shader_texture_noblend.frag
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision mediump float;
+uniform sampler2D m_samp0;
+varying vec4 m_cord0;
+
+void main ()
+{
+ vec4 rgb;
+
+ rgb = texture2D(m_samp0, m_cord0.xy);
+
+#if defined(KODI_LIMITED_RANGE)
+ rgb.rgb *= (235.0 - 16.0) / 255.0;
+ rgb.rgb += 16.0 / 255.0;
+#endif
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/GLES/2.0/gles_tonemap.frag b/system/shaders/GLES/2.0/gles_tonemap.frag
new file mode 100644
index 0000000..28b2402
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_tonemap.frag
@@ -0,0 +1,50 @@
+#if (defined(KODI_TONE_MAPPING_ACES) || defined(KODI_TONE_MAPPING_HABLE))
+const float ST2084_m1 = 2610.0 / (4096.0 * 4.0);
+const float ST2084_m2 = (2523.0 / 4096.0) * 128.0;
+const float ST2084_c1 = 3424.0 / 4096.0;
+const float ST2084_c2 = (2413.0 / 4096.0) * 32.0;
+const float ST2084_c3 = (2392.0 / 4096.0) * 32.0;
+#endif
+
+#if defined(KODI_TONE_MAPPING_REINHARD)
+float reinhard(float x)
+{
+ return x * (1.0 + x / (m_toneP1 * m_toneP1)) / (1.0 + x);
+}
+#endif
+
+#if defined(KODI_TONE_MAPPING_ACES)
+vec3 aces(vec3 x)
+{
+ float A = 2.51;
+ float B = 0.03;
+ float C = 2.43;
+ float D = 0.59;
+ float E = 0.14;
+ return (x * (A * x + B)) / (x * (C * x + D) + E);
+}
+#endif
+
+#if defined(KODI_TONE_MAPPING_HABLE)
+vec3 hable(vec3 x)
+{
+ float A = 0.15;
+ float B = 0.5;
+ float C = 0.1;
+ float D = 0.2;
+ float E = 0.02;
+ float F = 0.3;
+ return ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F;
+}
+#endif
+
+#if (defined(KODI_TONE_MAPPING_ACES) || defined(KODI_TONE_MAPPING_HABLE))
+vec3 inversePQ(vec3 x)
+{
+ x = pow(max(x, 0.0), vec3(1.0 / ST2084_m2));
+ x = max(x - ST2084_c1, 0.0) / (ST2084_c2 - ST2084_c3 * x);
+ x = pow(x, vec3(1.0 / ST2084_m1));
+ return x;
+}
+#endif
+
diff --git a/system/shaders/GLES/2.0/gles_videofilter.frag b/system/shaders/GLES/2.0/gles_videofilter.frag
new file mode 100644
index 0000000..d4c15ee
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_videofilter.frag
@@ -0,0 +1,11 @@
+#version 100
+
+precision mediump float;
+
+uniform sampler2D img;
+varying vec2 cord;
+
+void main()
+{
+ gl_FragColor = texture2D(img, cord);
+} \ No newline at end of file
diff --git a/system/shaders/GLES/2.0/gles_videofilter.vert b/system/shaders/GLES/2.0/gles_videofilter.vert
new file mode 100644
index 0000000..2d5a0f9
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_videofilter.vert
@@ -0,0 +1,14 @@
+#version 100
+
+attribute vec4 m_attrpos;
+attribute vec2 m_attrcord;
+varying vec2 cord;
+uniform mat4 m_proj;
+uniform mat4 m_model;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+ cord = m_attrcord.xy;
+}
diff --git a/system/shaders/GLES/2.0/gles_yuv2rgb.vert b/system/shaders/GLES/2.0/gles_yuv2rgb.vert
new file mode 100644
index 0000000..bc437af
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_yuv2rgb.vert
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+attribute vec4 m_attrpos;
+attribute vec2 m_attrcordY;
+attribute vec2 m_attrcordU;
+attribute vec2 m_attrcordV;
+varying vec2 m_cordY;
+varying vec2 m_cordU;
+varying vec2 m_cordV;
+uniform mat4 m_proj;
+uniform mat4 m_model;
+
+void main ()
+{
+ mat4 mvp = m_proj * m_model;
+ gl_Position = mvp * m_attrpos;
+ m_cordY = m_attrcordY;
+ m_cordU = m_attrcordU;
+ m_cordV = m_attrcordV;
+}
diff --git a/system/shaders/GLES/2.0/gles_yuv2rgb_basic.frag b/system/shaders/GLES/2.0/gles_yuv2rgb_basic.frag
new file mode 100644
index 0000000..d76a3b8
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_yuv2rgb_basic.frag
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision mediump float;
+
+uniform sampler2D m_sampY;
+uniform sampler2D m_sampU;
+uniform sampler2D m_sampV;
+varying vec2 m_cordY;
+varying vec2 m_cordU;
+varying vec2 m_cordV;
+uniform vec2 m_step;
+uniform mat4 m_yuvmat;
+uniform mat3 m_primMat;
+uniform float m_gammaDstInv;
+uniform float m_gammaSrc;
+uniform float m_toneP1;
+uniform float m_luminance;
+uniform vec3 m_coefsDst;
+uniform float m_alpha;
+
+void main()
+{
+ vec4 rgb;
+ vec4 yuv;
+
+#if defined(XBMC_YV12) || defined(XBMC_NV12)
+
+ yuv = vec4(texture2D(m_sampY, m_cordY).r,
+ texture2D(m_sampU, m_cordU).g,
+ texture2D(m_sampV, m_cordV).a,
+ 1.0);
+
+#elif defined(XBMC_NV12_RRG)
+
+ yuv = vec4(texture2D(m_sampY, m_cordY).r,
+ texture2D(m_sampU, m_cordU).r,
+ texture2D(m_sampV, m_cordV).g,
+ 1.0);
+
+#endif
+
+ rgb = m_yuvmat * yuv;
+ rgb.a = m_alpha;
+
+#if defined(XBMC_COL_CONVERSION)
+ rgb.rgb = pow(max(vec3(0), rgb.rgb), vec3(m_gammaSrc));
+ rgb.rgb = max(vec3(0), m_primMat * rgb.rgb);
+ rgb.rgb = pow(rgb.rgb, vec3(m_gammaDstInv));
+
+#if defined(KODI_TONE_MAPPING_REINHARD)
+ float luma = dot(rgb.rgb, m_coefsDst);
+ rgb.rgb *= reinhard(luma) / luma;
+
+#elif defined(KODI_TONE_MAPPING_ACES)
+ rgb.rgb = inversePQ(rgb.rgb);
+ rgb.rgb *= (10000.0 / m_luminance) * (2.0 / m_toneP1);
+ rgb.rgb = aces(rgb.rgb);
+ rgb.rgb *= (1.24 / m_toneP1);
+ rgb.rgb = pow(rgb.rgb, vec3(0.27));
+
+#elif defined(KODI_TONE_MAPPING_HABLE)
+ rgb.rgb = inversePQ(rgb.rgb);
+ rgb.rgb *= m_toneP1;
+ float wp = m_luminance / 100.0;
+ rgb.rgb = hable(rgb.rgb * wp) / hable(vec3(wp));
+ rgb.rgb = pow(rgb.rgb, vec3(1.0 / 2.2));
+#endif
+
+#endif
+
+ gl_FragColor = rgb;
+}
+
diff --git a/system/shaders/GLES/2.0/gles_yuv2rgb_bob.frag b/system/shaders/GLES/2.0/gles_yuv2rgb_bob.frag
new file mode 100644
index 0000000..a82de9d
--- /dev/null
+++ b/system/shaders/GLES/2.0/gles_yuv2rgb_bob.frag
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#version 100
+
+precision highp float;
+uniform sampler2D m_sampY;
+uniform sampler2D m_sampU;
+uniform sampler2D m_sampV;
+varying vec2 m_cordY;
+varying vec2 m_cordU;
+varying vec2 m_cordV;
+uniform float m_alpha;
+uniform mat4 m_yuvmat;
+uniform float m_stepX;
+uniform float m_stepY;
+uniform int m_field;
+uniform mat3 m_primMat;
+uniform float m_gammaDstInv;
+uniform float m_gammaSrc;
+uniform float m_toneP1;
+uniform float m_luminance;
+uniform vec3 m_coefsDst;
+
+void main()
+{
+ vec4 rgb;
+
+ vec2 offsetY;
+ vec2 offsetU;
+ vec2 offsetV;
+ float temp1 = mod(m_cordY.y, 2.0 * m_stepY);
+
+ offsetY = m_cordY;
+ offsetU = m_cordU;
+ offsetV = m_cordV;
+
+ offsetY.y -= (temp1 - m_stepY / 2.0 + float(m_field) * m_stepY);
+ offsetU.y -= (temp1 - m_stepY / 2.0 + float(m_field) * m_stepY) / 2.0;
+ offsetV.y -= (temp1 - m_stepY / 2.0 + float(m_field) * m_stepY) / 2.0;
+
+ float bstep = step(m_stepY, temp1);
+
+ // Blend missing line
+ vec2 belowY, belowU, belowV;
+
+ belowY.x = offsetY.x;
+ belowY.y = offsetY.y + (2.0 * m_stepY * bstep);
+ belowU.x = offsetU.x;
+ belowU.y = offsetU.y + (m_stepY * bstep);
+ belowV.x = offsetV.x;
+ belowV.y = offsetV.y + (m_stepY * bstep);
+
+ vec4 rgbAbove;
+ vec4 rgbBelow;
+ vec4 yuvAbove;
+ vec4 yuvBelow;
+
+ yuvAbove = vec4(texture2D(m_sampY, offsetY).r, texture2D(m_sampU, offsetU).g, texture2D(m_sampV, offsetV).a, 1.0);
+ rgbAbove = m_yuvmat * yuvAbove;
+ rgbAbove.a = m_alpha;
+
+ yuvBelow = vec4(texture2D(m_sampY, belowY).r, texture2D(m_sampU, belowU).g, texture2D(m_sampV, belowV).a, 1.0);
+ rgbBelow = m_yuvmat * yuvBelow;
+ rgbBelow.a = m_alpha;
+
+ rgb = mix(rgb, rgbBelow, 0.5);
+
+#if defined(XBMC_COL_CONVERSION)
+ rgb.rgb = pow(max(vec3(0), rgb.rgb), vec3(m_gammaSrc));
+ rgb.rgb = max(vec3(0), m_primMat * rgb.rgb);
+ rgb.rgb = pow(rgb.rgb, vec3(m_gammaDstInv));
+
+#if defined(KODI_TONE_MAPPING_REINHARD)
+ float luma = dot(rgb.rgb, m_coefsDst);
+ rgb.rgb *= reinhard(luma) / luma;
+
+#elif defined(KODI_TONE_MAPPING_ACES)
+ rgb.rgb = inversePQ(rgb.rgb);
+ rgb.rgb *= (10000.0 / m_luminance) * (2.0 / m_toneP1);
+ rgb.rgb = aces(rgb.rgb);
+ rgb.rgb *= (1.24 / m_toneP1);
+ rgb.rgb = pow(rgb.rgb, vec3(0.27));
+
+#elif defined(KODI_TONE_MAPPING_HABLE)
+ rgb.rgb = inversePQ(rgb.rgb);
+ rgb.rgb *= m_toneP1;
+ float wp = m_luminance / 100.0;
+ rgb.rgb = hable(rgb.rgb * wp) / hable(vec3(wp));
+ rgb.rgb = pow(rgb.rgb, vec3(1.0 / 2.2));
+#endif
+
+#endif
+
+ gl_FragColor = rgb;
+}
diff --git a/system/shaders/convolution-4x4_d3d.fx b/system/shaders/convolution-4x4_d3d.fx
new file mode 100644
index 0000000..cf9408b
--- /dev/null
+++ b/system/shaders/convolution-4x4_d3d.fx
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2005-2015 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "convolution_d3d.fx"
+#include "output_d3d.fx"
+
+SamplerState RGBSampler : IMMUTABLE
+{
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ Filter = MIN_MAG_MIP_POINT;
+};
+
+inline half4 weight(float pos)
+{
+#ifdef HAS_RGBA
+ half4 w = g_KernelTexture.Sample(KernelSampler, pos);
+#else
+ half4 w = g_KernelTexture.Sample(KernelSampler, pos).bgra;
+#endif
+
+#ifndef HAS_FLOAT_TEXTURE
+ w = w * 2.0 - 1.0;
+#endif
+ return w;
+}
+
+inline half3 pixel(float xpos, float ypos)
+{
+ return g_Texture.Sample(RGBSampler, float2(xpos, ypos)).rgb;
+}
+
+inline half3 getLine(float ypos, float4 xpos, half4 linetaps)
+{
+ return
+ pixel(xpos.r, ypos) * linetaps.r +
+ pixel(xpos.g, ypos) * linetaps.g +
+ pixel(xpos.b, ypos) * linetaps.b +
+ pixel(xpos.a, ypos) * linetaps.a;
+}
+
+float4 CONVOLUTION4x4(float2 TextureUV : TEXCOORD0) : SV_TARGET
+{
+ float2 f = frac(TextureUV / g_StepXY + float2(0.5, 0.5));
+
+ half4 linetaps = weight(1.0 - f.x);
+ half4 columntaps = weight(1.0 - f.y);
+
+ // kernel generation code made sure taps add up to 1, no need to adjust here.
+
+ float2 xystart = (-1.0 - f) * g_StepXY + TextureUV;
+ float4 xpos = xystart.x + g_StepXY.x * float4(0.0, 1.0, 2.0, 3.0);
+ float4 ypos = xystart.y + g_StepXY.y * float4(0.0, 1.0, 2.0, 3.0);
+
+ float3 rgb =
+ getLine(ypos.x, xpos, linetaps) * columntaps.r +
+ getLine(ypos.y, xpos, linetaps) * columntaps.g +
+ getLine(ypos.z, xpos, linetaps) * columntaps.b +
+ getLine(ypos.w, xpos, linetaps) * columntaps.a;
+
+ return output(g_colorRange.x + g_colorRange.y * saturate(rgb), TextureUV);
+}
+
+technique11 SCALER_T
+{
+ pass P0
+ {
+ SetVertexShader( VS_SHADER );
+ SetPixelShader( CompileShader( ps_4_0_level_9_3, CONVOLUTION4x4() ) );
+ }
+};
diff --git a/system/shaders/convolution-6x6_d3d.fx b/system/shaders/convolution-6x6_d3d.fx
new file mode 100644
index 0000000..253c225
--- /dev/null
+++ b/system/shaders/convolution-6x6_d3d.fx
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2005-2015 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "convolution_d3d.fx"
+#include "output_d3d.fx"
+
+SamplerState RGBSampler : IMMUTABLE
+{
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ Filter = MIN_MAG_MIP_POINT;
+};
+
+half3 weight(float pos)
+{
+#ifdef HAS_RGBA
+ half3 w = g_KernelTexture.Sample(KernelSampler, pos).rgb;
+#else
+ half3 w = g_KernelTexture.Sample(KernelSampler, pos).bgr;
+#endif
+
+#ifndef HAS_FLOAT_TEXTURE
+ w = w * 2.0 - 1.0;
+#endif
+ return w;
+}
+
+inline half3 pixel(float xpos, float ypos)
+{
+ return g_Texture.Sample(RGBSampler, float2(xpos, ypos)).rgb;
+}
+
+inline half3 getLine(float ypos, float3 xpos1, float3 xpos2, half3 linetaps1, half3 linetaps2)
+{
+ return
+ pixel(xpos1.r, ypos) * linetaps1.r +
+ pixel(xpos1.g, ypos) * linetaps2.r +
+ pixel(xpos1.b, ypos) * linetaps1.g +
+ pixel(xpos2.r, ypos) * linetaps2.g +
+ pixel(xpos2.g, ypos) * linetaps1.b +
+ pixel(xpos2.b, ypos) * linetaps2.b;
+}
+
+float4 CONVOLUTION6x6(in float2 TextureUV : TEXCOORD0) : SV_TARGET
+{
+ float2 f = frac(TextureUV / g_StepXY + 0.5);
+
+ half3 linetaps1 = weight((1.0 - f.x) / 2.0);
+ half3 linetaps2 = weight((1.0 - f.x) / 2.0 + 0.5);
+ half3 columntaps1 = weight((1.0 - f.y) / 2.0);
+ half3 columntaps2 = weight((1.0 - f.y) / 2.0 + 0.5);
+
+ // kernel generation code made sure taps add up to 1, no need to adjust here.
+
+ float2 xystart = (-2.0 - f) * g_StepXY + TextureUV;
+ float3 xpos1 = xystart.x + g_StepXY.x * float3(0.0, 1.0, 2.0);
+ float3 xpos2 = xystart.x + g_StepXY.x * float3(3.0, 4.0, 5.0);
+ float3 ypos1 = xystart.y + g_StepXY.y * float3(0.0, 1.0, 2.0);
+ float3 ypos2 = xystart.y + g_StepXY.y * float3(3.0, 4.0, 5.0);
+
+ float3 rgb =
+ getLine(ypos1.x, xpos1, xpos2, linetaps1, linetaps2) * columntaps1.r +
+ getLine(ypos1.y, xpos1, xpos2, linetaps1, linetaps2) * columntaps2.r +
+ getLine(ypos1.z, xpos1, xpos2, linetaps1, linetaps2) * columntaps1.g +
+ getLine(ypos2.x, xpos1, xpos2, linetaps1, linetaps2) * columntaps2.g +
+ getLine(ypos2.y, xpos1, xpos2, linetaps1, linetaps2) * columntaps1.b +
+ getLine(ypos2.z, xpos1, xpos2, linetaps1, linetaps2) * columntaps2.b;
+
+ return output(g_colorRange.x + g_colorRange.y * saturate(rgb), TextureUV);
+}
+
+technique11 SCALER_T
+{
+ pass P0
+ {
+ SetVertexShader( VS_SHADER );
+ SetPixelShader( CompileShader( ps_4_0_level_9_3, CONVOLUTION6x6() ) );
+ }
+};
diff --git a/system/shaders/convolution_d3d.fx b/system/shaders/convolution_d3d.fx
new file mode 100644
index 0000000..6ff6150
--- /dev/null
+++ b/system/shaders/convolution_d3d.fx
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2005-2015 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+texture2D g_Texture;
+texture2D g_KernelTexture;
+float4 g_StepXY;
+float2 g_viewPort;
+float2 g_colorRange;
+
+SamplerState KernelSampler : IMMUTABLE
+{
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ Filter = MIN_MAG_MIP_LINEAR;
+};
+
+struct VS_INPUT
+{
+ float4 Position : POSITION;
+ float2 TextureUV : TEXCOORD0;
+};
+
+struct VS_OUTPUT
+{
+ float2 TextureUV : TEXCOORD0;
+ float4 Position : SV_POSITION;
+};
+
+//
+// VS for rendering in screen space
+//
+VS_OUTPUT VS(VS_INPUT In)
+{
+ VS_OUTPUT output = (VS_OUTPUT)0;
+ output.Position.x = (In.Position.x / (g_viewPort.x / 2.0)) - 1;
+ output.Position.y = -(In.Position.y / (g_viewPort.y / 2.0)) + 1;
+ output.Position.z = output.Position.z;
+ output.Position.w = 1.0;
+ output.TextureUV = In.TextureUV;
+
+ return output;
+}
+
+#define VS_SHADER CompileShader( vs_4_0_level_9_1, VS() )
diff --git a/system/shaders/convolutionsep-4x4_d3d.fx b/system/shaders/convolutionsep-4x4_d3d.fx
new file mode 100644
index 0000000..af68b3b
--- /dev/null
+++ b/system/shaders/convolutionsep-4x4_d3d.fx
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2005-2015 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "convolution_d3d.fx"
+#include "output_d3d.fx"
+
+SamplerState RGBSampler : IMMUTABLE
+{
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ Filter = MIN_MAG_POINT_MIP_LINEAR;
+};
+
+inline half4 weight(float pos)
+{
+#ifdef HAS_RGBA
+ half4 w = g_KernelTexture.Sample(KernelSampler, pos);
+#else
+ half4 w = g_KernelTexture.Sample(KernelSampler, pos).bgra;
+#endif
+
+#ifndef HAS_FLOAT_TEXTURE
+ w = w * 2.0 - 1.0;
+#endif
+ return w;
+}
+
+inline half3 pixel(float xpos, float ypos)
+{
+ return g_Texture.Sample(RGBSampler, float2(xpos, ypos)).rgb;
+}
+
+// Code for first pass - horizontal
+
+inline half3 getLine(float ypos, float4 xpos, half4 linetaps)
+{
+ return
+ pixel(xpos.r, ypos) * linetaps.r +
+ pixel(xpos.g, ypos) * linetaps.g +
+ pixel(xpos.b, ypos) * linetaps.b +
+ pixel(xpos.a, ypos) * linetaps.a;
+}
+
+float4 CONVOLUTION4x4Horiz(in float2 TextureUV : TEXCOORD0) : SV_TARGET
+{
+ float2 f = frac(TextureUV / g_StepXY.xy + 0.5);
+ half4 linetaps = weight(1.0 - f.x);
+
+ // kernel generation code made sure taps add up to 1, no need to adjust here.
+ float xystart = (-1.0 - f.x) * g_StepXY.x + TextureUV.x;
+
+ float4 xpos = xystart + g_StepXY.x * float4(0.0, 1.0, 2.0, 3.0);
+ return float4(getLine(TextureUV.y, xpos, linetaps), 1.0f);
+}
+
+// Code for second pass - vertical
+
+inline half3 getRow(float xpos, float4 ypos, half4 columntaps)
+{
+ return
+ pixel(xpos, ypos.r) * columntaps.r +
+ pixel(xpos, ypos.g) * columntaps.g +
+ pixel(xpos, ypos.b) * columntaps.b +
+ pixel(xpos, ypos.a) * columntaps.a;
+}
+
+float4 CONVOLUTION4x4Vert(in float2 TextureUV : TEXCOORD0) : SV_TARGET
+{
+ float2 f = frac(TextureUV / g_StepXY.zw + 0.5);
+ half4 columntaps = weight(1.0 - f.y);
+
+ // kernel generation code made sure taps add up to 1, no need to adjust here.
+ float xystart = (-1.0 - f.y) * g_StepXY.w + TextureUV.y;
+
+ float4 ypos = xystart + g_StepXY.w * float4(0.0, 1.0, 2.0, 3.0);
+ return output(g_colorRange.x + g_colorRange.y * saturate(getRow(TextureUV.x, ypos, columntaps)), TextureUV);
+}
+
+technique11 SCALER_T
+{
+ pass P0
+ {
+ SetVertexShader( VS_SHADER );
+ SetPixelShader( CompileShader( ps_4_0_level_9_3, CONVOLUTION4x4Horiz() ) );
+ }
+ pass P1
+ {
+ SetVertexShader( VS_SHADER );
+ SetPixelShader( CompileShader( ps_4_0_level_9_3, CONVOLUTION4x4Vert() ) );
+ }
+
+};
diff --git a/system/shaders/convolutionsep-6x6_d3d.fx b/system/shaders/convolutionsep-6x6_d3d.fx
new file mode 100644
index 0000000..9db0d6b
--- /dev/null
+++ b/system/shaders/convolutionsep-6x6_d3d.fx
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2005-2015 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "convolution_d3d.fx"
+#include "output_d3d.fx"
+
+SamplerState RGBSampler : IMMUTABLE
+{
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ Filter = MIN_MAG_POINT_MIP_LINEAR;
+};
+
+inline half3 weight(float pos)
+{
+#ifdef HAS_RGBA
+ half3 w = g_KernelTexture.Sample(KernelSampler, pos).rgb;
+#else
+ half3 w = g_KernelTexture.Sample(KernelSampler, pos).bgr;
+#endif
+
+#ifndef HAS_FLOAT_TEXTURE
+ w = w * 2.0 - 1.0;
+#endif
+ return w;
+}
+
+inline half3 pixel(float xpos, float ypos)
+{
+ return g_Texture.Sample(RGBSampler, float2(xpos, ypos)).rgb;
+}
+
+half3 getLine(float ypos, float3 xpos1, float3 xpos2, half3 linetaps1, half3 linetaps2)
+{
+ return
+ pixel(xpos1.r, ypos) * linetaps1.r +
+ pixel(xpos1.g, ypos) * linetaps2.r +
+ pixel(xpos1.b, ypos) * linetaps1.g +
+ pixel(xpos2.r, ypos) * linetaps2.g +
+ pixel(xpos2.g, ypos) * linetaps1.b +
+ pixel(xpos2.b, ypos) * linetaps2.b;
+}
+
+// Code for first pass - horizontal
+float4 CONVOLUTION6x6Horiz(in float2 TextureUV : TEXCOORD0) : SV_TARGET
+{
+ float2 f = frac(TextureUV / g_StepXY.xy + 0.5);
+
+ half3 linetaps1 = weight((1.0 - f.x) / 2.0);
+ half3 linetaps2 = weight((1.0 - f.x) / 2.0 + 0.5);
+
+ // kernel generation code made sure taps add up to 1, no need to adjust here.
+
+ float xstart = (-2.0 - f.x) * g_StepXY.x + TextureUV.x;
+
+ float3 xpos1 = xstart + g_StepXY.x * float3(0.0, 1.0, 2.0);
+ float3 xpos2 = xstart + g_StepXY.x * float3(3.0, 4.0, 5.0);
+
+ return float4(getLine(TextureUV.y, xpos1, xpos2, linetaps1, linetaps2), 1.0);
+}
+
+// Code for second pass - vertical
+
+half3 getRow(float xpos, float3 ypos1, float3 ypos2, half3 columntaps1, half3 columntaps2)
+{
+ return
+ pixel(xpos, ypos1.r) * columntaps1.r +
+ pixel(xpos, ypos1.g) * columntaps2.r +
+ pixel(xpos, ypos1.b) * columntaps1.g +
+ pixel(xpos, ypos2.r) * columntaps2.g +
+ pixel(xpos, ypos2.g) * columntaps1.b +
+ pixel(xpos, ypos2.b) * columntaps2.b;
+}
+
+float4 CONVOLUTION6x6Vert(in float2 TextureUV : TEXCOORD0) : SV_TARGET
+{
+ float2 f = frac(TextureUV / g_StepXY.zw + 0.5);
+
+ half3 columntaps1 = weight((1.0 - f.y) / 2.0);
+ half3 columntaps2 = weight((1.0 - f.y) / 2.0 + 0.5);
+
+ // kernel generation code made sure taps add up to 1, no need to adjust here.
+
+ float ystart = (-2.0 - f.y) * g_StepXY.w + TextureUV.y;
+
+ float3 ypos1 = ystart + g_StepXY.w * float3(0.0, 1.0, 2.0);
+ float3 ypos2 = ystart + g_StepXY.w * float3(3.0, 4.0, 5.0);
+
+ return output(g_colorRange.x + g_colorRange.y * saturate(getRow(TextureUV.x, ypos1, ypos2, columntaps1, columntaps2)), TextureUV);
+}
+
+technique11 SCALER_T
+{
+ pass P0
+ {
+ SetVertexShader( VS_SHADER );
+ SetPixelShader( CompileShader( ps_4_0_level_9_3, CONVOLUTION6x6Horiz() ) );
+ }
+ pass P1
+ {
+ SetVertexShader( VS_SHADER );
+ SetPixelShader( CompileShader( ps_4_0_level_9_3, CONVOLUTION6x6Vert() ) );
+ }
+};
diff --git a/system/shaders/guishader_checkerboard_left.hlsl b/system/shaders/guishader_checkerboard_left.hlsl
new file mode 100644
index 0000000..7639a8c
--- /dev/null
+++ b/system/shaders/guishader_checkerboard_left.hlsl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#define STEREO_MODE_SHADER
+
+Texture2D texView : register(t0);
+
+cbuffer cbViewPort : register(b1)
+{
+ float g_viewPortX;
+ float g_viewPortY;
+ float g_viewPortWidth;
+ float g_viewPortHeigh;
+};
+
+#include "guishader_common.hlsl"
+
+float4 PS(PS_INPUT input) : SV_TARGET
+{
+ return StereoCheckerboard(input, STEREO_LEFT_EYE_INDEX);
+}
+
+
diff --git a/system/shaders/guishader_checkerboard_right.hlsl b/system/shaders/guishader_checkerboard_right.hlsl
new file mode 100644
index 0000000..eb02a21
--- /dev/null
+++ b/system/shaders/guishader_checkerboard_right.hlsl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#define STEREO_MODE_SHADER
+
+Texture2D texView : register(t0);
+
+cbuffer cbViewPort : register(b1)
+{
+ float g_viewPortX;
+ float g_viewPortY;
+ float g_viewPortWidth;
+ float g_viewPortHeigh;
+};
+
+#include "guishader_common.hlsl"
+
+float4 PS(PS_INPUT input) : SV_TARGET
+{
+ return StereoCheckerboard(input, STEREO_RIGHT_EYE_INDEX);
+}
+
+
diff --git a/system/shaders/guishader_common.hlsl b/system/shaders/guishader_common.hlsl
new file mode 100644
index 0000000..0dd01c5
--- /dev/null
+++ b/system/shaders/guishader_common.hlsl
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+struct VS_INPUT
+{
+ float4 pos : POSITION;
+ float4 color: COLOR0;
+ float2 tex : TEXCOORD0;
+ float2 tex2 : TEXCOORD1;
+};
+
+struct PS_INPUT
+{
+ float4 pos : SV_POSITION;
+ float4 color: COLOR0;
+ float2 tex : TEXCOORD0;
+ float2 tex2 : TEXCOORD1;
+};
+
+SamplerState LinearSampler : register(s0)
+{
+ Filter = MIN_MAG_MIP_LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ Comparison = NEVER;
+};
+
+cbuffer cbWorld : register(b0)
+{
+ float4x4 worldViewProj;
+ float blackLevel;
+ float colorRange;
+ float sdrPeakLum;
+ int PQ;
+};
+
+inline float3 transferPQ(float3 x)
+{
+ static const float ST2084_m1 = 2610.0f / (4096.0f * 4.0f);
+ static const float ST2084_m2 = (2523.0f / 4096.0f) * 128.0f;
+ static const float ST2084_c1 = 3424.0f / 4096.0f;
+ static const float ST2084_c2 = (2413.0f / 4096.0f) * 32.0f;
+ static const float ST2084_c3 = (2392.0f / 4096.0f) * 32.0f;
+ static const float3x3 matx =
+ {
+ 0.627402, 0.329292, 0.043306,
+ 0.069095, 0.919544, 0.011360,
+ 0.016394, 0.088028, 0.895578
+ };
+ // REC.709 to linear
+ x = pow(x, 1.0f / 0.45f);
+ // REC.709 to BT.2020
+ x = mul(matx, x);
+ // linear to PQ
+ x = pow(x / sdrPeakLum, ST2084_m1);
+ x = (ST2084_c1 + ST2084_c2 * x) / (1.0f + ST2084_c3 * x);
+ x = pow(x, ST2084_m2);
+ return x;
+}
+
+inline float4 tonemapHDR(float4 color)
+{
+ return (PQ) ? float4(transferPQ(color.rgb), color.a) : color;
+}
+
+inline float4 adjustColorRange(float4 color)
+{
+ return float4(blackLevel + colorRange * color.rgb, color.a);
+}
+
+#define STEREO_LEFT_EYE_INDEX 0
+#define STEREO_RIGHT_EYE_INDEX 1
+
+#ifdef STEREO_MODE_SHADER
+
+inline float4 StereoInterlaced(PS_INPUT input, int eye)
+{
+ uint pixelY = abs(trunc(input.tex.y * g_viewPortHeigh));
+ uint odd = pixelY % 2;
+
+ if ((odd == 0 && !eye) || (odd != 0 && eye))
+ return float4(texView.Sample(LinearSampler, input.tex).rgb, 1.0);
+ else
+ return float4(0.0, 0.0, 0.0, 0.0);
+}
+
+inline float4 StereoCheckerboard(PS_INPUT input, int eye)
+{
+ uint pixelX = abs(trunc(input.tex.x * g_viewPortWidth));
+ uint pixelY = abs(trunc(input.tex.y * g_viewPortHeigh));
+ uint odd = (pixelX + pixelY) % 2;
+
+ if ((odd == 0 && !eye) || (odd != 0 && eye))
+ return float4(texView.Sample(LinearSampler, input.tex).rgb, 1.0);
+ else
+ return float4(0.0, 0.0, 0.0, 0.0);
+}
+
+#endif \ No newline at end of file
diff --git a/system/shaders/guishader_default.hlsl b/system/shaders/guishader_default.hlsl
new file mode 100644
index 0000000..82b6510
--- /dev/null
+++ b/system/shaders/guishader_default.hlsl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "guishader_common.hlsl"
+
+float4 PS(PS_INPUT input) : SV_TARGET
+{
+ return tonemapHDR(adjustColorRange(input.color));
+}
+
+
diff --git a/system/shaders/guishader_fonts.hlsl b/system/shaders/guishader_fonts.hlsl
new file mode 100644
index 0000000..59c2ffe
--- /dev/null
+++ b/system/shaders/guishader_fonts.hlsl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "guishader_common.hlsl"
+
+Texture2D texFont : register(t0);
+
+float4 PS(PS_INPUT input) : SV_TARGET
+{
+ input.color.a *= texFont.Sample(LinearSampler, input.tex).r;
+ return tonemapHDR(adjustColorRange(input.color));
+}
+
+
diff --git a/system/shaders/guishader_interlaced_left.hlsl b/system/shaders/guishader_interlaced_left.hlsl
new file mode 100644
index 0000000..41a7b92
--- /dev/null
+++ b/system/shaders/guishader_interlaced_left.hlsl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#define STEREO_MODE_SHADER
+
+Texture2D texView : register(t0);
+
+cbuffer cbViewPort : register(b1)
+{
+ float g_viewPortX;
+ float g_viewPortY;
+ float g_viewPortWidth;
+ float g_viewPortHeigh;
+};
+
+#include "guishader_common.hlsl"
+
+float4 PS(PS_INPUT input) : SV_TARGET
+{
+ return StereoInterlaced(input, STEREO_LEFT_EYE_INDEX);
+}
+
+
diff --git a/system/shaders/guishader_interlaced_right.hlsl b/system/shaders/guishader_interlaced_right.hlsl
new file mode 100644
index 0000000..394d5b9
--- /dev/null
+++ b/system/shaders/guishader_interlaced_right.hlsl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#define STEREO_MODE_SHADER
+
+Texture2D texView : register(t0);
+
+cbuffer cbViewPort : register(b1)
+{
+ float g_viewPortX;
+ float g_viewPortY;
+ float g_viewPortWidth;
+ float g_viewPortHeigh;
+};
+
+#include "guishader_common.hlsl"
+
+float4 PS(PS_INPUT input) : SV_TARGET
+{
+ return StereoInterlaced(input, STEREO_RIGHT_EYE_INDEX);
+}
+
+
diff --git a/system/shaders/guishader_multi_texture_blend.hlsl b/system/shaders/guishader_multi_texture_blend.hlsl
new file mode 100644
index 0000000..77c2e79
--- /dev/null
+++ b/system/shaders/guishader_multi_texture_blend.hlsl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "guishader_common.hlsl"
+
+Texture2D txDiffuse[2] : register(t0);
+
+float4 PS(PS_INPUT input) : SV_TARGET
+{
+ return tonemapHDR(adjustColorRange(input.color * txDiffuse[0].Sample(LinearSampler, input.tex) *
+ txDiffuse[1].Sample(LinearSampler, input.tex2)));
+}
+
+
diff --git a/system/shaders/guishader_texture.hlsl b/system/shaders/guishader_texture.hlsl
new file mode 100644
index 0000000..665aff0
--- /dev/null
+++ b/system/shaders/guishader_texture.hlsl
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "guishader_common.hlsl"
+
+Texture2D texMain : register(t0);
+
+float4 PS(PS_INPUT input) : SV_TARGET
+{
+ return tonemapHDR(adjustColorRange(input.color * texMain.Sample(LinearSampler, input.tex)));
+}
+
+
diff --git a/system/shaders/guishader_texture_noblend.hlsl b/system/shaders/guishader_texture_noblend.hlsl
new file mode 100644
index 0000000..1daaa20
--- /dev/null
+++ b/system/shaders/guishader_texture_noblend.hlsl
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "guishader_common.hlsl"
+
+Texture2D texMain : register(t0);
+
+float4 PS(PS_INPUT input) : SV_TARGET
+{
+ return texMain.Sample(LinearSampler, input.tex);
+}
+
+
diff --git a/system/shaders/guishader_vert.hlsl b/system/shaders/guishader_vert.hlsl
new file mode 100644
index 0000000..508cbb7
--- /dev/null
+++ b/system/shaders/guishader_vert.hlsl
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2005-2015 Team Kodi
+ * http://kodi.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 XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "guishader_common.hlsl"
+
+PS_INPUT VS(VS_INPUT input)
+{
+ PS_INPUT output = (PS_INPUT)0;
+ output.pos = mul(input.pos, worldViewProj);
+ output.color = input.color;
+ output.tex = input.tex;
+ output.tex2 = input.tex2;
+
+ return output;
+}
diff --git a/system/shaders/output_d3d.fx b/system/shaders/output_d3d.fx
new file mode 100644
index 0000000..eebc200
--- /dev/null
+++ b/system/shaders/output_d3d.fx
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2005-2015 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#if defined(KODI_3DLUT)
+float2 m_LUTParams; // x- scale, y- offset
+texture3D m_LUT;
+
+SamplerState LutSampler : IMMUTABLE
+{
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
+ Filter = MIN_MAG_MIP_LINEAR;
+};
+#endif
+#if defined(KODI_DITHER)
+float3 m_ditherParams;
+texture2D m_ditherMatrix;
+
+SamplerState DitherSampler : IMMUTABLE
+{
+ AddressU = WRAP;
+ AddressV = WRAP;
+ Filter = MIN_MAG_MIP_POINT;
+};
+#endif
+#if (defined(KODI_TONE_MAPPING_ACES) || defined(KODI_TONE_MAPPING_HABLE) || defined(KODI_HLG_TO_PQ))
+static const float ST2084_m1 = 2610.0f / (4096.0f * 4.0f);
+static const float ST2084_m2 = (2523.0f / 4096.0f) * 128.0f;
+static const float ST2084_c1 = 3424.0f / 4096.0f;
+static const float ST2084_c2 = (2413.0f / 4096.0f) * 32.0f;
+static const float ST2084_c3 = (2392.0f / 4096.0f) * 32.0f;
+#endif
+#if defined(KODI_TONE_MAPPING_REINHARD)
+float g_toneP1;
+float3 g_coefsDst;
+
+float reinhard(float x)
+{
+ return x * (1.0f + x / (g_toneP1 * g_toneP1)) / (1.0f + x);
+}
+#endif
+#if defined(KODI_TONE_MAPPING_ACES)
+float g_luminance;
+float g_toneP1;
+
+float3 aces(float3 x)
+{
+ const float A = 2.51f;
+ const float B = 0.03f;
+ const float C = 2.43f;
+ const float D = 0.59f;
+ const float E = 0.14f;
+ return (x * (A * x + B)) / (x * (C * x + D) + E);
+}
+#endif
+#if defined(KODI_TONE_MAPPING_HABLE)
+float g_toneP1;
+float g_toneP2;
+
+float3 hable(float3 x)
+{
+ const float A = 0.15f;
+ const float B = 0.5f;
+ const float C = 0.1f;
+ const float D = 0.2f;
+ const float E = 0.02f;
+ const float F = 0.3f;
+ return ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F;
+}
+#endif
+#if (defined(KODI_TONE_MAPPING_ACES) || defined(KODI_TONE_MAPPING_HABLE))
+float3 inversePQ(float3 x)
+{
+ x = pow(max(x, 0.0f), 1.0f / ST2084_m2);
+ x = max(x - ST2084_c1, 0.0f) / (ST2084_c2 - ST2084_c3 * x);
+ x = pow(x, 1.0f / ST2084_m1);
+ return x;
+}
+#endif
+#if defined(KODI_HLG_TO_PQ)
+float3 inverseHLG(float3 x)
+{
+ const float B67_a = 0.17883277f;
+ const float B67_b = 0.28466892f;
+ const float B67_c = 0.55991073f;
+ const float B67_inv_r2 = 4.0f;
+ x = (x <= 0.5f) ? x * x * B67_inv_r2 : exp((x - B67_c) / B67_a) + B67_b;
+ return x;
+}
+
+float3 tranferPQ(float3 x)
+{
+ x = pow(x / 1000.0f, ST2084_m1);
+ x = (ST2084_c1 + ST2084_c2 * x) / (1.0f + ST2084_c3 * x);
+ x = pow(x, ST2084_m2);
+ return x;
+}
+#endif
+
+
+float4 output4(float4 color, float2 uv)
+{
+#if defined(KODI_TONE_MAPPING_REINHARD)
+ float luma = dot(color.rgb, g_coefsDst);
+ color.rgb *= reinhard(luma) / luma;
+#endif
+#if defined(KODI_TONE_MAPPING_ACES)
+ color.rgb = inversePQ(color.rgb);
+ color.rgb *= (10000.0f / g_luminance) * (2.0f / g_toneP1);
+ color.rgb = aces(color.rgb);
+ color.rgb *= (1.24f / g_toneP1);
+ color.rgb = pow(color.rgb, 0.27f);
+#endif
+#if defined(KODI_TONE_MAPPING_HABLE)
+ color.rgb = inversePQ(color.rgb);
+ color.rgb *= g_toneP1;
+ color.rgb = hable(color.rgb * g_toneP2) / hable(g_toneP2);
+ color.rgb = pow(color.rgb, 1.0f / 2.2f);
+#endif
+#if defined(KODI_HLG_TO_PQ)
+ color.rgb = inverseHLG(color.rgb);
+ float3 ootf_2020 = float3(0.2627f, 0.6780f, 0.0593f);
+ float ootf_ys = 2000.0f * dot(ootf_2020, color.rgb);
+ color.rgb *= pow(ootf_ys, 0.2f);
+ color.rgb = tranferPQ(color.rgb);
+#endif
+#if defined(KODI_3DLUT)
+ half3 scale = m_LUTParams.x;
+ half3 offset = m_LUTParams.y;
+ float3 lutRGB = m_LUT.Sample(LutSampler, color.rgb*scale + offset).rgb;
+ color.rgb = scale.x ? lutRGB : color.rgb;
+#endif
+#if defined(KODI_DITHER)
+ half2 ditherpos = uv * m_ditherParams.xy;
+ // scale ditherval to [0,1)
+ float ditherval = m_ditherMatrix.Sample(DitherSampler, ditherpos).r * 16.0f;
+ color.rgb = floor(color.rgb * m_ditherParams.z + ditherval) / m_ditherParams.z;
+#endif
+ return color;
+}
+
+float4 output(float3 color, float2 uv)
+{
+ return output4(float4(color, 1.0), uv);
+}
+
+#if defined(KODI_OUTPUT_T)
+#include "convolution_d3d.fx"
+
+#if (defined(KODI_TONE_MAPPING_ACES) || defined(KODI_TONE_MAPPING_HABLE) || defined(KODI_HLG_TO_PQ))
+#define PS_PROFILE ps_4_0_level_9_3
+#else
+#define PS_PROFILE ps_4_0_level_9_1
+#endif
+
+float3 m_params; // 0 - range (0 - full, 1 - limited), 1 - contrast, 2 - brightness
+
+float4 OUTPUT_PS(VS_OUTPUT In) : SV_TARGET
+{
+ float4 color = g_Texture.Sample(KernelSampler, In.TextureUV);
+ [flatten] if (m_params.x)
+ color = saturate(0.0625 + color * 219.0 / 255.0);
+
+ color *= m_params.y * 2.0;
+ color += m_params.z - 0.5;
+ color.a = 1.0;
+
+ return output4(color, In.TextureUV);
+}
+
+technique11 OUTPUT_T
+{
+ pass P0
+ {
+ SetVertexShader( VS_SHADER );
+ SetPixelShader( CompileShader( PS_PROFILE, OUTPUT_PS() ) );
+ }
+};
+#endif \ No newline at end of file
diff --git a/system/shaders/rp_output_d3d.fx b/system/shaders/rp_output_d3d.fx
new file mode 100644
index 0000000..69ca56d
--- /dev/null
+++ b/system/shaders/rp_output_d3d.fx
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2017 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+texture2D g_Texture;
+float2 g_viewPort;
+float m_params[1]; // 0 - range (0 - full, 1 - limited)
+
+SamplerState TextureSampler : IMMUTABLE
+{
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+#ifdef SAMP_NEAREST
+ Filter = MIN_MAG_MIP_POINT;
+#else
+ Filter = MIN_MAG_MIP_LINEAR;
+#endif
+};
+
+struct VS_INPUT
+{
+ float4 Position : POSITION;
+ float2 TextureUV : TEXCOORD0;
+};
+
+struct VS_OUTPUT
+{
+ float2 TextureUV : TEXCOORD0;
+ float4 Position : SV_POSITION;
+};
+
+//
+// VS for rendering in screen space
+//
+VS_OUTPUT OUTPUT_VS(VS_INPUT In)
+{
+ VS_OUTPUT output = (VS_OUTPUT)0;
+ output.Position.x = (In.Position.x / (g_viewPort.x / 2.0)) - 1;
+ output.Position.y = -(In.Position.y / (g_viewPort.y / 2.0)) + 1;
+ output.Position.z = output.Position.z;
+ output.Position.w = 1.0;
+ output.TextureUV = In.TextureUV;
+
+ return output;
+}
+
+float4 OUTPUT_PS(VS_OUTPUT In) : SV_TARGET
+{
+ float4 color = g_Texture.Sample(TextureSampler, In.TextureUV);
+ [flatten] if (m_params[0])
+ color = saturate(0.0625 + color * 219.0 / 255.0);
+
+ color.a = 1.0;
+
+ return color;
+}
+
+technique11 OUTPUT_T
+{
+ pass P0
+ {
+ SetVertexShader( CompileShader( vs_4_0_level_9_1, OUTPUT_VS()) );
+ SetPixelShader( CompileShader( ps_4_0_level_9_1, OUTPUT_PS() ) );
+ }
+};
diff --git a/system/shaders/yuv2rgb_d3d.fx b/system/shaders/yuv2rgb_d3d.fx
new file mode 100644
index 0000000..0500526
--- /dev/null
+++ b/system/shaders/yuv2rgb_d3d.fx
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2005-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "output_d3d.fx"
+
+texture2D g_Texture[3];
+float4x4 g_ColorMatrix;
+float2 g_StepXY;
+float2 g_viewPort;
+float4x4 g_primMat;
+float g_gammaDstInv;
+float g_gammaSrc;
+
+SamplerState YUVSampler : IMMUTABLE
+{
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ Filter = MIN_MAG_MIP_POINT;
+};
+
+struct VS_INPUT
+{
+ float4 Position : POSITION;
+ float2 TextureY : TEXCOORD0;
+ float2 TextureUV : TEXCOORD1;
+};
+
+struct VS_OUTPUT
+{
+ float2 TextureY : TEXCOORD0;
+ float2 TextureUV : TEXCOORD1;
+ float4 Position : SV_POSITION;
+};
+
+VS_OUTPUT VS(VS_INPUT In)
+{
+ VS_OUTPUT output = (VS_OUTPUT)0;
+ output.Position.x = (In.Position.x / (g_viewPort.x / 2.0)) - 1;
+ output.Position.y = -(In.Position.y / (g_viewPort.y / 2.0)) + 1;
+ output.Position.z = output.Position.z;
+ output.Position.w = 1.0;
+ output.TextureY = In.TextureY;
+ output.TextureUV = In.TextureUV;
+
+ return output;
+}
+
+#ifdef NV12_SNORM_UV
+inline float unormU(float c)
+{
+ c *= 0.5;
+ if (c < 0.0) c += 1.0;
+ return saturate(c);
+}
+inline float2 unormUV(float2 rg)
+{
+ return float2(unormU(rg.x), unormU(rg.y));
+}
+#endif
+
+float4 YUV2RGB(VS_OUTPUT In) : SV_TARGET
+{
+#if defined(XBMC_YV12) //|| defined(XBMC_NV12)
+ float4 YUV = float4(g_Texture[0].Sample(YUVSampler, In.TextureY ).r
+ , g_Texture[1].Sample(YUVSampler, In.TextureUV).r
+ , g_Texture[2].Sample(YUVSampler, In.TextureUV).r
+ , 1.0);
+#elif defined(XBMC_NV12)
+ float4 YUV = float4(g_Texture[0].Sample(YUVSampler, In.TextureY).r
+ #if defined(NV12_SNORM_UV)
+ , unormUV(g_Texture[1].Sample(YUVSampler, In.TextureUV).rg)
+ #else
+ , g_Texture[1].Sample(YUVSampler, In.TextureUV).rg
+ #endif
+ , 1.0);
+#elif defined(XBMC_YUY2) || defined(XBMC_UYVY)
+ // The HLSL compiler is smart enough to optimize away these redundant assignments.
+ // That way the code is almost identical to the OGL shader.
+ float2 stepxy = g_StepXY;
+ float2 pos = In.TextureY;
+ pos = float2(pos.x - (stepxy.x * 0.25), pos.y);
+ float2 f = frac(pos / stepxy);
+
+ //y axis will be correctly interpolated by opengl
+ //x axis will not, so we grab two pixels at the center of two columns and interpolate ourselves
+ float4 c1 = g_Texture[0].Sample(YUVSampler, float2(pos.x + ((0.5 - f.x) * stepxy.x), pos.y));
+ float4 c2 = g_Texture[0].Sample(YUVSampler, float2(pos.x + ((1.5 - f.x) * stepxy.x), pos.y));
+
+ /* each pixel has two Y subpixels and one UV subpixel
+ YUV Y YUV
+ check if we're left or right of the middle Y subpixel and interpolate accordingly*/
+ #if defined(XBMC_YUY2) // BGRA = YUYV
+ float leftY = lerp(c1.b, c1.r, f.x * 2.0);
+ float rightY = lerp(c1.r, c2.b, f.x * 2.0 - 1.0);
+ float2 outUV = lerp(c1.ga, c2.ga, f.x);
+ #elif defined(XBMC_UYVY) // BGRA = UYVY
+ float leftY = lerp(c1.g, c1.a, f.x * 2.0);
+ float rightY = lerp(c1.a, c2.g, f.x * 2.0 - 1.0);
+ float2 outUV = lerp(c1.br, c2.br, f.x);
+ #endif
+ float outY = lerp(leftY, rightY, step(0.5, f.x));
+ float4 YUV = float4(outY, outUV, 1.0);
+#endif
+
+ float4 rgb = mul(YUV, g_ColorMatrix);
+#if defined(XBMC_COL_CONVERSION)
+ rgb.rgb = pow(max(0.0, rgb.rgb), g_gammaSrc);
+ rgb.rgb = max(0.0, mul(rgb, g_primMat).rgb);
+ rgb.rgb = pow(rgb.rgb, g_gammaDstInv);
+#endif
+ return output4(rgb, In.TextureY);
+}
+
+technique11 YUV2RGB_T
+{
+ pass P0
+ {
+ SetVertexShader( CompileShader( vs_4_0_level_9_1, VS() ) );
+ SetPixelShader( CompileShader( ps_4_0_level_9_1, YUV2RGB() ) );
+ }
+};