aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.in6
-rw-r--r--XBMC.xcodeproj/project.pbxproj10
-rw-r--r--addons/repository.xbmc.org/addon.xml2
-rw-r--r--addons/screensaver.rsxs.euphoria/addon.xml2
-rw-r--r--addons/screensaver.rsxs.plasma/addon.xml2
-rw-r--r--addons/screensaver.rsxs.solarwinds/addon.xml2
-rw-r--r--addons/screensaver.xbmc.builtin.black/addon.xml2
-rw-r--r--addons/screensaver.xbmc.builtin.dim/addon.xml2
-rw-r--r--addons/skin.confluence/720p/DialogSubtitles.xml17
-rw-r--r--addons/skin.confluence/720p/DialogVideoInfo.xml3
-rw-r--r--addons/skin.confluence/720p/MyVideoNav.xml2
-rw-r--r--addons/skin.confluence/720p/MyWeather.xml21
-rw-r--r--addons/skin.confluence/720p/SettingsCategory.xml2
-rw-r--r--addons/skin.confluence/720p/ViewsPVR.xml40
-rw-r--r--addons/skin.confluence/addon.xml2
-rw-r--r--addons/skin.confluence/changelog.txt4
-rw-r--r--addons/skin.confluence/language/Bulgarian/strings.po14
-rw-r--r--addons/skin.confluence/language/Croatian/strings.po8
-rw-r--r--addons/skin.confluence/language/Dutch/strings.po8
-rw-r--r--addons/skin.confluence/language/French/strings.po8
-rw-r--r--addons/skin.confluence/language/Greek/strings.po8
-rw-r--r--addons/skin.confluence/language/Hungarian/strings.po8
-rw-r--r--addons/skin.confluence/language/Korean/strings.po8
-rw-r--r--addons/skin.confluence/language/Lithuanian/strings.po48
-rw-r--r--addons/skin.confluence/language/Polish/strings.po8
-rw-r--r--addons/skin.confluence/language/Portuguese (Brazil)/strings.po8
-rw-r--r--addons/skin.confluence/language/Portuguese/strings.po8
-rw-r--r--addons/skin.confluence/language/Russian/strings.po8
-rw-r--r--addons/skin.confluence/language/Spanish/strings.po8
-rw-r--r--addons/skin.confluence/language/Tajik/strings.po12
-rw-r--r--addons/skin.confluence/language/Turkish/strings.po10
-rw-r--r--addons/skin.confluence/media/PVR-EpgProgressIndicator.pngbin579 -> 1075 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/-.gifbin46 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/-.pngbin0 -> 210 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/LICENSE.txt16
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ar.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ar.pngbin0 -> 824 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/bg.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/bg.pngbin0 -> 772 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/bs.gifbin1004 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/bs.pngbin0 -> 1030 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ca.gifbin119 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ca.pngbin0 -> 548 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/cs.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/cs.pngbin0 -> 984 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/da.gifbin1001 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/da.pngbin0 -> 884 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/de.gifbin1003 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/de.pngbin0 -> 761 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/el.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/el.pngbin0 -> 942 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/en.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/en.pngbin0 -> 1690 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/es.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/es.pngbin0 -> 1054 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/et.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/et.pngbin0 -> 746 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/fa.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/fa.pngbin0 -> 1024 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/fi.gifbin1004 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/fi.pngbin0 -> 778 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/fo.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/fo.pngbin0 -> 902 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/fr.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/fr.pngbin0 -> 903 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/gl.gifbin1003 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/gl.pngbin0 -> 1174 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/he.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/he.pngbin0 -> 955 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/hi.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/hi.pngbin0 -> 986 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/hr.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/hr.pngbin0 -> 1162 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/hu.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/hu.pngbin0 -> 811 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/hy.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/hy.pngbin0 -> 850 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/id.gifbin1005 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/id.pngbin0 -> 746 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/is.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/is.pngbin0 -> 1028 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/it.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/it.pngbin0 -> 885 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ja.gifbin596 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ja.pngbin0 -> 792 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/kk.gifbin1004 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/kk.pngbin0 -> 1278 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ko.gifbin1004 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ko.pngbin0 -> 1283 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/lb.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/lb.pngbin0 -> 845 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/lt.gifbin341 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/lt.pngbin0 -> 881 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/lv.gifbin999 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/lv.pngbin0 -> 864 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/mk.gifbin971 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/mk.pngbin0 -> 1474 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ms.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ms.pngbin0 -> 1225 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/nl.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/nl.pngbin0 -> 810 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/no.gifbin1004 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/no.pngbin0 -> 1041 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/pb.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/pb.pngbin0 -> 1545 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/pl.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/pl.pngbin0 -> 815 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/pt.gifbin1000 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/pt.pngbin0 -> 1299 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ro.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ro.pngbin0 -> 937 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ru.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/ru.pngbin0 -> 709 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/sk.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/sk.pngbin0 -> 1013 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/sl.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/sl.pngbin0 -> 932 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/sq.gifbin1005 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/sq.pngbin0 -> 1184 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/sr.gifbin880 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/sr.pngbin0 -> 1218 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/sv.gifbin1006 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/sv.pngbin0 -> 972 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/tr.gifbin995 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/tr.pngbin0 -> 1168 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/uk.gifbin596 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/uk.pngbin0 -> 831 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/vi.gifbin999 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/vi.pngbin0 -> 1019 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/zh.gifbin579 -> 0 bytes
-rw-r--r--addons/skin.confluence/media/Subtitles/flags/zh.pngbin0 -> 1061 bytes
-rw-r--r--addons/visualization.dxspectrum/addon.xml2
-rw-r--r--addons/visualization.glspectrum/addon.xml2
-rw-r--r--addons/visualization.milkdrop/addon.xml2
-rw-r--r--addons/visualization.projectm/addon.xml2
-rw-r--r--addons/visualization.waveform/addon.xml2
-rw-r--r--addons/webinterface.default/addon.xml2
-rw-r--r--addons/xbmc.addon/addon.xml2
-rw-r--r--addons/xbmc.debug/addon.xml3
-rw-r--r--addons/xbmc.debug/resources/language/Bulgarian/strings.po41
-rw-r--r--configure.in3
-rw-r--r--language/Afrikaans/strings.po8
-rw-r--r--language/Albanian/strings.po8
-rw-r--r--language/Amharic/strings.po12
-rw-r--r--language/Arabic/strings.po8
-rw-r--r--language/Basque/strings.po8
-rw-r--r--language/Belarusian/strings.po8
-rw-r--r--language/Bosnian/strings.po8
-rw-r--r--language/Bulgarian/strings.po392
-rw-r--r--language/Burmese/strings.po16
-rw-r--r--language/Catalan/strings.po160
-rw-r--r--language/Chinese (Simple)/strings.po8
-rw-r--r--language/Chinese (Traditional)/strings.po8
-rw-r--r--language/Croatian/strings.po324
-rw-r--r--language/Czech/strings.po8
-rw-r--r--language/Danish/strings.po8
-rw-r--r--language/Dutch/strings.po334
-rw-r--r--language/English (US)/strings.po8
-rwxr-xr-xlanguage/English/strings.po18
-rw-r--r--language/Esperanto/strings.po8
-rw-r--r--language/Estonian/strings.po8
-rw-r--r--language/Faroese/strings.po8
-rw-r--r--language/Finnish/strings.po8
-rw-r--r--language/French/strings.po316
-rw-r--r--language/Galician/strings.po8
-rw-r--r--language/German/strings.po12
-rw-r--r--language/Greek/strings.po164
-rw-r--r--language/Hebrew/strings.po8
-rw-r--r--language/Hindi (Devanagiri)/strings.po12
-rw-r--r--language/Hungarian/strings.po32
-rw-r--r--language/Icelandic/strings.po8
-rw-r--r--language/Indonesian/strings.po8
-rw-r--r--language/Italian/strings.po8
-rw-r--r--language/Japanese/strings.po8
-rw-r--r--language/Korean/strings.po414
-rw-r--r--language/Lithuanian/strings.po626
-rw-r--r--language/Macedonian/strings.po8
-rw-r--r--language/Maltese/strings.po4
-rw-r--r--language/Norwegian/strings.po8
-rw-r--r--language/Persian (Iran)/strings.po4
-rw-r--r--language/Persian/strings.po16
-rw-r--r--language/Polish/strings.po164
-rw-r--r--language/Portuguese (Brazil)/strings.po324
-rw-r--r--language/Portuguese/strings.po274
-rw-r--r--language/Romanian/strings.po8
-rw-r--r--language/Russian/strings.po264
-rw-r--r--language/Serbian (Cyrillic)/strings.po4
-rw-r--r--language/Serbian/strings.po4
-rw-r--r--language/Slovak/strings.po8
-rw-r--r--language/Slovenian/strings.po8
-rw-r--r--language/Spanish (Argentina)/strings.po8
-rw-r--r--language/Spanish (Mexico)/strings.po8
-rw-r--r--language/Spanish/strings.po252
-rw-r--r--language/Swedish/strings.po8
-rw-r--r--language/Tajik/strings.po2256
-rw-r--r--language/Tamil (India)/strings.po8
-rw-r--r--language/Thai/strings.po8
-rw-r--r--language/Turkish/strings.po104
-rw-r--r--language/Ukrainian/strings.po8
-rw-r--r--language/Vietnamese/strings.po4
-rw-r--r--language/Welsh/strings.po76
-rw-r--r--project/VS2010Express/XBMC.vcxproj4
-rw-r--r--project/VS2010Express/XBMC.vcxproj.filters8
-rw-r--r--system/settings/settings.xml7
-rw-r--r--tools/android/packaging/xbmc/AndroidManifest.xml4
-rw-r--r--tools/android/packaging/xbmc/src/org/xbmc/xbmc/Main.java8
-rw-r--r--tools/android/packaging/xbmc/src/org/xbmc/xbmc/XBMCBroadcastReceiver.java6
-rwxr-xr-xtools/darwin/packaging/xbmc-atv2/mkdeb-xbmc-atv2.sh2
-rwxr-xr-xtools/darwin/packaging/xbmc-ios/mkdeb-xbmc-ios.sh2
-rwxr-xr-xtools/darwin/packaging/xbmc-osx/mkdmg-xbmc-osx.sh2
-rw-r--r--tools/depends/native/pcre-native/Makefile7
-rw-r--r--tools/depends/target/pcre/Makefile8
-rw-r--r--userdata/RssFeeds.xml2
-rw-r--r--xbmc/Application.cpp11
-rw-r--r--xbmc/ApplicationPlayer.cpp36
-rw-r--r--xbmc/ApplicationPlayer.h4
-rw-r--r--xbmc/FileItem.cpp65
-rw-r--r--xbmc/FileItem.h8
-rw-r--r--xbmc/GUIInfoManager.cpp17
-rw-r--r--xbmc/GUIInfoManager.h2
-rw-r--r--xbmc/LangInfo.cpp10
-rw-r--r--xbmc/Temperature.cpp2
-rw-r--r--xbmc/Temperature.h3
-rw-r--r--xbmc/URL.cpp3
-rw-r--r--xbmc/Util.cpp43
-rw-r--r--xbmc/Util.h2
-rw-r--r--xbmc/XBDateTime.h1
-rw-r--r--xbmc/addons/GUIDialogAddonInfo.cpp2
-rw-r--r--xbmc/addons/Repository.cpp6
-rw-r--r--xbmc/android/activity/AndroidExtra.h11
-rw-r--r--xbmc/android/activity/AndroidMouse.cpp31
-rw-r--r--xbmc/android/activity/AndroidMouse.h5
-rw-r--r--xbmc/android/activity/EventLoop.cpp5
-rw-r--r--xbmc/android/activity/XBMCApp.cpp25
-rw-r--r--xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp10
-rw-r--r--xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp14
-rw-r--r--xbmc/cores/IPlayer.h12
-rw-r--r--xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp11
-rw-r--r--xbmc/cores/VideoRenderers/WinRenderer.cpp94
-rw-r--r--xbmc/cores/VideoRenderers/WinRenderer.h2
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp87
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecVDA.cpp6
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in1
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/libstagefrightICS/StageFrightVideo.cpp16
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/libstagefrightICS/StageFrightVideoPrivate.cpp71
-rw-r--r--xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp8
-rw-r--r--xbmc/cores/dvdplayer/DVDPlayer.cpp51
-rw-r--r--xbmc/cores/dvdplayer/DVDPlayer.h2
-rw-r--r--xbmc/cores/omxplayer/OMXAudio.cpp27
-rw-r--r--xbmc/cores/omxplayer/OMXImage.cpp28
-rw-r--r--xbmc/cores/omxplayer/OMXPlayer.cpp73
-rw-r--r--xbmc/cores/omxplayer/OMXPlayer.h4
-rw-r--r--xbmc/cores/omxplayer/OMXVideo.cpp18
-rw-r--r--xbmc/cores/paplayer/PAPlayer.cpp12
-rw-r--r--xbmc/cores/paplayer/PAPlayer.h2
-rw-r--r--xbmc/epg/GUIEPGGridContainer.cpp18
-rw-r--r--xbmc/guilib/D3DResource.h1
-rw-r--r--xbmc/guilib/DDSImage.cpp2
-rw-r--r--xbmc/guilib/JpegIO.cpp3
-rw-r--r--xbmc/guilib/StereoscopicsManager.cpp3
-rw-r--r--xbmc/guilib/Texture.cpp6
-rw-r--r--xbmc/guilib/Texture.h4
-rw-r--r--xbmc/guilib/TexturePi.cpp26
-rw-r--r--xbmc/guilib/TexturePi.h2
-rw-r--r--xbmc/interfaces/json-rpc/ProfilesOperations.cpp2
-rw-r--r--xbmc/interfaces/legacy/Player.h4
-rw-r--r--xbmc/linux/OMXClock.cpp2
-rw-r--r--xbmc/linux/OMXCore.cpp61
-rw-r--r--xbmc/linux/OMXCore.h5
-rw-r--r--xbmc/music/infoscanner/MusicInfoScanner.cpp80
-rw-r--r--xbmc/music/infoscanner/MusicInfoScanner.h2
-rw-r--r--xbmc/music/windows/GUIWindowMusicNav.cpp2
-rw-r--r--xbmc/osx/Info.plist4
-rw-r--r--xbmc/osx/Makefile.in4
-rw-r--r--xbmc/pictures/Picture.cpp2
-rw-r--r--xbmc/playlists/PlayListM3U.cpp2
-rw-r--r--xbmc/pvr/channels/PVRChannelGroups.cpp3
-rw-r--r--xbmc/rendering/dx/GUIWindowTestPatternDX.cpp219
-rw-r--r--xbmc/rendering/dx/GUIWindowTestPatternDX.h9
-rw-r--r--xbmc/rendering/dx/RenderSystemDX.cpp40
-rw-r--r--xbmc/rendering/dx/RenderSystemDX.h2
-rw-r--r--xbmc/rendering/gles/RenderSystemGLES.cpp25
-rw-r--r--xbmc/settings/AdvancedSettings.cpp3
-rw-r--r--xbmc/settings/Settings.cpp7
-rw-r--r--xbmc/storage/cdioSupport.cpp8
-rw-r--r--xbmc/utils/Archive.cpp213
-rw-r--r--xbmc/utils/Archive.h36
-rw-r--r--xbmc/utils/CPUInfo.cpp6
-rw-r--r--xbmc/utils/CPUInfo.h14
-rw-r--r--xbmc/utils/CharsetConverter.cpp7
-rw-r--r--xbmc/utils/CharsetDetection.h2
-rw-r--r--xbmc/utils/LangCodeExpander.cpp98
-rw-r--r--xbmc/utils/Makefile.in1
-rw-r--r--xbmc/utils/RegExp.cpp21
-rw-r--r--xbmc/utils/StreamDetails.h1
-rw-r--r--xbmc/utils/StringUtils.cpp2
-rw-r--r--xbmc/utils/Utf8Utils.cpp134
-rw-r--r--xbmc/utils/Utf8Utils.h35
-rw-r--r--xbmc/utils/XMLUtils.cpp4
-rw-r--r--xbmc/video/VideoDatabase.cpp448
-rw-r--r--xbmc/video/VideoDatabase.h7
-rw-r--r--xbmc/video/VideoInfoTag.cpp7
-rw-r--r--xbmc/video/dialogs/GUIDialogSubtitles.cpp7
-rw-r--r--xbmc/video/dialogs/GUIDialogVideoInfo.cpp629
-rw-r--r--xbmc/video/dialogs/GUIDialogVideoInfo.h17
-rw-r--r--xbmc/video/windows/GUIWindowVideoBase.cpp21
-rw-r--r--xbmc/video/windows/GUIWindowVideoNav.cpp566
-rw-r--r--xbmc/video/windows/GUIWindowVideoNav.h10
-rw-r--r--xbmc/win32/WIN32Util.cpp17
-rw-r--r--xbmc/win32/XBMC_PC.rc8
-rw-r--r--xbmc/windows/GUIMediaWindow.cpp17
311 files changed, 9392 insertions, 1594 deletions
diff --git a/Makefile.in b/Makefile.in
index 851da550b5..a14b3c584b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -519,7 +519,7 @@ BINDINGS+=xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPacket.h
libxbmc.so: $(OBJSXBMC) $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(MAINOBJS)
ifeq ($(findstring osx,@ARCH@), osx)
- $(SILENT_LD) $(CXX) $(LDFLAGS) -bundle -o $@ -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(OBJSXBMC) $(LIBS)
+ $(SILENT_LD) $(CXX) $(LDFLAGS) -bundle -o $@ -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(OBJSXBMC) $(LIBS) -read_only_relocs suppress
else
$(SILENT_LD) $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ $(MAINOBJS) -Wl,--start-group $(DYNOBJSXBMC) $(OBJSXBMC) -Wl,--end-group -Wl,--no-undefined $(NWAOBJSXBMC) $(LIBS)
endif
@@ -527,10 +527,10 @@ endif
xbmc/main/main.a: force
$(MAKE) -C xbmc/main
-xbmc.bin: $(OBJSXBMC) $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(MAINOBJS)
+xbmc.bin: $(OBJSXBMC) $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(MAINOBJS) xbmc/main/main.a
ifeq ($(findstring osx,@ARCH@), osx)
- $(SILENT_LD) $(CXX) $(LDFLAGS) -o xbmc.bin -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(OBJSXBMC) $(LIBS) -rdynamic
+ $(SILENT_LD) $(CXX) $(LDFLAGS) -o xbmc.bin xbmc/main/main.a -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(OBJSXBMC) $(LIBS) -rdynamic
else
$(SILENT_LD) $(CXX) $(CXXFLAGS) $(LDFLAGS) -o xbmc.bin $(MAINOBJS) -Wl,--start-group $(DYNOBJSXBMC) $(OBJSXBMC) -Wl,--end-group $(NWAOBJSXBMC) $(LIBS) -rdynamic
endif
diff --git a/XBMC.xcodeproj/project.pbxproj b/XBMC.xcodeproj/project.pbxproj
index 90f4b16506..58581dad96 100644
--- a/XBMC.xcodeproj/project.pbxproj
+++ b/XBMC.xcodeproj/project.pbxproj
@@ -429,6 +429,9 @@
DF00492D162DAEA200A971AD /* PVROperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF00492B162DAEA200A971AD /* PVROperations.cpp */; };
DF07252E168734D7008DCAAD /* karaokevideobackground.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF07252C168734D7008DCAAD /* karaokevideobackground.cpp */; };
DF072534168734ED008DCAAD /* FFmpegVideoDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF072532168734ED008DCAAD /* FFmpegVideoDecoder.cpp */; };
+ DF0ABB73183A94A30018445D /* Utf8Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF0ABB71183A94A30018445D /* Utf8Utils.cpp */; };
+ DF0ABB74183A94A30018445D /* Utf8Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF0ABB71183A94A30018445D /* Utf8Utils.cpp */; };
+ DF0ABB75183A94A30018445D /* Utf8Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF0ABB71183A94A30018445D /* Utf8Utils.cpp */; };
DF0DF15C13A3ADA7008ED511 /* NFSDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF0DF15913A3ADA7008ED511 /* NFSDirectory.cpp */; };
DF2345E115FA639500A934F6 /* UPnP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2345D915FA639500A934F6 /* UPnP.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/lib/libUPnP/Platinum/Source/Core -I$SRCROOT/lib/libUPnP/Platinum/Source/Platinum -I$SRCROOT/lib/libUPnP/Platinum/Source/Devices/MediaConnect -I$SRCROOT/lib/libUPnP/Platinum/Source/Devices/MediaRenderer -I$SRCROOT/lib/libUPnP/Platinum/Source/Devices/MediaServer -I$SRCROOT/lib/libUPnP/Platinum/Source/Extras -I$SRCROOT/lib/libUPnP/Neptune/Source/System/Posix -I$SRCROOT/lib/libUPnP/Neptune/Source/Core"; }; };
DF2345E215FA639500A934F6 /* UPnPInternal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2345DB15FA639500A934F6 /* UPnPInternal.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/lib/libUPnP/Platinum/Source/Core -I$SRCROOT/lib/libUPnP/Platinum/Source/Platinum -I$SRCROOT/lib/libUPnP/Platinum/Source/Devices/MediaConnect -I$SRCROOT/lib/libUPnP/Platinum/Source/Devices/MediaRenderer -I$SRCROOT/lib/libUPnP/Platinum/Source/Devices/MediaServer -I$SRCROOT/lib/libUPnP/Platinum/Source/Extras -I$SRCROOT/lib/libUPnP/Neptune/Source/System/Posix -I$SRCROOT/lib/libUPnP/Neptune/Source/Core"; }; };
@@ -4014,6 +4017,8 @@
DF07252D168734D7008DCAAD /* karaokevideobackground.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = karaokevideobackground.h; sourceTree = "<group>"; };
DF072532168734ED008DCAAD /* FFmpegVideoDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FFmpegVideoDecoder.cpp; sourceTree = "<group>"; };
DF072533168734ED008DCAAD /* FFmpegVideoDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FFmpegVideoDecoder.h; sourceTree = "<group>"; };
+ DF0ABB71183A94A30018445D /* Utf8Utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Utf8Utils.cpp; sourceTree = "<group>"; };
+ DF0ABB72183A94A30018445D /* Utf8Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utf8Utils.h; sourceTree = "<group>"; };
DF0DF15913A3ADA7008ED511 /* NFSDirectory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NFSDirectory.cpp; sourceTree = "<group>"; };
DF0DF15A13A3ADA7008ED511 /* NFSDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NFSDirectory.h; sourceTree = "<group>"; };
DF1ACFD115FCE50700E10810 /* AddonModuleXbmc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddonModuleXbmc.cpp; sourceTree = "<group>"; };
@@ -8797,6 +8802,8 @@
18B7C8ED12942613009E7A26 /* URIUtils.h */,
36A9466815CF1FED00727135 /* UrlOptions.cpp */,
36A9466915CF1FED00727135 /* UrlOptions.h */,
+ DF0ABB71183A94A30018445D /* Utf8Utils.cpp */,
+ DF0ABB72183A94A30018445D /* Utf8Utils.h */,
7CF1FB09123B1AF000B2CBCB /* Variant.cpp */,
7CF1FB0A123B1AF000B2CBCB /* Variant.h */,
E38E1E8D0D25F9FD00618676 /* Weather.cpp */,
@@ -10733,6 +10740,7 @@
7C14099E183224B8009F9411 /* SettingSection.cpp in Sources */,
7C1409A1183224B8009F9411 /* SettingsManager.cpp in Sources */,
7C1409A4183224B8009F9411 /* SettingUpdate.cpp in Sources */,
+ DF0ABB73183A94A30018445D /* Utf8Utils.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -11774,6 +11782,7 @@
7C1409A0183224B8009F9411 /* SettingSection.cpp in Sources */,
7C1409A3183224B8009F9411 /* SettingsManager.cpp in Sources */,
7C1409A6183224B8009F9411 /* SettingUpdate.cpp in Sources */,
+ DF0ABB75183A94A30018445D /* Utf8Utils.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -12817,6 +12826,7 @@
7C14099F183224B8009F9411 /* SettingSection.cpp in Sources */,
7C1409A2183224B8009F9411 /* SettingsManager.cpp in Sources */,
7C1409A5183224B8009F9411 /* SettingUpdate.cpp in Sources */,
+ DF0ABB74183A94A30018445D /* Utf8Utils.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/addons/repository.xbmc.org/addon.xml b/addons/repository.xbmc.org/addon.xml
index 65ed04cb36..d35c429a96 100644
--- a/addons/repository.xbmc.org/addon.xml
+++ b/addons/repository.xbmc.org/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="repository.xbmc.org"
name="XBMC.org Add-ons"
- version="2.1.12"
+ version="2.1.13"
provider-name="Team XBMC">
<requires>
<import addon="xbmc.addon" version="12.0.0"/>
diff --git a/addons/screensaver.rsxs.euphoria/addon.xml b/addons/screensaver.rsxs.euphoria/addon.xml
index bc5ed12d1d..b83fe9d9ba 100644
--- a/addons/screensaver.rsxs.euphoria/addon.xml
+++ b/addons/screensaver.rsxs.euphoria/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="screensaver.rsxs.euphoria"
- version="1.0.8"
+ version="1.0.9"
name="Euphoria"
provider-name="mogumbo, Team XBMC">
<requires>
diff --git a/addons/screensaver.rsxs.plasma/addon.xml b/addons/screensaver.rsxs.plasma/addon.xml
index 2435a12bec..4559c70995 100644
--- a/addons/screensaver.rsxs.plasma/addon.xml
+++ b/addons/screensaver.rsxs.plasma/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="screensaver.rsxs.plasma"
- version="1.0.8"
+ version="1.0.9"
name="Plasma"
provider-name="mogumbo, Team XBMC">
<requires>
diff --git a/addons/screensaver.rsxs.solarwinds/addon.xml b/addons/screensaver.rsxs.solarwinds/addon.xml
index 586f916551..91d42c1e3e 100644
--- a/addons/screensaver.rsxs.solarwinds/addon.xml
+++ b/addons/screensaver.rsxs.solarwinds/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="screensaver.rsxs.solarwinds"
- version="1.0.8"
+ version="1.0.9"
name="Solarwinds"
provider-name="mogumbo, Team XBMC">
<requires>
diff --git a/addons/screensaver.xbmc.builtin.black/addon.xml b/addons/screensaver.xbmc.builtin.black/addon.xml
index d87f8b3232..972352cdf2 100644
--- a/addons/screensaver.xbmc.builtin.black/addon.xml
+++ b/addons/screensaver.xbmc.builtin.black/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="screensaver.xbmc.builtin.black"
name="Black"
- version="1.0.8"
+ version="1.0.9"
provider-name="Team XBMC">
<extension point="xbmc.ui.screensaver" library=""/>
<extension point="xbmc.addon.metadata">
diff --git a/addons/screensaver.xbmc.builtin.dim/addon.xml b/addons/screensaver.xbmc.builtin.dim/addon.xml
index 6df04c5c37..95b84fd2dc 100644
--- a/addons/screensaver.xbmc.builtin.dim/addon.xml
+++ b/addons/screensaver.xbmc.builtin.dim/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="screensaver.xbmc.builtin.dim"
name="Dim"
- version="1.0.8"
+ version="1.0.9"
provider-name="Team XBMC">
<extension point="xbmc.ui.screensaver" library=""/>
<extension point="xbmc.addon.metadata">
diff --git a/addons/skin.confluence/720p/DialogSubtitles.xml b/addons/skin.confluence/720p/DialogSubtitles.xml
index e0c4da5340..96f0bf0705 100644
--- a/addons/skin.confluence/720p/DialogSubtitles.xml
+++ b/addons/skin.confluence/720p/DialogSubtitles.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
<window type="dialog">
<coordinates>
<system>1</system>
@@ -6,10 +7,9 @@
</coordinates>
<controls>
<control type="group" id="250">
-<!-- <animation effect="slide" start="900,0" end="0,0" time="500" delay="800" tween="quadratic" easing="out">WindowOpen</animation> -->
<animation effect="slide" start="0,0" end="900,0" time="500" tween="quadratic" easing="out">WindowClose</animation>
<animation type="Conditional" condition="Control.HasFocus(150)" reversible="true">
- <effect type="slide" end="-250,0" time="400" />
+ <effect type="slide" end="-250,0" time="400"/>
</animation>
<control type="button" id="8999">
<description>Fake button for mouse control</description>
@@ -110,7 +110,6 @@
<texture>separator.png</texture>
</control>
</control>
- <!-- ** Required ** Do not change <id>or<type>-->
<control type="group">
<control type="list" id="120">
<left>50</left>
@@ -134,10 +133,10 @@
</control>
<control type="image">
<left>5</left>
- <top>11</top>
+ <top>5</top>
<width>26</width>
- <height>17</height>
- <texture>Subtitles/flags/$INFO[ListItem.Thumb].gif</texture>
+ <height>26</height>
+ <texture>Subtitles/flags/$INFO[ListItem.Thumb].png</texture>
</control>
<control type="label">
<left>40</left>
@@ -205,10 +204,10 @@
</control>
<control type="image">
<left>5</left>
- <top>11</top>
+ <top>5</top>
<width>26</width>
- <height>17</height>
- <texture>Subtitles/flags/$INFO[ListItem.Thumb].gif</texture>
+ <height>26</height>
+ <texture>Subtitles/flags/$INFO[ListItem.Thumb].png</texture>
</control>
<control type="label">
<left>40</left>
diff --git a/addons/skin.confluence/720p/DialogVideoInfo.xml b/addons/skin.confluence/720p/DialogVideoInfo.xml
index 2f19e82820..5a77043e32 100644
--- a/addons/skin.confluence/720p/DialogVideoInfo.xml
+++ b/addons/skin.confluence/720p/DialogVideoInfo.xml
@@ -2,6 +2,7 @@
<window>
<defaultcontrol always="true">8</defaultcontrol>
<allowoverlay>no</allowoverlay>
+ <onload condition="Skin.HasSetting(ActivateTvTunes) + System.HasAddon(script.tvtunes)">XBMC.RunScript(script.tvtunes,backend=True)</onload>
<controls>
<control type="group">
<visible>!Window.IsVisible(FileBrowser)</visible>
@@ -986,7 +987,7 @@
<include>ButtonInfoDialogsCommonValues</include>
<label>31127</label>
<onclick>XBMC.RunScript(script.tvtunes,mode=solo&amp;tvpath=$INFO[ListItem.FilenameAndPath]&amp;tvname=$INFO[ListItem.TVShowTitle])</onclick>
- <visible>Skin.HasSetting(ActivateTvTunes) + System.HasAddon(script.tvtunes) + Container.Content(TVShows)</visible>
+ <visible>Skin.HasSetting(ActivateTvTunes) + System.HasAddon(script.tvtunes) + IsEmpty(Window(movieinformation).Property("TvTunes_HideVideoInfoButton")) + [Container.Content(TVShows) | Container.Content(Movies)]</visible>
</control>
</control>
</control>
diff --git a/addons/skin.confluence/720p/MyVideoNav.xml b/addons/skin.confluence/720p/MyVideoNav.xml
index 35e624e6b0..e0b04f5823 100644
--- a/addons/skin.confluence/720p/MyVideoNav.xml
+++ b/addons/skin.confluence/720p/MyVideoNav.xml
@@ -4,7 +4,7 @@
<allowoverlay>no</allowoverlay>
<views>50,51,500,550,551,560,501,508,504,503,515,505,511</views>
<onload condition="!Skin.HasSetting(FirstTimeRun)">ActivateWindow(1112)</onload>
- <onload condition="Skin.HasSetting(ActivateTvTunes) + System.HasAddon(script.tvtunes)">XBMC.RunScript(script.tvtunes,backend=True&amp;loop=False)</onload>
+ <onload condition="Skin.HasSetting(ActivateTvTunes) + System.HasAddon(script.tvtunes)">XBMC.RunScript(script.tvtunes,backend=True)</onload>
<controls>
<include>CommonBackground</include>
<include>ContentPanelBackgrounds</include>
diff --git a/addons/skin.confluence/720p/MyWeather.xml b/addons/skin.confluence/720p/MyWeather.xml
index f776c4403f..5df304794b 100644
--- a/addons/skin.confluence/720p/MyWeather.xml
+++ b/addons/skin.confluence/720p/MyWeather.xml
@@ -100,7 +100,7 @@
</control>
<control type="image">
<left>70</left>
- <top>40</top>
+ <top>30</top>
<width>360</width>
<height>90</height>
<aspectratio align="center" aligny="center">keep</aspectratio>
@@ -109,7 +109,7 @@
<control type="label">
<description>Provider Text</description>
<left>20</left>
- <top>50</top>
+ <top>60</top>
<width>460</width>
<height>35</height>
<font>font12</font>
@@ -122,7 +122,6 @@
<visible>IsEmpty(Window.Property(WeatherProviderLogo))</visible>
</control>
<control type="group">
- <animation effect="slide" start="0,0" end="0,30" condition="!IsEmpty(Window.Property(WeatherProviderLogo))">Conditional</animation>
<control type="label">
<description>weather location label</description>
<left>20</left>
@@ -151,7 +150,7 @@
<control type="label">
<description>current temp Value</description>
<right>195</right>
- <top>175</top>
+ <top>185</top>
<width>180</width>
<height>40</height>
<font>WeatherTemp</font>
@@ -163,8 +162,8 @@
</control>
<control type="label">
<description>current temp Value Units</description>
- <left>190</left>
- <top>185</top>
+ <left>200</left>
+ <top>195</top>
<width>100</width>
<height>40</height>
<font>font16</font>
@@ -176,17 +175,17 @@
</control>
<control type="image">
<description>current weather icon</description>
- <left>230</left>
- <top>120</top>
- <width>230</width>
- <height>230</height>
+ <left>260</left>
+ <top>145</top>
+ <width>200</width>
+ <height>200</height>
<info>Window.Property(Current.ConditionIcon)</info>
<aspectratio>keep</aspectratio>
</control>
<control type="label">
<description>current condition label</description>
<left>20</left>
- <top>320</top>
+ <top>350</top>
<width>460</width>
<height>30</height>
<info>Window.Property(Current.Condition)</info>
diff --git a/addons/skin.confluence/720p/SettingsCategory.xml b/addons/skin.confluence/720p/SettingsCategory.xml
index 138dff29f2..570f0526d9 100644
--- a/addons/skin.confluence/720p/SettingsCategory.xml
+++ b/addons/skin.confluence/720p/SettingsCategory.xml
@@ -82,7 +82,7 @@
<top>562</top>
<height>60</height>
<width>260</width>
- <label>10037</label>>
+ <label>10037</label>
<textoffsetx>20</textoffsetx>
<textoffsety>28</textoffsety>
<align>right</align>
diff --git a/addons/skin.confluence/720p/ViewsPVR.xml b/addons/skin.confluence/720p/ViewsPVR.xml
index 871b160c78..0ee80e86d3 100644
--- a/addons/skin.confluence/720p/ViewsPVR.xml
+++ b/addons/skin.confluence/720p/ViewsPVR.xml
@@ -845,6 +845,15 @@
<description>TV Guide Timeline</description>
<visible>Control.IsVisible(10)</visible>
<include>VisibleFadeEffect</include>
+ <control type="image">
+ <description>separator image</description>
+ <left>80</left>
+ <top>111</top>
+ <width>1100</width>
+ <height>1</height>
+ <colordiffuse>88FFFFFF</colordiffuse>
+ <texture>separator2.png</texture>
+ </control>
<control type="epggrid" id="10">
<description>EPG Grid</description>
<left>80</left>
@@ -855,19 +864,12 @@
<scrolltime>350</scrolltime>
<timeblocks>40</timeblocks>
<rulerunit>6</rulerunit>
- <progresstexture border="5">PVR-EpgProgressIndicator.png</progresstexture>
+ <progresstexture border="0,48,18,14">PVR-EpgProgressIndicator.png</progresstexture>
<onleft>31</onleft>
<onright>31</onright>
<onup>10</onup>
<ondown>10</ondown>
<rulerlayout height="35" width="40">
- <control type="image" id="1">
- <width>40</width>
- <height>29</height>
- <left>0</left>
- <top>0</top>
- <texture border="5">button-nofocus.png</texture>
- </control>
<control type="label" id="2">
<left>10</left>
<top>0</top>
@@ -881,13 +883,13 @@
</control>
</rulerlayout>
<channellayout height="52" width="280">
- <animation effect="fade" start="110" time="200">UnFocus</animation>
- <control type="image" id="1">
+ <control type="image">
<left>0</left>
<top>0</top>
<width>270</width>
<height>52</height>
- <texture border="5">button-nofocus.png</texture>
+ <texture border="2">MenuItemNF.png</texture>
+ <include>VisibleFadeEffect</include>
</control>
<control type="label">
<left>5</left>
@@ -921,13 +923,23 @@
</control>
</channellayout>
<focusedchannellayout height="52" width="280">
- <animation effect="fade" start="110" time="200">OnFocus</animation>
- <control type="image" id="1">
+ <control type="image">
<left>0</left>
<top>0</top>
<width>270</width>
<height>52</height>
- <texture border="5">button-focus.png</texture>
+ <texture border="2">MenuItemNF.png</texture>
+ <visible>!Control.HasFocus(10)</visible>
+ <include>VisibleFadeEffect</include>
+ </control>
+ <control type="image">
+ <left>0</left>
+ <top>0</top>
+ <width>270</width>
+ <height>52</height>
+ <texture border="2">MenuItemFO.png</texture>
+ <visible>Control.HasFocus(10)</visible>
+ <include>VisibleFadeEffect</include>
</control>
<control type="label">
<left>5</left>
diff --git a/addons/skin.confluence/addon.xml b/addons/skin.confluence/addon.xml
index 8178c04652..094279fcf9 100644
--- a/addons/skin.confluence/addon.xml
+++ b/addons/skin.confluence/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="skin.confluence"
- version="2.2.2"
+ version="2.2.3"
name="Confluence"
provider-name="Jezz_X, Team XBMC">
<requires>
diff --git a/addons/skin.confluence/changelog.txt b/addons/skin.confluence/changelog.txt
index 718bf4d573..e20d032558 100644
--- a/addons/skin.confluence/changelog.txt
+++ b/addons/skin.confluence/changelog.txt
@@ -1,3 +1,7 @@
+[B]2.2.3[/B]
+
+- Updated language files from Transifex
+
[B]2.2.2[/B]
- Updated language files from Transifex
diff --git a/addons/skin.confluence/language/Bulgarian/strings.po b/addons/skin.confluence/language/Bulgarian/strings.po
index fddd123708..412a7f4531 100644
--- a/addons/skin.confluence/language/Bulgarian/strings.po
+++ b/addons/skin.confluence/language/Bulgarian/strings.po
@@ -112,6 +112,10 @@ msgctxt "#31045"
msgid "REWIND"
msgstr "ПРЕВЪРТÐÐЕ ÐÐЗÐД"
+msgctxt "#31046"
+msgid "SEEKING"
+msgstr "Преход"
+
msgctxt "#31048"
msgid "Visualisation Presets"
msgstr "Шаблони за визуализациÑта"
@@ -222,7 +226,7 @@ msgstr "Ползвай за фон възпроизвежданото в момÐ
msgctxt "#31125"
msgid "Show Background \"Now Playing\" Visualisation"
-msgstr "Ползвай за фон възпроизвежданата в момента Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ "
+msgstr "Ползвай за фон възпроизвежданата в момента визуализациÑ"
msgctxt "#31126"
msgid "Play TV theme songs in video library (TvTunes add-on)"
@@ -264,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Видео OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "ИзобразÑвани наÑтройки"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Преки пътища"
@@ -468,6 +476,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Табът отлÑво обозначава наличието на меню, което е извън Ð²Ð¸Ð´Ð¸Ð¼Ð¸Ñ ÐµÐºÑ€Ð°Ð½, Ñъдържащо опции за текущата ÑекциÑ. За доÑтъп до него е необходим да Ñе придвижите налÑво, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰Ñ‚Ð° на диÑтанционното, клавиатурата или да поÑтавите курÑора на мишката над таба. [CR][CR]Кликнете върху \"Добре\" за да затворите този прозорец, който нÑма да Ñе поÑви повече."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Ðалични Ñа локални Ñубтитри"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Изберете потребителÑки профил,[CR]за да продължите"
diff --git a/addons/skin.confluence/language/Croatian/strings.po b/addons/skin.confluence/language/Croatian/strings.po
index 5edc15e982..8923df7811 100644
--- a/addons/skin.confluence/language/Croatian/strings.po
+++ b/addons/skin.confluence/language/Croatian/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "OSD videa"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Razina postavki"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "PreÄaci"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Ova kartica oznaÄava da postoji izbornik sa strane ovog prozora koji sadrži dodatne mogućnosti ovog odjeljka. Za pristup izborniku, idite lijevo daljinskim upravljaÄem ili tipkovnicom ili postavite pokazivaÄ miÅ¡a iznad kartice. [CR] [CR] Kliknite na \"U redu\" za zatvaranje ovog dijaloga. Neće se ponovno pojaviti."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Lokalni podnaslovi dostupni"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Odaberite svoj XBMC korisniÄki profil[CR]za prijavu i nastavak"
diff --git a/addons/skin.confluence/language/Dutch/strings.po b/addons/skin.confluence/language/Dutch/strings.po
index 6d34986056..33503029cc 100644
--- a/addons/skin.confluence/language/Dutch/strings.po
+++ b/addons/skin.confluence/language/Dutch/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Video-OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Instellingen niveau"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Snelkoppelingen"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Deze tab betekent dat er een menu met extra opties voor deze sectie aan de zijkant van het scherm beschikbaar is. Voor toegang tot het menu, navigeer naar links met de afstandsbediening of toetsenbord of ga met de muisaanwijzer naar de tab. [CR][CR]Klik \"Ok\" om het dialoogscherm te sluiten. Deze zal niet meer worden getoond. "
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Lokale ondertitels beschikbaar"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Selecteer uw XBMC-gebruikersprofiel[CR]om in te loggen"
diff --git a/addons/skin.confluence/language/French/strings.po b/addons/skin.confluence/language/French/strings.po
index 6b372acb69..f966b7b8e0 100644
--- a/addons/skin.confluence/language/French/strings.po
+++ b/addons/skin.confluence/language/French/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Menu à l'écran Vidéo"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Niveau de paramètres"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Raccourcis"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Cet onglet signale un menu en côté de fenêtre contenant des options supplémentaires pour cette section. Pour accéder à ce menu, appuyez sur la flèche de gauche sur votre télécommande ou votre clavier ou placez votre souris au dessus de l'onglet. [CR][CR]Cliquez sur \"Ok\" pour fermer cette fenêtre. Elle n’apparaîtra plus."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Sous-titres locaux disponibles"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Sélectionnez le profil d'utilisateur[CR]auquel vous connecter et continuer"
diff --git a/addons/skin.confluence/language/Greek/strings.po b/addons/skin.confluence/language/Greek/strings.po
index 50196a106a..424401a44b 100644
--- a/addons/skin.confluence/language/Greek/strings.po
+++ b/addons/skin.confluence/language/Greek/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Aπεικονίσεις οθόνης (OSD) Βίντεο"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Επίπεδο Ïυθμίσεων"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "ΣυντομεÏσεις"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "ΥπάÏχει ένα Î¼ÎµÎ½Î¿Ï ÏƒÏ„Î¿ πλάι του παÏαθÏÏου, με επιπλέον επιλογές. Για να το ανοίξετε πιέστε το αντίστοιχο πλήκτÏο κατεÏθυνσης ή μεταφέÏετε εκεί το ποντίκι σας.[CR][CR]Πιέστε 'Επιλογή' για να κλείσει αυτό το παÏάθυÏο. Δε θα εμφανιστεί ξανά."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Διαθέσιμοι υπότιτλοι τοπικά"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Επιλέξτε Ï€Ïοφίλ χÏήστη για το XBMC[CR]για να συνδεθείτε και να συνεχίσετε"
diff --git a/addons/skin.confluence/language/Hungarian/strings.po b/addons/skin.confluence/language/Hungarian/strings.po
index 3578c79e6d..f80595c0e2 100644
--- a/addons/skin.confluence/language/Hungarian/strings.po
+++ b/addons/skin.confluence/language/Hungarian/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Videó tálca"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Beállítás szint"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Parancsikonok"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Ez a fül azt jelzi hogy oldalt van egy menü, extra opciókkal az adott tartalomhoz. A menühöz hozzáférhetsz ha az egérmutatót a fül fölé viszed, vagy a bal nyilat megnyomod a távirányítón. [CR][CR]Nyomj \"OK\" gombot a szöveg bezárásához. Nem fog még egyszer megjelenni."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Helyi felirat elérhető"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Válaszd ki az XBMC felhasználói profilod[CR]a belépéshez"
diff --git a/addons/skin.confluence/language/Korean/strings.po b/addons/skin.confluence/language/Korean/strings.po
index 8bcc5f72d4..dfc44ef6f5 100644
--- a/addons/skin.confluence/language/Korean/strings.po
+++ b/addons/skin.confluence/language/Korean/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "비디오 OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "설정 수준"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "바로가기"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "ì´ íƒ­ì€ í˜„ìž¬ ì„¹ì…˜ì˜ ì¶”ê°€ 옵션메뉴가 화면 가장ìžë¦¬ì— 숨어 있다는 ê²ƒì„ ì˜ë¯¸í•©ë‹ˆë‹¤. ë©”ë‰´ì— ì ‘ê·¼í•˜ë ¤ë©´ 리모컨 ë˜ëŠ” 키보드로 왼쪽으로 ì´ë™í•˜ê±°ë‚˜ 탭 위로 마우스를 가져가세요. [CR] [CR]\"확ì¸\"ì„ ëˆ„ë¥´ë©´ 대화ìƒìžê°€ 닫히고 다시 표시ë˜ì§€ 않습니다."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "로컬 ìžë§‰ 있ìŒ"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "로그ì¸í•  XBMC ì‚¬ìš©ìž í”„ë¡œíŒŒì¼ì„[CR]ì„ íƒí•˜ê³  계ì†í•˜ì„¸ìš”"
diff --git a/addons/skin.confluence/language/Lithuanian/strings.po b/addons/skin.confluence/language/Lithuanian/strings.po
index 53ac217a10..266384af93 100644
--- a/addons/skin.confluence/language/Lithuanian/strings.po
+++ b/addons/skin.confluence/language/Lithuanian/strings.po
@@ -116,6 +116,10 @@ msgctxt "#31046"
msgid "SEEKING"
msgstr "PAIEÅ KA"
+msgctxt "#31048"
+msgid "Visualisation Presets"
+msgstr "Vizualizacijos profiliai"
+
msgctxt "#31049"
msgid "End Time"
msgstr "Pabaigos laikas"
@@ -168,6 +172,10 @@ msgctxt "#31103"
msgid "Show \"Paused\" in picture slide show"
msgstr "Rodyti \"Pauzė\" prezentacijos režime"
+msgctxt "#31104"
+msgid "Play Trailers in a window [COLOR=grey3](Video Information Dialogue Only)[/COLOR]"
+msgstr "Filmų anonsą rodyti lange [COLOR=grey3](Informacija tik apie video)[/COLOR]"
+
msgctxt "#31106"
msgid "Miscellaneous options"
msgstr "Įvairios opcijos"
@@ -204,6 +212,10 @@ msgctxt "#31117"
msgid "Show Recently added Videos"
msgstr "Rodyti neseniai patalpintus video"
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "Pagrindinis puslapis. Programos submeniu"
+
msgctxt "#31119"
msgid "Hide Background Fanart"
msgstr "SlÄ—pti Fanart informacijÄ…"
@@ -212,6 +224,10 @@ msgctxt "#31124"
msgid "Show Background \"Now Playing\" Video"
msgstr "Rodyti foninį \"Dabar atkuriama\" Video"
+msgctxt "#31125"
+msgid "Show Background \"Now Playing\" Visualisation"
+msgstr "Rodyti Fono \"Dabar atkuriama\" vizualizacijÄ…"
+
msgctxt "#31126"
msgid "Play TV theme songs in video library (TvTunes add-on)"
msgstr "Atkūri TV šou/serialų temų dainas vaizdo bibliotekoje (TvTunes priedas)"
@@ -224,10 +240,26 @@ msgctxt "#31128"
msgid "Lyrics"
msgstr "Dainų tekstai"
+msgctxt "#31129"
+msgid "Hide Fanart in full screen visualisation"
+msgstr "SlÄ—pti Fan Art visame ekrane vizualizacija"
+
msgctxt "#31132"
msgid "Lyrics Add-on"
msgstr "Dainų tekstų priedas"
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr "Pagrindinio tinklapio video submeniu"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "Pagrindinio tinklapio muzikos submeniu"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr "Pagrindinio tinklapio nuotraukų submeniu"
+
msgctxt "#31140"
msgid "Music OSD"
msgstr "Muzikos OSD"
@@ -236,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Video OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Parametrų lygis"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "EtiketÄ—s"
@@ -428,6 +464,10 @@ msgctxt "#31408"
msgid "[B]CONFIGURE ADD-ONS[/B][CR][CR]Manage your installed Add-ons · Browse for and install Add-ons from xbmc.org[CR]Modify Add-on settings"
msgstr "[B][COLOR=blue]PRIEDŲ PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR]Nustatyti priedų parametrų valdymą · Nustatyti diegimą iš xbmc.org · Nustatyti priedų pakeitimą"
+msgctxt "#31409"
+msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
+msgstr "[B]KONFIGŪRUOTI TV NUSTATYMUS[/B][CR][CR]Pakeisti viso ekrano info · Tvarkyti EPG duomenų parametrus"
+
msgctxt "#31410"
msgid "[B]CONFIGURE SERVICE SETTINGS[/B][CR][CR]Setup control of XBMC via UPnP and HTTP · Configure file sharing[CR]Enable Zeroconf · Configure AirPlay"
msgstr "[B][COLOR=blue]TINKLO PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR]XBMC sąrankos valdymas per UPnP ar HTTP · Konfigūruoti bendrą failų naudojimą"
@@ -436,6 +476,14 @@ msgctxt "#31411"
msgid "First run help...."
msgstr "Pirmo paleidimo pagalba..."
+msgctxt "#31412"
+msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
+msgstr "Šis skirtukas reiškia, kad yra išjungtas šio lango meniu, kuriame yra papildomos galimybės šio skyrio pusėje. Norėdami atidaryti menių, pereikite į kairę naudojant nuotolinio valdymo pultą arba klaviatūrą arba pažymėkite pele skirtuką. [Cr][Cr] Spauskite \"Gerai\", šio dialogo uždarymui. Daugiau tai nebus rodoma."
+
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Prieinami lokaliniai subtitrai"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Pasirinkite XBMC vartotojo profilį[CR]įeikitei į sistemą ir tęskite."
diff --git a/addons/skin.confluence/language/Polish/strings.po b/addons/skin.confluence/language/Polish/strings.po
index 858a91d324..5a92df4526 100644
--- a/addons/skin.confluence/language/Polish/strings.po
+++ b/addons/skin.confluence/language/Polish/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Wideo - OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Poziom ustawień"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Skróty"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Ta zakładka oznacza iż za krawędzią tego okna jest menu, które zawiera dodatkowe opcje dla tej sekcji. Aby dostać się do tego menu, skieruj się w lewo przy pomocy pilota, klawiszy lub umieść myszkę nad zakładką.[CR][CR]Kliknij \"OK\" by zamknąć okno. Nie pojawi się ono ponownie."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Znaleziono napisy na dysku"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Wybierz profil użytkownika"
diff --git a/addons/skin.confluence/language/Portuguese (Brazil)/strings.po b/addons/skin.confluence/language/Portuguese (Brazil)/strings.po
index 7e7353db5e..4134b5a582 100644
--- a/addons/skin.confluence/language/Portuguese (Brazil)/strings.po
+++ b/addons/skin.confluence/language/Portuguese (Brazil)/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "OSD de Video"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Níveis de Ajustes"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Atalhos"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Esta guia significa que existe um menu lateral que contém opções adicionais para esta seção. Para acessar o menu, navegue para a esquerda com o controle remoto ou teclado ou coloque o ponteiro do mouse sobre a aba. [CR][CR]Clique em \"Ok\" para fechar este diálogo. Ele não vai aparecer novamente."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Legenda local disponível"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Selecione seu Perfil de usuário XBMC[CR]para conectar e continue"
diff --git a/addons/skin.confluence/language/Portuguese/strings.po b/addons/skin.confluence/language/Portuguese/strings.po
index d90a6156e3..81196dd8db 100644
--- a/addons/skin.confluence/language/Portuguese/strings.po
+++ b/addons/skin.confluence/language/Portuguese/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Controlos de Vídeo"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Nível das Definições"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Atalhos"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Este tabulador indica que existe um menu lateral, nesta janela, que contém mais opções para esta secção. Para aceder ao menu, navegue para a esquerda com o controlo remoto ou teclado, ou então coloque o rato sobre a tabulação. [CR][CR]Clique \"OK\" para fechar esta caixa, que não irá ser exibida novamente."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Legenda local disponível"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Escolha o seu perfil de utilizador do XBMC[CR]para iniciar sessão e prosseguir"
diff --git a/addons/skin.confluence/language/Russian/strings.po b/addons/skin.confluence/language/Russian/strings.po
index e06a5bfa87..f480418690 100644
--- a/addons/skin.confluence/language/Russian/strings.po
+++ b/addons/skin.confluence/language/Russian/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Экранное меню видео"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Уровень наÑтроек"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Ярлыки"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Эта вкладка означает, что Ñбоку окна еÑÑ‚ÑŒ меню Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼Ð¸ наÑтройками. Чтобы получить доÑтуп к меню, перейдите влево при помощи пульта ДУ или клавиатуры либо помеÑтите курÑор мыши над вкладкой. [CR][CR]Ðажмите ОК, чтобы закрыть Ñтот диалог. Он больше не будет отображатьÑÑ."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Субтитры доÑтупны"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Выберите профиль Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ XBMC,[CR]чтобы войти в ÑиÑтему"
diff --git a/addons/skin.confluence/language/Spanish/strings.po b/addons/skin.confluence/language/Spanish/strings.po
index 7c412f1d27..497f333f25 100644
--- a/addons/skin.confluence/language/Spanish/strings.po
+++ b/addons/skin.confluence/language/Spanish/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "OSD de vídeo"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Nivel de ajustes"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Accesos directos"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Esta pestaña significa que hay un menú a un lado de esta ventana que contiene opciones adicionales para esta sección. Para acceder al menú, desplácese a la izquierda con el mando a distancia o el teclado o sitúe el puntero del ratón sobre la pestaña. [CR][CR] Haga clic en \"Aceptar\" para cerrar este cuadro de diálogo. No volverá a aparecer."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Subtítulo local disponible"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Seleccione su perfil de usuario de XBMC[CR]para ingresar y continuar"
diff --git a/addons/skin.confluence/language/Tajik/strings.po b/addons/skin.confluence/language/Tajik/strings.po
index 7d21f1780b..6647b33baf 100644
--- a/addons/skin.confluence/language/Tajik/strings.po
+++ b/addons/skin.confluence/language/Tajik/strings.po
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Видеои OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Сатҳи танзимот"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Миёнбурҳо"
@@ -470,12 +474,16 @@ msgstr "[B]ТÐÐЗИМОТИ ПÐРÐМЕТРҲОИ ХИДМÐТҲО[/B][CR][CR
msgctxt "#31411"
msgid "First run help...."
-msgstr "Иҷрокунии аввалини кӯмак...."
+msgstr "Кӯмаки оғози кор...."
msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Ин варақа маънои онро дорад, ки дар паҳлӯи равзана барои ин қиÑмат меню бо имконоти иловагӣ вуҷуд дорад. Барои пайдо кардани даÑтраÑÓ£ ба меню, ба тарафи чап бо иÑтифодаи пулти идоракунии дурдаÑÑ‚ Ñ‘ клавиатура гузаред, Ñ‘ курÑори мушро ба болои он варақа монед. [CR][CR]Барои пӯшидани ин равзанаи гуфтугӯ тугмаи ОК-ро зер кунед, то ки он дигар намоиш дода нашавад."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Зерунвонҳои маҳаллӣ даÑтраÑанд"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Барои ворид шудан ва идома додан[CR]профили корбари XBMC-ро интихоб кунед"
@@ -534,7 +542,7 @@ msgstr "Пешгӯии обу ҳаво барои 10 рӯз"
msgctxt "#31905"
msgid "Forecast"
-msgstr "Пешгуии обу ҳаво"
+msgstr "Пешгӯии обу ҳаво"
msgctxt "#31908"
msgid "Chance of Precipitation"
diff --git a/addons/skin.confluence/language/Turkish/strings.po b/addons/skin.confluence/language/Turkish/strings.po
index 49f5dce415..4a0b759b72 100644
--- a/addons/skin.confluence/language/Turkish/strings.po
+++ b/addons/skin.confluence/language/Turkish/strings.po
@@ -90,7 +90,7 @@ msgstr "Bilgi"
msgctxt "#31039"
msgid "Actions"
-msgstr "Hareketler"
+msgstr "Eylemler"
msgctxt "#31040"
msgid "Now Playing"
@@ -268,6 +268,10 @@ msgctxt "#31141"
msgid "Video OSD"
msgstr "Video OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Ayarlar düzeyi"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Kısayollar"
@@ -476,6 +480,10 @@ msgctxt "#31412"
msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
msgstr "Bu sekme bu bölüm için ekstra özellikleri içeren bir menüye, bu pencerenin kenarından ulaşılabileceğini belirtir. Menüye ulaşmak için, uzaktan kumanda, klavye yada fare imlecini sekmenin sol tarafına götürünüz. [CR][CR]Pencereyi kapatmak için \"Ok\" tuşuna basınız. Bu bildiri bir daha çıkmayacaktır."
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Yerel altyazı mevcut"
+
msgctxt "#31421"
msgid "Select your XBMC user Profile[CR]to login and continue"
msgstr "Oturum açıp devam etmek için[CR]XBMC kullanıcı profilinizi seçin"
diff --git a/addons/skin.confluence/media/PVR-EpgProgressIndicator.png b/addons/skin.confluence/media/PVR-EpgProgressIndicator.png
index 698182434f..83b465d0d6 100644
--- a/addons/skin.confluence/media/PVR-EpgProgressIndicator.png
+++ b/addons/skin.confluence/media/PVR-EpgProgressIndicator.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/-.gif b/addons/skin.confluence/media/Subtitles/flags/-.gif
deleted file mode 100644
index a14bb5af20..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/-.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/-.png b/addons/skin.confluence/media/Subtitles/flags/-.png
new file mode 100644
index 0000000000..db27f9d8dc
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/-.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/LICENSE.txt b/addons/skin.confluence/media/Subtitles/flags/LICENSE.txt
new file mode 100644
index 0000000000..fbb98f8701
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/LICENSE.txt
@@ -0,0 +1,16 @@
+Copyright (c) 2013 Go Squared Ltd. http://www.gosquared.com/
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+and associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
+EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/addons/skin.confluence/media/Subtitles/flags/ar.gif b/addons/skin.confluence/media/Subtitles/flags/ar.gif
deleted file mode 100644
index 55463dedb4..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/ar.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ar.png b/addons/skin.confluence/media/Subtitles/flags/ar.png
new file mode 100644
index 0000000000..b3053ef793
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/ar.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/bg.gif b/addons/skin.confluence/media/Subtitles/flags/bg.gif
deleted file mode 100644
index a620896acd..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/bg.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/bg.png b/addons/skin.confluence/media/Subtitles/flags/bg.png
new file mode 100644
index 0000000000..6bdf9b1348
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/bg.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/bs.gif b/addons/skin.confluence/media/Subtitles/flags/bs.gif
deleted file mode 100644
index 2969ce8f17..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/bs.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/bs.png b/addons/skin.confluence/media/Subtitles/flags/bs.png
new file mode 100644
index 0000000000..2517602740
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/bs.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ca.gif b/addons/skin.confluence/media/Subtitles/flags/ca.gif
deleted file mode 100644
index 8d4124b562..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/ca.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ca.png b/addons/skin.confluence/media/Subtitles/flags/ca.png
new file mode 100644
index 0000000000..83deb5dd6b
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/ca.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/cs.gif b/addons/skin.confluence/media/Subtitles/flags/cs.gif
deleted file mode 100644
index 334c528da8..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/cs.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/cs.png b/addons/skin.confluence/media/Subtitles/flags/cs.png
new file mode 100644
index 0000000000..7a45980465
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/cs.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/da.gif b/addons/skin.confluence/media/Subtitles/flags/da.gif
deleted file mode 100644
index 1d200354c4..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/da.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/da.png b/addons/skin.confluence/media/Subtitles/flags/da.png
new file mode 100644
index 0000000000..9cb5c29d3a
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/da.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/de.gif b/addons/skin.confluence/media/Subtitles/flags/de.gif
deleted file mode 100644
index 4a7cff4227..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/de.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/de.png b/addons/skin.confluence/media/Subtitles/flags/de.png
new file mode 100644
index 0000000000..4e84b6e1b7
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/de.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/el.gif b/addons/skin.confluence/media/Subtitles/flags/el.gif
deleted file mode 100644
index b20ce2101d..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/el.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/el.png b/addons/skin.confluence/media/Subtitles/flags/el.png
new file mode 100644
index 0000000000..0f202d5fe4
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/el.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/en.gif b/addons/skin.confluence/media/Subtitles/flags/en.gif
deleted file mode 100644
index b44b08f69d..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/en.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/en.png b/addons/skin.confluence/media/Subtitles/flags/en.png
new file mode 100644
index 0000000000..531836ec05
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/en.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/es.gif b/addons/skin.confluence/media/Subtitles/flags/es.gif
deleted file mode 100644
index 83c3019c25..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/es.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/es.png b/addons/skin.confluence/media/Subtitles/flags/es.png
new file mode 100644
index 0000000000..65814c3e39
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/es.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/et.gif b/addons/skin.confluence/media/Subtitles/flags/et.gif
deleted file mode 100644
index 95c3e98f20..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/et.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/et.png b/addons/skin.confluence/media/Subtitles/flags/et.png
new file mode 100644
index 0000000000..41dc640b3e
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/et.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fa.gif b/addons/skin.confluence/media/Subtitles/flags/fa.gif
deleted file mode 100644
index f1e66af735..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/fa.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fa.png b/addons/skin.confluence/media/Subtitles/flags/fa.png
new file mode 100644
index 0000000000..3782e494a6
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/fa.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fi.gif b/addons/skin.confluence/media/Subtitles/flags/fi.gif
deleted file mode 100644
index e3d9574d04..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/fi.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fi.png b/addons/skin.confluence/media/Subtitles/flags/fi.png
new file mode 100644
index 0000000000..e665307cc3
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/fi.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fo.gif b/addons/skin.confluence/media/Subtitles/flags/fo.gif
deleted file mode 100644
index 3301bc26cf..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/fo.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fo.png b/addons/skin.confluence/media/Subtitles/flags/fo.png
new file mode 100644
index 0000000000..30e2338c6e
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/fo.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fr.gif b/addons/skin.confluence/media/Subtitles/flags/fr.gif
deleted file mode 100644
index 75a234551e..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/fr.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fr.png b/addons/skin.confluence/media/Subtitles/flags/fr.png
new file mode 100644
index 0000000000..00c2b429da
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/fr.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/gl.gif b/addons/skin.confluence/media/Subtitles/flags/gl.gif
deleted file mode 100644
index 686983faed..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/gl.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/gl.png b/addons/skin.confluence/media/Subtitles/flags/gl.png
new file mode 100644
index 0000000000..874e0caebd
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/gl.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/he.gif b/addons/skin.confluence/media/Subtitles/flags/he.gif
deleted file mode 100644
index c6dc6b578a..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/he.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/he.png b/addons/skin.confluence/media/Subtitles/flags/he.png
new file mode 100644
index 0000000000..1edb473c5b
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/he.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hi.gif b/addons/skin.confluence/media/Subtitles/flags/hi.gif
deleted file mode 100644
index a1c16ee41d..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/hi.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hi.png b/addons/skin.confluence/media/Subtitles/flags/hi.png
new file mode 100644
index 0000000000..4614f309ec
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/hi.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hr.gif b/addons/skin.confluence/media/Subtitles/flags/hr.gif
deleted file mode 100644
index b4cc470042..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/hr.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hr.png b/addons/skin.confluence/media/Subtitles/flags/hr.png
new file mode 100644
index 0000000000..35da777f8b
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/hr.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hu.gif b/addons/skin.confluence/media/Subtitles/flags/hu.gif
deleted file mode 100644
index 78a5724dd5..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/hu.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hu.png b/addons/skin.confluence/media/Subtitles/flags/hu.png
new file mode 100644
index 0000000000..1a03bc79aa
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/hu.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hy.gif b/addons/skin.confluence/media/Subtitles/flags/hy.gif
deleted file mode 100644
index 1ba4423aa3..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/hy.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hy.png b/addons/skin.confluence/media/Subtitles/flags/hy.png
new file mode 100644
index 0000000000..3a6e11b65c
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/hy.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/id.gif b/addons/skin.confluence/media/Subtitles/flags/id.gif
deleted file mode 100644
index 8b288fa2ae..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/id.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/id.png b/addons/skin.confluence/media/Subtitles/flags/id.png
new file mode 100644
index 0000000000..05fb3d7633
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/id.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/is.gif b/addons/skin.confluence/media/Subtitles/flags/is.gif
deleted file mode 100644
index 23e9c6f69f..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/is.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/is.png b/addons/skin.confluence/media/Subtitles/flags/is.png
new file mode 100644
index 0000000000..a9966426e9
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/is.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/it.gif b/addons/skin.confluence/media/Subtitles/flags/it.gif
deleted file mode 100644
index a6c51739f7..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/it.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/it.png b/addons/skin.confluence/media/Subtitles/flags/it.png
new file mode 100644
index 0000000000..26071b13ea
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/it.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ja.gif b/addons/skin.confluence/media/Subtitles/flags/ja.gif
deleted file mode 100644
index b645bc8d8d..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/ja.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ja.png b/addons/skin.confluence/media/Subtitles/flags/ja.png
new file mode 100644
index 0000000000..69cca05ee8
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/ja.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/kk.gif b/addons/skin.confluence/media/Subtitles/flags/kk.gif
deleted file mode 100644
index 8ff39eb698..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/kk.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/kk.png b/addons/skin.confluence/media/Subtitles/flags/kk.png
new file mode 100644
index 0000000000..c71047be53
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/kk.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ko.gif b/addons/skin.confluence/media/Subtitles/flags/ko.gif
deleted file mode 100644
index fb33719cd0..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/ko.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ko.png b/addons/skin.confluence/media/Subtitles/flags/ko.png
new file mode 100644
index 0000000000..2a3a7ee7ae
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/ko.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/lb.gif b/addons/skin.confluence/media/Subtitles/flags/lb.gif
deleted file mode 100644
index fe9916c434..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/lb.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/lb.png b/addons/skin.confluence/media/Subtitles/flags/lb.png
new file mode 100644
index 0000000000..fd0197b847
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/lb.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/lt.gif b/addons/skin.confluence/media/Subtitles/flags/lt.gif
deleted file mode 100644
index b92b0a62e1..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/lt.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/lt.png b/addons/skin.confluence/media/Subtitles/flags/lt.png
new file mode 100644
index 0000000000..2979c004e4
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/lt.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/lv.gif b/addons/skin.confluence/media/Subtitles/flags/lv.gif
deleted file mode 100644
index 9fd8286391..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/lv.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/lv.png b/addons/skin.confluence/media/Subtitles/flags/lv.png
new file mode 100644
index 0000000000..63e7c4420b
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/lv.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/mk.gif b/addons/skin.confluence/media/Subtitles/flags/mk.gif
deleted file mode 100644
index a8320ba538..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/mk.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/mk.png b/addons/skin.confluence/media/Subtitles/flags/mk.png
new file mode 100644
index 0000000000..1aa93b7f7c
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/mk.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ms.gif b/addons/skin.confluence/media/Subtitles/flags/ms.gif
deleted file mode 100644
index 02cf19d2eb..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/ms.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ms.png b/addons/skin.confluence/media/Subtitles/flags/ms.png
new file mode 100644
index 0000000000..f8b6b98c60
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/ms.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/nl.gif b/addons/skin.confluence/media/Subtitles/flags/nl.gif
deleted file mode 100644
index 1469462051..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/nl.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/nl.png b/addons/skin.confluence/media/Subtitles/flags/nl.png
new file mode 100644
index 0000000000..01b16127ae
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/nl.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/no.gif b/addons/skin.confluence/media/Subtitles/flags/no.gif
deleted file mode 100644
index dbd2cbe715..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/no.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/no.png b/addons/skin.confluence/media/Subtitles/flags/no.png
new file mode 100644
index 0000000000..dc0d8581c3
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/no.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/pb.gif b/addons/skin.confluence/media/Subtitles/flags/pb.gif
deleted file mode 100644
index 361fe5e37a..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/pb.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/pb.png b/addons/skin.confluence/media/Subtitles/flags/pb.png
new file mode 100644
index 0000000000..79ecfcb2ac
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/pb.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/pl.gif b/addons/skin.confluence/media/Subtitles/flags/pl.gif
deleted file mode 100644
index 08397c12f2..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/pl.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/pl.png b/addons/skin.confluence/media/Subtitles/flags/pl.png
new file mode 100644
index 0000000000..60cb1b47b9
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/pl.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/pt.gif b/addons/skin.confluence/media/Subtitles/flags/pt.gif
deleted file mode 100644
index 5704a0ce57..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/pt.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/pt.png b/addons/skin.confluence/media/Subtitles/flags/pt.png
new file mode 100644
index 0000000000..d9c23830f7
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/pt.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ro.gif b/addons/skin.confluence/media/Subtitles/flags/ro.gif
deleted file mode 100644
index 5fdc82c19f..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/ro.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ro.png b/addons/skin.confluence/media/Subtitles/flags/ro.png
new file mode 100644
index 0000000000..5c689264f5
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/ro.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ru.gif b/addons/skin.confluence/media/Subtitles/flags/ru.gif
deleted file mode 100644
index 81c864f01a..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/ru.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ru.png b/addons/skin.confluence/media/Subtitles/flags/ru.png
new file mode 100644
index 0000000000..6ec5b90f8d
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/ru.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sk.gif b/addons/skin.confluence/media/Subtitles/flags/sk.gif
deleted file mode 100644
index ea8da1e0f4..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/sk.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sk.png b/addons/skin.confluence/media/Subtitles/flags/sk.png
new file mode 100644
index 0000000000..0628ea0787
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/sk.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sl.gif b/addons/skin.confluence/media/Subtitles/flags/sl.gif
deleted file mode 100644
index 7401d6df45..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/sl.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sl.png b/addons/skin.confluence/media/Subtitles/flags/sl.png
new file mode 100644
index 0000000000..5bd70491df
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/sl.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sq.gif b/addons/skin.confluence/media/Subtitles/flags/sq.gif
deleted file mode 100644
index 96be1ade01..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/sq.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sq.png b/addons/skin.confluence/media/Subtitles/flags/sq.png
new file mode 100644
index 0000000000..ff840aa970
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/sq.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sr.gif b/addons/skin.confluence/media/Subtitles/flags/sr.gif
deleted file mode 100644
index 930f88d1b5..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/sr.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sr.png b/addons/skin.confluence/media/Subtitles/flags/sr.png
new file mode 100644
index 0000000000..5576a0ff68
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/sr.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sv.gif b/addons/skin.confluence/media/Subtitles/flags/sv.gif
deleted file mode 100644
index 4096b9a3da..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/sv.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sv.png b/addons/skin.confluence/media/Subtitles/flags/sv.png
new file mode 100644
index 0000000000..c114237be4
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/sv.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/tr.gif b/addons/skin.confluence/media/Subtitles/flags/tr.gif
deleted file mode 100644
index 7c4926e063..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/tr.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/tr.png b/addons/skin.confluence/media/Subtitles/flags/tr.png
new file mode 100644
index 0000000000..e854a8dd1f
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/tr.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/uk.gif b/addons/skin.confluence/media/Subtitles/flags/uk.gif
deleted file mode 100644
index 093ada8038..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/uk.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/uk.png b/addons/skin.confluence/media/Subtitles/flags/uk.png
new file mode 100644
index 0000000000..151d87a5a5
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/uk.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/vi.gif b/addons/skin.confluence/media/Subtitles/flags/vi.gif
deleted file mode 100644
index a48c11356f..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/vi.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/vi.png b/addons/skin.confluence/media/Subtitles/flags/vi.png
new file mode 100644
index 0000000000..02bdd0d0fa
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/vi.png
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/zh.gif b/addons/skin.confluence/media/Subtitles/flags/zh.gif
deleted file mode 100644
index d1c350b083..0000000000
--- a/addons/skin.confluence/media/Subtitles/flags/zh.gif
+++ /dev/null
Binary files differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/zh.png b/addons/skin.confluence/media/Subtitles/flags/zh.png
new file mode 100644
index 0000000000..eea8471f04
--- /dev/null
+++ b/addons/skin.confluence/media/Subtitles/flags/zh.png
Binary files differ
diff --git a/addons/visualization.dxspectrum/addon.xml b/addons/visualization.dxspectrum/addon.xml
index 3c8ce09741..86876b7128 100644
--- a/addons/visualization.dxspectrum/addon.xml
+++ b/addons/visualization.dxspectrum/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="visualization.dxspectrum"
- version="1.0.8"
+ version="1.0.9"
name="DirectX Spectrum"
provider-name="Team XBMC">
<extension
diff --git a/addons/visualization.glspectrum/addon.xml b/addons/visualization.glspectrum/addon.xml
index e14e0bdb9d..1c63393d69 100644
--- a/addons/visualization.glspectrum/addon.xml
+++ b/addons/visualization.glspectrum/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="visualization.glspectrum"
- version="1.0.8"
+ version="1.0.9"
name="OpenGL Spectrum"
provider-name="Team XBMC">
<extension
diff --git a/addons/visualization.milkdrop/addon.xml b/addons/visualization.milkdrop/addon.xml
index 08a17af9ce..3cc9f1d3cd 100644
--- a/addons/visualization.milkdrop/addon.xml
+++ b/addons/visualization.milkdrop/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="visualization.milkdrop"
- version="1.0.8"
+ version="1.0.9"
name="MilkDrop"
provider-name="Team XBMC">
<extension
diff --git a/addons/visualization.projectm/addon.xml b/addons/visualization.projectm/addon.xml
index 599d9bda58..f9833df57f 100644
--- a/addons/visualization.projectm/addon.xml
+++ b/addons/visualization.projectm/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="visualization.projectm"
- version="1.0.9"
+ version="1.0.10"
name="projectM"
provider-name="Team XBMC">
<extension
diff --git a/addons/visualization.waveform/addon.xml b/addons/visualization.waveform/addon.xml
index 289b20c8c4..5cf1ab837a 100644
--- a/addons/visualization.waveform/addon.xml
+++ b/addons/visualization.waveform/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="visualization.waveform"
- version="1.0.8"
+ version="1.0.9"
name="Waveform"
provider-name="MrC">
<extension
diff --git a/addons/webinterface.default/addon.xml b/addons/webinterface.default/addon.xml
index 4b27afb366..66cec33df2 100644
--- a/addons/webinterface.default/addon.xml
+++ b/addons/webinterface.default/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="webinterface.default"
- version="2.2.2"
+ version="2.2.3"
name="Default"
provider-name="Team XBMC">
<requires>
diff --git a/addons/xbmc.addon/addon.xml b/addons/xbmc.addon/addon.xml
index 6013b373be..eea48de8a7 100644
--- a/addons/xbmc.addon/addon.xml
+++ b/addons/xbmc.addon/addon.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.addon" version="12.9.10" provider-name="Team XBMC">
+<addon id="xbmc.addon" version="12.9.11" provider-name="Team XBMC">
<backwards-compatibility abi="12.0"/>
<requires>
<import addon="xbmc.core" version="0.1.0"/>
diff --git a/addons/xbmc.debug/addon.xml b/addons/xbmc.debug/addon.xml
index 062566bb00..1b13d41917 100644
--- a/addons/xbmc.debug/addon.xml
+++ b/addons/xbmc.debug/addon.xml
@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.debug" version="0.1.5" provider-name="Team XBMC" name="Log">
+<addon id="xbmc.debug" version="0.1.6" provider-name="Team XBMC" name="Log">
<backwards-compatibility abi="0.1"/>
<requires>
<c-pluff version="0.1"/>
</requires>
<extension point="xbmc.python.module"/>
<extension point="xbmc.addon.metadata">
+ <summary lang="bg">Добавка за променÑне подробноÑтта на дневниците които XBMC генерира</summary>
<summary lang="ca">Complement per millorar la personalització de registre</summary>
<summary lang="cs">Doplňky pro podrobné protokolování</summary>
<summary lang="da">Tilføjelse der øger muligheden for tilpasning af logning</summary>
diff --git a/addons/xbmc.debug/resources/language/Bulgarian/strings.po b/addons/xbmc.debug/resources/language/Bulgarian/strings.po
new file mode 100644
index 0000000000..e6dedf8fe8
--- /dev/null
+++ b/addons/xbmc.debug/resources/language/Bulgarian/strings.po
@@ -0,0 +1,41 @@
+# XBMC Media Center language file
+# Addon Name: Log
+# Addon id: xbmc.debug
+# Addon Provider: Team XBMC
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Main\n"
+"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: XBMC Translation Team\n"
+"Language-Team: Bulgarian (http://www.transifex.com/projects/p/xbmc-main/language/bg/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bg\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Verbose logging for SMB library"
+msgstr "Подробно опиÑване в дневника на SMB библиотеката"
+
+msgctxt "#30001"
+msgid "Verbose logging for CURL library (http, dav)"
+msgstr "Подробно опиÑване в дневника на CURL библиотеката (http, dav)"
+
+msgctxt "#30002"
+msgid "Verbose logging for CMYTH library"
+msgstr "Подробно опиÑване в дневника на CMYTH библиотеката"
+
+msgctxt "#30003"
+msgid "Verbose logging for FFMPEG libraries"
+msgstr "Подробно опиÑване в дневника на FFMPEG библиотеките"
+
+msgctxt "#30004"
+msgid "Verbose logging for RTMP library"
+msgstr "Подробно опиÑване в дневника на RTMP библиотеката"
+
+msgctxt "#30005"
+msgid "Verbose logging for DBUS calls"
+msgstr "Verbose logging for DBUS calls"
diff --git a/configure.in b/configure.in
index 00a208bef1..f602df5fa7 100644
--- a/configure.in
+++ b/configure.in
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
-AC_INIT([xbmc], [12.9.10], [http://trac.xbmc.org])
+AC_INIT([xbmc], [12.9.11], [http://trac.xbmc.org])
AC_CONFIG_HEADERS([xbmc/config.h])
AH_TOP([#pragma once])
m4_include([m4/ax_prog_cc_for_build.m4])
@@ -843,6 +843,7 @@ if test "$host_vendor" = "apple" ; then
LIBS="$LIBS -framework IOSurface"
LIBS="$LIBS -framework QuartzCore"
LIBS="$LIBS -framework SystemConfiguration"
+ LIBS="$LIBS -framework VideoDecodeAcceleration"
fi
USE_EXTERNAL_FFMPEG=1
elif test "$target_platform" = "target_raspberry_pi"; then
diff --git a/language/Afrikaans/strings.po b/language/Afrikaans/strings.po
index 56776c1d7a..0cf0a08af8 100644
--- a/language/Afrikaans/strings.po
+++ b/language/Afrikaans/strings.po
@@ -1161,6 +1161,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Raamtempo omskakeling"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Vaste"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Verskeie kunstenaars"
@@ -3313,6 +3317,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Verstellings - Profiele"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standaard"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "Sluit verstellings"
diff --git a/language/Albanian/strings.po b/language/Albanian/strings.po
index ba1ec79434..0a6206d87e 100644
--- a/language/Albanian/strings.po
+++ b/language/Albanian/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Shëndërrimi i framerate-ve"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "fiksuar"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Artistë të ndryshëm"
@@ -3397,6 +3401,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Cilësimet - Profile"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standardi"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "Bllokoni cilësimet"
diff --git a/language/Amharic/strings.po b/language/Amharic/strings.po
index 29a90b1c0e..ed1f660ebe 100644
--- a/language/Amharic/strings.po
+++ b/language/Amharic/strings.po
@@ -1025,6 +1025,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "የ ክáˆá መጠን መቀየሪያ"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "በáጥáŠá‰µ "
+
msgctxt "#340"
msgid "Various artists"
msgstr "የተለያዩ ከያኒዎች"
@@ -2665,6 +2669,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "ገጽታ ማሰናጃ "
+msgctxt "#10037"
+msgid "Standard"
+msgstr "መደበኛ "
+
msgctxt "#10043"
msgid "Help"
msgstr "እርዳታ"
@@ -3397,6 +3405,10 @@ msgctxt "#13381"
msgid "Resume video"
msgstr "ቪዲዮ መቀጠያ "
+msgctxt "#13388"
+msgid "Preset"
+msgstr "መደበኛ "
+
msgctxt "#13391"
msgid "Eject/Load"
msgstr "ማá‹áŒ«/መጫኛ"
diff --git a/language/Arabic/strings.po b/language/Arabic/strings.po
index 7e9c8d78f2..fe89fb93db 100644
--- a/language/Arabic/strings.po
+++ b/language/Arabic/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "تحويل Ùراميرات"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "صالح"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Ùنانين مختلÙين"
@@ -3261,6 +3265,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "إعدادات مل٠المستخدم -"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "قياسي"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "إعدادات القÙÙ„"
diff --git a/language/Basque/strings.po b/language/Basque/strings.po
index ac749fd0ce..db08942975 100644
--- a/language/Basque/strings.po
+++ b/language/Basque/strings.po
@@ -1161,6 +1161,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Fotograma-tasa bihurketa"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Konpondua"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Hainbat artista"
@@ -3285,6 +3289,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Ezarpenak - Profilak"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Estandarra"
+
msgctxt "#10043"
msgid "Help"
msgstr "Laguntza"
diff --git a/language/Belarusian/strings.po b/language/Belarusian/strings.po
index cb524fb038..9c9a404efc 100644
--- a/language/Belarusian/strings.po
+++ b/language/Belarusian/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "КанвÑртаваньне чаÑьціні кадраў"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "ФікÑаванае"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Ð Ð¾Ð·Ð½Ñ‹Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°ÑžÑ†Ñ‹"
@@ -3437,6 +3441,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Reset"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Are you sure you want to reset the settings in this category?"
diff --git a/language/Bosnian/strings.po b/language/Bosnian/strings.po
index 4a9241f1d5..14f22bf2db 100644
--- a/language/Bosnian/strings.po
+++ b/language/Bosnian/strings.po
@@ -1125,6 +1125,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Konverzija brzine sliÄica"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Brzo"
+
msgctxt "#340"
msgid "Various artists"
msgstr "RazliÄiti izvoÄ‘aÄi"
@@ -3141,6 +3145,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Postavke - Profili"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "UobiÄajeno"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "ZakljuÄaj postavke"
diff --git a/language/Bulgarian/strings.po b/language/Bulgarian/strings.po
index f868d229c1..33c9b4397e 100644
--- a/language/Bulgarian/strings.po
+++ b/language/Bulgarian/strings.po
@@ -675,7 +675,7 @@ msgstr "ИзиÑкване на инф. от %s"
msgctxt "#198"
msgid "Loading movie details"
-msgstr "Зареждане на подробноÑтите за филма"
+msgstr "Зареждане на детайлите за филма"
msgctxt "#199"
msgid "Web interface"
@@ -743,7 +743,7 @@ msgstr "МолÑ, поÑтавете диÑк"
msgctxt "#220"
msgid "Remote share"
-msgstr "Отдалечено ÑподелÑне"
+msgstr "Отдалечен Ñподелен реÑурÑ"
msgctxt "#221"
msgid "Network is not connected"
@@ -863,7 +863,7 @@ msgstr "Изберете целева папка"
msgctxt "#252"
msgid "Output stereo to all speakers"
-msgstr "Изпращай Ñтерео Ñигнала до вÑички виÑокоговорители"
+msgstr "Извеждай Ñтерео Ñигнала до вÑички виÑокоговорители"
msgctxt "#253"
msgid "Number of channels"
@@ -963,7 +963,7 @@ msgstr "Ползвайте Ñтрелките, за да промените over
msgctxt "#277"
msgid "Adjust the bar to change the subtitles position"
-msgstr "ПремеÑтете лентата, за да промените\nпозициÑта на Ñубтитрите"
+msgstr "ПремеÑтете лентата, за да промените позициÑта на Ñубтитрите"
msgctxt "#278"
msgid "Adjust the rectangle so it is perfectly square"
@@ -1181,6 +1181,14 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Конвертиране чеÑтотата на кадрите"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "ÐаÑтройки на извеждането"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "ФикÑирана"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Различни артиÑти"
@@ -1209,6 +1217,10 @@ msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "РеÑивърът ми поддържа DTS-HD"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Включи режима \"Предаване на аудиото\""
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "РеÑивърът ми поддържа TrueHD"
@@ -1485,6 +1497,10 @@ msgctxt "#419"
msgid "High"
msgstr "МакÑ"
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Поддържай аудио уÑтройÑтвото включено"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Изтрий инф. за албума"
@@ -1531,7 +1547,7 @@ msgstr "Премахване на филм от библиотеката"
msgctxt "#433"
msgid "Really remove '%s'?"
-msgstr "ÐаиÑтина ли желаете премахването на\n\"%s\"?"
+msgstr "ÐаиÑтина ли желаете премахването на:\n\"%s\"?"
msgctxt "#434"
msgid "From %s at %i %s"
@@ -1667,7 +1683,7 @@ msgstr "Тип"
msgctxt "#468"
msgid "Move the bar to change the OSD position"
-msgstr "ПремеÑтете лентата, за да промените\nпозициÑта на OSD"
+msgstr "ПремеÑтете лентата, за да промените позициÑта на OSD"
msgctxt "#469"
msgid "OSD position"
@@ -1931,11 +1947,11 @@ msgstr "ИнформациÑ"
msgctxt "#545"
msgid "Audio output device"
-msgstr "Ðудио изход (уÑтройÑтво)"
+msgstr "Ðудио извод (уÑтройÑтво)"
msgctxt "#546"
msgid "Passthrough output device"
-msgstr "Преходно уÑтройÑтво (за звука)"
+msgstr "УÑтройÑтво към което да Ñе предава аудиото"
msgctxt "#547"
msgid "No biography for this artist"
@@ -2329,6 +2345,10 @@ msgctxt "#665"
msgid "Compression level"
msgstr "Степен на компреÑиране"
+msgctxt "#666"
+msgid "Verbose logging..."
+msgstr "Подробно водене на дневника..."
+
msgctxt "#700"
msgid "Cleaning up library"
msgstr "ПочиÑтване на библиотеката"
@@ -2555,7 +2575,7 @@ msgstr "Грешка %i: Ñподеленото не е налично"
msgctxt "#772"
msgid "Audio output"
-msgstr "Ðудио изход"
+msgstr "Ðудио извод"
msgctxt "#773"
msgid "Seeking"
@@ -2689,13 +2709,17 @@ msgctxt "#999"
msgid "Add Videos..."
msgstr "Добави видео..."
+msgctxt "#1000"
+msgid "Preview"
+msgstr "Преглед"
+
msgctxt "#1001"
msgid "Unable to connect"
msgstr "Ðе може да бъде оÑъщеÑтвена връзка"
msgctxt "#1002"
msgid "XBMC was unable to connect to the network location."
-msgstr "XBMC не може да Ñе Ñвърже към мрежовото мÑÑто."
+msgstr "XBMC не може да Ñе Ñвърже към мÑÑтото от мрежата."
msgctxt "#1003"
msgid "This could be due to the network not being connected."
@@ -3051,11 +3075,11 @@ msgstr "AirTunes"
msgctxt "#1300"
msgid "Custom audio device"
-msgstr "Друго аудио уÑтройÑтво"
+msgstr "Задаено аудио уÑтройÑтво"
msgctxt "#1301"
msgid "Custom passthrough device"
-msgstr "Друго преходно уÑтройÑтво"
+msgstr "Зададено към уÑтройÑтво което да Ñе предава"
msgctxt "#1396"
msgid "Drifting"
@@ -3337,6 +3361,26 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Ðулиране"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "ОÑновни"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Стандарт"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "За напреднали"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "За екÑперти"
+
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Ðулиране на горните наÑтройки"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "ÐаиÑтина ли желаете нулирането на наÑтройките от категориÑта?"
@@ -3349,10 +3393,26 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Ðе е налична помощ"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Ðулира вÑички видими наÑтройки към Ñтандартните им ÑтойноÑти"
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "ÐÑма налични категории"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Променете нивото на наÑтройките, за да видите допълнителните категории от наÑтройки."
+
msgctxt "#10126"
msgid "File browser"
msgstr "Браузер на файлове"
+msgctxt "#10128"
+msgid "Network setup"
+msgstr "ÐаÑтройки на мрежата"
+
msgctxt "#10129"
msgid "Media source"
msgstr "Медийни източници"
@@ -3365,14 +3425,38 @@ msgctxt "#10131"
msgid "Lock settings"
msgstr "Заключи наÑтройките"
+msgctxt "#10132"
+msgid "Content settings"
+msgstr "ÐаÑтроки на Ñъдържанието"
+
msgctxt "#10134"
msgid "Favourites"
msgstr "Любими"
+msgctxt "#10135"
+msgid "Songs/Info"
+msgstr "ПеÑни / ИнформациÑ"
+
+msgctxt "#10136"
+msgid "Smart playlist editor"
+msgstr "Редактор на \"умни\" плейлиÑти"
+
+msgctxt "#10137"
+msgid "Smart playlist rule editor"
+msgstr "Редактор на правила за \"умни\" плейлиÑти"
+
+msgctxt "#10139"
+msgid "Pictures/Info"
+msgstr "Снимки / ИнформациÑ"
+
msgctxt "#10140"
msgid "Add-on settings"
msgstr "ÐаÑтройки на добавката"
+msgctxt "#10146"
+msgid "Add-ons/Info"
+msgstr "Добавки / ИнформациÑ"
+
msgctxt "#10210"
msgid "Looking for subtitles..."
msgstr "ТърÑене на Ñубтитри..."
@@ -3463,20 +3547,28 @@ msgstr "Инф. за филма"
msgctxt "#12001"
msgid "Music/Info"
-msgstr "Музика/ИнформациÑ"
+msgstr "Музика / ИнформациÑ"
msgctxt "#12003"
msgid "Videos/Info"
-msgstr "Видео/ИнформациÑ"
+msgstr "Видео / ИнформациÑ"
msgctxt "#12004"
msgid "Scripts/Info"
-msgstr "Скриптове/ИнформациÑ"
+msgstr "Скриптове / ИнформациÑ"
msgctxt "#12005"
msgid "Fullscreen video"
msgstr "Видео на цÑл екран"
+msgctxt "#12006"
+msgid "Audio visualisation"
+msgstr "Ðудио визуализациÑ"
+
+msgctxt "#12008"
+msgid "File stacking dialogue"
+msgstr "Прозорец за групиране на файлове"
+
msgctxt "#12009"
msgid "Rebuild index..."
msgstr "ПреÑъздаване на индекÑа..."
@@ -3633,6 +3725,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "ДоÑтигнахте лимита на опитите за отключване."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Сега ÑиÑтемата ще Ñе изключи."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Заключен елемент"
@@ -3805,6 +3901,10 @@ msgctxt "#13013"
msgid "Reboot"
msgstr "РеÑтартиране"
+msgctxt "#13014"
+msgid "Minimise"
+msgstr "Минимизиране"
+
msgctxt "#13015"
msgid "Power button action"
msgstr "ДейÑтвие на бутона \"Изключване\""
@@ -3851,7 +3951,7 @@ msgstr "Събуждане на отдалечен Ñървър при опит
msgctxt "#13027"
msgid "Wake on Lan (%s)"
-msgstr "Ñъбуждане по LAN (%s)"
+msgstr "Събуждане по LAN (%s)"
msgctxt "#13028"
msgid "Waiting for network to connect..."
@@ -3883,11 +3983,11 @@ msgstr "Ðктуализиран за %s"
msgctxt "#13035"
msgid "Found for %s"
-msgstr "Открит е за %s"
+msgstr "Открит е за \"%s\""
msgctxt "#13036"
msgid "Failed for %s"
-msgstr "Ðе е открит за %s"
+msgstr "Ðе е открит за \"%s\""
msgctxt "#13050"
msgid "Running low on battery"
@@ -3925,6 +4025,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Запазване на резолюциÑта?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Желаете ли запазването на промÑната?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "ВиÑококачеÑтвено увеличение на размера и запазване на пропорциите"
@@ -3965,6 +4069,10 @@ msgctxt "#13121"
msgid "VDPAU HQ Upscaling level"
msgstr "VDPAU ниво на Upscaling Ñ Ð²Ð¸Ñоко качеÑтво"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Желаете да ползвате този облик?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "ЗатъмнÑване на оÑтаналите екрани"
@@ -4017,6 +4125,10 @@ msgctxt "#13161"
msgid "Primary DNS"
msgstr "ОÑновен DNS"
+msgctxt "#13162"
+msgid "Initialise failed"
+msgstr "Инициализирането Ñе провали"
+
msgctxt "#13170"
msgid "Never"
msgstr "Ðикога"
@@ -4475,11 +4587,11 @@ msgstr "Шаблон"
msgctxt "#13389"
msgid "There are no presets available\nfor this visualisation"
-msgstr "ÐÑма налични шаблониâŽ\nза визуализациÑта"
+msgstr "ÐÑма налични шаблони\nза визуализациÑта"
msgctxt "#13390"
msgid "There are no settings available\nfor this visualisation"
-msgstr "ÐÑма налични наÑтройки\nза визуализациÑта"
+msgstr "ÐÑма налични наÑтройки за визуализациÑта"
msgctxt "#13391"
msgid "Eject/Load"
@@ -4661,6 +4773,14 @@ msgctxt "#13436"
msgid "Allow hardware acceleration (libstagefright)"
msgstr "Разреши хардуерното уÑкорение (libstagefright)"
+msgctxt "#13438"
+msgid "Allow hardware acceleration (amcodec)"
+msgstr "Разреши хардуерното уÑкорение (amcodec)"
+
+msgctxt "#13439"
+msgid "Allow hardware acceleration (MediaCodec)"
+msgstr "Разреши хардуерното уÑкорение (MediaCodec)"
+
msgctxt "#13500"
msgid "A/V sync method"
msgstr "Метод за Ðудио/Видео Ñинхронизиране"
@@ -4741,6 +4861,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f Ñекунди"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d минута"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d минути"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Apple диÑтанционно"
@@ -5335,7 +5463,7 @@ msgstr "Възпроизвеждането Ñе провали"
msgctxt "#16027"
msgid "One or more items failed to play."
-msgstr "Възпроизвеждането на един или\nповече елемента Ñе провали."
+msgstr "Възпроизвеждането на един или повече елемента Ñе провали."
msgctxt "#16028"
msgid "Enter value"
@@ -5343,7 +5471,7 @@ msgstr "Въведете ÑтойноÑÑ‚"
msgctxt "#16029"
msgid "Check the log file for details."
-msgstr "Проверете дневника за подробноÑти."
+msgstr "Проверете дневника за детайли."
msgctxt "#16030"
msgid "Party mode aborted."
@@ -5353,6 +5481,10 @@ msgctxt "#16031"
msgid "No matching songs in the library."
msgstr "ÐÑма Ñъвпадаща пеÑен в библиотеката."
+msgctxt "#16032"
+msgid "Could not initialise database."
+msgstr "Базата от данни не може да Ñе инициализира."
+
msgctxt "#16033"
msgid "Could not open database."
msgstr "Базата от данни не може да Ñе отвори."
@@ -5567,7 +5699,7 @@ msgstr "Разделете думите за Ñ‚ÑŠÑ€Ñене Ñ Ð˜, ИЛИ"
msgctxt "#19002"
msgid "or use phrases to find an exact match, like \"The wizard of Oz\"."
-msgstr "или използвайте фрази за пълно Ñъвпадение"
+msgstr "или използвайте фрази за пълно Ñъвпадение."
msgctxt "#19003"
msgid "Find similar programs"
@@ -5673,9 +5805,13 @@ msgctxt "#19034"
msgid "Already started recording on this channel"
msgstr "Каналът вече Ñе запиÑва"
+msgctxt "#19035"
+msgid "%s could not be played. Check the log for details."
+msgstr "\"%s\" не може да бъде възпроизведен. Проверете дневника за детайли."
+
msgctxt "#19036"
msgid "This recording cannot be played. Check the log for details."
-msgstr "ЗапиÑÑŠÑ‚ не може да бъде възпроизведен.\nПроверете дневника за подробноÑти."
+msgstr "ЗапиÑÑŠÑ‚ не може да бъде възпроизведен. Проверете дневника за детайли."
msgctxt "#19037"
msgid "Show signal quality"
@@ -5691,7 +5827,7 @@ msgstr " БроÑч"
msgctxt "#19041"
msgid "Are you sure you want to rename this recording?"
-msgstr "ÐаиÑтина ли желаете да \nпреименувате запиÑа?"
+msgstr "ÐаиÑтина ли желаете да преименувате запиÑа?"
msgctxt "#19042"
msgid "Are you sure you want to rename this timer?"
@@ -5787,7 +5923,7 @@ msgstr "Събитието вече Ñе запиÑва"
msgctxt "#19068"
msgid "This recording could not be deleted. Check the log for details."
-msgstr "ЗапиÑÑŠÑ‚ не може да бъде изтрит.\nПроверете дневника за подробноÑти."
+msgstr "ЗапиÑÑŠÑ‚ не може да бъде изтрит. Проверете дневника за детайли."
msgctxt "#19069"
msgid "EPG"
@@ -5897,6 +6033,14 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Внимание"
+msgctxt "#19099"
+msgid "Service"
+msgstr "УÑлуга"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "ДоÑтавчик"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "МолÑ, превключете на друг канал"
@@ -5915,7 +6059,7 @@ msgstr "Ðезапазен броÑч. Проверете дневника за
msgctxt "#19110"
msgid "An unexpected error occurred. Try again later or check the log for details."
-msgstr "Ðеочаквана грешка. Опитайте по-къÑно или проверете лога за детайли."
+msgstr "Ðеочаквана грешка. Опитайте по-къÑно или проверете дневника за детайли."
msgctxt "#19114"
msgid "Version"
@@ -6083,7 +6227,7 @@ msgstr "ЗапиÑи"
msgctxt "#19164"
msgid "Cannot start recording. Check the log for details."
-msgstr "ЗапиÑÑŠÑ‚ не може да бъде започнат.\nПроверете дневника за подробноÑти."
+msgstr "ЗапиÑÑŠÑ‚ не може да бъде започнат. Проверете дневника за детайли."
msgctxt "#19166"
msgid "PVR information"
@@ -6151,7 +6295,7 @@ msgstr "PVR уÑлуга"
msgctxt "#19193"
msgid "The channel scan cannot be started. Check the log for details."
-msgstr "Сканирането на канали не може да започне. Проверете лога."
+msgstr "Сканирането за канали не може да започне. Проверете дневника за детайли."
msgctxt "#19194"
msgid "Continue?"
@@ -7279,7 +7423,7 @@ msgstr "Показвай инф. за текущото видео"
msgctxt "#20177"
msgid "Done"
-msgstr "Готово"
+msgstr "Завършено"
msgctxt "#20178"
msgid "Shift"
@@ -7619,7 +7763,7 @@ msgstr "Инф. за епизода"
msgctxt "#20353"
msgid "Loading TV show details"
-msgstr "Зареждане на подробноÑти за ТВ Сериал"
+msgstr "Зареждане на детайлите за ТВ Сериал"
msgctxt "#20354"
msgid "Fetching episode guide"
@@ -7651,7 +7795,7 @@ msgstr "Епизоди"
msgctxt "#20361"
msgid "Loading episode details"
-msgstr "Зареждане подробноÑтите за епизода"
+msgstr "Зареждане детайлите за епизода"
msgctxt "#20362"
msgid "Remove episode from library"
@@ -8037,6 +8181,14 @@ msgctxt "#20459"
msgid "Tags"
msgstr "Етикети"
+msgctxt "#20460"
+msgid "Add %s"
+msgstr "Добави \"%s\""
+
+msgctxt "#20461"
+msgid "Remove %s"
+msgstr "Премахни \"%s\""
+
msgctxt "#20462"
msgid "New tag..."
msgstr "Ðов етикет..."
@@ -8045,6 +8197,10 @@ msgctxt "#20463"
msgid "A tag with the name '%s' already exists."
msgstr "Вече ÑъщеÑтвува етикет Ñ Ð¸Ð¼ÐµÑ‚Ð¾ \"%s\"."
+msgctxt "#20464"
+msgid "Select %s"
+msgstr "Избери \"%s\""
+
msgctxt "#20465"
msgid "Manage movie set"
msgstr "Управление на передица"
@@ -8151,7 +8307,7 @@ msgstr "Ðалагане на DVD район"
msgctxt "#21373"
msgid "Video output"
-msgstr "Видео изход"
+msgstr "Видео извод"
msgctxt "#21374"
msgid "Video aspect"
@@ -8391,7 +8547,7 @@ msgstr "Име на плейлиÑта"
msgctxt "#21434"
msgid "Find items where"
-msgstr "ТърÑи елемети, за които е вÑрно:"
+msgstr "Ðамери елемети, за които е вÑрно:"
msgctxt "#21435"
msgid "Edit"
@@ -8529,6 +8685,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s до %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Приоритизирай външните Ñубтитри"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "XBMC ще зарежда външните Ñубтитри вмеÑто вградените, когато и двата вида Ñа налични"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Външни)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Име на файла"
@@ -9201,10 +9369,22 @@ msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "Добавката има неправилна Ñтруктура"
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s Ñе ползва от Ñледните инÑталирани добавки"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Добавката не може да бъде деинÑталирана"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "Върни Ñтара верÑиÑ"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "ÐеÑъвмеÑтима"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Ðалични добавки"
@@ -9309,6 +9489,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Заключи управлението на добавки"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Добавката не може да бъде изключена"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(текуща)"
@@ -9317,6 +9501,10 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(в Ñ‡ÐµÑ€Ð½Ð¸Ñ ÑпиÑък)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Добавка е неÑъвмеÑтима или е маркирана като повредена в хранилището."
+
msgctxt "#24097"
msgid "Would you like to disable it on your system?"
msgstr "Желаете ли да бъде изключена?"
@@ -9345,6 +9533,54 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "ЛипÑват нÑкои файлове от облика"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Добавката е неÑъвмеÑтима защото не Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° изиÑкваниÑта"
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Ðктивирай режима \"Ðа пауза\" при Ñ‚ÑŠÑ€Ñене на Ñубтитри"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Ðко не Ñе ÑъхранÑват в папките на отделните филми, Ñвалените Ñубтитри ще бъдат запиÑвани в зададената папка."
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "ТърÑене за Ñубтитри..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "Ðамерени Ñа %d"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Ðе Ñа намерени Ñубтитри"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "СвалÑне на Ñубтитри..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "СвалÑй Ñубтитри за Ñледните езици"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»Ñ Ð½Ð° какъв език да Ñе Ñ‚ÑŠÑ€ÑÑÑ‚ Ñубтитри. ÐÑкои от уÑлугите предоÑтавÑщи Ñубтитри може да не разполагат ÑÑŠÑ Ñубтитри за Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ñ‡Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð¾Ñ‚ Ð’Ð°Ñ ÐµÐ·Ð¸Ðº."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "СвалÑнето на Ñубтитри Ñе провали"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Ðе Ñте инÑталирали уÑлуга за Ñубтитри"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "ЗапиÑвай Ñубтитрите в папката на филма"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "ИзвеÑтиÑ"
@@ -9383,7 +9619,7 @@ msgstr "QWERTY клавиатура"
msgctxt "#29802"
msgid "Passthrough Audio in use"
-msgstr "Ðктивен е режимът \"Passthrough Audio\""
+msgstr "Ðктивен е режимът \"Предаване на аудиото\""
msgctxt "#33001"
msgid "Trailer quality"
@@ -9449,6 +9685,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Клипове"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "РеÑтартирайте добавката, за да Ñ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚Ðµ"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Тази вечер"
@@ -9495,7 +9735,7 @@ msgstr "Залез"
msgctxt "#33029"
msgid "Details"
-msgstr "ПодробноÑти"
+msgstr "Детайли"
msgctxt "#33030"
msgid "Outlook"
@@ -9769,6 +10009,10 @@ msgctxt "#34110"
msgid "7.1"
msgstr "7.1"
+msgctxt "#34111"
+msgid "Select the behaviour when no sound is required for either playback or GUI sounds. [Always] - continuous inaudible signal is output, this keeps the receiving audio device alive for any new sounds, however this might also block sound from other applications. [1- 10 Minutes] - same as Always except that after the selected period of time audio enters a suspended state [Off] - audio output enters a suspended state. Note - sounds can be missed if audio enters suspended state."
+msgstr "Изберете поведение когато не Ñе изиÑква възпроизвеждане на звук от файл, нито от интефейÑа. [Винаги] - непрекъÑнато извеждане на Ñигнал, който не можете да чуете. Така приемника нÑма да Ñе зиключи и ще бъде в готовноÑÑ‚ веднага да възпроизвежда при необходимоÑÑ‚, но може да доведе до блокиране на звука от други приложениÑ. [1- 10 минути] - дейÑтва като [Винаги], но Ñлед Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´ от време прекуÑтановÑва извеждането на Ñигнал. [Изключено] - аудио извода Ñе привежда в ÑуÑпендирано ÑуÑпендирано ÑÑŠÑтоÑни. БЕЛЕЖКÐ: звуковите карти може да be missed if audio enters suspended state."
+
msgctxt "#34120"
msgid "Play GUI sounds"
msgstr "ПроÑвирвай звуци от потребителÑÐºÐ¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ"
@@ -9785,6 +10029,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Ðикога"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Ðе може да бъде намерен Ñледващ елемент за възпроизвеждане"
@@ -9867,7 +10131,7 @@ msgstr "Генеричен диÑк"
msgctxt "#35004"
msgid "There are no settings available\nfor this peripheral."
-msgstr "ÐÑма налични наÑтройки\nза периферното уÑтройÑтво."
+msgstr "ÐÑма налични наÑтройки за периферното уÑтройÑтво."
msgctxt "#35005"
msgid "New device configured"
@@ -9897,6 +10161,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "Изключване на джойÑтика при наличие на уÑтройÑтвото"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Включи ÑиÑтемните клавиши и при режим \"Ðа цÑл екран\""
+
msgctxt "#35500"
msgid "Location"
msgstr "ЛокациÑ"
@@ -9967,7 +10235,7 @@ msgstr "Ðе мога да Ð¾Ñ‚ÐºÑ€Ð¸Ñ Ð¿Ð¾Ñ€Ñ‚ CEC. ÐаÑтройте ръч
msgctxt "#36012"
msgid "Could not initialise the CEC adaptor. Please check your settings."
-msgstr "Инициализирането на CEC адаптора Ñе провали.\nПровере наÑтройките."
+msgstr "Инициализирането на CEC адаптора Ñе провали. Проверете наÑтройките."
msgctxt "#36015"
msgid "HDMI port number"
@@ -9979,7 +10247,7 @@ msgstr "Свързан"
msgctxt "#36017"
msgid "Could not initialise the CEC adaptor: libCEC was not found on your system."
-msgstr "Инициализирането на CEC адаптора Ñе провали:\nlibCEC библиотеката не е налична в ÑиÑтемата."
+msgstr "Инициализирането на CEC адаптора Ñе провали: libCEC библиотеката не е налична в ÑиÑтемата."
msgctxt "#36018"
msgid "Use the TV's language setting"
@@ -10411,7 +10679,7 @@ msgstr "Ð’Ñе още не е налична информациÑ."
msgctxt "#36191"
msgid "Set a custom directory for your subtitles. This can be a file share."
-msgstr "Задайте директориÑта, коÑто ÑъхранÑва Ñубтитрите (ако ползвате такава). Може да бъде Ñподелен реÑÑƒÑ€Ñ Ð¾Ñ‚ мрежата."
+msgstr "Задайте директориÑта, коÑто да ÑъхранÑва Ñубтитрите (ако ползвате такива). Може да бъде Ñподелен реÑÑƒÑ€Ñ Ð¾Ñ‚ мрежата."
msgctxt "#36192"
msgid "Location of subtitles on the screen."
@@ -10601,6 +10869,14 @@ msgctxt "#36269"
msgid "Default is 89dB per standard. Change with caution."
msgstr "Стандартната ÑойноÑÑ‚ е 89dB. ПроменÑйте Ñ Ð²Ð½Ð¸Ð¼Ð°Ñ‚ÐµÐ»Ð½Ð¾!"
+msgctxt "#36271"
+msgid "Smoothly fade from one audio track to the next. You can set the amount of overlap from 1-15 seconds."
+msgstr "Изглажда прехода от една пеÑен към друга. ПеÑента, коÑто приключва, поÑтепенно затихва, докато ÑъщеÑтвременно започва да звучи Ñледващата, кото Ñе увилва. Можете да зададете продължителноÑттта на заÑтъпването (времето когато и двете пеÑни звучат едновременно) между 1 и 15 Ñекунди."
+
+msgctxt "#36272"
+msgid "Allow crassfading to occur when both tracks are from the same album."
+msgstr "Плавен преход ще има Ñамо между пеÑните от един и Ñъщ албум."
+
msgctxt "#36273"
msgid "Select the visualisation that will be displayed while listening to music."
msgstr "ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»Ñ ÐºÐ¾Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð° Ñе изобразÑва когато Ñлушате музика."
@@ -10929,6 +11205,10 @@ msgctxt "#36360"
msgid "No info available yet."
msgstr "Ð’Ñе още не е налична информациÑ."
+msgctxt "#36362"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded."
+msgstr "Задайте макÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ð±Ñ€Ð¾Ð¹ налични аудио канали/виÑокоговорители за възпроизвеждане на Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð°ÑƒÐ´Ð¸Ð¾ Ñигнал."
+
msgctxt "#36363"
msgid "Boost AC3 streams that have been downmixed to 2 channels."
msgstr "Увеличава AC3 потоците които Ñа ÑмеÑени до 2 канала (крайниÑÑ‚ резултат обикновено Ñа 2 тихи канала, които Ñе нуждаÑÑ‚ от уÑилване)"
@@ -10941,6 +11221,14 @@ msgctxt "#36366"
msgid "Select this option if your receiver is capable of decoding DTS streams."
msgstr "Изберете опциÑта ако приемникът Ви може да декодира DTS поток."
+msgctxt "#36367"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded. If optical/coax digital outputs are used this must be set to 2.0"
+msgstr "Задайте макÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ð±Ñ€Ð¾Ð¹ налични аудио канали/виÑокоговорители за възпроизвеждане на аудио Ñигнала. Ðко извеждате Ñигнала поÑредÑтвом оптичен или коакÑиален изход е необходимо да зададете ÑтойноÑÑ‚ 2.0"
+
+msgctxt "#36368"
+msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
+msgstr "Изберете наÑтройките за директно предаване на аудиото към уÑтройÑтво, което да го обработи и възпроизведе."
+
msgctxt "#36369"
msgid "Select this option if your receiver is capable of decoding TrueHD streams."
msgstr "Изберете опциÑта ако приемникът Ви може да декодира TrueHD поток."
@@ -10949,6 +11237,14 @@ msgctxt "#36370"
msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
msgstr "Изберете опциÑта ако приемникът Ви може да декодира DTS-HD поток."
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Изберете кое уÑтройÑтво да възпроизвежда Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð°ÑƒÐ´Ð¸Ð¾ Ñигнал (например от\n.mp3 файлове)"
+
+msgctxt "#36372"
+msgid "Select the device to be used for playback of encoded formats, these are any of the formats below in the 'capable receiver' options."
+msgstr "Изберете уÑтройÑтво което да декодира кодираните формати. Това Ñа форматите от ÑпиÑъка \"Приемникът ми поддържа...\" по-долу."
+
msgctxt "#36374"
msgid "No info available yet."
msgstr "Ð’Ñе още не е налична информациÑ."
@@ -11001,6 +11297,10 @@ msgctxt "#36386"
msgid "If you have limited bandwidth available, XBMC will try to keep within these limits."
msgstr "Ðко разполагате Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½, по ÑкороÑÑ‚, интернет XBMC ще опита да Ñе Ñъобрази и да Ñе вмеÑти в него."
+msgctxt "#36387"
+msgid "Turn off display when idle. Useful for TVs that turn off when there is no display signal detected, but you don't want to suspend/shutdown the whole computer."
+msgstr "Изключване на екрана при липÑа на дейÑтвие. Полезно е ако телевизорът Ви Ñе изключва при липÑа на Ñигнал, но не желаете да ÑуÑпендирате/изклювате компютъра."
+
msgctxt "#36388"
msgid "No info available yet."
msgstr "Ð’Ñе още не е налична информациÑ."
@@ -11013,6 +11313,10 @@ msgctxt "#36390"
msgid "Define what action XBMC should do when it has been idle for a long period of time."
msgstr "Определете какво дейÑтвие Ñ‚Ñ€Ñбва да предприеме XBMC, Ñлед като бездейÑтва дълъг период от време."
+msgctxt "#36391"
+msgid "Turn debug logging on or off. Useful for troubleshooting."
+msgstr "Включва/Изключва воденето на debug дневник. ОпциÑта е полезна когато е необходимо да Ñе Ñъбере възможно най-много Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° отÑтранÑването на даддена неизправноÑÑ‚."
+
msgctxt "#36392"
msgid "No info available yet."
msgstr "Ð’Ñе още не е налична информациÑ."
@@ -11021,6 +11325,10 @@ msgctxt "#36393"
msgid "Folder used to save screenshots taken within XBMC."
msgstr "Папката в коÑто Ñе ÑъхранÑват Ñнимките на екрани от XBMC."
+msgctxt "#36394"
+msgid "Specify additional libraries to be included in the debug log."
+msgstr "ПоÑочете кои допълнителни библиотеки да бъдат включени в debug дневника."
+
msgctxt "#36396"
msgid "Define the PIN code used for the master lock."
msgstr "Определете PIN код за заключването Ñ Ð³Ð»Ð°Ð²ÐµÐ½ код."
@@ -11208,3 +11516,7 @@ msgstr "Двойно извеждане на аудиото"
msgctxt "#37018"
msgid "Boost centre channel when downmixing"
msgstr "УÑилвай Ñ†ÐµÐ½Ñ‚Ñ€Ð°Ð»Ð½Ð¸Ñ ÐºÐ°Ð½Ð°Ð» при ÑмеÑване на каналите за намалÑване броÑ"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "СиÑтемните клавиши като PrintScreen (PrtScr), Alt-Tab и клавишите за контрол на звука ще бъда активни и по време на режим \"Ðа цÑл екран\"."
diff --git a/language/Burmese/strings.po b/language/Burmese/strings.po
index 0574356736..3e494aeb22 100644
--- a/language/Burmese/strings.po
+++ b/language/Burmese/strings.po
@@ -949,6 +949,10 @@ msgctxt "#335"
msgid "Start"
msgstr "စမည်"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "အမြန်"
+
msgctxt "#340"
msgid "Various artists"
msgstr "အမျိုးမျိုးသော အနုပညာရှင် "
@@ -2405,6 +2409,10 @@ msgctxt "#10029"
msgid "Login screen"
msgstr "á€á€„်ရောက်သည့်စá€á€›á€„်"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "စံ"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "Lock settings"
@@ -2945,6 +2953,10 @@ msgctxt "#13336"
msgid "Remove button"
msgstr "á€á€œá€¯á€á€ºá€€á€­á€¯á€–ယ်မည်"
+msgctxt "#13340"
+msgid "Leave as is"
+msgstr "စံ"
+
msgctxt "#13341"
msgid "Green"
msgstr "အစိမ်းရောင်"
@@ -3001,6 +3013,10 @@ msgctxt "#13376"
msgid "Volume"
msgstr "အသံ"
+msgctxt "#13388"
+msgid "Preset"
+msgstr "စံ"
+
msgctxt "#13393"
msgid "Calculate size"
msgstr "á€á€½á€€á€ºá€á€»á€€á€ºá€žá€Šá€·á€ºá€¡á€›á€½á€šá€ºá€¡á€…ား"
diff --git a/language/Catalan/strings.po b/language/Catalan/strings.po
index 2bccca59dd..c9e0430508 100644
--- a/language/Catalan/strings.po
+++ b/language/Catalan/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Conversió de les imatges per segon"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Configuració de sortida"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fixed"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Optimitzat"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Diversos artistes"
@@ -1493,6 +1505,10 @@ msgctxt "#419"
msgid "High"
msgstr "Màx"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Millor coincidència"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Esborra la informació de l'àlbum"
@@ -2921,6 +2937,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Complements de programes"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Establir la miniatura del connector"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Configuració del complement"
@@ -3485,10 +3505,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Reinicialitza"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Bàsic"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Estàndard"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Avançat"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Expert"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Cercador de complements"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Restableix els ajustos anteriors als per defecte"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Esteu segur que voleu reinicialitzar la configuració en aquesta categoria?"
@@ -3501,6 +3541,18 @@ msgctxt "#10044"
msgid "No help available"
msgstr "No hi ha ajuda disponible"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Restableix tots els canvis visibles als seus valors per defecte."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "No hi ha categories disponibles"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Prova de canviar el nivell d'ajust per veure categories i valors addicionals."
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "Diàleg Sí/No"
@@ -3837,6 +3889,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "S'ha excedit el límit d'intents."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Ara s'aturarà el sistema."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Element bloquejat"
@@ -4137,6 +4193,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Voleu desar la resolució?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Voleu mantenir aquest canvi?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Reescalat d'alta qualitat"
@@ -4181,6 +4241,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "VDPAU Studio level color conversion"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Mantenir la pell?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "Enfosqueix les altres pantalles"
@@ -4985,6 +5049,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f Segons"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Minut"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Minuts"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Apple remote"
@@ -5669,6 +5741,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Edita el títol"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Gestió..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Edita l'ordre de títols"
@@ -6213,6 +6289,18 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Advertència"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Servei"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Proveïdor"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "canvieu a un altre canal"
@@ -9145,6 +9233,10 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s a %s"
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Extern)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Nom del fitxer"
@@ -9833,6 +9925,10 @@ msgctxt "#24048"
msgid "Rollback"
msgstr "Rollback"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Incompatible"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Complements disponibles"
@@ -9937,6 +10033,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Bloqueja l'Administrador de Complements"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "No es pot desactivar aquest complement"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(actual)"
@@ -9973,6 +10073,38 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "La pell manca d'alguns fitxers"
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Cercant subtítols ..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d subtítols trobats"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "No s'han trobat subtítols"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Baixant subtítols ..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Baixar els subtítols per als idiomes"
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "No s'han pogut descarregar els subtítols"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "No hi ha serveis de subtítols instal·lats"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Desa els subtítols a la carpeta de la pel·lícula"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Notificacions"
@@ -10077,6 +10209,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Clips"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Reinicialitza el plugin per habilitar-ho"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Aquesta nit"
@@ -10413,6 +10549,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Mai"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "No s'ha pogut trobar el següent element a reproduir"
@@ -10525,6 +10681,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "Desactivar el joystick quan aquest dispositiu estigui present"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Habilitar tecles de sistema en pantalla completa"
+
msgctxt "#35500"
msgid "Location"
msgstr "Ubicació"
diff --git a/language/Chinese (Simple)/strings.po b/language/Chinese (Simple)/strings.po
index ee5895812a..ceecc4417c 100644
--- a/language/Chinese (Simple)/strings.po
+++ b/language/Chinese (Simple)/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "帧率转æ¢"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "固定"
+
msgctxt "#340"
msgid "Various artists"
msgstr "群星"
@@ -3485,6 +3489,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "é‡ç½®"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "标准"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "æ’件æµè§ˆå™¨"
diff --git a/language/Chinese (Traditional)/strings.po b/language/Chinese (Traditional)/strings.po
index dfc937e9ec..5b05d06540 100644
--- a/language/Chinese (Traditional)/strings.po
+++ b/language/Chinese (Traditional)/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "調整畫é¢é »çŽ‡"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "固定"
+
msgctxt "#340"
msgid "Various artists"
msgstr "多ä½æ¼”出者"
@@ -3433,6 +3437,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "é‡ç½®"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "標準"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "您確定è¦é‡è¨­è©²é¡žåˆ¥ä¸‹çš„設定嗎?"
diff --git a/language/Croatian/strings.po b/language/Croatian/strings.po
index 17ffcd602b..3bf7d04bc2 100644
--- a/language/Croatian/strings.po
+++ b/language/Croatian/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Pretvorba sliÄica"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Izlazno podešavanje"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fiksni"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Optimizirano"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Srodni izvoÄ‘aÄi"
@@ -1213,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "Godina"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normalizacija razina pri spajanju kanala"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "DTS-HD kompatibilan prijamnik"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Omogući izlazni uređaj"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "TrueHD kompatibilan prijamnik"
@@ -1493,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "Maks"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Najbolje odgovarajuće"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Drži zvuÄni ureÄ‘aj aktivnim"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Obriši informacije albuma"
@@ -1637,6 +1665,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Promjeni prikaz"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "OgraniÄenje frekvencije (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Podnaslovi"
@@ -2187,7 +2219,7 @@ msgstr "Upiši broj"
msgctxt "#612"
msgid "Bits/sample"
-msgstr "Bitovi/Uzorak"
+msgstr "Bitovi/uzorak"
msgctxt "#613"
msgid "Sample rate"
@@ -2921,6 +2953,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Programski dodaci"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Postavi minijaturu dodatka"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Postavke dodatka"
@@ -3485,10 +3521,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Vrati na poÄetno"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Osnovna"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standardno"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Napredna"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "StruÄna"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Preglednik dodataka"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Vrati postavke iznad na uobiÄajeno"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Sigurno želite vratiti postavke na poÄetno za ovu kategoriju?"
@@ -3501,6 +3557,18 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Pomoć nije dostupna"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Vrati sve vidljive postavke na njihove uobiÄajene vrijednosti."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Nema dostupnih kategorija"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Pokušajte promijeniti razinu postavki da bi vidjeli dodatne kategorije i postavke."
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "Da/Ne dijalog"
@@ -3837,6 +3905,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "Broj unosa lozinke je promašen."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Sustav će se sada iskljuÄiti."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Stavka zakljuÄana"
@@ -4137,6 +4209,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Spremi razluÄivost?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Želite li zadržati ovu promjenu?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Visoko kvalitetan upscale"
@@ -4181,6 +4257,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "VDPAU Studijska razina pretvorbe boje"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Zadrži presvlaku?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "Zacrni ostale zaslone"
@@ -4901,6 +4981,10 @@ msgctxt "#13439"
msgid "Allow hardware acceleration (MediaCodec)"
msgstr "Dopusti hardversko ubrzanje (MediaCodec)"
+msgctxt "#13440"
+msgid "Frame Multi Threaded Decoding (less reliable)"
+msgstr "ViÅ¡enizno dekôdiranje sliÄica (manje pouzdano)"
+
msgctxt "#13500"
msgid "A/V sync method"
msgstr "NaÄin usklaÄ‘ivanja Zvuka/Slike"
@@ -4985,6 +5069,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f sekundi"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d minuta"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d minuta"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Apple daljinski upravljaÄ"
@@ -5669,6 +5761,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Uredi naslov"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Upravljanje..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Uredi naslov poredka"
@@ -6213,6 +6309,18 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Upozorenje"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Usluga"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Pružatelj usluge"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Molimo prebacite na drugi program."
@@ -6661,6 +6769,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "Nijedan PVR dodatak ne može biti omogućen. Provjerite postavke ili zapis za više informacija."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "Snimanje prekinuto"
@@ -6701,6 +6813,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "Prikaži obavijest pri ažuriranju zakazanih snimanja"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Koristi brojeve TV programa sa pozadinskog softvera (radi samo sa 1 omogućenim PVR dodatkom)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "Pokreće se PVR upravitelj"
@@ -6721,10 +6837,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "Pokrećem radnje u pozadini"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Nema omogućenih PVR dodataka"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "PVR upravitelj je omogućen bez ijednog"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "omogućenog PVR dodatka. Omogućite bar jedan dodatak"
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "kako bi mogli koristili PVR mogućnosti."
@@ -6837,10 +6961,18 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Sva snimanja"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "PVR dodaci se ne mogu pronaći"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "Potreban vam je prijemnik, pozadinski softver, i"
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "Dodatak za pozadinski softver da bi mogli koristiti PVR."
+
msgctxt "#19274"
msgid "Please visit xbmc.org/pvr to learn more."
msgstr "Molimo Vas, posjetite xbmc.org/pvr za više informacija."
@@ -9145,6 +9277,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s u %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Preferiraj vanjske podnaslove"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Preferiraj vanjske podnaslove umjesto lokalnih"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Vanjski)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Naziv datoteke"
@@ -9825,14 +9969,30 @@ msgctxt "#24043"
msgid "Available Updates"
msgstr "Dostupna ažuriranja"
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Međuzavisnosti nisu ispunjene. Kontaktirajte autora dodatka."
+
msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "Dodatak nema ispravnu strukturu"
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s koristi sljedeće instalirane dodatke"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Ovaj dodatak se ne može ukloniti"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "Vrati na staro"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Nekompatiblno"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Dostupni dodaci"
@@ -9937,6 +10097,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "ZakljuÄaj Upravitelja dodatka"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Ovaj dodatak se ne može onemogućiti"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(trenutni)"
@@ -9945,6 +10109,10 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(crni-popis)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Dodatak je nekompatibilan ili je oznaÄen kao pokvaren u repozitoriju."
+
msgctxt "#24097"
msgid "Would you like to disable it on your system?"
msgstr "Želite li ga onemogućiti na vašem sustavu?"
@@ -9973,6 +10141,54 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "Presvlaci nedostaju neke datoteke"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Dodatak je nekompatibilan uslijed nezadovoljenih međuzavisnosti."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Pauziraj prilikom pretraživanja podnaslova"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Ako nisu spremljeni u mapu filma podnaslovi će biti preuzeti u prilagođenu mapu podnaslova"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Pretraživanje podnslova..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d podnaslova pronađeno"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Nema pronađenih podnaslova"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Preuzmanje podnaslova..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Jezik preuzimanja podnaslova"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Postavite jezik koji će se koristiti prilikom pretraživanja podnaslova. Svi izvori podnaslova neće koristiti sve jezike."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Neuspjelo preuzimanje podnaslova"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Nema instaliranih izvora podnaslova"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Spremi podnaslov u mapu filma"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Obavijesti"
@@ -10011,7 +10227,7 @@ msgstr "QWERTY tipkovnica"
msgctxt "#29802"
msgid "Passthrough Audio in use"
-msgstr "Korist se Audio Passthrough"
+msgstr "ZvuÄni izlazni ureÄ‘aj se korist"
msgctxt "#33001"
msgid "Trailer quality"
@@ -10077,6 +10293,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "IsjeÄci"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Ponovno pokreni dodatak za omogućavanje"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "VeÄeras"
@@ -10397,6 +10617,10 @@ msgctxt "#34110"
msgid "7.1"
msgstr "7.1"
+msgctxt "#34111"
+msgid "Select the behaviour when no sound is required for either playback or GUI sounds. [Always] - continuous inaudible signal is output, this keeps the receiving audio device alive for any new sounds, however this might also block sound from other applications. [1- 10 Minutes] - same as Always except that after the selected period of time audio enters a suspended state [Off] - audio output enters a suspended state. Note - sounds can be missed if audio enters suspended state."
+msgstr "Odaberite ponaÅ¡anje kada zvuk nije potreban, za reprodukciju ili za zvukove grafiÄkog suÄelja (GUI). [Uvijek] - neprekidan zvuÄni signal na izlazu, ovo drži izlazni zvuÄni ureÄ‘aj aktivnim za svaki novi zvuk, isto tako ovo može blokirati zvuÄni ureÄ‘aj ostalim aplikacijama. [1- 10 minuta] - isto kao i 'Uvijek' osim Å¡to nakon odabranog vremenskog razdoblja zvuk ulazi u stanje suspenzije [IskljuÄeno] - izlazni zvuk ulazi u stanje suspenzije. Napomena - zvukovi mogu biti nedostupni ako zvuk uÄ‘e u stanje suspenzije."
+
msgctxt "#34120"
msgid "Play GUI sounds"
msgstr "Reproduciraj GUI zvukove"
@@ -10413,6 +10637,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Nikada"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Nemoguće je pronaći sljedeću stavku za reprodukciju"
@@ -10525,6 +10769,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "Onemogući joystick dok je ovaj uređaj prisutan"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Omogući tipke sustava u cjelozaslonskom prikazu"
+
msgctxt "#35500"
msgid "Location"
msgstr "Lokacija"
@@ -10977,6 +11225,10 @@ msgctxt "#36168"
msgid "Maximum video speed adjust to match actual screen refresh rate."
msgstr "Najveća brzina video prilagođavanja za poklapanje s trenutnom brzinom osvježavanja zaslona."
+msgctxt "#36169"
+msgid "Select the quality of resampling for cases where the audio output needs to be at a different sampling rate from that used by the source. [Low] is fast and will have minimal impact on system resources such as the use of the CPU, [Medium] & [High] will use progressively more system resources."
+msgstr "Odaberite kavalitetu ponovnog uzrokovanja za sluÄajeve gdje zvuÄni izlaz treba biti drugaÄijeg uzorka od onog kojeg koristi izvor. [Manje] je brže i imati će minimalan utjecaj na resurse sustava poput opterećenja CPU-a, [Srednje] i [Visoko] koristiti će postupno viÅ¡e resursa sustava."
+
msgctxt "#36170"
msgid "Allow video player to ignoring aspect ratio by a certain amount to fill a larger amount of the screen with video."
msgstr "Dopusti video raproduktoru zanemarivanje određenog omjera slike za popunjavanje veće površine zaslona s videom."
@@ -11109,6 +11361,10 @@ msgctxt "#36202"
msgid "No info available yet."
msgstr "Informacije još nisu dostupne."
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Omogući znaÄajku Osobnog Video SnimaÄa (PVR) u XBMC-u. To zahtijeva bar jedan instalirani PVR dodatak."
+
msgctxt "#36204"
msgid "Import channel groups from the PVR backend (if supported). Will delete user created groups if they're not found on the backend."
msgstr "Uvezi grupu programa iz PVR pozadinskog softvera (ako je podržano). To će obristi grupe koje je napravio korisnik ako nisu pronađene na pozadinskom softveru."
@@ -11209,6 +11465,10 @@ msgctxt "#36228"
msgid "Show the last viewed channel if switching to live tv."
msgstr "Prikaži posljednji gledani program ako pokrećete televiziju."
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Prikaži informacije kvalitete signala u prozoru informacija kôdeka (ako je podržano dodatkom pozadinskog softvera)."
+
msgctxt "#36230"
msgid "No info available yet."
msgstr "Informacije još nisu dostupne."
@@ -11229,6 +11489,22 @@ msgctxt "#36234"
msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
msgstr "Trajanje snimanja kada je snimanje pokrenuto tipkom snimanja, ili kada ruÄno zakazujete novo zakazano snimanje. Zadano je 180 minuta."
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "Prioritet snimanja. Veći broj znaÄi veći prioritet. Zadani broj je 50. Nije podržano na svim dodacima i pozadinskim softverima."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Obriši snimanja nakon ovoliko vremena. Zadano je 99 dana. Nije podržano na svim dodacima i pozadinskim softverima."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Pokreni snimanja prije zadanog vremena. Zadane su 2 minute. Nije podržano na svim dodacima i pozadinskim softverima."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Zaustavi snimanja nakon zadanog vremena. Zadano je 10 minuta. Nije podržano na svim dodacima i pozadinskim softverima."
+
msgctxt "#36239"
msgid "Display a notification when timers are added, finished or removed by the backend."
msgstr "Prikaži obavijest kada je zakazano snimanje dodano, završeno ili uklonjeno iz pozadinskog softvera."
@@ -11717,10 +11993,22 @@ msgctxt "#36360"
msgid "No info available yet."
msgstr "Informacije još nisu dostupne."
+msgctxt "#36361"
+msgid "Select how the properties of the audio output are set: [Fixed] - output properties are set to the specified sampling rate & speaker configuration at all times; [Best Match] - output properties are set to always be as close a match to the source properties as possible; [Optimized] - output properties are set at the start of playback and will not change if the properties of the source changes."
+msgstr "Odaberite kako su svojstva zvuÄnog izlaza postavljena: [Nepromjenjivo] - izlazna svojstva su postavljena na odreÄ‘eno uzrokovanje i podeÅ¡avanja zvuÄnika svo vrijeme; [Najbolje odgovarajuće] - izlazna svojstva su postavljena da se uvijek Å¡to bliže podudraju svojstivima izvora koliko je to moguće; [Optimizirano] - izlazna svojstva su postavljena na poÄetku reprodukcije i neće se promijeniti ako se svojstva izvora promijene."
+
+msgctxt "#36362"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded."
+msgstr "Odaberite maksimalan broj zvuÄnih kanala/zvuÄnika dostupnih za zvuÄno dekôdiranje."
+
msgctxt "#36363"
msgid "Boost AC3 streams that have been downmixed to 2 channels."
msgstr "PojaÄaj AC3 streamove koji su pretvoreni u 2 kanala."
+msgctxt "#36364"
+msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
+msgstr "Odaberite za omogućavanje razdvajanja 2-kanalnog stereo izvora u broj zvuÄnih kanala odreÄ‘enih zvuÄnim podeÅ¡avanjima."
+
msgctxt "#36365"
msgid "Select this option if your receiver is capable of decoding AC3 streams."
msgstr "Odaberite ovu mogućnost ako je vaÅ¡ prijemnik sposoban dekôdirati AC3 zvuÄne zapise."
@@ -11729,6 +12017,14 @@ msgctxt "#36366"
msgid "Select this option if your receiver is capable of decoding DTS streams."
msgstr "Odaberite ovu mogućnost ako je vaÅ¡ prijemnik sposoban dekôdirati DTS zvuÄne zapise."
+msgctxt "#36367"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded. If optical/coax digital outputs are used this must be set to 2.0"
+msgstr "Odaberite maksimalan broj zvuÄnih kanala/zvuÄnika dostupnih za zvuÄno dekôdiranje. Ako se optiÄki/digitalani izlazi koriste, to mora biti postavljeno na 2.0. "
+
+msgctxt "#36368"
+msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
+msgstr "Odaberite za omogućavanje izlazne zvuÄne mogućnosti za reprodukciju enkôdiranog zvuka poput Dolby Digitala."
+
msgctxt "#36369"
msgid "Select this option if your receiver is capable of decoding TrueHD streams."
msgstr "Odaberite ovu mogućnost ako je vaÅ¡ prijemnik sposoban dekôdirati TrueHD zvuÄne zapise."
@@ -11737,6 +12033,14 @@ msgctxt "#36370"
msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
msgstr "Odaberite ovu mogućnost ako je vaÅ¡ prijemnik sposoban dekôdirati DTS-HD zvuÄne zapise."
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Odaberite uređaj koji će se koristiti za reprodukciju pjesama, dekôdiranih poput mp3 i FLAC-a."
+
+msgctxt "#36372"
+msgid "Select the device to be used for playback of encoded formats, these are any of the formats below in the 'capable receiver' options."
+msgstr "Odaberite uređaj koji će se koristiti za reprodukciju enkôdiranih formata, to su bilo koji formati odabrani ispod u 'kompatibilan prijemnik' mogućnosti."
+
msgctxt "#36373"
msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
msgstr "Podesite rukovanje zvukovima suÄelja, poput navigacije izbornikom i važnim obavijestima."
@@ -11937,6 +12241,10 @@ msgctxt "#36422"
msgid "Enable hardware video decode using AMLogic decoder"
msgstr "Omogući hardversko dekôdiranje video datoteka koristeći AMLogic dekôder."
+msgctxt "#36423"
+msgid "Use ffmpeg frame multiple thread decoding when hardware decoding not working or disabled. (less reliable than default single thread mode)"
+msgstr "Koristi ffmpeg viÅ¡enizno dekôdiranje sliÄica kada hardversko dekôdiranje ne radi ili je onemogućeno. (manje pouzdano nego zadani jednonizni naÄin)"
+
msgctxt "#36500"
msgid "Stereoscopic mode (current)"
msgstr "Stereoskopski naÄin (trenutno)"
@@ -11989,6 +12297,10 @@ msgctxt "#36522"
msgid "Use preferred mode"
msgstr "Koristi željeni naÄin"
+msgctxt "#36523"
+msgid "Maximum sampling rate for spdif or sampling rate for fixed output configuration"
+msgstr "Maksimalna brzina uzorkovanja za SPDIF ili brzina uzorkovanje za nepromjenjivo izlazno podešavanje"
+
msgctxt "#36524"
msgid "Preferred mode"
msgstr "Željeni naÄin"
@@ -12025,6 +12337,10 @@ msgctxt "#36532"
msgid "Same as movie"
msgstr "Isti kao film"
+msgctxt "#36533"
+msgid "Select how audio is downmixed, for example from 5.1 to 2.0: [Enabled] maintains the dynamic range of the original audio source when downmixed however volume will be lower [Disabled] maintains volume level of the original audio source however the dynamic range is compressed. Note - Dynamic range is the difference between the quietest and loudest sounds in a audio source."
+msgstr "Odaberite kako je zvuk spojen, npr. iz 5.1 u 2.0: [Omogućeno] održava dinamiÄki raspon izvornog zvuÄnog izvora kada je spojen, ipak glasnoća zvuka će biti tiÅ¡a; [Onemogućeno] održava razinu glasnoće zvuka izvornog zvuÄnog izvora, ipak dinamiÄki raspon je kompresiran. Napomena - DinamiÄki raspon je razlika izmeÄ‘u najtiÅ¡eg i najglasnijeg zvuka u zvuÄnom izvoru."
+
msgctxt "#36535"
msgid "Stereoscopic mode of video"
msgstr "Stereoskopski naÄin videa"
@@ -12108,3 +12424,7 @@ msgstr "Dvostruki zvuÄni izlaz"
msgctxt "#37018"
msgid "Boost centre channel when downmixing"
msgstr "PojaÄaj srediÅ¡nji kanal pri spajanju kanala zvuka"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Omogućava tipke sustava poput 'Print Screen', 'Alt-Tab' i tipke glasnoće zvuka u cjelozaslonskom prikazu"
diff --git a/language/Czech/strings.po b/language/Czech/strings.po
index 90693c098c..d2fd5c7dac 100644
--- a/language/Czech/strings.po
+++ b/language/Czech/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Převod rychlosti snímků"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Pevné"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Různí umělci"
@@ -3389,6 +3393,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Obnovit"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standardní"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Opravdu si přejete obnovit nastavení v této kategorii?"
diff --git a/language/Danish/strings.po b/language/Danish/strings.po
index d37de9ec28..61d5ef4872 100644
--- a/language/Danish/strings.po
+++ b/language/Danish/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Juster billedhastighed"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fast"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Diverse kunstnere"
@@ -3437,6 +3441,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Nulstil"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Er du sikker på at du vil nulstille indstillingerne for denne kategori?"
diff --git a/language/Dutch/strings.po b/language/Dutch/strings.po
index 5f47d3b5c7..3f982cecf9 100644
--- a/language/Dutch/strings.po
+++ b/language/Dutch/strings.po
@@ -727,7 +727,7 @@ msgstr "Gebruikersomgeving kalibreren"
msgctxt "#214"
msgid "Video calibration..."
-msgstr "Beeldscherm kalibreren..."
+msgstr "Beeld kalibreren..."
msgctxt "#215"
msgid "Soften"
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Framerateconversie"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Uitgangsconfiguratie"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Vast"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Geoptimaliseerd"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Diverse artiesten"
@@ -1213,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "Jaar"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normaliseer niveaus bij downmixen"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "DTS-HD geschikte obtvanger"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Activeer Passthrough"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "TrueHD geschikte ontvanger"
@@ -1493,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "Max"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Beste overeenkomst"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Audioapparaat 'levend' houden"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Albuminformatie wissen"
@@ -1637,6 +1665,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Layout wijzigen"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Sampling rate (kHz) limiteren"
+
msgctxt "#459"
msgid "Subs"
msgstr "Ondertitels"
@@ -2921,6 +2953,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Programma add-ons"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Plugin-afbeelding instellen"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Add-on instellingen"
@@ -3485,10 +3521,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Reset"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Basis"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standaard"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Geavanceerd"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Expert"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Addon verkenner"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Herstel bovengenoemde instellingen naar standaard"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Weet je zeker dat je alle instellingen in deze categorie naar de standaard wilt terugzetten?"
@@ -3501,6 +3557,18 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Geen hulp beschikbaar"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Herstelt alle zichtbare instellingen naar hun standaardwaarden."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Geen categorieën beschikbaar"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Probeer het instellingsniveau te veranderen om extra categorien en instellingen te zien."
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "Ja/Nee dialoog"
@@ -3837,6 +3905,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "Maximaal aantal pogingen bereikt"
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Het systeem zal nu worden uitgeschakeld."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Item vergrendeld"
@@ -4137,6 +4209,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Resolutie behouden?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Wilt u deze verandering behouden?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Hoge kwaliteit beeldverbetering"
@@ -4181,6 +4257,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "VDPAU Studio level kleur conversie"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Skin behouden?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "Stop doorgifte videosignaal aan andere beeldschermen"
@@ -4901,6 +4981,10 @@ msgctxt "#13439"
msgid "Allow hardware acceleration (MediaCodec)"
msgstr "Hardwareversnelling inschakelen (mediacodec)"
+msgctxt "#13440"
+msgid "Frame Multi Threaded Decoding (less reliable)"
+msgstr "Frame multi-threaded decodering (minder betrouwbaar)"
+
msgctxt "#13500"
msgid "A/V sync method"
msgstr "A/V-synchronisatiemethode"
@@ -4985,6 +5069,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f Seconden"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d minuut"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Minuten"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Apple afstandsbediening"
@@ -5311,7 +5403,7 @@ msgstr "Tijdzone"
msgctxt "#14081"
msgid "File lists"
-msgstr "Bestandlijsten"
+msgstr "Bestandslijsten"
msgctxt "#14082"
msgid "Show EXIF picture information"
@@ -5669,6 +5761,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Titel aanpassen"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Beheren..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Sorteertitel aanpassen"
@@ -6213,6 +6309,18 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Waarschuwing"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Dienst"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Provider"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Schakel over naar een ander kanaal"
@@ -6661,6 +6769,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "TV gids"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "Geen PVR Add-on kon worden geactiveerd. Controleer uw instellingen of kijk in het logbestand voor meer informatie."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "Opname geannuleerd"
@@ -6701,6 +6813,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "Toon een melding bij timer updates"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Gebruik kanaalnummers van de backend (alleen als 1 PVR add-on actief is)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "PVR manager is starting up"
@@ -6721,10 +6837,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "Achtergrond threads worden gestart"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Geen PVR add-on ingeschakeld"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "De PVR manager is ingeschakeld zonder ingeschakelde"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "Geactiveerde PVR add-on. Schakel tenminste een add-on in"
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "om de PVR functie te gebruiken."
@@ -6837,10 +6961,18 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Alle opnames"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Er konden geen PVR add-ons gevonden worden"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "U heeft een tuner, backend software, en een"
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "Add-on voor de backend om PVR te kunnen gebruiken."
+
msgctxt "#19274"
msgid "Please visit xbmc.org/pvr to learn more."
msgstr "Zie xbmc.org/pvr voor meer informatie."
@@ -9145,6 +9277,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s naar %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Voorkeur voor externe ondertitels"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Voorkeur voor externe ondertitels ten opzichte van interne"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(extern)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Bestandsnaam"
@@ -9825,14 +9969,30 @@ msgctxt "#24043"
msgid "Available Updates"
msgstr "Beschikbare updates"
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Afhankelijkheden komen niet overeen. Neem contact op met de Add-on auteur."
+
msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "Add-on heeft niet de juiste structuur"
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s wordt gebruikt door volgende geinstalleerde add-on(s)"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Deze add-on kan niet worden verwijderd"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "Ongedaan maken"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Niet compatibel"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Beschikbare add-ons"
@@ -9937,6 +10097,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Add-onmanager vastzetten"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Deze Add-on kan niet worden gedeactiveerd"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(huidige)"
@@ -9945,6 +10109,10 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(geblacklist)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Add-on is niet compatibel of is gemarkeerd als niet werkend in het repository."
+
msgctxt "#24097"
msgid "Would you like to disable it on your system?"
msgstr "Wilt u de add-on uitschakelen?"
@@ -9973,6 +10141,54 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "Skin mist enkele bestanden"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Add-on is niet compatibel vanwege onvervulde afhankelijkheden."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Pauzeer wanneer er wordt gezocht naar ondertitels"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Als de ondertitels niet worden opgeslagen in de filmmap dan worden de ondertitels gedownload naar een aangepaste ondertitelmap"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Zoeken naar ondertitels..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d ondertitels gevonden"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Geen ondertitels gevonden"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Downloaden ondertitels..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Talen van te downloaden ondertitels"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Stel te gebruiken talen in wanneer er wordt gezocht naar ondertitels. Niet alle ondertitel diensten gebruiken alle talen."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Niet gelukt ondertitel te downloaden"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Geen ondertitel dienst geïnstalleerd"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Sla ondertitels op in filmmap"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Mededelingen"
@@ -10077,6 +10293,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Clips"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Herstart Plug-in om te activeren"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Vannacht"
@@ -10397,6 +10617,10 @@ msgctxt "#34110"
msgid "7.1"
msgstr "7.1"
+msgctxt "#34111"
+msgid "Select the behaviour when no sound is required for either playback or GUI sounds. [Always] - continuous inaudible signal is output, this keeps the receiving audio device alive for any new sounds, however this might also block sound from other applications. [1- 10 Minutes] - same as Always except that after the selected period of time audio enters a suspended state [Off] - audio output enters a suspended state. Note - sounds can be missed if audio enters suspended state."
+msgstr "Selecteer het gedrag in wanneer geen geluid is vereist voor ofwel afspelen of GUI geluiden. [Altijd] - Doorlopend onhoorbaar signaal is uitgang, dit behoud het ontvangende geluidsapparaat beschikbaar voor alle nieuwe geluiden, Echter dit kan eveneens ook geluid van andere applicaties blokkeren. [1- 10 minuten] - Hetzelfde als altijd behalve na de geselecteerde periode of tijd wanneer geluid in en onderbroken staat gaat [uit] - Geluidsuitvoer in een onderbroken staat. opmerking - geluiden kunnen worden gemist als geluiden worden onderbroken."
+
msgctxt "#34120"
msgid "Play GUI sounds"
msgstr "Interface geluiden afspelen"
@@ -10413,6 +10637,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Nooit"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Kan volgende item niet vinden om af te spelen"
@@ -10525,6 +10769,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "Zet joysticks uit wanneer die present zijn"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Activeer systeem knoppen in volledig scherm"
+
msgctxt "#35500"
msgid "Location"
msgstr "Locatie"
@@ -10595,7 +10843,7 @@ msgstr "Kon de COM poort niet detecteren. Stel het manueel in."
msgctxt "#36012"
msgid "Could not initialise the CEC adaptor. Please check your settings."
-msgstr "Kon de CEC adapter niet initialiseren. Controleer je instellingen."
+msgstr "Kon de CEC adapter niet initialiseren. Controleer uw instellingen."
msgctxt "#36015"
msgid "HDMI port number"
@@ -10667,7 +10915,7 @@ msgstr "Deze gebruiker heeft geen toestemming om de CEC adapter te openen."
msgctxt "#36032"
msgid "The port is busy. Only one program can access the CEC adaptor"
-msgstr "Deze poort is in gebruik. Slechts een programma tegelijkertijd kan toegang hebben tot de CEC adapter"
+msgstr "Deze poort is in gebruik. Slechts één programma tegelijkertijd kan toegang hebben tot de CEC adapter"
msgctxt "#36033"
msgid "Pause playback when switching to another source"
@@ -10975,7 +11223,11 @@ msgstr "Audio moet gesynchroniseerd blijven: dit is mogelijk ofwel via 'resampli
msgctxt "#36168"
msgid "Maximum video speed adjust to match actual screen refresh rate."
-msgstr "Pas de maximum videosnelheid aan gelijk aan de actuele beeldschermverversingssnelheid "
+msgstr "Maximale aanpassing van de videosnelheid aan de actuele beeldschermverversingssnelheid."
+
+msgctxt "#36169"
+msgid "Select the quality of resampling for cases where the audio output needs to be at a different sampling rate from that used by the source. [Low] is fast and will have minimal impact on system resources such as the use of the CPU, [Medium] & [High] will use progressively more system resources."
+msgstr "Selecteer de kwaliteit van resampling voor gevallen waarbij de audio-uitvoer op een andere sampling rate moet zijn dan die gebruikt door de bron. [laag] is snel en heeft weinig invloed op systeembronnen zoals het gebruik van de processor, [gemiddeld] & [hoog] Zal geleidelijk meer systeembronnen gebruiken."
msgctxt "#36170"
msgid "Allow video player to ignoring aspect ratio by a certain amount to fill a larger amount of the screen with video."
@@ -11109,6 +11361,10 @@ msgctxt "#36202"
msgid "No info available yet."
msgstr "Nog geen informatie beschikbaar."
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Activeer de personal Video Recorder (PVR) functies in XBMC. dit vereist dat minstens één PVR Add-on is geïnstalleerd."
+
msgctxt "#36204"
msgid "Import channel groups from the PVR backend (if supported). Will delete user created groups if they're not found on the backend."
msgstr "Importeer kanaalgroepen vanuit de PVR back-end (indien ondersteund). Dit zal lokaal aangemaakte groepen verwijderen indien deze niet teruggevonden worden op de back-end."
@@ -11209,6 +11465,10 @@ msgctxt "#36228"
msgid "Show the last viewed channel if switching to live tv."
msgstr "Toon het laatstbekeken kanaal bij het schakelen naar Live TV."
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Toon signaalkwaliteitsinformatie in het codec informatiescherm (indien ondersteund door de add-on en back-end)."
+
msgctxt "#36230"
msgid "No info available yet."
msgstr "Nog geen informatie beschikbaar."
@@ -11229,6 +11489,22 @@ msgctxt "#36234"
msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
msgstr "Duurtijd van de opname wanneer de opnameknop ingedrukt wordt, of wanneer een nieuwe manuele timer ingesteld wordt. Standaard 180 minuten."
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "Prioriteit van de opname. Een hoger getal betekent een hogere prioriteit. Standaard op 50. Niet ondersteund door alle add-ons en back-ends."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Verwijder opname automatisch na deze tijd. Standaard op 99 dagen. Niet ondersteund door alle add-ons en back-ends."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Start opnames voor de eigenlijke starttijd. Standaard op 2 minuten. Niet ondersteund door alle add-ons en back-ends."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Beëindig opnames na de eigenlijke tijd. Standaard op 10 minuten. Niet ondersteund door alle add-ons en back-ends."
+
msgctxt "#36239"
msgid "Display a notification when timers are added, finished or removed by the backend."
msgstr "Toon een boodschap wanneer er timers toegevoegd of afgelopen zijn of verwijderd door de back-end."
@@ -11717,10 +11993,22 @@ msgctxt "#36360"
msgid "No info available yet."
msgstr "Nog geen informatie beschikbaar."
+msgctxt "#36361"
+msgid "Select how the properties of the audio output are set: [Fixed] - output properties are set to the specified sampling rate & speaker configuration at all times; [Best Match] - output properties are set to always be as close a match to the source properties as possible; [Optimized] - output properties are set at the start of playback and will not change if the properties of the source changes."
+msgstr "Selecteer hoe de eigenschappen van de geluidsuitvoer zijn ingesteld: [Vast] - uitvoer eigenschappen zijn ingesteld naar de gespecificeerde sampling rate & speaker configuratie ten alle tijde; [Beste overeenkomst] - uitvoereigenschappen zijn zo ingesteld dat ze altijd zo dicht mogelijk overeenkomen met de broneigenschappen als mogelijk; [Geoptimaliseerd] - uitvoereigenschappen zijn ingesteld bij het begin van afspelen en zullen niet veranderen als de eigenschappen van de bron veranderen."
+
+msgctxt "#36362"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded."
+msgstr "Selecteer het maximum aantal geluidskanalen/speakers beschikbaar voor gedecodeerde geluiden."
+
msgctxt "#36363"
msgid "Boost AC3 streams that have been downmixed to 2 channels."
msgstr "Versterk AC3 geluid dat gedownmixt werd naar 2 kanalen."
+msgctxt "#36364"
+msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
+msgstr "Selecteer om upmixing te activeren van 2-kanaals stereobronnen naar het aantal geluidskanalen gespecificeerd door de speaker configuratie."
+
msgctxt "#36365"
msgid "Select this option if your receiver is capable of decoding AC3 streams."
msgstr "Kies deze optie als uw ontvanger Dolby Digital / AC3 digitaal geluid kan decoderen."
@@ -11729,6 +12017,14 @@ msgctxt "#36366"
msgid "Select this option if your receiver is capable of decoding DTS streams."
msgstr "Kies deze optie als uw ontvanger DTS digitaal geluid kan decoderen."
+msgctxt "#36367"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded. If optical/coax digital outputs are used this must be set to 2.0"
+msgstr "Selecteer het maximum aantal geluidskanalen/speakers beschikbaar voor gedecodeerde geluiden. Als optische/coax digitale uitgangen worden gebruikt moet dit worden ingesteld op 2.0"
+
+msgctxt "#36368"
+msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
+msgstr "Selecteer om doorvoer geluidsopties voor afpelen van gecodeerde audio zoals Dolby Digital te activeren."
+
msgctxt "#36369"
msgid "Select this option if your receiver is capable of decoding TrueHD streams."
msgstr "Kies deze optie als uw ontvanger Dolby TrueHD digitaal geluid kan decoderen."
@@ -11737,6 +12033,14 @@ msgctxt "#36370"
msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
msgstr "Kies deze optie als uw ontvanger DTS-HD digitaal geluid kan decoderen."
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Selecteer het apparaat dat moet worden gebruikt voor het afspelen van gedecodeerd geluid zoals MP3"
+
+msgctxt "#36372"
+msgid "Select the device to be used for playback of encoded formats, these are any of the formats below in the 'capable receiver' options."
+msgstr "Selecteer het apparaat dat moet worden gebruikt voor het afspelen van gecodeerde formaten. Dit zijn alle formaten genoemd in de 'capabele ontvanger' opties."
+
msgctxt "#36373"
msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
msgstr "Kies hoe interfacegeluiden moet afgespeeld worden, zoals navigatiegeluiden en belangrijke notificaties."
@@ -11937,6 +12241,10 @@ msgctxt "#36422"
msgid "Enable hardware video decode using AMLogic decoder"
msgstr "Schakel Hardware video decodering in met gebruik van AMLogic decoder"
+msgctxt "#36423"
+msgid "Use ffmpeg frame multiple thread decoding when hardware decoding not working or disabled. (less reliable than default single thread mode)"
+msgstr "Gebruik ffmpeg frame multi-thread decoderen wanneer hardware decodering niet werkt of is gedeactiveerd. (Minder betrouwbaar dan de standaard single thread modus)"
+
msgctxt "#36500"
msgid "Stereoscopic mode (current)"
msgstr "Stereoscopische modus (huidig)"
@@ -11989,6 +12297,10 @@ msgctxt "#36522"
msgid "Use preferred mode"
msgstr "Voorkeursmodus gebruiken"
+msgctxt "#36523"
+msgid "Maximum sampling rate for spdif or sampling rate for fixed output configuration"
+msgstr "Maximum sampling rate voor spdif of sampling rate voor vaste uitvoer configuratie"
+
msgctxt "#36524"
msgid "Preferred mode"
msgstr "Voorkeursmodus"
@@ -12025,6 +12337,10 @@ msgctxt "#36532"
msgid "Same as movie"
msgstr "Zelfde als film"
+msgctxt "#36533"
+msgid "Select how audio is downmixed, for example from 5.1 to 2.0: [Enabled] maintains the dynamic range of the original audio source when downmixed however volume will be lower [Disabled] maintains volume level of the original audio source however the dynamic range is compressed. Note - Dynamic range is the difference between the quietest and loudest sounds in a audio source."
+msgstr "Selecteer hoe geluid wordt gedownmixed. als voorbeeld van 5.1 naar 2.0: [Geactiveerd] behoudt het dynamische bereik van de originele geluidsbron wanneer er wordt gedownmixed, echter volume zal lager zijn [Gedeactiveerd] behoudt het volumeniveau van de originele geluidsbron echter het dynamische bereik is gecomprimeerd. Opmerking - dynamisch bereik is het verschil tussen de zachtste en hardste geluiden in een geluidsbron."
+
msgctxt "#36535"
msgid "Stereoscopic mode of video"
msgstr "Stereoscopische modus van video"
@@ -12055,7 +12371,7 @@ msgstr "Laat toe om het volume aan te passen van AirPlay clients."
msgctxt "#36542"
msgid "Output to both analogue (headphones) and HDMI"
-msgstr "Uitzenden naar zowel analoog (koptelefoon) als HDMI"
+msgstr "Uitvoeren naar zowel analoog (koptelefoon) als HDMI"
msgctxt "#36543"
msgid "Enable this to make dialogue louder compared to background sounds when downmixing multichannel audio"
@@ -12103,8 +12419,12 @@ msgstr "Kies deze optie als uw receiver (versterker) in staat is om E-AC3 digita
msgctxt "#37017"
msgid "Dual audio output"
-msgstr "Tweezijdige Geluidsuitvoer"
+msgstr "Dubbele Geluidsuitvoer"
msgctxt "#37018"
msgid "Boost centre channel when downmixing"
msgstr "Boost middenkanaal bij downmixen"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Activeer systeemknoppen zoals Printscreen, Alt-tab en volumeknoppen bij volledig scherm"
diff --git a/language/English (US)/strings.po b/language/English (US)/strings.po
index 90face4547..994ddd6e9e 100644
--- a/language/English (US)/strings.po
+++ b/language/English (US)/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Framerate conversion"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fixed"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Various artists"
@@ -3485,6 +3489,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Reset"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Add-on browser"
diff --git a/language/English/strings.po b/language/English/strings.po
index 1f666ba5a0..0cb5e05d0f 100755
--- a/language/English/strings.po
+++ b/language/English/strings.po
@@ -6594,9 +6594,25 @@ msgctxt "#14100"
msgid "Stop ripping CD"
msgstr ""
-#empty strings from id 14101 to 15014
+#empty strings from id 14101 to 15011
+
+#: xbmc/video/VideoDatabase.cpp
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr ""
+
+#: xbmc/video/VideoDatabase.cpp
+msgctxt "#15013"
+msgid "What would you like to do with media items from"
+msgstr ""
+
+#: xbmc/video/VideoDatabase.cpp
+msgctxt "#15014"
+msgid "Keep"
+msgstr ""
#: xbmc/dialogs/GUIDialogFavourites.cpp
+#: xbmc/video/VideoDatabase.cpp
msgctxt "#15015"
msgid "Remove"
msgstr ""
diff --git a/language/Esperanto/strings.po b/language/Esperanto/strings.po
index ba74a3a579..78c43a90e1 100644
--- a/language/Esperanto/strings.po
+++ b/language/Esperanto/strings.po
@@ -1221,6 +1221,10 @@ msgctxt "#406"
msgid "Humidity"
msgstr "Humideco"
+msgctxt "#409"
+msgid "Defaults"
+msgstr "Standard"
+
msgctxt "#410"
msgid "Accessing weather service"
msgstr "Accessing Wealar.com"
@@ -2417,6 +2421,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Preferoj->Provicos"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10500"
msgid "Music/Playlist"
msgstr "Mia Muziko/Playlist"
diff --git a/language/Estonian/strings.po b/language/Estonian/strings.po
index cd96d1a030..a0ce40206a 100644
--- a/language/Estonian/strings.po
+++ b/language/Estonian/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Kaadrisageduse konverteerimine"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fikseeritud"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Erinevad artistid"
@@ -3421,6 +3425,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Lähtesta"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Normaalne"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Oled kindel, et soovid selle kategooria seaded lähtestada?"
diff --git a/language/Faroese/strings.po b/language/Faroese/strings.po
index fc8dc5580c..c1771e5de8 100644
--- a/language/Faroese/strings.po
+++ b/language/Faroese/strings.po
@@ -1069,6 +1069,10 @@ msgctxt "#335"
msgid "Start"
msgstr "Byrja"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Rætta"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Ymiskir tónleikarar"
@@ -2985,6 +2989,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Stillingar - Uppsetingar"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Vanligt"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "Læs stillingar"
diff --git a/language/Finnish/strings.po b/language/Finnish/strings.po
index f77d0eb8a0..5da4b8f23b 100644
--- a/language/Finnish/strings.po
+++ b/language/Finnish/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Kuvataajuuden muunto"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Kiinteä"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Eri esittäjiä"
@@ -3433,6 +3437,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Resetoida"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Normaali"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Oletko varma että haluat resetoida tämän ryhmän asetukset?"
diff --git a/language/French/strings.po b/language/French/strings.po
index 56be73971e..c771e17a4d 100644
--- a/language/French/strings.po
+++ b/language/French/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Conversion du taux de rafraîchissement"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Configuration de la sortie"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fixe"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Optimisé"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Artistes divers"
@@ -1213,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "Année"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normalise le volume lors du démultiplexage"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "récepteur compatible DTS-HD"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Activer le passthrough"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "récepteur compatible TrueHD"
@@ -1493,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "Max."
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Meilleure correspondance"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Garde le périphérique audio actif"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Supprimer les informations pour l'album"
@@ -1637,6 +1665,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Changer de vue"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Limiter le taux d'échantillonnage (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Sous-titres"
@@ -2921,6 +2953,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Extensions programme"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Choisir une vignette plug-in"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Paramètres de l'extension"
@@ -3485,10 +3521,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Réinitialiser"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Basique"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Avancé"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Expert"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Extension navigateur"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Réinitialiser toutes les préférences ci-dessus aux valeurs par défaut"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Êtes-vous sûr de vouloir réinitialiser les paramètres de cette catégorie?"
@@ -3501,6 +3557,18 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Pas d'aide disponible"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Réinitialiser toutes les préférences visibles aux valeurs par défaut."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Aucune catégorie disponible"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Essayez de changer le niveau de paramètres pour voir d'autres catégories et paramètres."
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "Boîte de dialogue Oui/Non"
@@ -3837,6 +3905,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "Dépassement du nombre d'essais autorisés."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Le système va maintenant s'éteindre."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Sécurisé"
@@ -4137,6 +4209,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Appliquer cette résolution ?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Voulez-vous conserver ce changement ?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Conversion en définition supérieure Haute Qualité"
@@ -4181,6 +4257,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "Conversion des niveaux de couleurs VDPAU"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Garder le thème ?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "Vider les autres écrans"
@@ -4901,6 +4981,10 @@ msgctxt "#13439"
msgid "Allow hardware acceleration (MediaCodec)"
msgstr "Autoriser l'accélération matérielle (MediaCodec)"
+msgctxt "#13440"
+msgid "Frame Multi Threaded Decoding (less reliable)"
+msgstr "Décodage vidéo multi thread (moins fiable)"
+
msgctxt "#13500"
msgid "A/V sync method"
msgstr "Méthode de synchro. A/V"
@@ -4985,6 +5069,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f Secondes"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Minute"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Minutes"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Télécommande Apple"
@@ -5669,6 +5761,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Éditer le titre"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Gérer..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Editer le tri sur le titre"
@@ -6213,6 +6309,14 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Attention"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Service"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Fournisseur"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Changer de chaîne SVP"
@@ -6661,6 +6765,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "Guide des Programmes"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "Impossible d'activer une extension d'Enregistreur Vidéo. Vérifiez le journal pour plus de détails."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "Enregistrement annulé"
@@ -6701,6 +6809,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "Afficher à la mise à jour de la minuterie"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Utiliser les N° de chaînes du serveur (seulement si 1 extension PVR active)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "Démarrage du gestionnaire d'Enregistreur Vidéo"
@@ -6721,10 +6833,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "Démarrage des services d'arrière-plan"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Pas d'extension d'Enregistreur Vidéo activée"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "Le gestionnaire d'Enregistreur Vidéo a été activé sans"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "qu'une extension d'enregistrement ne le soit. Activez-en au moins une "
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "pour utiliser cette fonctionnalité."
@@ -6837,10 +6957,18 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Tous les enregistrements"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Aucune extension d'Enregistreur Vidéo trouvée"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "Vous avez besoin d'un tuner, d'un logiciel applicatif et d'une"
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "extension de traitement pour utiliser l'Enregistreur Vidéo."
+
msgctxt "#19274"
msgid "Please visit xbmc.org/pvr to learn more."
msgstr "Visitez xbmc.org/pvr pour en savoir plus."
@@ -9145,6 +9273,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s à %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Préférer les sous-titres externes"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Préférer les sous-titres externes aux sous-titres internes"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Externe)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Nom du fichier"
@@ -9825,14 +9965,30 @@ msgctxt "#24043"
msgid "Available Updates"
msgstr "Mises à jour disponibles"
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Dépendances non satisfaites. Merci de contacter l'auteur de l'extension."
+
msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "Structure de l'extension incorrecte"
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s est utilisé par l'(es) extension(s) suivante(s)"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Cette extension ne peut être désinstallée"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "Annulation de la transaction"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Incompatible"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Extensions disponibles"
@@ -9937,6 +10093,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Verrouiller le gestionnaire d'extension"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Cette extension ne peut être désactivée"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(actuel)"
@@ -9945,6 +10105,10 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(sur liste noire)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Le dépôt indique que cette extension est incompatible ou inutilisable."
+
msgctxt "#24097"
msgid "Would you like to disable it on your system?"
msgstr "Voulez-vous la désactiver dans votre système ?"
@@ -9973,6 +10137,54 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "Le thème est incomplet"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "L'extension est incompatible à cause de dépendances non satisfaites."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Pause lors de la recherche de sous-titres"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "S'ils ne sont pas enregistrés dans le répertoire des sous-titres du film, ils seront téléchargés dans un répertoire de sous-titres personnalisé"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Recherche de sous-titres..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d sous-titres trouvés"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Aucuns sous-titres trouvés"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Téléchargement des sous-titres ..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Langues pour les sous-titres à télécharger"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "définir les langues à utiliser lors de la recherche de sous-titres. Tous les services de sous-titres n'utilisent pas toutes les langues."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Échec lors du téléchargement des sous-titres"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Aucun service de sous-titres installé"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Sauvegarder les sous-titres dans le répertoire du film"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Notifications"
@@ -10077,6 +10289,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Clips"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Relancer l'extension pour activer"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Ce soir"
@@ -10397,6 +10613,10 @@ msgctxt "#34110"
msgid "7.1"
msgstr "7.1"
+msgctxt "#34111"
+msgid "Select the behaviour when no sound is required for either playback or GUI sounds. [Always] - continuous inaudible signal is output, this keeps the receiving audio device alive for any new sounds, however this might also block sound from other applications. [1- 10 Minutes] - same as Always except that after the selected period of time audio enters a suspended state [Off] - audio output enters a suspended state. Note - sounds can be missed if audio enters suspended state."
+msgstr "Choisir le comportement quand aucun son n'est requis aussi bien pour la lecture que pour la navigation. [Toujours] - un signal inaudible continue est émis afin de garder le périphérique audio actif, cependant cela peut bloquer les sons des autres applications. [1-10 Minutes] - Identique à Toujours excepté qu'après la fin de la période sélectionnée, le périphérique audio entrera en veille. [Off] - le périphérique audio entrera en veille. Note - des sons peuvent être manqués si le périphérique entre en veille."
+
msgctxt "#34120"
msgid "Play GUI sounds"
msgstr "Navigation sonore"
@@ -10413,6 +10633,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Jamais"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Aucun média suivant à jouer"
@@ -10525,6 +10765,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "Désactiver le joystick quand ce dispositif est connecté"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Activer les touches systèmes en plein écran"
+
msgctxt "#35500"
msgid "Location"
msgstr "Emplacement"
@@ -10977,6 +11221,10 @@ msgctxt "#36168"
msgid "Maximum video speed adjust to match actual screen refresh rate."
msgstr "Ajustement maximal de la vitesse d'affichage vidéo pour correspondre au taux de rafraîchissement de l'écran."
+msgctxt "#36169"
+msgid "Select the quality of resampling for cases where the audio output needs to be at a different sampling rate from that used by the source. [Low] is fast and will have minimal impact on system resources such as the use of the CPU, [Medium] & [High] will use progressively more system resources."
+msgstr "Sélectionner la qualité du ré-échantillonnage dans le cas ou la sortie audio a besoin d'être à un taux différent de celui de la source. [Bas] est rapide et minimisera l'impact sur des ressources systèmes comme la CPU, [Moyen] & [Haut] vont utiliser progressivement plus de ressources système."
+
msgctxt "#36170"
msgid "Allow video player to ignoring aspect ratio by a certain amount to fill a larger amount of the screen with video."
msgstr "Permettre au lecteur vidéo d'ignorer l'aspect ratio à partir d'un certain point afin de remplir une plus grande partie de l'écran avec la vidéo."
@@ -11109,6 +11357,10 @@ msgctxt "#36202"
msgid "No info available yet."
msgstr "Pas d'information actuellement disponible."
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Activer les fonctionnalités de magnétoscope numérique (PVR) dans XBMC. Cela nécessite au moins une extension compatible installée."
+
msgctxt "#36204"
msgid "Import channel groups from the PVR backend (if supported). Will delete user created groups if they're not found on the backend."
msgstr "Importer les groupes de chaînes depuis le programme de magnétoscope numérique (si supporté). Les groupes créés par les utilisateurs seront supprimés si ils ne sont pas trouvés dans l'import."
@@ -11209,6 +11461,10 @@ msgctxt "#36228"
msgid "Show the last viewed channel if switching to live tv."
msgstr "Afficher la dernière chaîne visionnée en sélectionnant TV en direct."
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Afficher la qualité du signal dans la fenêtre des informations codecs (si supporté par l'extension et le serveur)."
+
msgctxt "#36230"
msgid "No info available yet."
msgstr "Pas d'information actuellement disponible."
@@ -11229,6 +11485,22 @@ msgctxt "#36234"
msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
msgstr "Durée de l'enregistrement en pressant le bouton Enregistrer, ou en créant un enregistrement manuel. Par défaut 180 minutes."
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "Priorité de l'enregistrement. Plus le nombre est grand, plus la priorité est haute. Par défaut 50. Pas supporté par tous les extensions et tous les serveurs."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Supprimer les enregistrements après le délai. Par défaut 99 jours. Pas supporté par tous les extensions et tous les serveurs."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Démarrer l'enregistrement avant l'heure programmée. Par défaut 2 minutes. Pas supporté par tous les extensions et tous les serveurs."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Terminer l'enregistrement après l'heure programmée. Par défaut 10 minutes. Pas supporté par tous les extensions et tous les serveurs."
+
msgctxt "#36239"
msgid "Display a notification when timers are added, finished or removed by the backend."
msgstr "Afficher une notification quand un enregistrement est ajouté, terminé ou supprimé par le serveur."
@@ -11717,10 +11989,22 @@ msgctxt "#36360"
msgid "No info available yet."
msgstr "Pas d'information actuellement disponible."
+msgctxt "#36361"
+msgid "Select how the properties of the audio output are set: [Fixed] - output properties are set to the specified sampling rate & speaker configuration at all times; [Best Match] - output properties are set to always be as close a match to the source properties as possible; [Optimized] - output properties are set at the start of playback and will not change if the properties of the source changes."
+msgstr "Sélectionner commet les propriétés de la sortie audio seront positionnées : [Fixe] - les propriétés de sortie sont positionnées pour le taux d'échantillonnage spécifié et les configuration des enceintes une fois pour toute ; [Meilleure correspondance] - les propriétés de sortie sont positionnées pour être toujours le plus proche possible de la source ; [Optimisé] - les propriétés de sortie sont positionnées au début de la lecture et ne changeront pas si les propriétés de la source changent."
+
+msgctxt "#36362"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded."
+msgstr "Sélectionner le nombre maximum de canaux audio/haut-parleurs disponibles pour le décodage audio."
+
msgctxt "#36363"
msgid "Boost AC3 streams that have been downmixed to 2 channels."
msgstr "Amplifier les flux AC3 qui ont été réduit à 2 voies."
+msgctxt "#36364"
+msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
+msgstr "Sélectionner pour activer le surmixage des sources stéréo à 2 voies au nombre de voies audio spécifiées par la configuration des haut-parleurs."
+
msgctxt "#36365"
msgid "Select this option if your receiver is capable of decoding AC3 streams."
msgstr "Sélectionner cette option si votre récepteur est capable de décoder les flux AC3."
@@ -11729,6 +12013,14 @@ msgctxt "#36366"
msgid "Select this option if your receiver is capable of decoding DTS streams."
msgstr "Sélectionner cette option si votre récepteur est capable de décoder les flux DTS."
+msgctxt "#36367"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded. If optical/coax digital outputs are used this must be set to 2.0"
+msgstr "Sélectionner le nombre maximum de canaux audio/haut-parleurs disponibles pour le décodage audio. Si des sorties optiques/coaxiales sont utilisés, ce nombre doit être défini à 2.0"
+
+msgctxt "#36368"
+msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
+msgstr "Sélectionner pour activer les options audio de passthrough pour la lecture de pistes audio encodées comme le Dolby Digital."
+
msgctxt "#36369"
msgid "Select this option if your receiver is capable of decoding TrueHD streams."
msgstr "Sélectionner cette option si votre récepteur est capable de décoder les flux TrueHD."
@@ -11737,6 +12029,14 @@ msgctxt "#36370"
msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
msgstr "Sélectionner cette option si votre récepteur est capable de décoder les flux DTS-HD."
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Sélectionner le périphérique à utiliser pour la lecture des fichiers audio décodés tels que mp3"
+
+msgctxt "#36372"
+msgid "Select the device to be used for playback of encoded formats, these are any of the formats below in the 'capable receiver' options."
+msgstr "Sélectionner le périphérique à utiliser pour la lecture des format encodés, qui peuvent être n'importe lequel des formats ci-dessous dans les options 'capacité du récepteur'."
+
msgctxt "#36373"
msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
msgstr "Configurer comment sont gérés les sons de l'interface, tels que la navigation du menu ou les notifications importantes."
@@ -11937,6 +12237,10 @@ msgctxt "#36422"
msgid "Enable hardware video decode using AMLogic decoder"
msgstr "Activer le décodage vidéo matériel en utilisant le décodeur AMLogic"
+msgctxt "#36423"
+msgid "Use ffmpeg frame multiple thread decoding when hardware decoding not working or disabled. (less reliable than default single thread mode)"
+msgstr "Utilise le décodage vidéo multi thread de ffmpeg quand le décodage matériel ne marche pas ou est désactivé. (moins fiable que le mode par défaut mono thread)"
+
msgctxt "#36500"
msgid "Stereoscopic mode (current)"
msgstr "Mode stéréoscopique (actuel)"
@@ -11989,6 +12293,10 @@ msgctxt "#36522"
msgid "Use preferred mode"
msgstr "Utiliser le mode préféré"
+msgctxt "#36523"
+msgid "Maximum sampling rate for spdif or sampling rate for fixed output configuration"
+msgstr "Taux d'échantillonnage maxi pour SPDIF ou taux d'échantillonnage pour la configuration sortie fixe"
+
msgctxt "#36524"
msgid "Preferred mode"
msgstr "Mode préféré"
@@ -12025,6 +12333,10 @@ msgctxt "#36532"
msgid "Same as movie"
msgstr "Comme le film"
+msgctxt "#36533"
+msgid "Select how audio is downmixed, for example from 5.1 to 2.0: [Enabled] maintains the dynamic range of the original audio source when downmixed however volume will be lower [Disabled] maintains volume level of the original audio source however the dynamic range is compressed. Note - Dynamic range is the difference between the quietest and loudest sounds in a audio source."
+msgstr "Choisir comment l'audio est ré-échantillonné (downmix), par exemple pour passer de 5.1 à 2.0 : [Activé] maintient l'étendue dynamique de la source audio originale mais le volume sera moins élevé. [Désactivé] maintient le volume de la source audio originale mais l'étendue dynamique est compressée. Note - l'étendue dynamique est la différence entre le son le plus faible et le plus fort dans une source audio."
+
msgctxt "#36535"
msgid "Stereoscopic mode of video"
msgstr "Mode stéréoscopique de la vidéo"
@@ -12108,3 +12420,7 @@ msgstr "Double sortie audio"
msgctxt "#37018"
msgid "Boost centre channel when downmixing"
msgstr "Augmenter la voie centrale lors du remixage"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Active les touches systèmes comme impression alt-tab ou les touches de volume lors du plein écran"
diff --git a/language/Galician/strings.po b/language/Galician/strings.po
index 9a5d21a805..231dd558b6 100644
--- a/language/Galician/strings.po
+++ b/language/Galician/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Conversión da taxa de cadros"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fixa"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Varios artistas"
@@ -3477,6 +3481,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Restabelecer"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Normal"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Buscador de engadidos"
diff --git a/language/German/strings.po b/language/German/strings.po
index 88e372d9ef..a3c526af7c 100644
--- a/language/German/strings.po
+++ b/language/German/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Bildrate konvertieren"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fixiert"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Verschiedene Interpreten"
@@ -1637,6 +1641,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Ansicht ändern"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Beschränke Samplingrate (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Untertitel"
@@ -3485,6 +3493,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Zurücksetzen"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Addon-Browser"
diff --git a/language/Greek/strings.po b/language/Greek/strings.po
index 1265f702ac..4fb6afd9f9 100644
--- a/language/Greek/strings.po
+++ b/language/Greek/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "ΜετατÏοπή δειγματοληψίας"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "ΣταθεÏή"
+
msgctxt "#340"
msgid "Various artists"
msgstr "ΔιάφοÏοι καλλιτέχνες"
@@ -3485,10 +3489,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "ΕπαναφοÏά"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Βασικό"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Τυπική"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Για ΠÏοχωÏημένους"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Για ΕιδικοÏÏ‚"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "ΠεÏιηγητής Ï€Ïόσθετων"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "ΕπαναφοÏά των παÏαπάνω Ïυθμίσεων στις Ï€Ïοεπιλογές"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Είστε σίγουÏοι ότι επιθυμείτε να επαναφέÏετε όλες τις Ïυθμίσεις σε αυτήν την κατηγοÏία;"
@@ -3501,6 +3525,14 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Δεν υπάÏχει διαθέσιμη βοήθεια"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Θα επαναφέÏει όλες τις οÏατές Ïυθμίσεις στις Ï€Ïοεπιλεγμένες τιμές τους."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Δεν υπάÏχουν διαθέσιμες κατηγοÏίες"
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "ΠαÏάθυÏο Îαι/Οχι"
@@ -3837,6 +3869,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "Οι Ï€Ïοσπάθειες εισαγωγής ÎºÏ‰Î´Î¹ÎºÎ¿Ï ÎµÎ¾Î±Î½Ï„Î»Î®Î¸Î·ÎºÎ±Î½."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Το σÏστημα θα απενεÏγοποιηθεί Ï„ÏŽÏα."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Το αντικείμενο κλειδώθηκε"
@@ -4137,6 +4173,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Αποθήκευση ανάλυσης;"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Επιθυμείτε να διατηÏήσετε αυτήν την αλλαγή;"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Υψηλής ποιότητας Upscaling"
@@ -4181,6 +4221,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "VDPAU μετατÏοπή χÏώματος επιπέδου ΣτοÏντιο"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "ΔιατήÏηση κελÏφους;"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "Κενό σε άλλες οθόνες"
@@ -4985,6 +5029,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f ΔευτεÏόλεπτα"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Λεπτό"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Λεπτά"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Apple Remote"
@@ -5669,6 +5721,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "ΕπεξεÏγασία τίτλου"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "ΔιαχείÏιση..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "ΕπεξεÏγασία ταξινόμησης τίτλου"
@@ -6213,6 +6269,18 @@ msgctxt "#19098"
msgid "Warning"
msgstr "ΠÏοσοχή"
+msgctxt "#19099"
+msgid "Service"
+msgstr "ΥπηÏεσία"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Μίξη"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "ΠάÏοχος"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Πηγαίνετε σε άλλο κανάλι."
@@ -6837,6 +6905,10 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Όλες οι εγγÏαφές"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Δε βÏέθηκαν ΠÏόσθετα PVR"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "ΧÏειάζεστε ένα δέκτη (tuner), ένα backend, και ένα"
@@ -9145,6 +9217,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s με %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "ΠÏοτίμηση εξωτεÏικών υποτίτλων"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "ΠÏοτίμηση εξωτεÏικών υποτίτλων έναντι των εσωτεÏικών"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(ΕξωτεÏικός)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Όνομα αÏχείου"
@@ -9825,14 +9909,26 @@ msgctxt "#24043"
msgid "Available Updates"
msgstr "Διαθέσιμες ενημεÏώσεις"
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Δεν πληÏοÏνται οι εξαÏτήσεις. Επικοινωνήστε με το δημιουÏγό του ΠÏόσθετου."
+
msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "Το Ï€Ïόσθετο δεν έχει τη σωστή δομή"
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Αυτό το ΠÏόσθετο δεν μποÏεί να απεγκατασταθεί"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "ΕπαναφοÏά"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Μη-Συμβατό"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Διαθέσιμα Ï€Ïόσθετα"
@@ -9937,6 +10033,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Κλείδωμα διαχειÏιστή Ï€Ïόσθετων"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Αυτό το ΠÏόσθετο δεν μποÏεί να απενεÏγοποιηθεί"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(Ï„Ïέχoν)"
@@ -9973,6 +10073,42 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "Λείπουν κάποια αÏχεία από το κέλυφος"
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "ΠαÏση κατά την αναζήτηση υποτίτλων"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Αναζήτηση υποτίτλων ..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "Î’Ïέθηκαν %d υπότιτλοι"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Δε βÏέθηκαν υπότιτλοι"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Γίνεται λήψη υποτίτλων ..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Γλώσσες για τις οποίες να γίνει λήψη υποτίτλων"
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Αποτυχία λήψης υποτίτλου"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Δεν εγκαταστάθηκαν υπηÏεσίες υποτίτλων"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Αποθήκευση υποτίτλων στο φάκελο της ταινίας"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Ειδοποιήσεις"
@@ -10077,6 +10213,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Κλιπ"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Επανεκκινήστε το plugin για ενεÏγοποίηση"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Απόψε"
@@ -10413,6 +10553,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Ποτέ"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Αδυναμία εÏÏεσης επόμενου αντικειμένου"
@@ -10525,6 +10685,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "ΑπενεÏγοποίηση χειÏιστηÏίου κατά την παÏουσία αυτής της συσκευής"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "ΠλήκτÏα συστήματος στην πλήÏη οθόνη"
+
msgctxt "#35500"
msgid "Location"
msgstr "Τοποθεσία"
diff --git a/language/Hebrew/strings.po b/language/Hebrew/strings.po
index 370a6fabb1..2d0638b0b8 100644
--- a/language/Hebrew/strings.po
+++ b/language/Hebrew/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "המרת קצב פריימי×"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "מקובע"
+
msgctxt "#340"
msgid "Various artists"
msgstr "××ž× ×™× ×©×•× ×™×"
@@ -3437,6 +3441,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "×יפוס"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "סטנדרטי"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "×”×× ×œ×פס ×ת ההגדרות בקטגוריה זו?"
diff --git a/language/Hindi (Devanagiri)/strings.po b/language/Hindi (Devanagiri)/strings.po
index 56a9b280b4..0249507b1d 100644
--- a/language/Hindi (Devanagiri)/strings.po
+++ b/language/Hindi (Devanagiri)/strings.po
@@ -2613,6 +2613,10 @@ msgctxt "#10025"
msgid "Videos"
msgstr "विडियो"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "मानक"
+
msgctxt "#10134"
msgid "Favourites"
msgstr "पà¥à¤°à¤¿à¤¯"
@@ -2725,6 +2729,10 @@ msgctxt "#13327"
msgid "Karaoke"
msgstr "कराओके"
+msgctxt "#13340"
+msgid "Leave as is"
+msgstr "मानक"
+
msgctxt "#13346"
msgid "Movie information"
msgstr "मूवी जानकारी"
@@ -2745,6 +2753,10 @@ msgctxt "#13387"
msgid "Track naming template - right"
msgstr "टà¥à¤°à¥ˆà¤• नामकरण टेमà¥à¤ªà¤²à¥‡à¤Ÿ - ठीक है"
+msgctxt "#13388"
+msgid "Preset"
+msgstr "मानक"
+
msgctxt "#13398"
msgid "Shortcuts"
msgstr "लघॠपाथें "
diff --git a/language/Hungarian/strings.po b/language/Hungarian/strings.po
index 319205be9a..705300e283 100644
--- a/language/Hungarian/strings.po
+++ b/language/Hungarian/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Képkockasebesség konvertálás"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Kimenet konfiguráció"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Rögzített"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Optimalizált"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Különböző előadók"
@@ -1213,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "Év"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Csatornalekeverésnél hangerő kiegyenlítése"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "Nagy felbontású DTS kompatibilis vevőkészülék"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Hang közvetlen átengedésének engedélyezése"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "TrueHD kompatibilis vevőkészülék"
@@ -1493,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "Max"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Leginkább Egyező"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Hangeszköz ébren tartása"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Album információ törlése"
@@ -3485,6 +3513,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Visszaállítás"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Kiegészítő böngésző"
diff --git a/language/Icelandic/strings.po b/language/Icelandic/strings.po
index 9b14e34c20..7a49812aa8 100644
--- a/language/Icelandic/strings.po
+++ b/language/Icelandic/strings.po
@@ -1161,6 +1161,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Stilla rammafjölda"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fastur"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Ãmsir flytjendur"
@@ -3341,6 +3345,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Endurstilla"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Venjulegt"
+
msgctxt "#10043"
msgid "Help"
msgstr "Hjálp"
diff --git a/language/Indonesian/strings.po b/language/Indonesian/strings.po
index 511c27e921..02c8d28106 100644
--- a/language/Indonesian/strings.po
+++ b/language/Indonesian/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Atur Framerate"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Sudah tetap"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Berbagai Artis"
@@ -3437,6 +3441,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Atur Ulang"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standar"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Apakah anda yakin ingin atur ulang pengaturan di dalam kategori ini?"
diff --git a/language/Italian/strings.po b/language/Italian/strings.po
index 017bd5181f..c124009772 100644
--- a/language/Italian/strings.po
+++ b/language/Italian/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Conversione framerate"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fissa"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Artisti vari"
@@ -3485,6 +3489,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Reset"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Esplora addon"
diff --git a/language/Japanese/strings.po b/language/Japanese/strings.po
index d80c1a048f..70eea5fb6d 100644
--- a/language/Japanese/strings.po
+++ b/language/Japanese/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "フレームレートã®èª¿æ•´"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fixed"
+
msgctxt "#340"
msgid "Various artists"
msgstr "VA/オムニãƒã‚¹"
@@ -3417,6 +3421,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "リセット"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "標準"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "ã“ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼ã®è¨­å®šã‚’å…¨ã¦ãƒªã‚»ãƒƒãƒˆã—ã¦ã‚‚ã„ã„ã§ã™ã‹ï¼Ÿ"
diff --git a/language/Korean/strings.po b/language/Korean/strings.po
index 0235dbb6d1..5f293fe2d9 100644
--- a/language/Korean/strings.po
+++ b/language/Korean/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "프레임레ì´íŠ¸ 변환"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "출력 설정"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "ê³ ì •"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "최ì "
+
msgctxt "#340"
msgid "Various artists"
msgstr "여러 아티스트"
@@ -1213,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "ì—°ë„"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "다운믹스 노멀ë¼ì´ì¦ˆ 레벨"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "DTS-HD ì§€ì› ë¦¬ì‹œë²„"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "패스스루 사용"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "TrueHD ì§€ì› ë¦¬ì‹œë²„"
@@ -1493,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "최고"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "ì†ŒìŠ¤ì— ë§žì¶¤"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "오디오 장비 대기ìƒíƒœ 방지"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "앨범 정보 삭제"
@@ -1637,6 +1665,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "보기 변경"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "샘플레ì´íŠ¸ 제한 (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "ìžë§‰"
@@ -1691,7 +1723,7 @@ msgstr "모드칩"
msgctxt "#474"
msgid "Off"
-msgstr "ë„기"
+msgstr "ë”"
msgctxt "#475"
msgid "Music only"
@@ -2347,7 +2379,7 @@ msgstr "노래 정보"
msgctxt "#659"
msgid "Non-linear stretch"
-msgstr "비-선형 늘림"
+msgstr "비선형 늘림"
msgctxt "#660"
msgid "Volume amplification"
@@ -2699,11 +2731,11 @@ msgstr "다른 ì‹œìŠ¤í…œì˜ í”„ë¡œê·¸ëž¨ì´ XBMC를 제어하는 ê²ƒì„ í—ˆìš©"
msgctxt "#795"
msgid "Initial repeat delay (ms)"
-msgstr "초기 반복 지연(밀리초)"
+msgstr "초기 반복 지연 (밀리초)"
msgctxt "#796"
msgid "Continuous repeat delay (ms)"
-msgstr "ì—°ì† ë°˜ë³µ 지연(밀리초)"
+msgstr "ì—°ì† ë°˜ë³µ 지연 (밀리초)"
msgctxt "#797"
msgid "Maximum number of clients"
@@ -3477,10 +3509,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "초기화"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "초급"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "표준"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "고급"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "전문가"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "추가기능 íƒìƒ‰ê¸°"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "위 ì„¤ì •ì„ ê¸°ë³¸ê°’ìœ¼ë¡œ 초기화"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "ì´ ë²”ì£¼ì˜ ì„¤ì •ì„ ì´ˆê¸°í™”í•˜ê² ìŠµë‹ˆê¹Œ?"
@@ -3493,6 +3545,18 @@ msgctxt "#10044"
msgid "No help available"
msgstr "ë„ì›€ë§ ì—†ìŒ"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "현재 ë³´ì´ëŠ” ì„¤ì •ì„ ëª¨ë‘ ê¸°ë³¸ê°’ìœ¼ë¡œ 초기화합니다"
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "사용 가능한 카테고리 ì—†ìŒ"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "ë” ë§Žì€ ì¹´í…Œê³ ë¦¬ì™€ ì„¤ì •ì„ ë³´ë ¤ë©´ 설정 ìˆ˜ì¤€ì„ ë³€ê²½í•˜ì„¸ìš”."
+
msgctxt "#10126"
msgid "File browser"
msgstr "íŒŒì¼ íƒìƒ‰ê¸°"
@@ -3813,6 +3877,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "비밀번호 ìž¬ì‹œë„ ì œí•œì´ ì´ˆê³¼ ë˜ì—ˆìŠµë‹ˆë‹¤."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "ì‹œìŠ¤í…œì˜ ì „ì›ì´ 곧 꺼집니다."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "항목 잠김"
@@ -4109,6 +4177,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "í•´ìƒë„를 저장 하겠습니까?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "변경 ì‚¬í•­ì„ ìœ ì§€í•˜ê² ìŠµë‹ˆê¹Œ?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "고품질 업스케ì¼ë§"
@@ -4153,6 +4225,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "VDPAU 스튜디오 수준 ìƒ‰ì˜¨ë„ ë³€í™˜"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "ì´ ìŠ¤í‚¨ì„ ì‚¬ìš©í•˜ê² ìŠµë‹ˆê¹Œ?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "다른 화면 비우기"
@@ -4869,6 +4945,10 @@ msgctxt "#13439"
msgid "Allow hardware acceleration (MediaCodec)"
msgstr "하드웨어 ê°€ì† í—ˆìš© (MediaCodec)"
+msgctxt "#13440"
+msgid "Frame Multi Threaded Decoding (less reliable)"
+msgstr "프레임 다중 쓰레드 디코딩 (ë‚®ì€ ì‹ ë¢°ë„)"
+
msgctxt "#13500"
msgid "A/V sync method"
msgstr "A/V ë™ê¸° ë°©ì‹"
@@ -4943,7 +5023,7 @@ msgstr "새로고침 ë¹ˆë„ ë³€ê²½ì‹œ ì¼ì‹œì •ì§€"
msgctxt "#13551"
msgid "Off"
-msgstr "ë„기"
+msgstr "ë”"
msgctxt "#13552"
msgid "%.1f Second"
@@ -4953,6 +5033,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f ì´ˆ"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d 분"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d 분"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "애플 리모트"
@@ -5637,6 +5725,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "제목 수정"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "관리..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "정렬용 제목 수정"
@@ -6181,6 +6273,14 @@ msgctxt "#19098"
msgid "Warning"
msgstr "경고"
+msgctxt "#19099"
+msgid "Service"
+msgstr "서비스"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "제공ìž"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "다른 채ë„ë¡œ 변경하세요"
@@ -6425,6 +6525,10 @@ msgctxt "#19170"
msgid "Timeout when starting playback"
msgstr "ìž¬ìƒ ì‹œìž‘ì‹œ 시간 제한"
+msgctxt "#19171"
+msgid "Start playback minimised"
+msgstr "최소화 ìƒíƒœë¡œ 시작"
+
msgctxt "#19172"
msgid "Instant recording duration"
msgstr "즉시 녹화 지ì†ì‹œê°„"
@@ -6493,6 +6597,10 @@ msgctxt "#19189"
msgid "Continue last channel on startup"
msgstr "시작시 ì´ì „ ì±„ë„ ê³„ì† ìž¬ìƒ"
+msgctxt "#19190"
+msgid "Minimised"
+msgstr "최소화"
+
msgctxt "#19191"
msgid "PVR service"
msgstr "PVR 서비스"
@@ -6621,6 +6729,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "사용하는 PVR ì¶”ê°€ê¸°ëŠ¥ì´ ì—†ìŠµë‹ˆë‹¤. 설정ì´ë‚˜ 로그를 확ì¸í•´ë³´ì„¸ìš”."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "녹화 취소ë¨"
@@ -6661,6 +6773,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "녹화 ì˜ˆì•½ì„ ì—…ë°ì´íŠ¸í•  ë•Œ 알림 표시"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "백엔드 ì±„ë„ ë²ˆí˜¸ 사용 (í•˜ë‚˜ì˜ PVR ì• ë“œì˜¨ì´ í™œì„±í™”ë˜ì–´ ìžˆì„ ë•Œë§Œ ë™ìž‘)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "PVR 매니저 시작하는 중"
@@ -6681,10 +6797,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "백그ë¼ìš´ë“œ 스레드 시작중"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "í™œì„±í™”ëœ PVR ì• ë“œì˜¨ì´ ì—†ìŠµë‹ˆë‹¤"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "PVR 관리ìžê°€ 활성화ë˜ì—ˆìœ¼ë‚˜ PVR 추가기능ì€"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "í™œì„±í™”ëœ PVR 애드온. 하나 ì´ìƒì˜ ì• ë“œì˜¨ì„ í™œì„±í™”í•˜ì„¸ìš”."
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "ì ì–´ë„ í•˜ë‚˜ì˜ ì¶”ê°€ê¸°ëŠ¥ì„ í™œì„±í™”í•˜ì„¸ìš”."
@@ -6797,10 +6921,18 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* 모든 녹화"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "PVR ì• ë“œì˜¨ì„ ì°¾ì„ ìˆ˜ 없습니다"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "튜너, 백엔드 소프트웨어와"
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "PVR ì‚¬ìš©ì„ ìœ„í•œ 백엔드 애드온"
+
msgctxt "#19274"
msgid "Please visit xbmc.org/pvr to learn more."
msgstr "xbmc.org/pvr ì—ì„œ ìžì„¸í•œ 정보를 확ì¸í•˜ì„¸ìš”."
@@ -9105,6 +9237,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s ì—ì„œ %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "외부 ìžë§‰ ìš°ì„ "
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "ë™ì˜ìƒ 내부 ìžë§‰ë³´ë‹¤ 외부 ìžë§‰ì„ ìš°ì„  ì ìš©í•©ë‹ˆë‹¤."
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(외부ìžë§‰)"
+
msgctxt "#21800"
msgid "File name"
msgstr "íŒŒì¼ ì´ë¦„"
@@ -9321,6 +9465,10 @@ msgctxt "#21877"
msgid "Date created"
msgstr "제작ì¼"
+msgctxt "#21878"
+msgid "Urgency"
+msgstr "긴급"
+
msgctxt "#21879"
msgid "Country code"
msgstr "국가 코드"
@@ -9781,14 +9929,30 @@ msgctxt "#24043"
msgid "Available Updates"
msgstr "사용가능한 ì—…ë°ì´íŠ¸"
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "설치 ì¡°ê±´ì„ ì¶©ì¡±í•˜ì§€ 않습니다. 추가기능 제작ìžì—게 문ì˜í•˜ì„¸ìš”."
+
msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "ì¶”ê°€ê¸°ëŠ¥ì˜ êµ¬ì¡°ê°€ 바르지 않습니다"
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s ì„(를) 사용하는 추가기능"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "ì´ ì¶”ê°€ê¸°ëŠ¥ì€ ì œê±°í•  수 없습니다"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "ë˜ëŒë¦¬ê¸°"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "호환 안ë¨"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "사용가능한 추가기능"
@@ -9893,6 +10057,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "추가기능 ê´€ë¦¬ìž ìž ê¸ˆ"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "ì´ ì¶”ê°€ê¸°ëŠ¥ì€ ë¹„í™œì„±í™” í•  수 없습니다"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(현재)"
@@ -9901,6 +10069,10 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(차단ë¨)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "ì¶”ê°€ê¸°ëŠ¥ì´ í˜¸í™˜ë˜ì§€ 않거나 ì €ìž¥ì†Œì— ê¹¨ì§„ 것으로 표시ë˜ì–´ 있습니다."
+
msgctxt "#24097"
msgid "Would you like to disable it on your system?"
msgstr "시스템ì—ì„œ 사용하지 않겠습니까?"
@@ -9929,6 +10101,54 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "ìŠ¤í‚¨ì— ì¼ë¶€ 파ì¼ì´ 없습니다"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "ì¶”ê°€ê¸°ëŠ¥ì´ ì„¤ì¹˜ ì¡°ê±´ì„ ì¶©ì¡±í•˜ì§€ ì•Šì•„ 호환ë˜ì§€ 않습니다."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "ìžë§‰ì„ ì°¾ì„ ë•Œ ì¼ì‹œì •ì§€"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "ìžë§‰ì„ ì˜í™” í´ë”ì— ì €ìž¥í•˜ì§€ 않으면 ì‚¬ìš©ìž ì„¤ì • ìžë§‰ í´ë”ë¡œ 다운로드합니다"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "ìžë§‰ 찾는 중..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%dê°œì˜ ìžë§‰ ì°¾ìŒ"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "ìžë§‰ ì°¾ì„ ìˆ˜ ì—†ìŒ"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "ìžë§‰ 다운로드 중..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "다운로드할 ìžë§‰ 언어"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "ìžë§‰ì„ ì°¾ì„ ë•Œ 사용할 언어를 설정합니다. ìžë§‰ 서비스가 모든 언어를 지ì›í•˜ëŠ” ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "ìžë§‰ 다운로드 실패"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "ì„¤ì¹˜ëœ ìžë§‰ 서비스 ì—†ìŒ"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "ìžë§‰ì„ ì˜í™” í´ë”ì— ì €ìž¥"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "알림"
@@ -10033,6 +10253,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "í´ë¦½"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "활성화하려면 플러그ì¸ì„ 다시 시작하세요"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "오늘밤"
@@ -10353,6 +10577,10 @@ msgctxt "#34110"
msgid "7.1"
msgstr "7.1"
+msgctxt "#34111"
+msgid "Select the behaviour when no sound is required for either playback or GUI sounds. [Always] - continuous inaudible signal is output, this keeps the receiving audio device alive for any new sounds, however this might also block sound from other applications. [1- 10 Minutes] - same as Always except that after the selected period of time audio enters a suspended state [Off] - audio output enters a suspended state. Note - sounds can be missed if audio enters suspended state."
+msgstr "ìž¬ìƒ ë˜ëŠ” GUI ìŒí–¥ì´ 필요하지 ì•Šì„ ë•Œì˜ ë™ìž‘ì„ ì„ íƒí•©ë‹ˆë‹¤. [í•­ìƒ] - 들리지 않는 ìŒí–¥ 신호를 지ì†ì ìœ¼ë¡œ 출력하여 오디오 장비가 대기 ìƒíƒœë¡œ 진입하지 ì•Šê³  신호를 받게 í•´ 주지만 다른 애플리케ì´ì…˜ì˜ ì‚¬ìš´ë“œë„ ë§‰ì„ ìˆ˜ 있습니다. [1- 10분] - 'í•­ìƒ'ê³¼ 같지만 ì„ íƒí•œ ì‹œê°„ì´ ì§€ë‚˜ë©´ 오디오가 유휴 ìƒíƒœë¡œ 들어갑니다. [ë”] - 오디오 ì¶œë ¥ì´ ìœ íœ´ ìƒíƒœë¡œ 들어갑니다. ì£¼ì˜ - 오디오가 대기 ìƒíƒœë¡œ 들어가면 ì¼ë¶€ 사운드가 들리지 ì•Šì„ ìˆ˜ 있습니다."
+
msgctxt "#34120"
msgid "Play GUI sounds"
msgstr "GUI 사운드 재ìƒ"
@@ -10369,6 +10597,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "사용 안 함"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "재ìƒí•  ë‹¤ìŒ í•­ëª©ì´ ì—†ìŠµë‹ˆë‹¤"
@@ -10481,6 +10729,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "ì´ ìž¥ì¹˜ê°€ ìžˆì„ ë•Œ ì¡°ì´ìŠ¤í‹± 사용 안 함"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "전체화면ì—ì„œ 시스템 키 사용"
+
msgctxt "#35500"
msgid "Location"
msgstr "위치"
@@ -10917,14 +11169,26 @@ msgctxt "#36164"
msgid "Select when the refresh rate adjustments should take place."
msgstr "새로고침 빈ë„를 ì¡°ì •í•  ì‹œì ì„ ì„ íƒí•©ë‹ˆë‹¤."
+msgctxt "#36165"
+msgid "Pause for a small amount of time during a refresh rate change. Activate to automatically set the refresh rate which is best matched with the video that is playing. This potentially allows for perfectly smooth video reproduction, as video material can be recorded in a variety of frame rates which need to be properly matched by the refresh rate of the display in order to be displayed smoothly."
+msgstr "새로고침 빈ë„를 변경할 ë•Œ ì•½ê°„ì˜ ì‹œê°„ ë™ì•ˆ ì¼ì‹œì •ì§€ 합니다. 재ìƒì¤‘ì¸ ë¹„ë””ì˜¤ì— ìµœëŒ€í•œ ì¼ì¹˜í•˜ëŠ” 새고로침 빈ë„ë¡œ ìžë™ 설정하게 하면, 비디오가 부드럽게 재ìƒë©ë‹ˆë‹¤. ë™ì˜ìƒì€ 다양한 프레임 ë ˆì´íŠ¸ë¡œ 녹화ë˜ê±°ë‚˜ 제작ë˜ê¸° ë•Œë¬¸ì— ë§¤ë„러운 재ìƒì„ 위해서는 새로고침 빈ë„ê°€ ì ì ˆí•˜ê²Œ ì¼ì¹˜í•´ì•¼ 합니다."
+
msgctxt "#36166"
msgid "Synchronise the video to the refresh rate of the monitor."
msgstr "비디오를 모니터 새로고침 빈ë„ì— ë™ê¸°í™” 합니다."
+msgctxt "#36167"
+msgid "Audio has to stay in sync, this can either be done by resampling, skipping/duplicating packets, or adjusting the clock if it gets out of sync too far."
+msgstr "오디오 싱í¬ê°€ 심하게 맞지 않는 경우 리샘플ë§, 패킷 건너뛰기/반복, í´ëŸ­ ì¡°ì • ë“±ì˜ ë°©ë²•ìœ¼ë¡œ 싱í¬ë¥¼ 유지합니다."
+
msgctxt "#36168"
msgid "Maximum video speed adjust to match actual screen refresh rate."
msgstr "최대 비디오 ì†ë„를 실제 화면 새로고침 빈ë„와 ì¼ì¹˜í•˜ê²Œ 조정합니다."
+msgctxt "#36169"
+msgid "Select the quality of resampling for cases where the audio output needs to be at a different sampling rate from that used by the source. [Low] is fast and will have minimal impact on system resources such as the use of the CPU, [Medium] & [High] will use progressively more system resources."
+msgstr "소스와 다른 샘플레ì´íŠ¸ë¡œ ì¶œë ¥ì´ í•„ìš”í•œ 경우 ë¦¬ìƒ˜í”Œë§ í’ˆì§ˆì„ ì„ íƒí•©ë‹ˆë‹¤. [ë‚®ìŒ] CPU 사용 등 시스템 ë¦¬ì†ŒìŠ¤ì— ê°€í•´ì§€ëŠ” ë¶€ë‹´ì„ ìµœì†Œí™”í•˜ê³  빠릅니다. [중간] ë˜ëŠ” [높ìŒ] ë” ë§Žì€ ì‹œìŠ¤í…œ 리소스를 사용합니다."
+
msgctxt "#36171"
msgid "Select the zoom level that 4:3 videos are shown on widescreen displays."
msgstr "와ì´ë“œìŠ¤í¬ë¦° 디스플레ì´ì— 4:3 ë™ì˜ìƒ 재ìƒì‹œ 확대 ë°©ë²•ì„ ì„ íƒí•©ë‹ˆë‹¤."
@@ -11049,10 +11313,34 @@ msgctxt "#36202"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "XBMCì˜ PVR ê¸°ëŠ¥ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. 하나 ì´ìƒì˜ PVR ì• ë“œì˜¨ì´ ì„¤ì¹˜ë˜ì–´ 있어야 합니다."
+
msgctxt "#36204"
msgid "Import channel groups from the PVR backend (if supported). Will delete user created groups if they're not found on the backend."
msgstr "PVR 백엔드ì—ì„œ ì±„ë„ ê·¸ë£¹ì„ ê°€ì ¸ì˜µë‹ˆë‹¤. 백엔드ì—ì„œ ê·¸ë£¹ì´ ë°œê²¬ë˜ì§€ 않으면 사용ìžê°€ 만든 ê·¸ë£¹ì„ ì§€ì›ë‹ˆë‹¤."
+msgctxt "#36205"
+msgid "Sort the channels by channel number on the server, but uses XBMC's own numbering for channels."
+msgstr "XBMC ìžì²´ ì±„ë„ ë²ˆí˜¸ë¥¼ 사용하지만 ì„œë²„ì˜ ì±„ë„ ë²ˆí˜¸ 순서로 채ë„ì„ ì •ë ¬í•©ë‹ˆë‹¤."
+
+msgctxt "#36206"
+msgid "Use numbering from the backend, instead of configuring them manually over XBMC."
+msgstr "XBMCì—ì„œ 수ë™ìœ¼ë¡œ ì±„ë„ ë²ˆí˜¸ë¥¼ 설정하지 ì•Šê³  ë°±ì—”ë“œì˜ ì±„ë„ ë²ˆí˜¸ë¥¼ 사용합니다."
+
+msgctxt "#36207"
+msgid "Open the channel manager, which allows modifying the channel order, channel name, icon, etc."
+msgstr "ì±„ë„ ê´€ë¦¬ìžë¥¼ 엽니다. ì±„ë„ ìˆœì„œ, ì±„ë„ ì´ë¦„, ì•„ì´ì½˜ ë“±ì„ ë³€ê²½í•  수 있습니다."
+
+msgctxt "#36208"
+msgid "Instruct the backend to search for channels (if supported)."
+msgstr "ë°±ì—”ë“œì— ì±„ë„ ê²€ìƒ‰ ëª…ë ¹ì„ ë³´ëƒ…ë‹ˆë‹¤. (지ì›í•˜ëŠ” 경우)"
+
+msgctxt "#36209"
+msgid "Delete channel/EPG database and reimport the data from the backend afterwards."
+msgstr "채ë„/EPG ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 삭제한 후 백엔드ì—ì„œ ë°ì´í„°ë¥¼ 다시 가져옵니다."
+
msgctxt "#36210"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
@@ -11089,14 +11377,58 @@ msgctxt "#36218"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
+msgctxt "#36219"
+msgid "Default EPG window to show. Defaults to Timeline."
+msgstr "EPG 기본 ì°½. ê¸°ë³¸ê°’ì€ íŽ¸ì„±í‘œ."
+
+msgctxt "#36220"
+msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
+msgstr "백엔드ì—ì„œ 몇 ì¼ë¶„ì˜ EPG ë°ì´í„°ë¥¼ 가져올 것ì¸ì§€ë¥¼ 설정합니다. ê¸°ë³¸ê°’ì€ 2ì¼."
+
+msgctxt "#36221"
+msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
+msgstr "백엔드ì—ì„œ EPG ë°ì´í„°ë¥¼ 가져오는 시간 간격. ê¸°ë³¸ê°’ì€ 120분 마다."
+
+msgctxt "#36222"
+msgid "Do not import EPG data while playing TV to minimise CPU usage."
+msgstr "TV ìž¬ìƒ ì¤‘ì—는 CPU ì‚¬ìš©ì„ ìµœì†Œí™” 하기 위해 EPG ë°ì´í„°ë¥¼ 가져오지 않습니다."
+
+msgctxt "#36223"
+msgid "By default, EPG data is stored in a local database to speed up importing when XBMC is restarted."
+msgstr "기본ì ìœ¼ë¡œ, XBMC를 시작할 ë•Œ ë°ì´í„°ë¥¼ 가져오는 ì†ë„를 í–¥ìƒ ì‹œí‚¤ê¸° 위하여 EPG ë°ì´í„°ë¥¼ 로컬 ë°ì´í„°ë² ì´ìŠ¤ì— 저장합니다."
+
+msgctxt "#36224"
+msgid "Hide \"no information available\" labels when no EPG data can be retrieved for a channel."
+msgstr "채ë„ì˜ EPG ë°ì´í„°ë¥¼ 찾지 못하는 ê²½ìš°ì— ë³´ì—¬ì£¼ëŠ” \"ì •ë³´ ì—†ìŒ\" 표시를 숨김."
+
+msgctxt "#36225"
+msgid "Delete the EPG database in xbmc and reimport the data afterwards from the backend."
+msgstr "EPG ë°ì´í„°ë² ì´ìŠ¤ë¥¼ XBMCì—ì„œ 삭제한 후 백엔드ì—ì„œ ë°ì´í„°ë¥¼ 다시 가져옵니다."
+
msgctxt "#36226"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
+msgctxt "#36227"
+msgid "Display stream of selected channel in a small box instead of fullscreen."
+msgstr "ì„ íƒí•œ 채ë„ì„ ì „ì²´í™”ë©´ 대신 ìž‘ì€ ì°½ì—ì„œ ë³´ì—¬ ì¤ë‹ˆë‹¤."
+
+msgctxt "#36228"
+msgid "Show the last viewed channel if switching to live tv."
+msgstr "TV 시청으로 전환할 ë•Œ 마지막으로 시청한 채ë„ì„ ë´…ë‹ˆë‹¤."
+
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "ì½”ë± ì •ë³´ 윈ë„ìš°ì—ì„œ 신호 í’ˆì§ˆì„ í‘œì‹œí•©ë‹ˆë‹¤ (애드온과 백엔드가 지ì›í•˜ëŠ” 경우)."
+
msgctxt "#36230"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
+msgctxt "#36231"
+msgid "Pressing a number button in full screen mode will automatically switch to the channel number that was entered after 1 second."
+msgstr "전체화면 모드ì—ì„œ ìˆ«ìž ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 1초가 지난 후 해당 ë²ˆí˜¸ì˜ ì±„ë„ë¡œ ìžë™ 전환ë©ë‹ˆë‹¤."
+
msgctxt "#36232"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
@@ -11105,6 +11437,30 @@ msgctxt "#36233"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
+msgctxt "#36234"
+msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
+msgstr "녹화 ë²„íŠ¼ì„ ëˆ„ë¥´ê±°ë‚˜ 예약 녹화를 설정할 ë•Œì˜ ë…¹í™” 분량. ê¸°ë³¸ê°’ì€ 180분."
+
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "녹화 우선순위. ë†’ì€ ë²ˆí˜¸ì¼ìˆ˜ë¡ 우선순위가 높습니다. 기본값 50. 모든 애드온과 백엔드가 지ì›í•˜ì§€ëŠ” 않습니다."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "지정한 시간 후 녹화를 삭제합니다. 기본값 99ì¼. 모든 애드온과 백엔드가 지ì›í•˜ì§€ëŠ” 않습니다."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "실제 방송 시작시간 ì „ì— ë…¹í™”ë¥¼ 시작합니다. 기본값 2분. 모든 애드온과 백엔드가 지ì›í•˜ì§€ëŠ” 않습니다."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "실제 방송 ì¢…ë£Œì‹œê°„ì´ ì§€ë‚œ 후 녹화를 종료합니다. 기본값 10분. 모든 애드온과 백엔드가 지ì›í•˜ì§€ëŠ” 않습니다."
+
+msgctxt "#36239"
+msgid "Display a notification when timers are added, finished or removed by the backend."
+msgstr "백엔드ì—ì„œ 예약 추가, 완료, ì‚­ì œë˜ëŠ” 경우 ì•Œë¦¼ì„ í‘œì‹œí•©ë‹ˆë‹¤."
+
msgctxt "#36240"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
@@ -11113,6 +11469,10 @@ msgctxt "#36247"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
+msgctxt "#36248"
+msgid "Asks for a pin code to access parental locked channels. Channels can be marked as locked in the channels editor on the general tab. Parental locked channels can not be played or recorded without entering a pin code, and the EPG information is hidden for those channels."
+msgstr "ìžë…€ 보호 ìž ê¸ˆì´ ëœ ì±„ë„ì— ì ‘ê·¼í•  ë•Œ 비밀번호를 물어봅니다. ì¼ë°˜ ì±„ë„ íŽ¸ì§‘ê¸°ì˜ ì¼ë°˜ 탭ì—ì„œ 잠금 표시를 í•  수 습니다. ìžë…€ 보호 잠금 채ë„ì€ ë¹„ë°€ë²ˆí˜¸ë¥¼ 입력하지 않으면 시청 ë˜ëŠ” 녹화를 í•  수 없으며 EPG 정보를 숨ê¹ë‹ˆë‹¤."
+
msgctxt "#36251"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
@@ -11553,10 +11913,22 @@ msgctxt "#36360"
msgid "No info available yet."
msgstr "ì•„ì§ ì‚¬ìš© 가능한 ì •ë³´ê°€ 없습니다."
+msgctxt "#36361"
+msgid "Select how the properties of the audio output are set: [Fixed] - output properties are set to the specified sampling rate & speaker configuration at all times; [Best Match] - output properties are set to always be as close a match to the source properties as possible; [Optimized] - output properties are set at the start of playback and will not change if the properties of the source changes."
+msgstr "오디오 출력 íŠ¹ì„±ì„ ì„ íƒí•©ë‹ˆë‹¤: [ê³ ì •] - í•­ìƒ ì§€ì •í•œ 샘플레ì´íŠ¸ì™€ 스피커 설정으로 출력합니다; [ì†ŒìŠ¤ì— ë§žì¶¤] - 출력 íŠ¹ì„±ì´ ì†ŒìŠ¤ íŠ¹ì„±ì— ê°€ëŠ¥í•œ 가장 근접하게 í•­ìƒ ì„¤ì •ë©ë‹ˆë‹¤; [최ì ] - 재ìƒì´ ì‹œìž‘ë  ë•Œ 출력 íŠ¹ì„±ì´ ì„¤ì •ë˜ê³  ì†ŒìŠ¤ì˜ íŠ¹ì„±ì´ ë³€ê²½ë˜ì–´ë„ 바뀌지 않습니다."
+
+msgctxt "#36362"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded."
+msgstr "사용 가능한 최대 오디오 채ë„/스피커 수를 ì„ íƒí•©ë‹ˆë‹¤."
+
msgctxt "#36363"
msgid "Boost AC3 streams that have been downmixed to 2 channels."
msgstr "2 채ë„ë¡œ 다운믹스한 AC3 ìŠ¤íŠ¸ë¦¼ì„ ì¦í­í•©ë‹ˆë‹¤."
+msgctxt "#36364"
+msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
+msgstr "2 ì±„ë„ ìŠ¤í…Œë ˆì˜¤ 소스를 스피커 설정ì—ì„œ 지정한 ì±„ë„ ìˆ˜ 대로 업믹스합니다."
+
msgctxt "#36365"
msgid "Select this option if your receiver is capable of decoding AC3 streams."
msgstr "리시버가 AC3 ë””ì½”ë”©ì„ ì§€ì›í•˜ë©´ ì„ íƒí•©ë‹ˆë‹¤."
@@ -11565,6 +11937,14 @@ msgctxt "#36366"
msgid "Select this option if your receiver is capable of decoding DTS streams."
msgstr "리시버가 DTS ë””ì½”ë”©ì„ ì§€ì›í•˜ë©´ ì„ íƒí•©ë‹ˆë‹¤."
+msgctxt "#36367"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded. If optical/coax digital outputs are used this must be set to 2.0"
+msgstr "사용 가능한 최대 오디오 채ë„/스피커 수를 ì„ íƒí•©ë‹ˆë‹¤. 옵티컬/코엑스 디지털 ì¶œë ¥ì„ ì‚¬ìš©í•˜ëŠ” 경우 반드시 2.0으로 설정하여야 합니다."
+
+msgctxt "#36368"
+msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
+msgstr "ëŒë¹„ 디지털 등으로 ì¸ì½”ë”©ëœ ì˜¤ë””ì˜¤ë¥¼ 재ìƒí•˜ë ¤ë©´ 패스스루 ì˜µì…˜ì„ ì„ íƒí•©ë‹ˆë‹¤."
+
msgctxt "#36369"
msgid "Select this option if your receiver is capable of decoding TrueHD streams."
msgstr "리시버가 TrueHD ë””ì½”ë”©ì„ ì§€ì›í•˜ë©´ ì„ íƒí•©ë‹ˆë‹¤."
@@ -11573,6 +11953,14 @@ msgctxt "#36370"
msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
msgstr "리시버가 DTS-HD ë””ì½”ë”©ì„ ì§€ì›í•˜ë©´ ì„ íƒí•©ë‹ˆë‹¤."
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "리시버가 mp3 ë“±ì˜ ì˜¤ë””ì˜¤ë¥¼ 지ì›í•˜ë©´ ì„ íƒí•©ë‹ˆë‹¤."
+
+msgctxt "#36372"
+msgid "Select the device to be used for playback of encoded formats, these are any of the formats below in the 'capable receiver' options."
+msgstr "ì•„ëž˜ì˜ 'ì§€ì› ë¦¬ì‹œë²„' í¬ë§·ìœ¼ë¡œ ì¸ì½”딩 ëœ ë¯¸ë””ì–´ë¥¼ 재ìƒí•  ë•Œ 사용할 장치를 ì„ íƒí•©ë‹ˆë‹¤."
+
msgctxt "#36373"
msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
msgstr "메뉴 íƒìƒ‰ 효과ìŒê³¼ 중요 ì•Œë¦¼ê°™ì€ ì¸í„°íŽ˜ì´ìŠ¤ ì‚¬ìš´ë“œì˜ ë™ìž‘ ë°©ì‹ì„ 설정합니다."
@@ -11769,6 +12157,10 @@ msgctxt "#36422"
msgid "Enable hardware video decode using AMLogic decoder"
msgstr "AMLogic 디코ë”를 사용하여 비디오를 하드웨어 디코드합니다."
+msgctxt "#36423"
+msgid "Use ffmpeg frame multiple thread decoding when hardware decoding not working or disabled. (less reliable than default single thread mode)"
+msgstr "하드웨어 ë””ì½”ë”©ì„ ì‚¬ìš©í•  수 없거나 ìž‘ë™í•˜ì§€ 않는 경우 ffmpeg 다중 쓰레드 ë””ì½”ë”©ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. (기본 ë‹¨ì¼ ì“°ë ˆë“œ ëª¨ë“œì— ë¹„í•´ 신뢰ë„ê°€ 떨어집니다)"
+
msgctxt "#36500"
msgid "Stereoscopic mode (current)"
msgstr "3D 모드 (현재)"
@@ -11821,6 +12213,10 @@ msgctxt "#36522"
msgid "Use preferred mode"
msgstr "우선 모드 사용"
+msgctxt "#36523"
+msgid "Maximum sampling rate for spdif or sampling rate for fixed output configuration"
+msgstr "spdif 최대 샘플 ë ˆì´íŠ¸ ë˜ëŠ” ê³ ì • 출력 샘플 ë ˆì´íŠ¸"
+
msgctxt "#36524"
msgid "Preferred mode"
msgstr "우선 모드"
@@ -11853,6 +12249,10 @@ msgctxt "#36532"
msgid "Same as movie"
msgstr "ì˜ìƒê³¼ ë™ì¼"
+msgctxt "#36533"
+msgid "Select how audio is downmixed, for example from 5.1 to 2.0: [Enabled] maintains the dynamic range of the original audio source when downmixed however volume will be lower [Disabled] maintains volume level of the original audio source however the dynamic range is compressed. Note - Dynamic range is the difference between the quietest and loudest sounds in a audio source."
+msgstr "다운믹스 ë°©ì‹ì„ ì„ íƒí•©ë‹ˆë‹¤. 예) 5.1 채ë„ì—ì„œ 2.0 채ë„: [사용함] ì†ŒìŠ¤ì˜ ë‹¤ì´ë‚´ë¯¹ ë ˆì¸ì§€ë¥¼ 유지하지만 ìŒëŸ‰ì€ 낮아집니다. [사용 안 함] ì†ŒìŠ¤ì˜ ìŒëŸ‰ ìˆ˜ì¤€ì„ ìœ ì§€í•˜ì§€ë§Œ 다ì´ë‚´ë¯¹ ë ˆì¸ì§€ëŠ” ì¢ì•„집니다. 주 - 다ì´ë‚´ë¯¹ ë ˆì¸ì§€ëŠ” 특정 오디오 소스ì—ì„œ 가장 ì‹œë„러운 소리와 가장 ì¡°ìš©í•œ ì†Œë¦¬ì˜ ë²”ìœ„ìž…ë‹ˆë‹¤."
+
msgctxt "#36535"
msgid "Stereoscopic mode of video"
msgstr "비디오 3D 모드"
@@ -11936,3 +12336,7 @@ msgstr "듀얼 오디오 출력"
msgctxt "#37018"
msgid "Boost centre channel when downmixing"
msgstr "다운믹스할 ë•Œ 센터 ì±„ë„ ì¦í­"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "전체화면ì—ì„œ 프린트스í¬ë¦°, alt-tab, ìŒëŸ‰ ë“±ì˜ ì‹œìŠ¤í…œ 키를 사용합니다"
diff --git a/language/Lithuanian/strings.po b/language/Lithuanian/strings.po
index 9d8187ffa7..696244779e 100644
--- a/language/Lithuanian/strings.po
+++ b/language/Lithuanian/strings.po
@@ -585,6 +585,10 @@ msgctxt "#170"
msgid "Adjust display refresh rate to match video"
msgstr "Nustatyti ekrano atnaujinimo dažnį, kad atitiktų vaizdą"
+msgctxt "#171"
+msgid "Sort title"
+msgstr "RÅ«Å¡iuoti pagal pavadinimÄ…"
+
msgctxt "#172"
msgid "Release date"
msgstr "IÅ¡leidimo data"
@@ -857,6 +861,10 @@ msgctxt "#249"
msgid "Music"
msgstr "Muzika"
+msgctxt "#250"
+msgid "Visualisation"
+msgstr "Vizualizacija"
+
msgctxt "#251"
msgid "Select destination directory"
msgstr "Pasirinkite paskirties katalogÄ…"
@@ -1181,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Kadrų dažnio konversija"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Išvesties konfigūracija"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fiksuotas"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Optimizuoti (-a)"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Įvairūs atlikėjai"
@@ -1205,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "Metai"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normalus downmix lygis"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "DTS-HD imtuvas"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Įjungti tranzitinį ryšį"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "TrueHD imtuvas"
@@ -1485,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "Temeratūra nuo"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Geriausias atitikmuo"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Laikyti garso įrenginį gyvai"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Pašalinti albumo duomenis"
@@ -1557,6 +1593,10 @@ msgctxt "#439"
msgid "Cache"
msgstr "Talpykla"
+msgctxt "#440"
+msgid "Hard disk"
+msgstr "Kietasis diskas"
+
msgctxt "#441"
msgid "UDF"
msgstr "UDF"
@@ -1585,6 +1625,10 @@ msgctxt "#447"
msgid "Autorun media"
msgstr "Medios auto paleistis"
+msgctxt "#448"
+msgid "Dolby Digital Plus (E-AC3) capable receiver"
+msgstr "Dolby Digital Plus (E-AC3) galintys imtuvas"
+
msgctxt "#449"
msgid "Enabled"
msgstr "Įjungta"
@@ -1621,6 +1665,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Keisti rodymÄ…"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Ribinis dažnio santykis (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Einantys"
@@ -1793,6 +1841,10 @@ msgctxt "#507"
msgid "Sort by: Usage"
msgstr "RÅ«Å¡iuoti pagal: Naudojimas"
+msgctxt "#510"
+msgid "Enable visualisations"
+msgstr "Įjungti vizualizaciją"
+
msgctxt "#511"
msgid "Enable video mode switching"
msgstr "Įjungti vaizdo režimo perjungimą"
@@ -2237,6 +2289,14 @@ msgctxt "#636"
msgid "Custom"
msgstr "Individualus"
+msgctxt "#637"
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+msgctxt "#638"
+msgid "ReplayGain volume adjustments"
+msgstr "ReplayGain garso koregavimas"
+
msgctxt "#639"
msgid "Use track levels"
msgstr "Pagal takelį"
@@ -2245,6 +2305,18 @@ msgctxt "#640"
msgid "Use album levels"
msgstr "Pagal albumÄ…"
+msgctxt "#641"
+msgid "PreAmp Level - ReplayGained files"
+msgstr "PreAmp lygis - ReplayGained failai"
+
+msgctxt "#642"
+msgid "PreAmp Level - Non ReplayGained files"
+msgstr "PreAmp lygis - nėra ReplayGained failų"
+
+msgctxt "#643"
+msgid "Avoid clipping on ReplayGained files"
+msgstr "Vengti ReplayGained failų karpymo"
+
msgctxt "#644"
msgid "Crop black bars"
msgstr "Pašalinti juodas juostas"
@@ -2881,6 +2953,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Programų priedai"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Nustatyti papildinių miniatiūrą"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Priedų nustatymai"
@@ -3445,6 +3521,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Atstatyti"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Pagrindinis"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standartinis"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "IÅ¡plÄ—stinis"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Ekspertas"
+
+msgctxt "#10040"
+msgid "Add-on browser"
+msgstr "Priedų naršyklė"
+
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "IÅ¡valyti Å¡iuos nustatymus pagal nutylÄ—jimÄ…"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Ar tikrai norite iš naujo nustatyti šios kategorijos nustatymus?"
@@ -3457,6 +3557,26 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Žinyno nėra"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Atstato visus matomų parametrų reikšmes pagal nutylėjimą."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Nėra galimų kategorijų"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Pabandykite pakeisti, nustatymo lygį, žiūrėti papildomai kategorijas ir parametrus."
+
+msgctxt "#10100"
+msgid "Yes/No dialogue"
+msgstr "Taip/Ne dialogas"
+
+msgctxt "#10101"
+msgid "Progress dialogue"
+msgstr "Progreso dialogas"
+
msgctxt "#10126"
msgid "File browser"
msgstr "Failų naršyklė"
@@ -3597,10 +3717,18 @@ msgctxt "#10524"
msgid "Movie info"
msgstr "Filmo informacija"
+msgctxt "#12000"
+msgid "Select dialogue"
+msgstr "Pasirinkti dialogÄ…"
+
msgctxt "#12001"
msgid "Music/Info"
msgstr "Muzika/Informacija"
+msgctxt "#12002"
+msgid "Dialogue OK"
+msgstr "Dialogas Gerai"
+
msgctxt "#12003"
msgid "Videos/Info"
msgstr "Video/Informacija"
@@ -3613,6 +3741,14 @@ msgctxt "#12005"
msgid "Fullscreen video"
msgstr "Pilnaekranis video"
+msgctxt "#12006"
+msgid "Audio visualisation"
+msgstr "Audio vizualizacija"
+
+msgctxt "#12008"
+msgid "File stacking dialogue"
+msgstr "Failo įkėlimo dialogas"
+
msgctxt "#12009"
msgid "Rebuild index..."
msgstr "Pertvarkytas indeksas..."
@@ -3769,6 +3905,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "Slaptažodžių bandymų skaiÄius iÅ¡naudotas."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Sistema dabar išsijungs."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Užblokuota"
@@ -3945,6 +4085,10 @@ msgctxt "#13013"
msgid "Reboot"
msgstr "Perkrauti Kompiuterį"
+msgctxt "#13014"
+msgid "Minimise"
+msgstr "Sumažinti"
+
msgctxt "#13015"
msgid "Power button action"
msgstr "Jungties veiksmas"
@@ -4065,6 +4209,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "IÅ¡saugoti rezoliucijÄ…?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Ar norite išsaugoti šį pakeitimą?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Aukštos kokybės intensyvus lygis"
@@ -4105,6 +4253,14 @@ msgctxt "#13121"
msgid "VDPAU HQ Upscaling level"
msgstr "VDPAU HQ intensyvus lygis"
+msgctxt "#13122"
+msgid "VDPAU Studio level colour conversion"
+msgstr "VDPAU studijos lygio spalvų konversija"
+
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "IÅ¡laikyti 'Skin'?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "TuÅ¡Äia kitose pateiktyse"
@@ -4157,6 +4313,10 @@ msgctxt "#13161"
msgid "Primary DNS"
msgstr "Pagrindinis DNS"
+msgctxt "#13162"
+msgid "Initialise failed"
+msgstr "Inicijuoti nepavyko"
+
msgctxt "#13170"
msgid "Never"
msgstr "Niekada"
@@ -4401,6 +4561,10 @@ msgctxt "#13318"
msgid "Recursive slideshow"
msgstr "Skaidrių rekursavimas"
+msgctxt "#13319"
+msgid "Randomise"
+msgstr "Randomise"
+
msgctxt "#13320"
msgid "Stereo"
msgstr "Stereo"
@@ -4613,10 +4777,22 @@ msgctxt "#13388"
msgid "Preset"
msgstr "IÅ¡ankstinis nustatymas"
+msgctxt "#13389"
+msgid "There are no presets available\nfor this visualisation"
+msgstr "Šiai vizualizacijai/n nėra išankstinio nustatymo"
+
+msgctxt "#13390"
+msgid "There are no settings available\nfor this visualisation"
+msgstr "Nėra jokių nustatymų šiai vizualizacijai"
+
msgctxt "#13391"
msgid "Eject/Load"
msgstr "Atidaryti/Uždaryti"
+msgctxt "#13392"
+msgid "Use visualisation if playing audio"
+msgstr "Naudoti vizualizacijÄ…, kai atkuriamas garsas"
+
msgctxt "#13393"
msgid "Calculate size"
msgstr "ApskaiÄiuoti dydį"
@@ -4793,6 +4969,22 @@ msgctxt "#13436"
msgid "Allow hardware acceleration (libstagefright)"
msgstr "Leisti aparatūros spartinimą (libstagefright)"
+msgctxt "#13437"
+msgid "Prefer VDPAU Video Mixer"
+msgstr "Pageidaujamas VDPAU vaizdo mikšeris"
+
+msgctxt "#13438"
+msgid "Allow hardware acceleration (amcodec)"
+msgstr "Leisti aparatūros spartinimą (amcodec)"
+
+msgctxt "#13439"
+msgid "Allow hardware acceleration (MediaCodec)"
+msgstr "Leisti aparatūros spartinimą (MediaCodec)"
+
+msgctxt "#13440"
+msgid "Frame Multi Threaded Decoding (less reliable)"
+msgstr "RÄ—melio daugiasrautis dekodavimas (nerekomenduojamas/nepatikimas)"
+
msgctxt "#13500"
msgid "A/V sync method"
msgstr "A/V sinchronizavimo metodas"
@@ -4809,6 +5001,10 @@ msgctxt "#13503"
msgid "Video clock (Resample audio)"
msgstr "Video laikrodis (Resample audio)"
+msgctxt "#13504"
+msgid "Maximum speedup/slowdown amount (%)"
+msgstr "Maksimalus greitinimo/lÄ—tinimo lygis (%)"
+
msgctxt "#13505"
msgid "Resample quality"
msgstr "Resample kokybÄ—"
@@ -4873,6 +5069,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f sekundžių"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d MinutÄ—"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d MinutÄ—s"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Apple pultelis"
@@ -5001,6 +5205,10 @@ msgctxt "#14024"
msgid "Enter the nearest large town"
msgstr "Įveskite artimiausią didelį miestą"
+msgctxt "#14025"
+msgid "Video/Audio/DVD cache - Hard disk"
+msgstr "Video/Audio/DVD talpyklos - Kietasis diskas"
+
msgctxt "#14026"
msgid "Video cache - DVD-ROM"
msgstr "Video talpykla - DVD-ROM"
@@ -5345,6 +5553,10 @@ msgctxt "#15213"
msgid "Play using..."
msgstr "Atkūrti naudojant..."
+msgctxt "#15214"
+msgid "Use smoothed A/V synchronisation"
+msgstr "Naudoti išlyginamają A/V sinchronizaciją"
+
msgctxt "#15215"
msgid "Hide file names in thumbs view"
msgstr "Slėpti failų vardus miniatiūrų rodinyje"
@@ -5485,6 +5697,10 @@ msgctxt "#16031"
msgid "No matching songs in the library."
msgstr "Nėra atitinkamų dainų bibliotekoje."
+msgctxt "#16032"
+msgid "Could not initialise database."
+msgstr "Nepavyko inicializuoti duomenų bazės"
+
msgctxt "#16033"
msgid "Could not open database."
msgstr "Nepavyko atidaryti duomenų bazės."
@@ -5545,6 +5761,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Pakeisti pavadinimÄ…"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Tvarkyti..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Redaguoti rūšiavimo pavadinimą"
@@ -5637,6 +5857,10 @@ msgctxt "#16314"
msgid "Inverse Telecine"
msgstr "Atvirkštinis Telecine"
+msgctxt "#16315"
+msgid "Lanczos3 optimised"
+msgstr "Optimizuoti Lanczos3"
+
msgctxt "#16316"
msgid "Auto"
msgstr "Auto"
@@ -5665,10 +5889,18 @@ msgctxt "#16322"
msgid "Spline36"
msgstr "Spline36"
+msgctxt "#16323"
+msgid "Spline36 optimised"
+msgstr "Optimizuoti Spline36"
+
msgctxt "#16324"
msgid "Software Blend"
msgstr "Programinės įrangos mišinys"
+msgctxt "#16325"
+msgid "VDPAU - Bob"
+msgstr "VDPAU - Bob"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Po apdirbimo (vÄ—liau)"
@@ -6077,6 +6309,18 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Įspėjimas"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Servisas"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "TeikÄ—jas"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Prašome pereiti į kitą kanalą."
@@ -6321,6 +6565,10 @@ msgctxt "#19170"
msgid "Timeout when starting playback"
msgstr "Laikas, kai prasideda atkūrimas"
+msgctxt "#19171"
+msgid "Start playback minimised"
+msgstr "Pradėti atkūrimą sumažinus"
+
msgctxt "#19172"
msgid "Instant recording duration"
msgstr "Greito įrašymo trukmė"
@@ -6389,6 +6637,10 @@ msgctxt "#19189"
msgid "Continue last channel on startup"
msgstr "Tęsti paleidžiant paskutinį kanalą"
+msgctxt "#19190"
+msgid "Minimised"
+msgstr "Minimizuoti"
+
msgctxt "#19191"
msgid "PVR service"
msgstr "PVR servisas"
@@ -6517,6 +6769,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "Nerastas PVR priedas, arba reikia įjungti. Patikrinkite savo nustatymus, arba ieškokite apie tai informacijos."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "Įrašymas atšauktas"
@@ -6541,6 +6797,10 @@ msgctxt "#19229"
msgid "Close channel OSD after switching channels"
msgstr "Uždaryti kanalo OSD po kanalų perjungimo"
+msgctxt "#19230"
+msgid "Prevent EPG updates during playback"
+msgstr "Neleisti EPG atnaujinimo atkūrimo metu"
+
msgctxt "#19231"
msgid "Always use the channel order from the backend(s)"
msgstr "Visada naudoti kanalo užsakymą iš posistemės(-ių)"
@@ -6553,6 +6813,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "Rodyti praneÅ¡imÄ… laikmaÄio naujinimui"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Naudoti posistemės kanalų numerius (veikia tik su vienu įjungtu PVR priedu)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "PVR menedžeris veikia/startavo"
@@ -6573,10 +6837,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "Paleidimo foninÄ—s gijos"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Neįjungtas joks PVR priedas"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "PVR menedžeris buvo įjungtas nenaudojant"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "PVR priedo. Įdiegite/įjunkite nors vieną PVR priedą,"
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "kad galÄ—tumÄ—te naudotis PVR funkcionalumu."
@@ -6689,10 +6961,18 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Visi įrašai"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Nėra PVR priedo (-ų)"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "Jums reikia imtuvo posistemės programinės įrangos,"
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "kad galima būtu naudoti PVR priedą (-us)."
+
msgctxt "#19274"
msgid "Please visit xbmc.org/pvr to learn more."
msgstr "Apsilankykite xbmc.org/pvr išsamiai informacijai gauti"
@@ -7361,6 +7641,14 @@ msgctxt "#20085"
msgid "Show system info"
msgstr "Rodyti sistemos informacijÄ…"
+msgctxt "#20086"
+msgid "Show available disk space C: E: F:"
+msgstr "Rodyti laisvÄ… vietÄ… diske C: E: F:"
+
+msgctxt "#20087"
+msgid "Show available disk space E: F: G:"
+msgstr "Rodyti laisvÄ… vietÄ… diske E: F: G:"
+
msgctxt "#20088"
msgid "Weather info"
msgstr "Orų informacija"
@@ -8297,6 +8585,10 @@ msgctxt "#20413"
msgid "Get fanart"
msgstr "Gauti Fanart"
+msgctxt "#20414"
+msgid "Show fanart in video and music libraries"
+msgstr "Rodyti FanArt vaizdo ir muzikos bibliotekose"
+
msgctxt "#20415"
msgid "Scanning for new content"
msgstr "Ieškoma naujo turinio"
@@ -8985,6 +9277,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s į %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Rinktis išorinius subtitrus"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Rinktis savo išorinius subtitrus"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(IÅ¡orinis)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Failo pavadinimas"
@@ -9377,6 +9681,10 @@ msgctxt "#22020"
msgid "Guide"
msgstr "Gidas"
+msgctxt "#22021"
+msgid "Allowed error in aspect ratio to minimise black bars"
+msgstr "Leidžiama raiškos santykių paklaida siekiant sumažinti juodas juostas"
+
msgctxt "#22022"
msgid "Show video files in listings"
msgstr "Rodyti vaizdo failų sąrašus"
@@ -9537,6 +9845,10 @@ msgctxt "#24009"
msgid "Script"
msgstr "Skriptas"
+msgctxt "#24010"
+msgid "Visualisation"
+msgstr "Vizualizacija"
+
msgctxt "#24011"
msgid "Add-on repository"
msgstr "Priedų saugykla"
@@ -9657,14 +9969,30 @@ msgctxt "#24043"
msgid "Available Updates"
msgstr "Prieinami atnaujinimai"
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Priklausomybės nėra įvykdytos. Prašome susisiekti su priedo (-ų) autoriumi."
+
msgctxt "#24045"
msgid "Add-on does not have the correct structure"
-msgstr "Priedai neatitinka teisingos struktūros"
+msgstr "Priedas neatitinka teisingos struktūros"
+
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s yra naudojamas šis įdiegtas priedas(s)"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Šis priedas negali būti pašalintas"
msgctxt "#24048"
msgid "Rollback"
msgstr "Gryžti"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Nesuderinamas"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Prieinami priedai"
@@ -9769,6 +10097,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Blokuoti priedų menedžerį"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Šis priedas negali būti išjungtas"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(dabartinis)"
@@ -9777,6 +10109,10 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(juodas sąrašas)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Šis priedas yra nesuderinamas arba buvo pažymėtas repozitorijoje kaip sugadintas."
+
msgctxt "#24097"
msgid "Would you like to disable it on your system?"
msgstr "Norite išjungti jį savo sistemoje?"
@@ -9805,6 +10141,54 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "Teminiai išvaizdai trūksta kai kurių failų"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Šis priedas yra nesuderinamas dėl iki šiol neišspręstų klaidų."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Pauzė ieškant subtitrų"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Jei neišsaugojote subtitrų kino aplanke, bus atsiųsta į pasirinktą saugoti subtitrų katalogą"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Ieškoma subtitrų ..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d subtitrai rasti"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Subtitrai nerasti"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "AtsisiunÄiami subtitrai ..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Kalbos atsisiųsti subtitrai"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Nustatyti kalbą subtitrų atsisiuntimui. Subtitrai pateikiami ne visomis kalbomis"
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Nepavyko atsisiųsti subtitrų"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Neįdiegta subtitrų siuntimo paslauga"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "IÅ¡saugoti subtitrus filmo kataloge"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Pranešimai"
@@ -9909,6 +10293,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Vaizdo klipai"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Perkrauti papildinį ir paleisti"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Šį vakarą"
@@ -10229,6 +10617,10 @@ msgctxt "#34110"
msgid "7.1"
msgstr "7.1"
+msgctxt "#34111"
+msgid "Select the behaviour when no sound is required for either playback or GUI sounds. [Always] - continuous inaudible signal is output, this keeps the receiving audio device alive for any new sounds, however this might also block sound from other applications. [1- 10 Minutes] - same as Always except that after the selected period of time audio enters a suspended state [Off] - audio output enters a suspended state. Note - sounds can be missed if audio enters suspended state."
+msgstr "Pasirinkite elgsenÄ…, kai nÄ—ra garso ir reikalinga atkÅ«rti GUI garsÄ…. [Visada] - nuolatinis siunÄiamas signalas, tai apsaugo imtuvo garso įrenginį, taÄiau tai taip pat gali bÅ«ti blokuojamas garsas iÅ¡ kitų programų. [1 - 10 MinutÄ—s] - kaip visada, iÅ¡skyrus, kad per pasirinktÄ… laikotarpį garsas patenka sustabdymo bÅ«klÄ—je [IÅ¡jungta] - garso iÅ¡vestis persijungia atidedant. Pastaba - garsÄ… galima praleisti, jei garsas įeina suspenduotoje bÅ«klÄ—je."
+
msgctxt "#34120"
msgid "Play GUI sounds"
msgstr "Atkurti GUI garsus"
@@ -10245,6 +10637,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Niekada"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Nepavyksta rasti sekanÄio elemento atkÅ«rimui"
@@ -10281,6 +10693,10 @@ msgctxt "#34401"
msgid "Failed to init video filters/scalers, falling back to bilinear scaling"
msgstr "Nepavyko pirminis filtro/skalerio paleidimas vaizdui, krito iki dvitiesio mastelio"
+msgctxt "#34402"
+msgid "Failed to initialise audio device"
+msgstr "Nepavyko inicijuoti garso įrenginio"
+
msgctxt "#34403"
msgid "Check your audiosettings"
msgstr "Patikrinkite savo garso nustatymus"
@@ -10313,6 +10729,10 @@ msgctxt "#35001"
msgid "Generic HID device"
msgstr "Bendras HID prietaisas"
+msgctxt "#35002"
+msgid "Generic network adaptor"
+msgstr "Bendrasis tinklo adapteris"
+
msgctxt "#35003"
msgid "Generic disk"
msgstr "Bendras diskas"
@@ -10349,6 +10769,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "IÅ¡jungti vairasvirtÄ™, kai Å¡is prietaisas veikia"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Įgalinti sistemos klavišus visame ekrane"
+
msgctxt "#35500"
msgid "Location"
msgstr "Vieta"
@@ -10369,6 +10793,10 @@ msgctxt "#35504"
msgid "Product ID"
msgstr "Produkto ID"
+msgctxt "#36000"
+msgid "Pulse-Eight CEC adaptor"
+msgstr "Pulse-Eight CEC adapteris"
+
msgctxt "#36001"
msgid "Pulse-Eight Nyxboard"
msgstr "Pulse-Eight Nyxboard"
@@ -10389,6 +10817,10 @@ msgctxt "#36005"
msgid "Enable switch side commands"
msgstr "Perjungti šalutinį komandų jungtį"
+msgctxt "#36006"
+msgid "Could not open the adaptor"
+msgstr "Nepavyko atidaryti adapterio"
+
msgctxt "#36007"
msgid "Devices to power on when starting XBMC"
msgstr "Paleidžiant XBMC įjungti maitinimą įrenginiuose"
@@ -10409,6 +10841,10 @@ msgctxt "#36011"
msgid "Could not detect the CEC com port. Set it up manually."
msgstr "Nepavyko aptikti CEC prievado. Nustatyti jį rankiniu būdu."
+msgctxt "#36012"
+msgid "Could not initialise the CEC adaptor. Please check your settings."
+msgstr "Nepavyko inicializuoti CEC adapterio. Patikrinkite nustatymus."
+
msgctxt "#36015"
msgid "HDMI port number"
msgstr "HDMI prievado numeris"
@@ -10417,6 +10853,10 @@ msgctxt "#36016"
msgid "Connected"
msgstr "Sujungtas"
+msgctxt "#36017"
+msgid "Could not initialise the CEC adaptor: libCEC was not found on your system."
+msgstr "Nepavyko inicializuoti CEC adapterio: libCEC sistemoje nenustatytas."
+
msgctxt "#36018"
msgid "Use the TV's language setting"
msgstr "Naudoti TV kalbos nustatymus"
@@ -10469,6 +10909,14 @@ msgctxt "#36030"
msgid "Connection lost"
msgstr "Nutrūko ryšys"
+msgctxt "#36031"
+msgid "This user does not have permissions to open the CEC adaptor"
+msgstr "Å is vartotojas neturi teises atidaryti CEC adapterio"
+
+msgctxt "#36032"
+msgid "The port is busy. Only one program can access the CEC adaptor"
+msgstr "Prievadas užimtas. Tik viena programa gali naudotis CEC adapterį"
+
msgctxt "#36033"
msgid "Pause playback when switching to another source"
msgstr "Sustabdyti atkūrimą, kai pereina į kitą šaltinį"
@@ -10501,6 +10949,10 @@ msgctxt "#36041"
msgid "* Item folder"
msgstr "* Prekių aplankas"
+msgctxt "#36042"
+msgid "Use limited colour range (16-235)"
+msgstr "Naudoti ribotą spalvų gamą (16-235)"
+
msgctxt "#36101"
msgid "Change the look and feel of the User Interface."
msgstr "Pakeiskite išvaizdą ir vartotojo sąsają."
@@ -10617,6 +11069,10 @@ msgctxt "#36129"
msgid "Set the amount of idle time required before displaying the screensaver."
msgstr "Nustatykite prastovos laiką, reikalingą prieš rodant ekrano užsklandą."
+msgctxt "#36130"
+msgid "Select the screensaver. XBMC will force the 'Dim' screensaver when fullscreen video playback is paused or a dialogue box is active."
+msgstr "Pasirinkite ekrano užsklandą. XBMC 'Dim' ekrano užsklanda priverstinai, kai visame ekrane vaizdo atkūrimas yra sustabdytas ir/ar/arba dialogo langas yra aktyvus."
+
msgctxt "#36131"
msgid "Change specific screensaver settings. The available options are dependent on the screensaver used."
msgstr "Pakeisti konkreÄius ekrano užsklandos parametrus. Galimos pasirinktys priklauso nuo ekrano naudojamo."
@@ -10625,6 +11081,10 @@ msgctxt "#36132"
msgid "Preview the selected screensaver."
msgstr "Peržiūrėti pasirinktą ekrano užsklandą."
+msgctxt "#36133"
+msgid "If music is being played, XBMC will start the selected visualisation instead of displaying the screensaver."
+msgstr "Kai muzika atkuriama, XBMC pradės pasirinktą vizualizaciją, o ne ekrano užsklandą."
+
msgctxt "#36134"
msgid "Dim the display when media is paused. Not valid for the 'Dim' screensaver mode."
msgstr "'Dim' ekranas, kai laikmena sustabdyta. Negalioja 'Dim' ekrano užsklandos režimu."
@@ -10749,10 +11209,38 @@ msgctxt "#36164"
msgid "Select when the refresh rate adjustments should take place."
msgstr "Pasirinkti, kai atnaujinimo dažnio patikslinimai turėtų būti vykdomi."
+msgctxt "#36165"
+msgid "Pause for a small amount of time during a refresh rate change. Activate to automatically set the refresh rate which is best matched with the video that is playing. This potentially allows for perfectly smooth video reproduction, as video material can be recorded in a variety of frame rates which need to be properly matched by the refresh rate of the display in order to be displayed smoothly."
+msgstr "Pristabdyti per atnaujinimo kurso pokytį. Įjungti, kad automatiškai nustatytas atnaujinimo dažnis kuri yra geriausiai suderintas su vaizdu kai yra atkuriamas. Tai leidžia sklandžią vaizdo reprodukciją, vaizdo medžiaga gali būti įrašyta iškadravimo reikšmėje, katrie turi būti tinkamai suderinti su atnaujinimo dažnio ekranau, kad būtų rodomas sklandžiai."
+
+msgctxt "#36166"
+msgid "Synchronise the video to the refresh rate of the monitor."
+msgstr "Sinchronizuokite monitoriaus vaizdo atnaujinimo dažnį."
+
+msgctxt "#36167"
+msgid "Audio has to stay in sync, this can either be done by resampling, skipping/duplicating packets, or adjusting the clock if it gets out of sync too far."
+msgstr "Audio sinchronizavimas, tai gali būti atliekama pagal resampling, praleidžiant/kopijuojant paketus arba koreguojant laikrodį, jei jis bus nesinchronizuotas."
+
+msgctxt "#36168"
+msgid "Maximum video speed adjust to match actual screen refresh rate."
+msgstr "Maksimalus vaizdo greiÄio reguliavimas, kad atitiktų faktinį ekrano atnaujinimo dažnį."
+
+msgctxt "#36169"
+msgid "Select the quality of resampling for cases where the audio output needs to be at a different sampling rate from that used by the source. [Low] is fast and will have minimal impact on system resources such as the use of the CPU, [Medium] & [High] will use progressively more system resources."
+msgstr "Pasirinkite resampling tais atvejais, kai garso išėjimas turi būti ne skirtingų atrankos dažniu, negu naudojama šaltinio kokybė. [Žemas] turės minimalų poveikį sistemos ištekliams, pvz.: procesoriaus naudojimas [Vidutinis] ir [Greitas] bus naudojama vis daugiau sistemos išteklių."
+
+msgctxt "#36170"
+msgid "Allow video player to ignoring aspect ratio by a certain amount to fill a larger amount of the screen with video."
+msgstr "Allow video player to ignoring aspect ratio by a certain amount to fill a larger amount of the screen with video."
+
msgctxt "#36171"
msgid "Select the zoom level that 4:3 videos are shown on widescreen displays."
msgstr "Pasirinkti priartinimo lygį 4:3, kai filmai rodomi plaÄiame ekrane."
+msgctxt "#36172"
+msgid "VDPAU studio level conversion provides a way for advanced applications like XBMC to influence the colour space conversion."
+msgstr "VDPAU studio level conversion provides a way for advanced applications like XBMC to influence the colour space conversion."
+
msgctxt "#36173"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
@@ -10873,6 +11361,10 @@ msgctxt "#36202"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+
msgctxt "#36204"
msgid "Import channel groups from the PVR backend (if supported). Will delete user created groups if they're not found on the backend."
msgstr "Importuoti kanalų grupes iš PVR posistemės (jei jos palaikomos). Bus ištrintos vartotojo sukurtos grupės, jei jos nebuvo rastos posistemėje."
@@ -10933,14 +11425,58 @@ msgctxt "#36218"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
+msgctxt "#36219"
+msgid "Default EPG window to show. Defaults to Timeline."
+msgstr "Default EPG window to show. Defaults to Timeline."
+
+msgctxt "#36220"
+msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
+msgstr "Dienų skaiÄius EPG duomenų importui iÅ¡ serverio. Pagal nutylÄ—jimÄ… 2 ar daugiau dienų."
+
+msgctxt "#36221"
+msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
+msgstr "Laikas tarp EPG duomenų importo iÅ¡ serverio. Pagal nutylÄ—jimÄ… 120 minuÄių."
+
+msgctxt "#36222"
+msgid "Do not import EPG data while playing TV to minimise CPU usage."
+msgstr "Neimportuoti EPG duomenų atkuriant TV. Iki minimumo sumažina kompiuterio procesoriaus naudojimą."
+
+msgctxt "#36223"
+msgid "By default, EPG data is stored in a local database to speed up importing when XBMC is restarted."
+msgstr "Pagal nutylėjimą, EPG duomenys yra saugomi vietos duomenų bazėje. Pagreitinti importavimą kai XBMC įsijungs iš naujo."
+
+msgctxt "#36224"
+msgid "Hide \"no information available\" labels when no EPG data can be retrieved for a channel."
+msgstr "Slėpti \"nėra informacijos\" etiketes, kai nėra EPG duomenų"
+
+msgctxt "#36225"
+msgid "Delete the EPG database in xbmc and reimport the data afterwards from the backend."
+msgstr "Trinti EPG duomenų bazę iš XBMC ir reimportuoti duomenys iš posistemė."
+
msgctxt "#36226"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
+msgctxt "#36227"
+msgid "Display stream of selected channel in a small box instead of fullscreen."
+msgstr "Rodyti pasirinkto kanalo srautą mažame langelyje, o ne visame ekrane."
+
+msgctxt "#36228"
+msgid "Show the last viewed channel if switching to live tv."
+msgstr "Rodyti 'Paskutinį' žiūrėtą kanalą, jei pereinama prie Live TV."
+
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Rodyti kokybišką kodeko signalo informaciją informacineme lange (jei tai palaiko priedas ir posistemės)."
+
msgctxt "#36230"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
+msgctxt "#36231"
+msgid "Pressing a number button in full screen mode will automatically switch to the channel number that was entered after 1 second."
+msgstr "Paspaudus skaiÄių mygtukÄ… per visÄ… ekranÄ… automatiÅ¡kai perjungiamas į kanalo numerį, kuris buvo įvestas po 1 sekundÄ—s."
+
msgctxt "#36232"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
@@ -10949,14 +11485,74 @@ msgctxt "#36233"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
+msgctxt "#36234"
+msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
+msgstr "Taikymo trukmÄ— įraÅ¡ymui spaudžiant įraÅ¡ymo mygtukÄ… arba sukuriant naujÄ… instrukcijos laikmatį. Numatytasis iki 180 minuÄių."
+
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "PrioritetÄ… skiria įraÅ¡ymui. Didesnis skaiÄius reiÅ¡kia didesnį prioritetÄ…. Numatytasis iki 50. Palaiko ne visi priedai ir serveriai."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Naikinti įrašą. Pagal nutylėjimą 99 dienų. Palaiko ne visi priedai ir serveriai."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Pradėti įrašus iki faktinio laiko. Pagal nutylėjimą 2 minutės. Palaiko ne visi priedai ir serveriai."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Ä®raÅ¡o pabaiga po faktinio laiko. Pagal nutylÄ—jimÄ… 10 minuÄių. Palaiko ne visi priedai ir serveriai."
+
+msgctxt "#36239"
+msgid "Display a notification when timers are added, finished or removed by the backend."
+msgstr "Rodyti pranešimą, kai laikas yra pridėtas, baigtas arba pradėtas nurodytoje posistemėje."
+
msgctxt "#36240"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
+msgctxt "#36241"
+msgid "Execute the \"wakeup command\" below when XBMC exits or is going into hibernation mode. The timestamp of the next scheduled recording is passed as parameter."
+msgstr "Execute the \"wakeup command\" below when XBMC exits or is going into hibernation mode. The timestamp of the next scheduled recording is passed as parameter."
+
+msgctxt "#36242"
+msgid "The command will not be executed when a recording will be started within this timeout. Defaults to 15 minutes."
+msgstr "Komanda nebus vykdoma, kai įraÅ¡ymas bus pradÄ—tas per šį laukimo laikÄ…. Pagal nutylÄ—jimÄ… 15 minuÄių."
+
+msgctxt "#36243"
+msgid "The command to execute. Defaults to '/usr/bin/setwakeup.sh'."
+msgstr "Komanda vykdyti. Numatytoji reikšmė yra '/usr/bin/setwakeup.sh'."
+
+msgctxt "#36244"
+msgid "Time to substract from the start time of the next scheduled recording. Defaults to 15 minutes."
+msgstr "Time to substract from the start time of the next scheduled recording. Defaults to 15 minutes."
+
+msgctxt "#36245"
+msgid "Execute the wakeup command every day at the given time."
+msgstr "Vykdyti žądinimo komandą kiekvieną dieną nustatytu laiku."
+
+msgctxt "#36246"
+msgid "When to execute the daily wakeup command."
+msgstr "Kada vykdyti kasdienę žadinimo komandą."
+
msgctxt "#36247"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
+msgctxt "#36248"
+msgid "Asks for a pin code to access parental locked channels. Channels can be marked as locked in the channels editor on the general tab. Parental locked channels can not be played or recorded without entering a pin code, and the EPG information is hidden for those channels."
+msgstr "Prašoma įvesti PIN kodą, kad pasiekti tėvų užrakintus kanalus. Kanalai gali būti pažymėti kaip užrakinti kanalų redaktoriumi skirtuke 'Bendra'. Tėvų užrakinti kanalai negali būti atkuriami arba įrašyti neįvedus PIN kodo taip pat šių kanalų EPG informacija yra paslėpta."
+
+msgctxt "#36249"
+msgid "Enter a new pin code to unlock parental locked channels."
+msgstr "Įveskite naują PIN kodą kad atrakintumėte tėvų užrakintus kanalus."
+
+msgctxt "#36250"
+msgid "Ask for the pin code again when trying to access a parental locked channel and the code hasn't been asked for this duration. Defaults to 300 seconds."
+msgstr "Prašyti PIN kodo dar kartą, kai bandant prieiti prie tėvų užrakintų kanalų kodas nebuvo paprašytas šiam laikotarpiui. Numatytoji reikšmė yra 300 sekundžių."
+
msgctxt "#36251"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
@@ -10973,10 +11569,38 @@ msgctxt "#36254"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
+msgctxt "#36255"
+msgid "Determine if artists that appear only on compilations are shown in the library artist view."
+msgstr "Nustatyti, ar atlikėjai, kurie rodomi tik ant kompiliacijų turi būti rodomi fonotekoje."
+
+msgctxt "#36256"
+msgid "Automatically fetch album and artist information via scrapers during scan."
+msgstr "Automatiškai parsiųsti albumą ir informaciją apie atlikėją naudojant 'scrapers' nuskaitant."
+
+msgctxt "#36257"
+msgid "Select the default album information source"
+msgstr "Pasirinkti numatytąjį albumą informacijos šaltiniui"
+
+msgctxt "#36258"
+msgid "Select the default artist information source. See the Add-ons Manager for options."
+msgstr "Pasirinkti pagal nutylėjimą šaltinio informacija apie atlikėją. Žiūrėti priedai 'Manager' galimybės."
+
+msgctxt "#36259"
+msgid "Check for new and removed media files on XBMC startup."
+msgstr "Patikrinti naujus ir pašalinti senus medijos failus paleidžiant XBMC."
+
msgctxt "#36260"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
+msgctxt "#36261"
+msgid "Path where taken screenshots will be stored."
+msgstr "Nurodyti keliÄ… kur bus saugomos ekrano sklandos."
+
+msgctxt "#36262"
+msgid "Export the Music Library database to XML files. This will optionally overwrite your current XML files."
+msgstr "Eksportuoti fonotekos duomenų bazę XML failais. Tai bus perrašyti dabartiniai XML failai."
+
msgctxt "#36264"
msgid "No info available yet."
msgstr "Informacijos dar nÄ—ra."
diff --git a/language/Macedonian/strings.po b/language/Macedonian/strings.po
index 3829274df2..2953a80b40 100644
--- a/language/Macedonian/strings.po
+++ b/language/Macedonian/strings.po
@@ -1161,6 +1161,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Конверзија на брзина на Ñлики"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "ФикÑирано"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Различни изведувачи"
@@ -3285,6 +3289,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "ПоÑтавки - Профили"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Вообичаено"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "Заклучај ги поÑтавките"
diff --git a/language/Maltese/strings.po b/language/Maltese/strings.po
index 57584cba58..1e4d504ae7 100644
--- a/language/Maltese/strings.po
+++ b/language/Maltese/strings.po
@@ -2765,6 +2765,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Settings->Profili"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "Settings tal-AÄ‹Ä‹ess"
diff --git a/language/Norwegian/strings.po b/language/Norwegian/strings.po
index 77d9410438..81024d754c 100644
--- a/language/Norwegian/strings.po
+++ b/language/Norwegian/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Konverter bildefrekvens"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "LÃ¥st"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Diverse artister"
@@ -3469,6 +3473,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Nullstill"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Tilleggsutforsker"
diff --git a/language/Persian (Iran)/strings.po b/language/Persian (Iran)/strings.po
index efe9c472b9..b6185e71de 100644
--- a/language/Persian (Iran)/strings.po
+++ b/language/Persian (Iran)/strings.po
@@ -3277,6 +3277,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "تنظیمات - پروÙایل ها"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "استاندارد"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "تنظیمات Ù‚ÙÙ„"
diff --git a/language/Persian/strings.po b/language/Persian/strings.po
index 1d787ac834..2c2ebebabb 100644
--- a/language/Persian/strings.po
+++ b/language/Persian/strings.po
@@ -453,6 +453,10 @@ msgctxt "#400"
msgid "Weather"
msgstr "آب و هوا"
+msgctxt "#409"
+msgid "Defaults"
+msgstr "استاندارد"
+
msgctxt "#444"
msgid "Video"
msgstr "ویدئو"
@@ -709,6 +713,10 @@ msgctxt "#10025"
msgid "Videos"
msgstr "ویدئوها"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "استاندارد"
+
msgctxt "#10134"
msgid "Favourites"
msgstr "علاقه‌مندی‌ها"
@@ -773,10 +781,18 @@ msgctxt "#13280"
msgid "Video"
msgstr "ویدئو"
+msgctxt "#13340"
+msgid "Leave as is"
+msgstr "استاندارد"
+
msgctxt "#13350"
msgid "Now playing..."
msgstr "در حال پخش..."
+msgctxt "#13388"
+msgid "Preset"
+msgstr "استاندارد"
+
msgctxt "#13398"
msgid "Shortcuts"
msgstr "میانبر"
diff --git a/language/Polish/strings.po b/language/Polish/strings.po
index 4e8b0c6a9a..1fa48e9a3b 100644
--- a/language/Polish/strings.po
+++ b/language/Polish/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Konwertuj liczbÄ™ klatek"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Konfiguracja wyjścia"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Stałe"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Zoptymalizowany"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Różni artyści"
@@ -1213,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "Rok"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normalizacja poziomu przy miksowaniu"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "Wsparcie formatu DTS-HD"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "WÅ‚Ä…cz przekazywanie"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "Wsparcie formatu TrueHD"
@@ -1493,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "maks."
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Najlepsze dopasowanie "
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Utrzymuj urządzenie audio włączone"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Usuń informacje o albumach"
@@ -1637,6 +1665,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Przełącz widok"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Limit próbkowania (kHz) "
+
msgctxt "#459"
msgid "Subs"
msgstr "Napisy"
@@ -3485,10 +3517,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Resetuj"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Podstawowy"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standardowy"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Zaawansowany"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Ekspert"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "PrzeglÄ…darka wtyczek"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Przywróć powyższe ustawienia do domyślnych "
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Czy na pewno chcesz zresetować ustawienia w tej kategorii?"
@@ -3501,6 +3553,14 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Brak dostępnej pomocy"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Przywraca wszystkie ustawienia do wartości domyślnych."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Brak dostępnych kategorii "
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "Dialog Tak/Nie"
@@ -3837,6 +3897,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "Limit prób wpisania hasła został wyczerpany."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "System wyłączy się teraz."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Zablokowany"
@@ -4137,6 +4201,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Zapisać rozdzielczość?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Czy chcesz zachować?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Upscaling wysokiej jakości"
@@ -4181,6 +4249,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "Korekcja poziomu kolorów VDPAU (YCbCr i RGB)"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Zostawić skórę?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "Wygaszaj inne ekrany"
@@ -4985,6 +5057,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f sekund(y)"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Minuta"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Minut(y)"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Pilot Apple"
@@ -5669,6 +5749,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Edytuj tytuł"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "ZarzÄ…dzanie..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Edycja sortowania "
@@ -6213,6 +6297,14 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Uwaga"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Usługa"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Dostawca"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Proszę zmień na inny kanał."
@@ -6661,6 +6753,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "Nie można uruchomić żadnej wtyczki PVR. Sprawdź ustawienia lub plik log."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "Nagrywanie anulowane"
@@ -6701,6 +6797,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "Wyświetl powiadomienie przy zmianie zaplanowanych zadań"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Używaj numerów kanałów z serwera (działa tylko przy jednej włączonej wtyczce PVR)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "Menedżer PVR startuje"
@@ -6721,10 +6821,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "Startowanie wątków tła"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Brak wlÄ…czonych wtyczek PVR"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "Menedżer PVR został uruchomiony bez jakichkolwiek"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "WÅ‚Ä…cz wtyczkÄ™ PVR. WÅ‚Ä…cz przynajmniej jeden dodatek"
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "by korzystać z funkcjonalności PVR."
@@ -6837,6 +6945,10 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Wszystkie nagrania"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Brak wtyczek PVR"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "Potrzebny tuner, oprogramowanie serwerowego, i"
@@ -9829,10 +9941,18 @@ msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "Wtyczka nie ma właściwej struktury"
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Ta wtyczka nie może zostać usunięta"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "Przywróć"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Niekompatybilne"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Dostępne wtyczki"
@@ -9937,6 +10057,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Zablokuj menedżer wtyczek"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Ta wtyczka nie może być wyłączona"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(bieżący)"
@@ -9973,6 +10097,26 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "W skórze brakuje części plików"
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Szukanie napisów..."
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Nie znaleziono napisów"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Pobieram napisy..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Pobierz napisy dla następujących języków:"
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Błąd podczas pobierania napisów"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Powiadomienia"
@@ -10413,6 +10557,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Nigdy"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1 "
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0 "
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Nie mogę znaleźć następnej pozycji do odtworzenia"
diff --git a/language/Portuguese (Brazil)/strings.po b/language/Portuguese (Brazil)/strings.po
index d6bed25a07..a3ee471665 100644
--- a/language/Portuguese (Brazil)/strings.po
+++ b/language/Portuguese (Brazil)/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Conversão de quadros/seg."
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Configuração de Saída"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fixo"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Otimizado"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Diversos Artistas"
@@ -1213,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "Ano"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normalizar os níveis de downmix"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "Receiver decodifica áudio DTS-HD"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Ativar passthrough"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "Receiver decodifica áudio Dolby True-HD"
@@ -1493,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "Alto"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Melhor correspondência"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Manter dispositivo de áudio ativo"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Excluir informações do álbum"
@@ -1637,6 +1665,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Troca visualização"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Limitar taxa amostragem (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Legendas"
@@ -2921,6 +2953,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Add-ons de Programas"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Selecionar ícone de plug-in"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Ajustes de addon"
@@ -3485,13 +3521,33 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Resetar"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Básico"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Padrão"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Avançado"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Expert"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Navegador de complementos"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Resetar Ajustes acima para o padrão"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
-msgstr "Você tem certeza que quer deletar os ajustes nesta categoria?"
+msgstr "Você tem certeza que quer resetar os ajustes desta categoria?"
msgctxt "#10043"
msgid "Help"
@@ -3501,6 +3557,18 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Nenhuma ajuda disponível"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Reseta todos os ajustes visíveis para os seus valores originais."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Sem categorias disponíveis"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Tente alterar o ajuste de nível para ver categorias e ajustes adicionais."
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "Janela de Sim/Não"
@@ -3837,6 +3905,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "O limite de tentativas de senha foi excedido."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "O sistema será desligado agora."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Item bloqueado"
@@ -4137,6 +4209,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Salvar resolução?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Você deseja manter esta alteração?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Aumento de resolução em alta qualidade"
@@ -4181,6 +4257,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "Nível de conversão de cores VDPAU Studio"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Manter skin?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "Escurecer outras telas"
@@ -4901,6 +4981,10 @@ msgctxt "#13439"
msgid "Allow hardware acceleration (MediaCodec)"
msgstr "Permitir aceleração por hardware (MediaCodec)"
+msgctxt "#13440"
+msgid "Frame Multi Threaded Decoding (less reliable)"
+msgstr "Decodificando múltiplos segmentos de frames ffmpeg (menos confiável)"
+
msgctxt "#13500"
msgid "A/V sync method"
msgstr "Método de syncronização de A/V"
@@ -4985,6 +5069,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f Segundos"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Minuto"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Minutos"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Controle Remoto Apple"
@@ -5669,6 +5761,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Editar título"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Gerenciar..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Editar ordem títulos"
@@ -6213,6 +6309,18 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Aviso"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Serviço"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Provedor"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Por favor troque para outro canal."
@@ -6661,6 +6769,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "Nenhum Add-on PVR pôde ser ativado. Verifique seus ajustes ou o registro para maiores informações."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "Gravações abortadas"
@@ -6701,6 +6813,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "Mostrar uma notificação das atualizações de agendamentos"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Use os números de canais do backend (somente funciona com 1 complemento PVR ativado)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "Administrador de PVR está inicializando"
@@ -6721,10 +6837,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "Iniciar tópicos em segundo plano"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Nenhum Add-on de PVR ativado"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "O administrador de PVR foi ativado sem qualquer"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "addon de PVR ativado. Ative ao menos um addon de PVR"
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "na ordem para usar as funcionalidades de PVR"
@@ -6837,10 +6961,18 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Todas as gravações"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Nenhum Add-on de PVR pode ser encontrado."
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "Você necessita uma placa de captura, um programa de backend, e um"
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "Add-on para poder usar o PVR."
+
msgctxt "#19274"
msgid "Please visit xbmc.org/pvr to learn more."
msgstr "Por favor visite xbmc.org/pvr para maiores informações."
@@ -9145,6 +9277,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s para %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Preferir legendas externas"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Preferir legendas externas em relação as internas."
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Externa)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Nome do arquivo"
@@ -9825,14 +9969,30 @@ msgctxt "#24043"
msgid "Available Updates"
msgstr "Atualizações Disponíveis"
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Dependências não encontradas. Por favor contate o autor do Add-on."
+
msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "Add-on não possui uma estrutura válida"
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s é usado pelo seguinte Add-on(s) instalado(s)"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Este Add-on não pode ser desinstalado"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "Desfazer"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Incompatível"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Add-ons Disponíveis"
@@ -9937,6 +10097,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Bloquear Gerenciador de Add-on"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Este Add-on não pode ser desativado"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(atual)"
@@ -9945,6 +10109,10 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(na lista negra)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "O Add-on é incompatível ou foi marcado como indisponível no repositório."
+
msgctxt "#24097"
msgid "Would you like to disable it on your system?"
msgstr "Você deseja desabilitar em seu sistema?"
@@ -9959,7 +10127,7 @@ msgstr "Gostaria de trocar para esta skin?"
msgctxt "#24100"
msgid "To use this feature you must download an Add-on:"
-msgstr "Para usar este recurso você deve fazer download de um add-on"
+msgstr "Para usar este recurso você deve fazer download de um Add-on"
msgctxt "#24101"
msgid "Would you like to download this Add-on?"
@@ -9973,6 +10141,54 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "Skin está faltando alguns files"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Add-on é incompatível devido a dependências não satisfeitas."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Pausar quando procurando por legendas"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Se a legenda não for salva junto a pasta do vídeo irá ser transferida para pasta de legendas customizada"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Procurando por legendas..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "% legendas encontradas"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Nenhuma legenda encontrada"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Transferindo legendas..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Idiomas para download de legendas"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Sete a linguagem a ser usada na procura por legendas. Nem todos os serviços de legendas usam todas as linguagens disponíveis."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Falhou ao transferir legenda"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Nenhum serviço de legenda instalado"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Salvar legendas para pasta de vídeo"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Notificações"
@@ -10077,6 +10293,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Clipes"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Reiniciar plug-in para ativar"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Hoje a noite"
@@ -10397,6 +10617,10 @@ msgctxt "#34110"
msgid "7.1"
msgstr "7.1"
+msgctxt "#34111"
+msgid "Select the behaviour when no sound is required for either playback or GUI sounds. [Always] - continuous inaudible signal is output, this keeps the receiving audio device alive for any new sounds, however this might also block sound from other applications. [1- 10 Minutes] - same as Always except that after the selected period of time audio enters a suspended state [Off] - audio output enters a suspended state. Note - sounds can be missed if audio enters suspended state."
+msgstr "Selecione a ação quando nenhum som for necessário na reprodução de conteúdos ou sons da interface gráfica. [Sempre] - Um sinal inaudível contínua sendo enviado para a saída, isso mantém o dispositivo de áudio ativo para todos os novos sons, porém isso também pode bloquear o som de outros aplicativos. [1 - 10 minutos] - O mesmo de sempre, exceto que após o período de tempo selecionado de áudio entra em estado de suspensão [Desligado] - saída de áudio entra em estado suspenso. Nota - Os sons podem se perder se o áudio entrar em estado de suspensão."
+
msgctxt "#34120"
msgid "Play GUI sounds"
msgstr "Reproduzir sons na interface gráfica"
@@ -10413,6 +10637,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Nunca"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Não existe um próximo item"
@@ -10525,6 +10769,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "Desativar joystick quando este dispositivo estiver presente"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Ativar teclas de sistema em tela cheia"
+
msgctxt "#35500"
msgid "Location"
msgstr "Local"
@@ -10977,6 +11225,10 @@ msgctxt "#36168"
msgid "Maximum video speed adjust to match actual screen refresh rate."
msgstr "Ajustar velocidade máxima do vídeo para corresponder à taxa de atualização da tela."
+msgctxt "#36169"
+msgid "Select the quality of resampling for cases where the audio output needs to be at a different sampling rate from that used by the source. [Low] is fast and will have minimal impact on system resources such as the use of the CPU, [Medium] & [High] will use progressively more system resources."
+msgstr "Selecione a qualidade de reamostragem para casos em que a saída de áudio necessite diferentes taxas de amostragem distinto do que é utilizado na fonte. [Baixo] é rápido e terá um impacto mínimo sobre os recursos do sistema, como o uso da CPU, [Médio] e [Alto] vão utilizar cada vez mais os recursos do seu sistema."
+
msgctxt "#36170"
msgid "Allow video player to ignoring aspect ratio by a certain amount to fill a larger amount of the screen with video."
msgstr "Permitir que o reprodutor de vídeo ignore a taxa de aspecto até uma certa quantidade, de modo a preencher com o vídeo uma área maior da tela."
@@ -11109,6 +11361,10 @@ msgctxt "#36202"
msgid "No info available yet."
msgstr "Nenhuma informação disponível ainda"
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Ativar as funcionalidades do Gravador de Vídeo Pessoal (PVR) no XBMC. Necessita de ter pelo menos um Add-on PVR instalado."
+
msgctxt "#36204"
msgid "Import channel groups from the PVR backend (if supported). Will delete user created groups if they're not found on the backend."
msgstr "Importar grupos de canais da backend PVR (se esta o suportar). Irá apagar grupos criados pelo utiliador se não forem encontrados na backend."
@@ -11209,6 +11465,10 @@ msgctxt "#36228"
msgid "Show the last viewed channel if switching to live tv."
msgstr "Exibir o último canal visualizado ao mudar para TV ao vivo."
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Exibir informação de qualidade do sinal na janela de informação de codec (se suportado pelo Add-on e pela backend)."
+
msgctxt "#36230"
msgid "No info available yet."
msgstr "Nenhuma informação disponível ainda"
@@ -11229,6 +11489,22 @@ msgctxt "#36234"
msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
msgstr "Duração da gravação ao pressionar o botão de gravar, ou quando criar um novo temporizador manual. O padrão é 180 minutos."
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "Prioridade da gravação. Número mais alto significa maior prioridade. O padrão é 50. Não é suportado por todos os add-ons e backends."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Delete gravações após este período. Padrão 99 dias. Não suportado por todos os add-ons e backends."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Iniciar as gravações antes do horário atual. Padrão 2 minutos. Não suportado por todos os Add-ons e backends."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Final da gravações após o horário atual. Padrão 10 minutos. Não suportado por todos os Add-ons e backends."
+
msgctxt "#36239"
msgid "Display a notification when timers are added, finished or removed by the backend."
msgstr "Exibir uma notificação quando os temporizadores são adicionados, concluídos ou removidos pela backend."
@@ -11717,10 +11993,22 @@ msgctxt "#36360"
msgid "No info available yet."
msgstr "Nenhuma informação disponível ainda"
+msgctxt "#36361"
+msgid "Select how the properties of the audio output are set: [Fixed] - output properties are set to the specified sampling rate & speaker configuration at all times; [Best Match] - output properties are set to always be as close a match to the source properties as possible; [Optimized] - output properties are set at the start of playback and will not change if the properties of the source changes."
+msgstr "Selecione como as propriedades de saída de áudio são definidas: [fixo] - propriedades de saída são definidas pela taxa de amostragem especificada e configuração dos alto-falantes e irão ser iguais em todos os momentos [Melhor Compatibilidade] - propriedades de saída serão ajustados para respeitarem as características das fontes, sempre que possível; [Otimizado] - propriedades de saída são definidas no início da reprodução e não irão mudar se ocorrerem alterações nas fontes."
+
+msgctxt "#36362"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded."
+msgstr "Selecione o número máximo de canais de áudio disponíveis para áudio decodificado."
+
msgctxt "#36363"
msgid "Boost AC3 streams that have been downmixed to 2 channels."
msgstr "Ampliar os fluxos AC3 que foram misturados para 2 canais"
+msgctxt "#36364"
+msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
+msgstr "Selecione para ativar upmixing de fonte de 2 canais em esteréo para o número de canais de áudio especificados na configuração de alto-falantes."
+
msgctxt "#36365"
msgid "Select this option if your receiver is capable of decoding AC3 streams."
msgstr "Selecione esta opção se o seu receiver consegue decodificar trilhas AC3."
@@ -11729,6 +12017,14 @@ msgctxt "#36366"
msgid "Select this option if your receiver is capable of decoding DTS streams."
msgstr "Selecione esta opção se o seu receiver consegue decodificar trilhas DTS."
+msgctxt "#36367"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded. If optical/coax digital outputs are used this must be set to 2.0"
+msgstr "Selecione o número máximo de canais de áudio / alto-falantes disponíveis para áudio decodificado. Se forem utilizadas as saídas digitais ótica ou coaxial este deve ser ajustado para 2.0."
+
+msgctxt "#36368"
+msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
+msgstr "Selecione para ativar as opções de áudio passthrough de áudio encodado, como Dolby Digital, DTS."
+
msgctxt "#36369"
msgid "Select this option if your receiver is capable of decoding TrueHD streams."
msgstr "Selecione esta opção se o seu receiver consegue decodificar trilhas TrueHD."
@@ -11737,6 +12033,14 @@ msgctxt "#36370"
msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
msgstr "Selecione esta opção se o seu receiver consegue decodificar trilhas DTS-HD."
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Selecione o dispositivo que será usado para reprodução de áudio que tenha sido decodificado como mp3."
+
+msgctxt "#36372"
+msgid "Select the device to be used for playback of encoded formats, these are any of the formats below in the 'capable receiver' options."
+msgstr "Selecione o dispositivo que será usado para formato encodados, os existentes estão listados abaixo como receiver é capaz de decodificar."
+
msgctxt "#36373"
msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
msgstr "Configurar a utilização dos sons da interface, como os da navegação por menus e notificações importantes."
@@ -11937,6 +12241,10 @@ msgctxt "#36422"
msgid "Enable hardware video decode using AMLogic decoder"
msgstr "Ativar decodificação de vídeo por hardware usando decoder AMLogic"
+msgctxt "#36423"
+msgid "Use ffmpeg frame multiple thread decoding when hardware decoding not working or disabled. (less reliable than default single thread mode)"
+msgstr "Usar a decodificação de segmentos múltiplos ffmpeg quando a decodificação por hardware não funcionar ou estiver desativada. (Menos confiável do que o modo padrão de decodificação única)"
+
msgctxt "#36500"
msgid "Stereoscopic mode (current)"
msgstr "Modo estereoscópico (atual)"
@@ -11989,6 +12297,10 @@ msgctxt "#36522"
msgid "Use preferred mode"
msgstr "Usar modo preferido"
+msgctxt "#36523"
+msgid "Maximum sampling rate for spdif or sampling rate for fixed output configuration"
+msgstr "Taxa de amostragem máxima para spdif ou taxa de amostragem para configuração de saída fixa"
+
msgctxt "#36524"
msgid "Preferred mode"
msgstr "Modo preferido"
@@ -12025,6 +12337,10 @@ msgctxt "#36532"
msgid "Same as movie"
msgstr "Igual ao do filme"
+msgctxt "#36533"
+msgid "Select how audio is downmixed, for example from 5.1 to 2.0: [Enabled] maintains the dynamic range of the original audio source when downmixed however volume will be lower [Disabled] maintains volume level of the original audio source however the dynamic range is compressed. Note - Dynamic range is the difference between the quietest and loudest sounds in a audio source."
+msgstr "Escolha como o áudio é misturado, por exemplo de 5.1 para 2.0: [Ativado] mantém a gama dinâmica da fonte de áudio original quando mixados no entanto o volume será menor [Desativado] mantém o nível da fonte de áudio original, porém a faixa dinâmica é comprimida. Nota - Faixa dinâmica é a diferença entre os sons mais silenciosos e o mais alto em uma fonte de áudio."
+
msgctxt "#36535"
msgid "Stereoscopic mode of video"
msgstr "Modo de vídeo estereoscópico"
@@ -12108,3 +12424,7 @@ msgstr "Saída Dupla de Ãudio"
msgctxt "#37018"
msgid "Boost centre channel when downmixing"
msgstr "Aumente canal central quando downmixing"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Ativar teclas de sistema como printscreen, alt-tab e teclas de voluma quando em tela cheia"
diff --git a/language/Portuguese/strings.po b/language/Portuguese/strings.po
index 87395873a6..d0af18e69e 100644
--- a/language/Portuguese/strings.po
+++ b/language/Portuguese/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Conversão de framerate"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Configuração de saída"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fixa"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Optimizado"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Colectânea"
@@ -1213,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "Ano"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normalizar níveis de som no downmix"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "Receptor compatível com DTS-HD"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Activar passagem de áudio"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "Receptor compatível com TrueHD"
@@ -1493,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "Máxima"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Melhor Correspondência"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Manter o dispositivo áudio activo"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Apagar informação do álbum"
@@ -1637,6 +1665,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Trocar de vista"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Limitar sampling rate (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Legendas"
@@ -2921,6 +2953,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Programas Add-ons"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Definir miniatura para plugin"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Definições do Add-on"
@@ -3485,10 +3521,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Predefinições"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Básico"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Predefinido"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Avançado"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Experiente"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Navegador de Add-ons"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Repor predefinições padrão"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Quer mesmo repor as predefinições nesta categoria?"
@@ -3501,6 +3557,18 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Não existe ajuda disponível"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Repor todas as definições visíveis para valores padrão."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Sem categorias disponíveis"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Experimente alterar o nível das definições para ver mais categorias e definições."
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "Janela de Sim/Não"
@@ -3837,6 +3905,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "Foi atingido o limite de tentativas da palavra-passe."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "O sistema vai desligar-se."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Item bloqueado"
@@ -4137,6 +4209,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Guardar resolução?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Quer manter esta alteração?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Escalonamento de alta qualidade"
@@ -4181,6 +4257,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "Nível de conversão de cor do VDPAU Studio"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Manter o tema?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "Desligar outros ecrãs"
@@ -4985,6 +5065,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f Segundos"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Minuto"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Minutos"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Comando da Apple"
@@ -5669,6 +5757,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Editar título"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Gerir..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Editar título para ordenação"
@@ -6213,6 +6305,10 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Aviso"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Serviço"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Por favor, mude para outro canal"
@@ -6661,6 +6757,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "Não foi possível activar nenhum add-on de PVR. Para mais informação, verifique as configurações ou o log."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "Gravação cancelada"
@@ -6701,6 +6801,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "Exibir notificação em actualizações de temporizador"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Usar números de canais da backend (só funciona com um addon PVR activo)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "O gestor de PVR está a iniciar"
@@ -6721,10 +6825,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "Iniciando tarefas de fundo"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Nenhum add-on PVR está activo"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "O gestor de PVR foi activado sem nenhum"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "add-on PVR activo. Inicie pelo menos um add-on"
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "para poder usar a funcionalidade PVR."
@@ -6837,10 +6949,18 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "*Todas as Gravações"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Não foram encontrados add-ons PVR"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "Precisa de um sintonizador, software backend e um"
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "Add-on para a backend aceder ao PVR."
+
msgctxt "#19274"
msgid "Please visit xbmc.org/pvr to learn more."
msgstr "Por favor, consulte xbmc.org/pvr para saber mais."
@@ -9145,6 +9265,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s até %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Preferir legendas externas"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Preferir legendas externas em vez de internas"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Externa)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Nome do ficheiro"
@@ -9825,14 +9957,30 @@ msgctxt "#24043"
msgid "Available Updates"
msgstr "Actualizações Disponíveis"
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Dependências não encontradas. Por favor, contacte o autor do Add-on."
+
msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "O Add-on não tem a estrutura correcta"
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s é usado pelos seguinte(s) Add-on(s) instalados"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Este Add-on não pode ser desinstalado"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "Reverter"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Incompatível"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Add-ons Disponíveis"
@@ -9937,6 +10085,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Bloquear gestor de Add-ons"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Este Add-on não pode ser desactivado"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(actual)"
@@ -9945,6 +10097,10 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(na lista negra)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "O add-on é incompatível ou foi marcado como danificado no repositório."
+
msgctxt "#24097"
msgid "Would you like to disable it on your system?"
msgstr "Quer desactivá-lo no seu sistema?"
@@ -9973,6 +10129,54 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "O tema tem alguns ficheiros em falta"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "O add-on é incompatível devido a dependências não encontradas."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Pausas ao procurar legendas"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Se não forem gravadas na pasta do filme, as legendas serão transferidas para a pasta personalizada de legendas."
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Procurando legendas..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d legendas encontradas"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Não foram encontradas legendas"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Transferindo legendas ..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Transferir legendas para estes idiomas"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Definir idiomas para procurar legendas. Nem todos os serviços de legendas usarão todos os idiomas."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Não foi possível transferir a legenda"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Nenhum serviço de legendas está instalado"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Guardar legendas na pasta do filme"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Notificações"
@@ -10077,6 +10281,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Vídeoclipes"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Reiniciar plugin para activar"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Esta noite"
@@ -10413,6 +10621,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Nunca"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "O próximo item não foi encontrado"
@@ -10525,6 +10753,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "Desactivar joystick quando este dispositivo estiver presente"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Activar teclas de sistema em ecrã cheio"
+
msgctxt "#35500"
msgid "Location"
msgstr "Localização"
@@ -11109,6 +11341,10 @@ msgctxt "#36202"
msgid "No info available yet."
msgstr "Ainda não há informação disponível."
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Activar as funcionalidades do Gravador de Vídeo Pessoal (PVR) no XBMC. Necessita de ter pelo menos um add-on PVR instalado."
+
msgctxt "#36204"
msgid "Import channel groups from the PVR backend (if supported). Will delete user created groups if they're not found on the backend."
msgstr "Importar grupos de canais da backend PVR (se esta o suportar). Irá apagar grupos criados pelo utiliador se não forem encontrados na backend."
@@ -11209,6 +11445,10 @@ msgctxt "#36228"
msgid "Show the last viewed channel if switching to live tv."
msgstr "Exibir o último canal visualizado ao mudar para TV ao vivo."
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Exibir informação de qualidade do sinal na janela de informação de codec (se for suportado pelo add-on e pela backend)."
+
msgctxt "#36230"
msgid "No info available yet."
msgstr "Ainda não há informação disponível."
@@ -11229,6 +11469,22 @@ msgctxt "#36234"
msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
msgstr "Duração da gravação ao premir o botão de gravar, ou quando criar um novo temporizador manual. O padrão é 180 minutos."
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "Prioridade da gravação. Um número mais alto significa uma prioridade mais elevada. Não é suportado por todos os add-ons e backends."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Apagar gravação após este intervalo de tempo. O padrão é de 99 dias. Não é suportado por todos os add-ons e backends."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Iniciar gravações antes da hora marcada. O padrão é de 2 minutos. Não é suportado por todos os add-ons e backends."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Terminar gravações após a hora marcada. O padrão é de 10 minutos. Não é suportado por todos os add-ons e backends."
+
msgctxt "#36239"
msgid "Display a notification when timers are added, finished or removed by the backend."
msgstr "Exibir uma notificação quando os temporizadores são adicionados, concluídos ou removidos pela backend."
@@ -11721,6 +11977,10 @@ msgctxt "#36363"
msgid "Boost AC3 streams that have been downmixed to 2 channels."
msgstr "Aumentar volume em pistas AC3 que foram remisturadas para 2 canais."
+msgctxt "#36364"
+msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
+msgstr "Remisturar fontes com 2 canais estéreo, para que o número de canais áudio corresponda ao número de colunas."
+
msgctxt "#36365"
msgid "Select this option if your receiver is capable of decoding AC3 streams."
msgstr "Seleccione esta opção se o seu receptor consegue descodificar pistas AC3."
@@ -11737,6 +11997,14 @@ msgctxt "#36370"
msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
msgstr "Seleccione esta opção se o seu receptor consegue descodificar pistas DTS-HD."
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Seleccionar o dispositivo que pretende usar para reproduzir áudio descodificado pelo XBMC, como mp3 e FLAC."
+
+msgctxt "#36372"
+msgid "Select the device to be used for playback of encoded formats, these are any of the formats below in the 'capable receiver' options."
+msgstr "Seleccionar o dispositivo que pretende usar para reproduzir formatos codificados, estes são quaisquer formatos indicados em cima, nas opções de 'receptor compatível com'."
+
msgctxt "#36373"
msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
msgstr "Configurar a utilização dos sons da interface, como os da navegação por menus e notificações importantes."
@@ -12027,7 +12295,7 @@ msgstr "O mesmo do filme"
msgctxt "#36535"
msgid "Stereoscopic mode of video"
-msgstr "Modo do vídeo estereoscópico"
+msgstr "Modo estereoscópico do vídeo"
msgctxt "#36536"
msgid "Stereoscopic mode inverted"
@@ -12108,3 +12376,7 @@ msgstr "Saída de áudio dupla"
msgctxt "#37018"
msgid "Boost centre channel when downmixing"
msgstr "Aumentar volume do canal central ao fazer o downmix"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Activar teclas de sistema como printscreen, alt-tab e teclas de volume quando em ecrã cheio."
diff --git a/language/Romanian/strings.po b/language/Romanian/strings.po
index aa8493787a..ac684e76f0 100644
--- a/language/Romanian/strings.po
+++ b/language/Romanian/strings.po
@@ -1169,6 +1169,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Conversie rată de cadre"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fixă"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Artiști diferiți"
@@ -3321,6 +3325,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Setări - Profile"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "Configurare blocare"
diff --git a/language/Russian/strings.po b/language/Russian/strings.po
index a7d553fa11..ec6154c4e3 100644
--- a/language/Russian/strings.po
+++ b/language/Russian/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Преобразование чаÑтоты кадров"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "ÐаÑтроить данные вывода"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "ФикÑированное"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Оптимизированный"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Различные иÑполнители"
@@ -1213,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "Год"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "ÐÐ¾Ñ€Ð¼Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÑƒÑ€Ð¾Ð²Ð½ÐµÐ¹ при downmix"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "Выводить звук в формате DTS-HD"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Ðктивировать переÑылку"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "Выводить звук в формате TrueHD"
@@ -1493,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "МакÑ."
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Ðвтоподбор"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Поддерживать работу аудиоуÑтройÑтва"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Удалить ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± альбоме"
@@ -1637,6 +1665,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Сменить вид"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Ограничить чаÑтоту (кГц)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Субтитры"
@@ -2921,6 +2953,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Программные дополнениÑ"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "УÑтановить мини-изображение Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "ÐаÑтройки дополнениÑ"
@@ -3485,10 +3521,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "СброÑ"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Ðачальный"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Стандартный"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Продвинутый"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "ЭкÑпертный"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Браузер дополнений"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "СброÑить наÑтройки на значение по умолчанию"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Ð’Ñ‹ уверены, что хотите ÑброÑить наÑтройки в Ñтой категории?"
@@ -3501,6 +3557,18 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Справка недоÑтупна"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "СброÑить вÑе предÑтавленные наÑтройки до ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¿Ð¾ умолчанию"
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Ðет доÑтупных категорий"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Попробуйте поменÑÑ‚ÑŒ наÑтройки, чтобы увидеть дополнительные категории и наÑтройки."
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "Диалог \"Да/Ðет\""
@@ -3837,6 +3905,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "КоличеÑтво попыток ввода Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸Ñчерпано."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Ð¡ÐµÐ¹Ñ‡Ð°Ñ ÑиÑтема будет выключена. "
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Заблокировано"
@@ -4137,6 +4209,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Сохранить разрешение?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Хотите Ñохранить изменениÑ?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Ð’Ñ‹ÑококачеÑтвенное маÑштабирование"
@@ -4181,6 +4257,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "Преобразование цветов VDPAU Studio"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "ОÑтавить наÑтройку темы?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "ГаÑить другие диÑплеи"
@@ -4901,6 +4981,10 @@ msgctxt "#13439"
msgid "Allow hardware acceleration (MediaCodec)"
msgstr "Включить аппаратное уÑкорение (MediaCodec)"
+msgctxt "#13440"
+msgid "Frame Multi Threaded Decoding (less reliable)"
+msgstr "Мультипотоковое декодирование (менее Ñтабильно)"
+
msgctxt "#13500"
msgid "A/V sync method"
msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð/Ð’"
@@ -4985,6 +5069,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f Ñ."
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Минута"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Минуты"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "ДУ Apple"
@@ -5669,6 +5761,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Изменить название"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Управление..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Изм. название Ð´Ð»Ñ Ñортировки"
@@ -6213,6 +6309,10 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Предупреждение"
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Провайдер"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "ПереключитеÑÑŒ на другой канал."
@@ -6661,6 +6761,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "Ðи один Модуль PVR не может быть активирован. Проверьте наÑтройки или ÑиÑтемный журнал Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "ЗапиÑÑŒ отменена"
@@ -6721,10 +6825,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "ЗапуÑк фоновых процеÑÑов"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Ðет активированного ÐœÐ¾Ð´ÑƒÐ»Ñ PVR"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "Менеджер PVR включен без"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "активированных модулей PVR. Ðктивируйте по меньшей мере один Модуль"
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ PVR"
@@ -6837,10 +6949,18 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Ð’Ñе запиÑи"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Ðи одного Ð¼Ð¾Ð´ÑƒÐ»Ñ PVR не обнаружено"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ PVR необходим тюнер,"
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "Модуль (внутриÑиÑтемной коммутации/внутреннего интерфейÑа), необходимый Ð´Ð»Ñ Ð¸Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ PVR."
+
msgctxt "#19274"
msgid "Please visit xbmc.org/pvr to learn more."
msgstr "ПоÑетите xbmc.org/pvr Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей."
@@ -9145,6 +9265,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s—%s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Приоритет Ñубтитров извне"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Приоритет Ñубтитров извне над вÑтроенными Ñубтитрами"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Внешние)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°"
@@ -9825,14 +9957,30 @@ msgctxt "#24043"
msgid "Available Updates"
msgstr "ДоÑтупные обновлениÑ"
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "ЗавиÑимоÑти не Ñоблюдены. СвÑжитеÑÑŒ Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¼ МодулÑ."
+
msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтруктура дополнениÑ"
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "% иÑпользуетÑÑ Ñледующим уÑтановленным(и) Модулем(-Ñми)"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Данный Модуль не может быть удален."
+
msgctxt "#24048"
msgid "Rollback"
msgstr "Вернуть"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "ÐеÑовмеÑтим"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "ДоÑтупные дополнениÑ"
@@ -9937,6 +10085,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Заблокировать менеджер дополнений"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Данный Модуль Ð½ÐµÐ»ÑŒÐ·Ñ Ð´ÐµÐ·Ð°ÐºÑ‚Ð¸Ð²Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(текущ.)"
@@ -9945,6 +10097,10 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(заблокирован.)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Модуль неÑовмеÑтимый или помечен в репозитории как нерабочий. "
+
msgctxt "#24097"
msgid "Would you like to disable it on your system?"
msgstr "Отключить его в ÑиÑтеме?"
@@ -9973,6 +10129,54 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "Ð’ обложке отÑутÑтвуют некоторые файлы"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Модуль неÑовмеÑтимый из-за неÑÐ¾Ð±Ð»ÑŽÐ´ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑтей."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "ПриоÑтановите Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка Ñубтитров."
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "ЕÑли Ñубтитры не Ñохранены в папке Ñ Ð²Ð¸Ð´ÐµÐ¾, тогда они загружаютÑÑ Ð² папку Ñубтитров по выбору пользователÑ"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "ПоиÑк Ñубтитров..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "Ðайдено %d Ñубтитров"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Субтитров не обнаружено"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Субтитры загружаютÑÑ..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Языки, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… загружаютÑÑ Ñубтитры:"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "УÑтановить Ñзыки Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка Ñубтитров. Ðе вÑе иÑточники будут иÑпользовать указанные Ñзыки."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Ðе удалоÑÑŒ загрузить Ñубтитры"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Ðе обнаружены иÑточники Ñубтитров"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Сохранить Ñубтитры в папку Ð´Ð»Ñ Ð²Ð¸Ð´ÐµÐ¾"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "УведомлениÑ"
@@ -10077,6 +10281,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Клипы"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "ПерезапуÑтить модуль Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ Ð²ÐµÑ‡ÐµÑ€Ð¾Ð¼"
@@ -10413,6 +10621,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Ðикогда"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ Ñледующий файл"
@@ -10525,6 +10753,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "Отключать джойÑтик, когда Ñто уÑтройÑтво подключено"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Ðктивировать Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ в полноÑкранном режиме"
+
msgctxt "#35500"
msgid "Location"
msgstr "РаÑположение"
@@ -11109,6 +11341,10 @@ msgctxt "#36202"
msgid "No info available yet."
msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾ÐºÐ° недоÑтупна."
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Ðктивировать функции ПерÑонального ВидеоРегиÑтратора (PVR) в XBMC. ТребуетÑÑ Ð¿Ð¾ крайней мере один предуÑтановленный Модуль PVR."
+
msgctxt "#36204"
msgid "Import channel groups from the PVR backend (if supported). Will delete user created groups if they're not found on the backend."
msgstr "Импортировать группы каналов Ñ Ñервера PVR (еÑли Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ). При Ñтом Ñозданные пользователем группы будут удалены, еÑли они не найдены на Ñервере."
@@ -11229,6 +11465,10 @@ msgctxt "#36234"
msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
msgstr "ПродолжительноÑÑ‚ÑŒ запиÑи при нажатии кнопки запиÑи или при Ñоздании нового ручного таймера. По умолчанию — 180 минут."
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "Приоритет запиÑи. Большее чиÑло означает более выÑокий приоритет. Значение по умоланию 50. Ðе поддерживаетÑÑ Ð²Ñеми МодулÑми (и внутренними интерфейÑами)."
+
msgctxt "#36239"
msgid "Display a notification when timers are added, finished or removed by the backend."
msgstr "Показывать уведомление при добавлении, удалении или завершении таймеров ТВ-Ñервером."
@@ -11717,6 +11957,10 @@ msgctxt "#36360"
msgid "No info available yet."
msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾ÐºÐ° недоÑтупна."
+msgctxt "#36362"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded."
+msgstr "УÑтановить макÑимальное чиÑло аудироканалов/колонок Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ аудиопотока."
+
msgctxt "#36363"
msgid "Boost AC3 streams that have been downmixed to 2 channels."
msgstr "Увеличивать громкоÑÑ‚ÑŒ звуковых дорожек AC3 при микшировании до Ñтерео."
@@ -11729,6 +11973,14 @@ msgctxt "#36366"
msgid "Select this option if your receiver is capable of decoding DTS streams."
msgstr "Включите Ñту наÑтройку, еÑли ваш реÑивер поддерживает аудиопотоки в формате DTS."
+msgctxt "#36367"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded. If optical/coax digital outputs are used this must be set to 2.0"
+msgstr "УÑтановить макÑимальное чиÑло аудироканалов/колонок Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ аудиопотока. ЕÑли иÑпользованы выходные оптичеÑкие/коакÑиальные каналы, уÑтановите на 2.0"
+
+msgctxt "#36368"
+msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
+msgstr "Выберите Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸ транзита аудиопотока, чтобы воÑпроизодить кодированный аудиопоток типа Dolby Digital."
+
msgctxt "#36369"
msgid "Select this option if your receiver is capable of decoding TrueHD streams."
msgstr "Включите Ñту наÑтройку, еÑли ваш реÑивер поддерживает аудиопотоки в формате TrueHD."
@@ -11737,6 +11989,14 @@ msgctxt "#36370"
msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
msgstr "Включите Ñту наÑтройку, еÑли ваш реÑивер поддерживает аудиопотоки в формате DTS-HD."
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Выберите уÑтройÑтво воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ аудиопотока, напр., mp3"
+
+msgctxt "#36372"
+msgid "Select the device to be used for playback of encoded formats, these are any of the formats below in the 'capable receiver' options."
+msgstr "Выберите уÑтройÑтво воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… форматов, любых из ÑпиÑка в меню 'ÑовмеÑтимое уÑтройÑтво приёма'."
+
msgctxt "#36373"
msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
msgstr "Выбрать, когда воÑпроизводить звуки интерфейÑа, такие как звуки навигации и важных Ñообщений."
@@ -12108,3 +12368,7 @@ msgstr "Двойной вывод звука"
msgctxt "#37018"
msgid "Boost centre channel when downmixing"
msgstr "УÑиливать центральный канал при микшировании"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "ÐÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ Ð´Ð»Ñ Ñкриншота, alt-tab и клавиши ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñтью в полноÑкранном режиме."
diff --git a/language/Serbian (Cyrillic)/strings.po b/language/Serbian (Cyrillic)/strings.po
index 5f6c524ba5..b2c546fbcf 100644
--- a/language/Serbian (Cyrillic)/strings.po
+++ b/language/Serbian (Cyrillic)/strings.po
@@ -2965,6 +2965,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "ПоÑтавке - Профили"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Уобичајено"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "Закључај поÑтавке"
diff --git a/language/Serbian/strings.po b/language/Serbian/strings.po
index 3366ddaba1..d951afe3d4 100644
--- a/language/Serbian/strings.po
+++ b/language/Serbian/strings.po
@@ -3101,6 +3101,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Postavke - Profili"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "UobiÄajeno"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "ZakljuÄaj postavke"
diff --git a/language/Slovak/strings.po b/language/Slovak/strings.po
index 24d2ef8b5e..ec7fa77ebc 100644
--- a/language/Slovak/strings.po
+++ b/language/Slovak/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Konverzia snímkovania"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Pevné"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Rôzny interpreti"
@@ -3485,6 +3489,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Obnoviť"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Štandardný"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "PrehliadaÄ doplnkov"
diff --git a/language/Slovenian/strings.po b/language/Slovenian/strings.po
index a3b6bf1c86..20a7a9c0dc 100644
--- a/language/Slovenian/strings.po
+++ b/language/Slovenian/strings.po
@@ -1185,6 +1185,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Pretvorba hitrosti sliÄic"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fiksno"
+
msgctxt "#340"
msgid "Various artists"
msgstr "RazliÄni izvajalci"
@@ -3417,6 +3421,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Ponastavi"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "ObiÄajno"
+
msgctxt "#10043"
msgid "Help"
msgstr "PomoÄ"
diff --git a/language/Spanish (Argentina)/strings.po b/language/Spanish (Argentina)/strings.po
index 83162af372..bed0e1d7ef 100644
--- a/language/Spanish (Argentina)/strings.po
+++ b/language/Spanish (Argentina)/strings.po
@@ -1165,6 +1165,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Conversión de imágenes por segundo"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fijo"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Varios intérpretes"
@@ -3317,6 +3321,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Configuración - Perfiles"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Estándar"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "Bloquear ajustes"
diff --git a/language/Spanish (Mexico)/strings.po b/language/Spanish (Mexico)/strings.po
index 88126f455a..80b7d3f1b3 100644
--- a/language/Spanish (Mexico)/strings.po
+++ b/language/Spanish (Mexico)/strings.po
@@ -1185,6 +1185,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Conversión de imágenes por segundo"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fijo"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Varios Intérpretes"
@@ -3457,6 +3461,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Resetear"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Estándar"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Estas seguro de querer resetear los ajustes en esta categoria?"
diff --git a/language/Spanish/strings.po b/language/Spanish/strings.po
index 789bf038ed..8c6628d0c2 100644
--- a/language/Spanish/strings.po
+++ b/language/Spanish/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Conversión de imágenes por segundo"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Configuración de salida"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fijo"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Optimizado"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Varios intérpretes"
@@ -1213,6 +1225,10 @@ msgctxt "#345"
msgid "Year"
msgstr "Año"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normalizar los niveles al hacer un downmix"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "Receptor compatible con DTS-HD"
@@ -1493,6 +1509,10 @@ msgctxt "#419"
msgid "High"
msgstr "Alto"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Mejor coincidencia"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "Eliminar información del álbum"
@@ -1637,6 +1657,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Cambiar vista"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Limitar frecuencia de muestreo (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Subtítulos"
@@ -2921,6 +2945,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Add-ons de aplicaciones"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Establecer miniatura de plugin"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Configuración del Add-on"
@@ -3485,6 +3513,22 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Reiniciar"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Básico"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Estándar"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Avanzado"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Experto"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Buscador de addons"
@@ -3501,6 +3545,14 @@ msgctxt "#10044"
msgid "No help available"
msgstr "No hay ayuda disponible"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Reiniciar los ajustes visibles a sus valores por defecto"
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "No hay categorías disponibles"
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "Cuadro de diálogo Sí/No"
@@ -3837,6 +3889,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "Límite de intentos de contraseña excedidos."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "El equipo se apagará ahora."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Elemento bloqueado"
@@ -4137,6 +4193,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "¿Guardar resolución?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "¿Quiere mantener el cambio?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "Reescalado de alta calidad"
@@ -4181,6 +4241,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "Conversión del nivel de color del estudio VDPAU"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "¿Mantener skin?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "Refrescar otras pantallas"
@@ -4985,6 +5049,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f Segundos"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Minuto"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Minutos"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Mando Apple"
@@ -5669,6 +5741,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Editar título"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Gestionar ..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Editar orden de título"
@@ -6213,6 +6289,14 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Advertencia"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Servicio"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Proveedor"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Por favor, cambie a otro canal."
@@ -6661,6 +6745,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "No se pudo activar ningún add-on PVR. Revise su configuración o consulte el log para más detalles."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "Grabación abortada"
@@ -6701,6 +6789,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "Mostrar una notificación en las actualizaciones de temporizadores"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Usar los números de canal del backend (sólo funciona cuando hay 1 addon PVR activo)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "El Gestor PVR se está iniciando"
@@ -6721,10 +6813,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "Comenzando hilos en segundo plano "
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "No hay ningún add-on PVR activo"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "El gestor PVR se ha activado sin ningún"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "add-on PVR activado. Active al menos un add-on"
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "para usar la funcionalidad PVR."
@@ -6837,10 +6937,18 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Todas las grabaciones"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "No se encontraron add-ons de PVR"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "Para usar PVR necesitas una sintonizadora,"
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "add-on para el backend para usar el PVR."
+
msgctxt "#19274"
msgid "Please visit xbmc.org/pvr to learn more."
msgstr "Por favor, visite xbmc.org/pvr para saber cómo."
@@ -9145,6 +9253,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s a %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Preferir subtítulos externos"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Preferir subtítulos externos a los internos"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Externo)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Nombre de archivo"
@@ -9825,14 +9945,30 @@ msgctxt "#24043"
msgid "Available Updates"
msgstr "Actualizaciones disponibles"
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "No se han encontrado las dependencias. Por favor, contacte con el autor del add-on"
+
msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "El Add-on no tiene la estructura correcta"
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s es usado por los siguientes add-ons instalados"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Este add-on no se puede desinstalar"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "Volver una versión atrás"
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Incompatible"
+
msgctxt "#24050"
msgid "Available Add-ons"
msgstr "Add-ons disponibles"
@@ -9937,6 +10073,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Bloquear el gestor de Add-ons"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Este Add-on no se puede desactivar"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(actual)"
@@ -9945,6 +10085,10 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(en la lista negra)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Add-on incompatible o marcado como roto en el repositorio."
+
msgctxt "#24097"
msgid "Would you like to disable it on your system?"
msgstr "¿Desea deshabilitarlo en el sistema?"
@@ -9973,6 +10117,50 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "No se encuentran algunos archivos del skin"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Add-on incompatible debido a dependencias no encontradas."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Pausar al buscar subtítulos"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Si no se salvan al directorio de películas, los subtítulos se descargarán en el directorio de subtítulos personalizado"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Buscando subtítulos..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d subtítulos encontrados"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "No se encontraron subtítulos"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Descargando subtitulos..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Idiomas para los que descargar subtítulos"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Establecer idiomas a usar cuando se busquen subtítulos. No todos los servicios de subtítulos usarán todos los idiomas."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Fallo al descargar el subtítulo"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Guardar subtítulos al directorio de la película"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Notificaciones"
@@ -10077,6 +10265,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Clips"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Es necesario reiniciar el plugin"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Esta noche"
@@ -10413,6 +10605,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Nunca"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "No se ha podido encontrar el siguiente elemento a reproducir"
@@ -10525,6 +10737,10 @@ msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgstr "Deshabilitar joystick cuando el dispositivo esté presente"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Habilitar teclas de sistema al estar a pantalla completa"
+
msgctxt "#35500"
msgid "Location"
msgstr "Ubicación"
@@ -11109,6 +11325,10 @@ msgctxt "#36202"
msgid "No info available yet."
msgstr "No hay información disponible."
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Habilitar las funciones de grabadora de vídeo personal (PVR) en XBMC. Para ello es necesario que al menos un add-on PVR esté instalado."
+
msgctxt "#36204"
msgid "Import channel groups from the PVR backend (if supported). Will delete user created groups if they're not found on the backend."
msgstr "Importar grupos de canales de la fuente PVR (si lo soporta). Borrará grupos creados por el usuario si no coinciden con los proporcionados por la fuente PVR."
@@ -11209,6 +11429,10 @@ msgctxt "#36228"
msgid "Show the last viewed channel if switching to live tv."
msgstr "Mostrar el último canal visto cuando se vuelva a TV."
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Mostrar calidad de la señal en la pantalla de información del codec (si está soportado por en add-on y el sistema)"
+
msgctxt "#36230"
msgid "No info available yet."
msgstr "No hay información disponible."
@@ -11229,6 +11453,22 @@ msgctxt "#36234"
msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
msgstr "Duración de la grabación al presionar el botón para grabar, o cuando se crea un temporizador manual. Por defecto 180 minutos."
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "Prioridad de la grabación. Números altos significan mayor prioridad. El valor por defecto es 50. No soportado por todos los add-ons y backends."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Borrar grabación después de este tiempo. Por defecto 99 días. No soportado por todos los complementos y sistemas."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Comenzar las grabaciones antes de la hora establecida. Por defecto, 2 minutos. No soportado por todos los add-ons y fuentes PVR."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Finalizar las grabaciones depués de la hora establecida. Por defecto, 10 minutos. No soportado por todos los add-ons y backends."
+
msgctxt "#36239"
msgid "Display a notification when timers are added, finished or removed by the backend."
msgstr "Mostrar un aviso cuando un temporizador sea añadido, finalizado o borrado por la fuente PVR."
@@ -11721,6 +11961,10 @@ msgctxt "#36363"
msgid "Boost AC3 streams that have been downmixed to 2 channels."
msgstr "Amplificar streams AC3 que han sido reducidos a 2 canales."
+msgctxt "#36364"
+msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
+msgstr "Seleccionar para habilitar la mezcla de 2 canales estéreo para el número de canales especificados por la configuración del altavoz."
+
msgctxt "#36365"
msgid "Select this option if your receiver is capable of decoding AC3 streams."
msgstr "Selecciona esta opción si tu receptor puede decodificar streams AC3."
@@ -11729,6 +11973,10 @@ msgctxt "#36366"
msgid "Select this option if your receiver is capable of decoding DTS streams."
msgstr "Selecciona esta opción si tu receptor puede decodificar streams DTS."
+msgctxt "#36367"
+msgid "Select the maximum number of audio channels/speakers available for audio decoded. If optical/coax digital outputs are used this must be set to 2.0"
+msgstr "Seleccionar el número máximo de canales de audio/altavoces disponibles para la decodificación de audio. Si se usan salidas ópticas/coaxial digital debe ser puesto a 2.0"
+
msgctxt "#36369"
msgid "Select this option if your receiver is capable of decoding TrueHD streams."
msgstr "Selecciona esta opción si tu receptor puede decodificar streams TrueHD."
@@ -12108,3 +12356,7 @@ msgstr "Salida de audio dual"
msgctxt "#37018"
msgid "Boost centre channel when downmixing"
msgstr "Potenciar el canal central cuando se reduzca el número de canales"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Habilita las teclas del sistema como imprimir pantalla, alt-tabulador y teclas de volumen cuando se está a pantalla completa"
diff --git a/language/Swedish/strings.po b/language/Swedish/strings.po
index 98039b40c6..985b15c932 100644
--- a/language/Swedish/strings.po
+++ b/language/Swedish/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Justera bildfrekvens"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fast"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Blandade artister"
@@ -3485,6 +3489,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Återställ"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standard"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Tilläggsutforskare"
diff --git a/language/Tajik/strings.po b/language/Tajik/strings.po
index f2fdffaea1..17e79c6aed 100644
--- a/language/Tajik/strings.po
+++ b/language/Tajik/strings.po
@@ -1189,6 +1189,18 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Табдилдиҳии Ñуръати кадрҳо"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Танзимоти барориш"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Таъйиншуда"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Беҳинашуда"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Хунармандони гуногун"
@@ -1213,10 +1225,18 @@ msgctxt "#345"
msgid "Year"
msgstr "Сол"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Дараҷаҳои ҳамворкунӣ барои омезиш"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "РеÑивер бо қобилиÑти DTS-HD"
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Фаъол кардани барориши бевоÑита"
+
msgctxt "#349"
msgid "TrueHD capable receiver"
msgstr "РеÑивер бо қобилиÑти TrueHD"
@@ -1493,6 +1513,14 @@ msgctxt "#419"
msgid "High"
msgstr "Баланд"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Мувофиқати наздиктарин"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "ДаÑтгоҳи аудиоро ҳамеша фаъол нигоҳ додтан"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "ÐеÑÑ‚ кардани иттилооти албом"
@@ -1637,6 +1665,10 @@ msgctxt "#457"
msgid "Switch view"
msgstr "Иваз кардани намуд"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "МаҳдудиÑти Ñуръати кадрҳо (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Зерунвонҳо"
@@ -2921,6 +2953,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Барномаҳои иловагии барномавӣ"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Танзими ÑÑкизи барномаи иловагӣ"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Танзимоти барномаи иловагӣ"
@@ -3485,10 +3521,30 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Танзими дубора"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "ÐÑоÑÓ£"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Стандартӣ"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Иловагӣ"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Кордон"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Браузери барномаи иловагӣ"
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Танзимоти мазкурро ба пешфарз дубора танзим кардан"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "Шумо мутман ҳаÑтед, ки мехоҳед танзимоти ин категориÑро дубора танзим кунед?"
@@ -3501,6 +3557,18 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Кӯмак даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚"
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Ҳамаи танзимоти намоёнро ба Ñурати пешфарз дубора танзим кардан"
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Ягон ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð´Ð°ÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Барои дидани категориÑҳо ва танзимоти иловагӣ, кӯшиш кунед, ки Ñатҳи танзимро тағйир диҳед."
+
msgctxt "#10100"
msgid "Yes/No dialogue"
msgstr "Диалоги \"Ҳа/Ðе\""
@@ -3837,6 +3905,10 @@ msgctxt "#12346"
msgid "Password retry limit exceeded."
msgstr "Миқдори кӯшишҳои вориди парол ба анҷом раÑид."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "СиÑиема ҳозир хомӯш карда мешавад."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "Объект қулф шудааÑÑ‚"
@@ -4137,6 +4209,10 @@ msgctxt "#13110"
msgid "Save resolution?"
msgstr "Возеҳиро татбиқ мекунед?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Шумо мехоҳед, ки ин тағйирро татбиқ кунед?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "МиқиёÑбандии баландÑифат"
@@ -4181,6 +4257,10 @@ msgctxt "#13122"
msgid "VDPAU Studio level colour conversion"
msgstr "Сатҳи табдилдиҳии рангҳои VDPAU Studio"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "ПӯÑтро иÑтифода мебаред?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "Хомӯш кардани диÑплейҳои дигар"
@@ -4901,6 +4981,10 @@ msgctxt "#13439"
msgid "Allow hardware acceleration (MediaCodec)"
msgstr "Фаъол кардани шитоби Ñахтафзор (MediaCodec)"
+msgctxt "#13440"
+msgid "Frame Multi Threaded Decoding (less reliable)"
+msgstr "Рамзгузории кадрҳои Ñерришта (ноуÑтувор)"
+
msgctxt "#13500"
msgid "A/V sync method"
msgstr "УÑули ҳамоҳангÑозии A/V"
@@ -4985,6 +5069,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f ÑониÑ"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d дақиқа"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d дақиқа"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Пулти Apple"
@@ -5669,6 +5761,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Таҳрир кардани унвон"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Идоракунӣ…"
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Таҳрири унвони мураттабÑозӣ"
@@ -6213,6 +6309,18 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Огоҳӣ"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Хидмат"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Провайдер"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Лутфан, ба шабакаи дигар гузаред."
@@ -6661,6 +6769,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "Ягон барномаи иловагии PVR фаъол карда намешавад. Танзимоти худро Ñанҷед Ñ‘ барои маълумоти муфаÑÑал, файли Ñабти рӯйдодҳоро мутолиа кунед."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "Сабт бекор карда шуд"
@@ -6701,6 +6813,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "Ðамоиш додани огоҳиҳо барои навÑозиҳои вақтÑанҷ"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "ИÑтифодаи рақамҳои шабакаҳои Ñервер (танҳо бо 1 барномаи иловагии PVR-и фаъолшуда кор мекунад)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "Мудири PVR оғоз шуда иÑтодааÑт…"
@@ -6721,10 +6837,18 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "Оғозкунии риштаҳои паÑзаминаӣ"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Ягон барномаи иловагии PVR фаъол нашуд"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "Мудири PVR бе Ñгон барномаи иловагии фаъолшуда"
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "барномаи иловагии PVR-и фаъолшуда. Ðқаллан Ñк барномаи иловагиро фаъол кунед"
+
msgctxt "#19243"
msgid "in order to use the PVR functionality."
msgstr "то ки тавонед функÑиÑҳои PVR-ро иÑтифода баред."
@@ -6837,10 +6961,18 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Ҳамаи Ñабтҳо"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Ягон барномаи иловагии PVR ёфт нашуд"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "Барои иÑтифодаи PVR ба шумо тюнер, нармафзори Ñервер"
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "Барномаи иловагӣ барои Ñервер, то ки тавонад PVR-ро иÑтифода барад."
+
msgctxt "#19274"
msgid "Please visit xbmc.org/pvr to learn more."
msgstr "Лутфан, барои маълумоти муфаÑÑал ба вебÑайти \"xbmc.org/pvr\" гузаред."
@@ -7943,7 +8075,7 @@ msgstr "Хидматҳои пешфарз барои иттилооти ҳура
msgctxt "#20195"
msgid "Change scraper"
-msgstr "Тағйир додани манбаъи иттилоотӣ"
+msgstr "Тағйир додани инфореÑурÑ"
msgctxt "#20196"
msgid "Export music library"
@@ -8101,10 +8233,34 @@ msgctxt "#20325"
msgid "Calibration reset"
msgstr "Танзими дубораи Ñанҷиш"
+msgctxt "#20326"
+msgid "This will reset the calibration values for %s"
+msgstr "Ин амал қиматҳои Ñанҷиширо барои %s дубора танзим мекунад"
+
+msgctxt "#20327"
+msgid "to it's default values."
+msgstr "- то қимати пешфарз."
+
+msgctxt "#20328"
+msgid "Browse for destination"
+msgstr "Тамошо кардани ҷои таъинот"
+
+msgctxt "#20329"
+msgid "Movies are in separate folders that match the movie title"
+msgstr "Филмҳо дар ҷузвдонҳои алоҳида номҳои монанд доранд"
+
+msgctxt "#20330"
+msgid "Use folder names for lookups"
+msgstr "ИÑтифодаи номҳои ҷузвдонҳо ҳангоми ҷуÑтуҷӯ"
+
msgctxt "#20331"
msgid "File"
msgstr "Файл"
+msgctxt "#20332"
+msgid "Use file or folder names in lookups?"
+msgstr "Ðомҳои файлҳо Ñ‘ ҷузвдонҳоро ҳангоми ҷуÑтуҷӯ иÑтифода мебаред?"
+
msgctxt "#20333"
msgid "Set content"
msgstr "Танзими навъи мӯҳтаво"
@@ -8115,7 +8271,7 @@ msgstr "Ҷузвдон"
msgctxt "#20335"
msgid "Look for content recursively?"
-msgstr "Мӯҳтаворо аз ҷузвдонҳои иловашуда ҷуÑтуҷӯ мекунед?"
+msgstr "Мӯҳтаворо дар зерҷузвдонҳо ҷуÑтуҷӯ мекунед?"
msgctxt "#20336"
msgid "Unlock sources"
@@ -8153,10 +8309,26 @@ msgctxt "#20344"
msgid "This directory contains"
msgstr "Ин ҷузвдон дар бар мегирад"
+msgctxt "#20345"
+msgid "Run automated scan"
+msgstr "Иҷро кардани Ñкани худкор"
+
+msgctxt "#20346"
+msgid "Scan recursively"
+msgstr "ҶуÑтуҷӯ дар зерҷузвдонҳо"
+
+msgctxt "#20347"
+msgid "as"
+msgstr "дар нақши"
+
msgctxt "#20348"
msgid "Directors"
msgstr "Коргандон"
+msgctxt "#20349"
+msgid "No video files found in this path!"
+msgstr "Ягон файли видео дар ин маÑир Ñ‘Ñ„Ñ‚ нашуд!"
+
msgctxt "#20350"
msgid "votes"
msgstr "овозҳо"
@@ -8165,58 +8337,434 @@ msgctxt "#20351"
msgid "TV show information"
msgstr "Иттилооти барномаи телевизион"
+msgctxt "#20352"
+msgid "Episode information"
+msgstr "Иттилооти Ñпизод"
+
+msgctxt "#20353"
+msgid "Loading TV show details"
+msgstr "Боркунии тафÑилоти барномаи телевизион"
+
+msgctxt "#20354"
+msgid "Fetching episode guide"
+msgstr "Бозёбии ҷадвали Ñпизодҳо"
+
+msgctxt "#20355"
+msgid "Loading info for episodes in directory"
+msgstr "Боркунии иттилоот барои Ñпизодҳо дар директориÑ"
+
+msgctxt "#20356"
+msgid "Select TV show:"
+msgstr "Интихоби барномаи телевизион:"
+
+msgctxt "#20357"
+msgid "Enter the TV show name"
+msgstr "Ðоми барномаи телевизионро ворид кунед"
+
msgctxt "#20358"
msgid "Season %i"
msgstr "МавÑими %i"
+msgctxt "#20359"
+msgid "Episode"
+msgstr "Эпизод"
+
+msgctxt "#20360"
+msgid "Episodes"
+msgstr "Эпизодҳо"
+
+msgctxt "#20361"
+msgid "Loading episode details"
+msgstr "Боркунии тафÑилоти Ñпизод"
+
+msgctxt "#20362"
+msgid "Remove episode from library"
+msgstr "Тоза кардани Ñпизод аз китобхона"
+
+msgctxt "#20363"
+msgid "Remove TV show from library"
+msgstr "Тоза кардани барномаи телевизион аз китобхона"
+
msgctxt "#20364"
msgid "TV show"
msgstr "Барномаи телевизион"
+msgctxt "#20365"
+msgid "Episode plot"
+msgstr "Сужети Ñпизод"
+
msgctxt "#20366"
msgid "* All seasons"
msgstr "* Ҳамаи мавÑимҳо"
+msgctxt "#20367"
+msgid "Hide watched"
+msgstr "Пинҳон кардани тамошошуда"
+
+msgctxt "#20368"
+msgid "Prod code"
+msgstr "Рамзи маҳÑул"
+
+msgctxt "#20369"
+msgid "Show plot for unwatched items"
+msgstr "Ðамоиш додани Ñужет барои Ñпизоди тамошонашуда"
+
+msgctxt "#20370"
+msgid "* Hidden to prevent spoilers *"
+msgstr "* Ҳолати ноаён барои пешгирии Ñпойлер *"
+
+msgctxt "#20371"
+msgid "Set season thumb"
+msgstr "Интихоби ÑÑкизи мавÑим"
+
+msgctxt "#20372"
+msgid "Season image"
+msgstr "ТаÑвири мавÑим"
+
+msgctxt "#20373"
+msgid "Season"
+msgstr "МавÑим"
+
+msgctxt "#20374"
+msgid "Downloading movie information"
+msgstr "Боргирии иттилооти филм"
+
+msgctxt "#20375"
+msgid "Unassign content"
+msgstr "Ðз қайд гирифтани мӯҳтаво"
+
+msgctxt "#20376"
+msgid "Original title"
+msgstr "Унвони аÑлӣ"
+
+msgctxt "#20377"
+msgid "Refresh TV show information"
+msgstr "ÐавÑозии иттилооти барномаи телевизион"
+
+msgctxt "#20378"
+msgid "Refresh info for all episodes?"
+msgstr "Иттилоотро барои ҳамаи Ñпизодҳо навÑозӣ мекунед?"
+
+msgctxt "#20379"
+msgid "Selected folder contains a single TV show"
+msgstr "Ҷузвдони интихобшуда дорои Ñк барномаи телевизион мебошад"
+
+msgctxt "#20380"
+msgid "Exclude selected folder from scans"
+msgstr "ИÑтиÑно кардани ҷузвдони интихобшуда аз ҷуÑтуҷӯ"
+
+msgctxt "#20381"
+msgid "Specials"
+msgstr "Иловаҳо"
+
+msgctxt "#20382"
+msgid "Automatically grab season thumbs"
+msgstr "Бор кардани ÑÑкизҳои мавÑимҳо ба таври худкор"
+
+msgctxt "#20383"
+msgid "Selected folder contains a single video"
+msgstr "Ҷузвдони интихобшуда дорои Ñк видео мебошад"
+
+msgctxt "#20384"
+msgid "Link to TV show"
+msgstr "Пайванд ба барномаи телевизион"
+
+msgctxt "#20385"
+msgid "Remove link to TV show"
+msgstr "Тоза кардани пайванд ба барномаи телевизион"
+
+msgctxt "#20386"
+msgid "Recently added movies"
+msgstr "Филмҳои иловашудаи охирин"
+
+msgctxt "#20387"
+msgid "Recently added episodes"
+msgstr "Эпизодҳои иловашудаи охирин"
+
+msgctxt "#20388"
+msgid "Studios"
+msgstr "СтудиÑҳо"
+
msgctxt "#20389"
msgid "Music videos"
msgstr "Видеоҳои муÑиқӣ"
+msgctxt "#20390"
+msgid "Recently added music videos"
+msgstr "Видеоҳои муÑиқии иловашудаи охирин"
+
msgctxt "#20391"
msgid "Music video"
msgstr "Видеои муÑиқӣ"
+msgctxt "#20392"
+msgid "Remove music video from library"
+msgstr "Тоза кардани видеоҳои муÑиқӣ аз албом"
+
msgctxt "#20393"
msgid "Music video information"
msgstr "Дар бораи клипи муÑиқӣ"
+msgctxt "#20394"
+msgid "Loading music video information"
+msgstr "Боркунии иттилооти видеои муÑиқӣ"
+
+msgctxt "#20395"
+msgid "Mixed"
+msgstr "Омехта"
+
+msgctxt "#20396"
+msgid "Go to albums by artist"
+msgstr "Гузариш ба албомҳо аз рӯи ҳунарманд"
+
+msgctxt "#20397"
+msgid "Go to album"
+msgstr "Гузариш ба албом"
+
msgctxt "#20398"
msgid "Play song"
msgstr "Пахш кардани Ñуруд"
+msgctxt "#20399"
+msgid "Go to music videos from album"
+msgstr "Гузариш ба видеоҳои муÑиқӣ аз албом"
+
+msgctxt "#20400"
+msgid "Go to music videos by artist"
+msgstr "Гузариш ба видеоҳои муÑиқӣ аз рӯи ҳунарманд"
+
+msgctxt "#20401"
+msgid "Play music video"
+msgstr "Пахш кардани видеоҳои муÑиқӣ"
+
+msgctxt "#20402"
+msgid "Download actor thumbnails when adding to library"
+msgstr "Боргирии ÑÑкизҳои актёрон ҳангоми иловакунии он ба китобхона"
+
+msgctxt "#20403"
+msgid "Set actor thumb"
+msgstr "Интихоби ÑÑкиз барои ҳунарманд"
+
msgctxt "#20404"
msgid "Remove bookmark"
msgstr "Тоза кардани хатбарак"
+msgctxt "#20405"
+msgid "Remove episode bookmark"
+msgstr "Тоза кардани хатбараки Ñпизод"
+
+msgctxt "#20406"
+msgid "Set episode bookmark"
+msgstr "Гузоштани хатбараки Ñпизод"
+
+msgctxt "#20407"
+msgid "Scraper settings"
+msgstr "Танзимоти инфореÑурÑ"
+
+msgctxt "#20408"
+msgid "Downloading music video information"
+msgstr "Боргирии иттилооти видеои муÑиқӣ"
+
+msgctxt "#20409"
+msgid "Downloading TV show information"
+msgstr "Боргирии иттилооти барномаи телевизион"
+
+msgctxt "#20410"
+msgid "Trailer"
+msgstr "Трейлер"
+
+msgctxt "#20411"
+msgid "Flatten"
+msgstr "Пинҳон кардани категориÑҳо"
+
+msgctxt "#20412"
+msgid "Flatten TV shows"
+msgstr "Пинҳон кардани категориÑҳои барномаҳои телевизион"
+
+msgctxt "#20413"
+msgid "Get fanart"
+msgstr "Фанарт"
+
+msgctxt "#20414"
+msgid "Show fanart in video and music libraries"
+msgstr "Ðамоиш додани фанарт дар китобхонаҳои видео ва муÑиқӣ"
+
+msgctxt "#20415"
+msgid "Scanning for new content"
+msgstr "ҶуÑтуҷӯи мӯҳтавои нав"
+
+msgctxt "#20416"
+msgid "First aired"
+msgstr "Премера"
+
+msgctxt "#20417"
+msgid "Writer"
+msgstr "Муаллифи намоишнома"
+
+msgctxt "#20418"
+msgid "Writers"
+msgstr "Муаллифони намоишнома"
+
+msgctxt "#20419"
+msgid "Replace file names with library titles"
+msgstr "Ҷойгузин кардани номҳои файлҳо бо унвонҳои китобхона"
+
msgctxt "#20420"
msgid "Never"
msgstr "Ҳеҷ гоҳ"
+msgctxt "#20421"
+msgid "If only one season"
+msgstr "Ðгар танҳо Ñк маÑвим"
+
+msgctxt "#20422"
+msgid "Always"
+msgstr "Ҳамеша"
+
+msgctxt "#20423"
+msgid "Has trailer"
+msgstr "Дорои трейлер мебошад"
+
msgctxt "#20424"
msgid "False"
msgstr "Ғайрифаъол"
+msgctxt "#20425"
+msgid "Fanart slideshow"
+msgstr "Ðамоиши Ñлайдҳои фанарт"
+
+msgctxt "#20426"
+msgid "Export to a single file or separate"
+msgstr "Ба файли Ñгона Ñодир мекунед Ñ‘ тақÑим мекунед?"
+
+msgctxt "#20427"
+msgid "files per entry?"
+msgstr "файл барои ҳар Ñк вуруд?"
+
+msgctxt "#20428"
+msgid "Single file"
+msgstr "Файли Ñгона"
+
msgctxt "#20429"
msgid "Separate"
msgstr "Ҷудо кардан"
+msgctxt "#20430"
+msgid "Export thumbnails and fanart?"
+msgstr "ЭÑкизҳо ва фанартро Ñодир мекунед?"
+
+msgctxt "#20431"
+msgid "Overwrite old files?"
+msgstr "Файлҳои кӯҳнаро рӯйҳамнавиÑÓ£ мекунед?"
+
+msgctxt "#20432"
+msgid "Exclude path from library updates"
+msgstr "ИÑтиÑно кардани маÑир аз навÑозиҳои китобхона"
+
+msgctxt "#20433"
+msgid "Extract thumbnails and video information"
+msgstr "Баровардани ÑÑкизҳо ва иттилооти видео"
+
+msgctxt "#20434"
+msgid "Sets"
+msgstr "МавÑимҳои Ñинамо"
+
+msgctxt "#20435"
+msgid "Combine split video items"
+msgstr "Муттаҳид кардани қиÑмҳои видео"
+
+msgctxt "#20436"
+msgid "Export actor thumbs?"
+msgstr "ЭÑкизҳои актёронро Ñодир мекунед?"
+
+msgctxt "#20437"
+msgid "Choose fanart"
+msgstr "Интихоби фанарт"
+
+msgctxt "#20438"
+msgid "Local fanart"
+msgstr "Фанарти маҳаллӣ"
+
+msgctxt "#20439"
+msgid "No fanart"
+msgstr "Бе фанарт"
+
+msgctxt "#20440"
+msgid "Current fanart"
+msgstr "Фанарти ҷорӣ"
+
+msgctxt "#20441"
+msgid "Remote fanart"
+msgstr "Фанарти дурдаÑÑ‚"
+
+msgctxt "#20442"
+msgid "Change content"
+msgstr "Тағйир додани мӯҳтаво"
+
+msgctxt "#20443"
+msgid "Do you want to refresh info for all"
+msgstr "Шумо мехоҳед, ки иттилоотро барои ҳамаи"
+
+msgctxt "#20444"
+msgid "items within this path?"
+msgstr "объетҳои ин маÑир навÑозӣ кунед?"
+
msgctxt "#20445"
msgid "Fanart"
msgstr "Маҳорати хӯшӣ"
+msgctxt "#20446"
+msgid "Locally stored information found."
+msgstr "Иттилооти маҳаллӣ Ñ‘Ñ„Ñ‚ шудааÑÑ‚."
+
+msgctxt "#20447"
+msgid "Ignore and refresh from internet?"
+msgstr "Рад карда аз Интернет навÑозӣ мекунед?"
+
+msgctxt "#20448"
+msgid "Could not download information"
+msgstr "Иттилоот боргирӣ карда нашуд"
+
+msgctxt "#20449"
+msgid "Unable to connect to remote server"
+msgstr "Ба Ñервер пайваÑÑ‚ карда нашуд"
+
+msgctxt "#20450"
+msgid "Would you like to continue scanning?"
+msgstr "Шумо мехоҳед, ки Ñканкуниро идома диҳед?"
+
msgctxt "#20451"
msgid "Countries"
msgstr "Кишварҳо"
+msgctxt "#20452"
+msgid "episode"
+msgstr "Ñпизод"
+
+msgctxt "#20453"
+msgid "episodes"
+msgstr "Ñпизод"
+
+msgctxt "#20454"
+msgid "Listener"
+msgstr "Шунаванда"
+
+msgctxt "#20455"
+msgid "Listeners"
+msgstr "Шунавандагон"
+
+msgctxt "#20456"
+msgid "Flatten library hierarchy"
+msgstr "Пинҳон кардани зерҷузвдонҳои китобхона"
+
+msgctxt "#20457"
+msgid "Movie set"
+msgstr "МавÑими Ñинамо"
+
+msgctxt "#20458"
+msgid "Group movies in sets"
+msgstr "Гурӯҳбандии филмҳо ба мавÑимҳо"
+
msgctxt "#20459"
msgid "Tags"
msgstr "БарчаÑпҳо"
@@ -8229,14 +8777,118 @@ msgctxt "#20461"
msgid "Remove %s"
msgstr "Тоза кардани %s"
+msgctxt "#20462"
+msgid "New tag..."
+msgstr "БарчаÑпи нав..."
+
+msgctxt "#20463"
+msgid "A tag with the name '%s' already exists."
+msgstr "БарчаÑпе бо номи '%s' аллақай вуҷуд дорад."
+
msgctxt "#20464"
msgid "Select %s"
msgstr "Интихоб кардани %s"
+msgctxt "#20465"
+msgid "Manage movie set"
+msgstr "Идоракунии мавÑими Ñинамо"
+
+msgctxt "#20466"
+msgid "Select movie set"
+msgstr "Интихоби мавÑими Ñинамо"
+
+msgctxt "#20467"
+msgid "No set (Remove from %s)"
+msgstr "Ягон мавÑим неÑÑ‚ (Тоза кардан аз %s)"
+
+msgctxt "#20468"
+msgid "Add movie to a new set"
+msgstr "Илова кардани филм ба мавÑими нав"
+
+msgctxt "#20469"
+msgid "Keep current set (%s)"
+msgstr "Ðигоҳ доштани мавÑими ҷорӣ (%s)"
+
+msgctxt "#21330"
+msgid "Show hidden files and directories"
+msgstr "Ðамоиш додани файлҳо ва зерҷузвдонҳои ноаён"
+
+msgctxt "#21331"
+msgid "TuxBox client"
+msgstr "Муштарии TuxBox"
+
+msgctxt "#21332"
+msgid "WARNING: Target TuxBox device is in recording-mode!"
+msgstr "ОГОҲӢ: ДаÑтгоҳи TuxBox-и интихобшуда дар ҳолати Ñабт мебошад!"
+
+msgctxt "#21333"
+msgid "The stream will be stopped!"
+msgstr "Ҷараён қатъ карда мешавад!"
+
+msgctxt "#21334"
+msgid "Zap to channel: %s failed!"
+msgstr "Гузариш ба шабака: %s қатъ шудааÑÑ‚!"
+
+msgctxt "#21335"
+msgid "Are you sure to start the stream?"
+msgstr "Шумо мутмаин ҳаÑтед, ки мехоҳед ҷараёнро оғоз кунед?"
+
msgctxt "#21336"
msgid "Connecting to: %s"
msgstr "ПайваÑтшавӣ ба: %s"
+msgctxt "#21337"
+msgid "TuxBox device"
+msgstr "ДаÑтгоҳи TuxBox"
+
+msgctxt "#21359"
+msgid "Add media share..."
+msgstr "Илова кардани манбаи медиа"
+
+msgctxt "#21360"
+msgid "Share video and music libraries through UPnP"
+msgstr "ДаÑтраÑии муштарак ба китобхонаҳои видеоӣ ва муÑиқӣ таваÑÑути UPnP"
+
+msgctxt "#21361"
+msgid "Look for remote UPnP players"
+msgstr "ҶуÑтуҷӯи плеерҳои UPnP-и дурдаÑÑ‚"
+
+msgctxt "#21362"
+msgid "Bookmark created"
+msgstr "Хатбарак Ñҷод карда шуд"
+
+msgctxt "#21363"
+msgid "Episode Bookmark created"
+msgstr "Хатбараки Ñпизод Ñҷод карда шуд"
+
+msgctxt "#21364"
+msgid "Edit media share"
+msgstr "Таҳрир кардани манбаи медиа"
+
+msgctxt "#21365"
+msgid "Remove media share"
+msgstr "Тоза кардани манбаи медиа"
+
+msgctxt "#21366"
+msgid "Subtitle folder"
+msgstr "Ҷузвдони зерунвонҳо"
+
+msgctxt "#21367"
+msgid "Movie & alternate subtitle directory"
+msgstr "ДиректориÑи филмҳо ва зерунвонҳои иловагӣ"
+
+msgctxt "#21368"
+msgid "Override ASS/SSA subtitles fonts"
+msgstr "РӯиҳамнавиÑии шрифтҳои зерунвонҳои ASS/SSA"
+
+msgctxt "#21369"
+msgid "Enable mouse and Touch Screen support"
+msgstr "Фаъол кардани даÑтгирии муш ва Ñкрани ламÑÓ£"
+
+msgctxt "#21370"
+msgid "Play navigation sounds during media playback"
+msgstr "Фаъол кардани Ñадоҳои идоракунӣ ҳангоми пахши медиа"
+
msgctxt "#21371"
msgid "Thumbnail"
msgstr "ЭÑкизҳо"
@@ -8277,14 +8929,46 @@ msgctxt "#21380"
msgid "Enable 1080i"
msgstr "Фаъол кардани 1080i"
+msgctxt "#21381"
+msgid "Enter name of new playlist"
+msgstr "Ðоми рӯйхати пахши навро ворид кунед"
+
+msgctxt "#21382"
+msgid "Show \"Add source\" buttons in file lists"
+msgstr "Ðамоиш додани тугмаҳои \"Илова кардани манбаъ\" дар рӯйхатҳои файлҳо"
+
+msgctxt "#21383"
+msgid "Enable scrollbars"
+msgstr "Фаъол кардани наворҳои ҳаракат"
+
+msgctxt "#21384"
+msgid "Make watched filtering a toggle in video library"
+msgstr "Қайд кардани файлҳои тамошошуда дар китобхонаи видеоӣ"
+
msgctxt "#21385"
msgid "Open"
msgstr "Кушодан"
+msgctxt "#21386"
+msgid "Acoustic management level"
+msgstr "Идоракунии Ñатҳи акуÑтикӣ"
+
msgctxt "#21387"
msgid "Fast"
msgstr "Тез"
+msgctxt "#21388"
+msgid "Quiet"
+msgstr "Хомӯшӣ"
+
+msgctxt "#21389"
+msgid "Enable custom background"
+msgstr "ИÑтифодаи паÑзаминаи шахÑÓ£"
+
+msgctxt "#21390"
+msgid "Power management level"
+msgstr "Сатҳи идоракунии Ñарфи барқ"
+
msgctxt "#21391"
msgid "High power"
msgstr "Пурқувват"
@@ -8301,10 +8985,26 @@ msgctxt "#21394"
msgid "Low standby"
msgstr "Интизори паÑÑ‚"
+msgctxt "#21395"
+msgid "Unable to cache files bigger than 4GB"
+msgstr "Файлҳои зиёда аз 4 ГБ дар зерҳофиза нигоҳ дошта намешаванд"
+
msgctxt "#21396"
msgid "Chapter"
msgstr "Боб"
+msgctxt "#21397"
+msgid "High quality pixel shader v2"
+msgstr "СоÑгузории Ñифати баланд. ВерÑ.2"
+
+msgctxt "#21398"
+msgid "Enable playlist at startup"
+msgstr "Фаъол кардани рӯйхати пахш дар оғози кор"
+
+msgctxt "#21399"
+msgid "Use tween animations"
+msgstr "ÐниматÑиÑи ҷаҳиши панелҳо"
+
msgctxt "#21400"
msgid "contains"
msgstr "дар бар мегирад"
@@ -8353,22 +9053,74 @@ msgctxt "#21411"
msgid "not in the last"
msgstr "дар охир неÑÑ‚"
+msgctxt "#21412"
+msgid "Scrapers"
+msgstr "ИнфореÑурÑҳо"
+
+msgctxt "#21413"
+msgid "Default movie scraper"
+msgstr "ИнфореÑурÑи пешфарз барои филмҳо"
+
+msgctxt "#21414"
+msgid "Default tvshow scraper"
+msgstr "ИнфореÑурÑи пешфарз барои Ñериалҳо"
+
+msgctxt "#21415"
+msgid "Default music video scraper"
+msgstr "ИнфореÑурÑи пешфарз барои муÑиқӣ"
+
msgctxt "#21417"
msgid "Settings"
msgstr "Танзимот"
+msgctxt "#21418"
+msgid "Multilingual"
+msgstr "Зерзабон"
+
+msgctxt "#21419"
+msgid "No scrapers present"
+msgstr "Ягон инфореÑÑƒÑ€Ñ Ð²ÑƒÒ·ÑƒÐ´ надорад"
+
msgctxt "#21420"
msgid "Value to match"
msgstr "Қимат барои ҷуÑтуҷӯ"
+msgctxt "#21421"
+msgid "Smart playlist rule"
+msgstr "Қоидаи рӯйхати пахши ҳушманд"
+
+msgctxt "#21422"
+msgid "Match items where"
+msgstr "Интихоби объектҳо аз рӯи:"
+
msgctxt "#21423"
msgid "New rule..."
msgstr "Қоидаи нав…"
+msgctxt "#21424"
+msgid "Items must match"
+msgstr "Объектҳо боÑд дар бар гиранд:"
+
+msgctxt "#21425"
+msgid "all of the rules"
+msgstr "ҳамаи қоидаҳо"
+
+msgctxt "#21426"
+msgid "one or more of the rules"
+msgstr "Ñк Ñ‘ Ñкчанд қоида"
+
+msgctxt "#21427"
+msgid "Limit to"
+msgstr "Маҳдуд кардан то"
+
msgctxt "#21428"
msgid "No limit"
msgstr "Ðомаҳдуд"
+msgctxt "#21429"
+msgid "Order by"
+msgstr "Мураттаб кардан аз рӯи"
+
msgctxt "#21430"
msgid "ascending"
msgstr "афзоиш"
@@ -8377,6 +9129,18 @@ msgctxt "#21431"
msgid "descending"
msgstr "паÑтшавӣ"
+msgctxt "#21432"
+msgid "Edit smart playlist"
+msgstr "Таҳрир кардани рӯйхати пахши ҳушманд"
+
+msgctxt "#21433"
+msgid "Name of the playlist"
+msgstr "Ðоми рӯйхати пахш"
+
+msgctxt "#21434"
+msgid "Find items where"
+msgstr "Ðфтани объектҳо бо"
+
msgctxt "#21435"
msgid "Edit"
msgstr "Таҳрир кардан"
@@ -8393,10 +9157,18 @@ msgctxt "#21438"
msgid "%c Drive"
msgstr "ДиÑки %c"
+msgctxt "#21439"
+msgid "Edit party mode rules"
+msgstr "Таҳрир кардани қоидаҳои ҳолати \"шабнишинӣ\""
+
msgctxt "#21440"
msgid "Home folder"
msgstr "Ҷузвдони аÑоÑÓ£"
+msgctxt "#21441"
+msgid "Watched count"
+msgstr "Миқдори тамошо"
+
msgctxt "#21442"
msgid "Episode title"
msgstr "Унвони лаҳза"
@@ -8425,18 +9197,42 @@ msgctxt "#21448"
msgid "Subtitle language"
msgstr "Забони зерунвон"
+msgctxt "#21449"
+msgid "Remote control sends keyboard presses"
+msgstr "Пулт пахшкуниҳои тугмаҳои клавиатураро ирÑол мекунад"
+
msgctxt "#21450"
msgid "Edit"
msgstr "Таҳрир кардан"
+msgctxt "#21451"
+msgid "Internet connection required."
+msgstr "ПайваÑтшавии Интернет лозим аÑÑ‚."
+
msgctxt "#21452"
msgid "Get More..."
msgstr "Бештар гиред..."
+msgctxt "#21453"
+msgid "Root filesystem"
+msgstr "СиÑтемаи файлии root"
+
msgctxt "#21454"
msgid "Cache full"
msgstr "Зерҳофиза пур шудааÑÑ‚"
+msgctxt "#21455"
+msgid "Cache filled before reaching required amount for continous playback"
+msgstr "Ҳаҷми зерҳофиза барои пахши бефоÑила кофӣ неÑÑ‚."
+
+msgctxt "#21456"
+msgid "External storage"
+msgstr "Захирагоҳи берунӣ"
+
+msgctxt "#21457"
+msgid "Watched episode count"
+msgstr "Миқдори Ñпизодҳои тамошошуда"
+
msgctxt "#21458"
msgid "Group by"
msgstr "Гурӯҳбандӣ аз рӯи"
@@ -8481,6 +9277,18 @@ msgctxt "#21469"
msgid "%s to %s"
msgstr "%s ба %s"
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "ИÑтифодаи зерунвонҳои берунӣ"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "ИÑтифодаи зерунвонҳои берунӣ ба ивази зерунвонҳои дарунӣ"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Берунӣ)"
+
msgctxt "#21800"
msgid "File name"
msgstr "Ðоми файл"
@@ -8557,10 +9365,34 @@ msgctxt "#21829"
msgid "Exposure"
msgstr "Қарор"
+msgctxt "#21830"
+msgid "Exposure time"
+msgstr "Вақти ÑкÑпозитÑиÑ"
+
+msgctxt "#21831"
+msgid "Exposure bias"
+msgstr "Ғеҷондани ÑкÑпозитÑиÑ"
+
+msgctxt "#21832"
+msgid "Exposure mode"
+msgstr "Ҳолати ÑкÑпозитÑиÑ"
+
+msgctxt "#21833"
+msgid "Flash used"
+msgstr "Бо чароғак"
+
+msgctxt "#21834"
+msgid "White-balance"
+msgstr "БаланÑи Ñафед"
+
msgctxt "#21835"
msgid "Light source"
msgstr "Манбаи чароғ"
+msgctxt "#21836"
+msgid "Metering mode"
+msgstr "Ҳолати ченкунӣ"
+
msgctxt "#21837"
msgid "ISO"
msgstr "ISO"
@@ -8697,6 +9529,18 @@ msgctxt "#21883"
msgid "Saved music"
msgstr "МуÑиқии захирашуда"
+msgctxt "#21884"
+msgid "Query info for all artists"
+msgstr "Иттилоот дар бораи ҳамаи ҳунардандон"
+
+msgctxt "#21885"
+msgid "Downloading album information"
+msgstr "Боргирии иттилооти албом"
+
+msgctxt "#21886"
+msgid "Downloading artist information"
+msgstr "Боргирии иттилооти ҳунарманд"
+
msgctxt "#21887"
msgid "Biography"
msgstr "Тарҷумаи ҳол"
@@ -8705,6 +9549,10 @@ msgctxt "#21888"
msgid "Discography"
msgstr "ДиÑкографиÑ"
+msgctxt "#21889"
+msgid "Searching artist"
+msgstr "ҷуÑтуҷӯи ҳунарманд"
+
msgctxt "#21890"
msgid "Select artist"
msgstr "Интихоби ҳунарманд"
@@ -8805,6 +9653,10 @@ msgctxt "#22013"
msgid "Profile data"
msgstr "Иттилооти профил"
+msgctxt "#22014"
+msgid "Use dim if paused during video playback"
+msgstr "Камнур кардани Ñкран баъд аз таваққуфи пахши видео"
+
msgctxt "#22015"
msgid "All recordings"
msgstr "Ҳамаи Ñабтҳо"
@@ -8829,6 +9681,14 @@ msgctxt "#22020"
msgid "Guide"
msgstr "Барнома"
+msgctxt "#22021"
+msgid "Allowed error in aspect ratio to minimise black bars"
+msgstr "Таҳрифи иҷозашуда дар таноÑуб барои камкунии хатҳои Ñиёҳ"
+
+msgctxt "#22022"
+msgid "Show video files in listings"
+msgstr "Ðамоиш додани файлҳои видеоӣ дар рӯйхат"
+
msgctxt "#22023"
msgid "DirectX vendor:"
msgstr "ИÑтеҳÑолкунандаи DirectX:"
@@ -8853,6 +9713,50 @@ msgctxt "#22033"
msgid "Charset"
msgstr "Рамзгузорӣ"
+msgctxt "#22034"
+msgid "Export karaoke titles as HTML"
+msgstr "Содироти зерунвонҳои караоке дар формати HTML"
+
+msgctxt "#22035"
+msgid "Export karaoke titles as CSV"
+msgstr "Содироти зерунвонҳои караоке дар формати CSV"
+
+msgctxt "#22036"
+msgid "Import karaoke titles..."
+msgstr "Воридоти матни караоке…"
+
+msgctxt "#22037"
+msgid "Show song selector automatically"
+msgstr "Ðамоиш додани интихоби Ñуруд ба таври худкор"
+
+msgctxt "#22038"
+msgid "Export karaoke titles..."
+msgstr "Содироти матни караоке…"
+
+msgctxt "#22039"
+msgid "Enter song number"
+msgstr "Рақами Ñурудро ворид кунед"
+
+msgctxt "#22040"
+msgid "white/green"
+msgstr "Ñафед/Ñабз"
+
+msgctxt "#22041"
+msgid "white/red"
+msgstr "Ñафед/Ñурх"
+
+msgctxt "#22042"
+msgid "white/blue"
+msgstr "Ñафед/кабуд"
+
+msgctxt "#22043"
+msgid "black/white"
+msgstr "Ñиёҳ/Ñафед"
+
+msgctxt "#22079"
+msgid "Default select action"
+msgstr "Ðмали пешфарз ҳангоми интихоб"
+
msgctxt "#22080"
msgid "Choose"
msgstr "Интихоб кардан"
@@ -8869,6 +9773,14 @@ msgctxt "#22083"
msgid "Play all"
msgstr "Ҳамаро пахш кардан"
+msgctxt "#23049"
+msgid "Teletext not available"
+msgstr "ТелетекÑÑ‚ даÑÑ‚Ð½Ð¾Ñ€Ð°Ñ Ð°ÑÑ‚"
+
+msgctxt "#23050"
+msgid "Activate Teletext"
+msgstr "Фаъол кардани телетекÑÑ‚"
+
msgctxt "#23051"
msgid "Part %i"
msgstr "ҚиÑми %i"
@@ -8877,6 +9789,30 @@ msgctxt "#23052"
msgid "Buffering %i bytes"
msgstr "Миёнгирӣ: %i бит"
+msgctxt "#23053"
+msgid "Stopping"
+msgstr "Манъ шуда иÑтодааÑт…"
+
+msgctxt "#23054"
+msgid "Running"
+msgstr "Иҷро шуда иÑтодааÑт…"
+
+msgctxt "#23055"
+msgid "Scale Teletext to 4:3"
+msgstr "МиқиёÑбандии телетекÑÑ‚ то 4:3"
+
+msgctxt "#23100"
+msgid "External Player Active"
+msgstr "Плеери берунӣ фаъол аÑÑ‚"
+
+msgctxt "#23101"
+msgid "Click OK to terminate the player"
+msgstr "Барои пӯшидани плеер, ОК-ро зер кунед"
+
+msgctxt "#23104"
+msgid "Click OK when playback has ended"
+msgstr "Баъд аз анҷомидани пахш, ОК-ро зер кунед"
+
msgctxt "#24000"
msgid "Add-on"
msgstr "Барномаи иловагӣ"
@@ -8969,14 +9905,42 @@ msgctxt "#24027"
msgid "Weather"
msgstr "Обу ҳаво"
+msgctxt "#24028"
+msgid "Weather.com (standard)"
+msgstr "Weather.com (Ñтандартӣ)"
+
+msgctxt "#24029"
+msgid "Service for weather information"
+msgstr "Хадамоти пешгӯии обу ҳаво"
+
+msgctxt "#24030"
+msgid "This Add-on can not be configured"
+msgstr "Ин барномаи иловагӣ танзим карда намешавад"
+
+msgctxt "#24031"
+msgid "Error loading settings"
+msgstr "Хатои боркунии танзимот"
+
msgctxt "#24032"
msgid "All Add-ons"
msgstr "Ҳамаи барномаҳои иловагӣ"
+msgctxt "#24033"
+msgid "Get Add-ons"
+msgstr "Боргирӣ кардани барномаҳои иловагӣ"
+
msgctxt "#24034"
msgid "Check for updates"
msgstr "Санҷидани навÑозиҳо"
+msgctxt "#24035"
+msgid "Force refresh"
+msgstr "ÐавÑозии маҷбурӣ"
+
+msgctxt "#24036"
+msgid "Change log"
+msgstr "Қайди тағйирот"
+
msgctxt "#24037"
msgid "Uninstall"
msgstr "Лағв кардани наÑб"
@@ -8985,18 +9949,62 @@ msgctxt "#24038"
msgid "Install"
msgstr "ÐаÑб кардан"
+msgctxt "#24039"
+msgid "Disabled Add-ons"
+msgstr "Ғайрифаъол кардани барномаи иловагӣ"
+
msgctxt "#24040"
msgid "(Clear the current setting)"
msgstr "(Пок кардани танзимоти ҷорӣ)"
+msgctxt "#24041"
+msgid "Install from zip file"
+msgstr "ÐаÑб кардан аз файли zip"
+
msgctxt "#24042"
msgid "Downloading %i%%"
msgstr "%i%% боргирӣ шуда иÑтодааÑÑ‚"
+msgctxt "#24043"
+msgid "Available Updates"
+msgstr "ÐавÑозиҳои даÑтраÑ"
+
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "ВобаÑтагиҳо мувофиқат намекунанд. Лутфан, бо муаллифи барномаи иловагӣ дар Ñ‚Ð°Ð¼Ð¾Ñ ÑˆÐ°Ð²ÐµÐ´."
+
+msgctxt "#24045"
+msgid "Add-on does not have the correct structure"
+msgstr "Сохтори барномаи иловагӣ нодуруÑÑ‚ аÑÑ‚"
+
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s аз тарафи барнома(ҳо)и иловагии наÑбшудаи зерин иÑтифода шуда иÑтодааÑÑ‚"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "ÐаÑби ин барномаи иловагӣ лағв карда намешавад"
+
+msgctxt "#24048"
+msgid "Rollback"
+msgstr "Бозгашт"
+
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Ðомувофиқ"
+
+msgctxt "#24050"
+msgid "Available Add-ons"
+msgstr "Барномаҳои иловагии даÑтраÑ"
+
msgctxt "#24051"
msgid "Version:"
msgstr "ВерÑиÑ:"
+msgctxt "#24052"
+msgid "Disclaimer"
+msgstr "БаёниÑи инкор"
+
msgctxt "#24053"
msgid "License:"
msgstr "Иҷозатнома:"
@@ -9005,14 +10013,94 @@ msgctxt "#24054"
msgid "Changelog"
msgstr "Сабти тағйирот"
+msgctxt "#24059"
+msgid "Would you like to enable this Add-on?"
+msgstr "Шумо мехоҳед, ки ин барномаи иловагиро фаъол кунед?"
+
+msgctxt "#24060"
+msgid "Would you like to disable this Add-on?"
+msgstr "Шумо мехоҳед, ки ин барномаи иловагиро ғайрифаъол кунед?"
+
+msgctxt "#24061"
+msgid "Add-on update available!"
+msgstr "ÐавÑозии барномаи иловагӣ даÑÑ‚Ñ€Ð°Ñ Ð°ÑÑ‚!"
+
+msgctxt "#24062"
+msgid "Enabled Add-ons"
+msgstr "Барномаҳои иловагии фаъолшуда"
+
+msgctxt "#24063"
+msgid "Auto update"
+msgstr "ÐавÑозии худкор"
+
+msgctxt "#24064"
+msgid "Add-on enabled"
+msgstr "Барномаи иловагӣ фаъол шудааÑÑ‚"
+
+msgctxt "#24065"
+msgid "Add-on updated"
+msgstr "Барномаи иловагӣ навÑозӣ шудааÑÑ‚"
+
+msgctxt "#24066"
+msgid "Cancel Add-on download?"
+msgstr "Боргирии барномаи иловагиро бекор мекунед?"
+
+msgctxt "#24067"
+msgid "Currently downloading Add-ons"
+msgstr "Барномаҳои иловагӣ дар ҳоли боргирӣ"
+
+msgctxt "#24068"
+msgid "Update available"
+msgstr "ÐавÑозӣ даÑÑ‚Ñ€Ð°Ñ Ð°ÑÑ‚"
+
msgctxt "#24069"
msgid "Update"
msgstr "ÐавÑозӣ"
+msgctxt "#24070"
+msgid "Add-on could not be loaded."
+msgstr "Барномаи иловагӣ бор карда нашуд."
+
+msgctxt "#24071"
+msgid "An unknown error has occurred."
+msgstr "Хатои номаълум ба вуҷуд омад."
+
+msgctxt "#24072"
+msgid "Settings required"
+msgstr "БоÑд танзим карда шавад"
+
+msgctxt "#24073"
+msgid "Could not connect"
+msgstr "ПайваÑÑ‚ карда нашуд"
+
+msgctxt "#24074"
+msgid "Needs to restart"
+msgstr "БоÑд бозоғозӣ карда шавад"
+
msgctxt "#24075"
msgid "Disable"
msgstr "Ғайрифаъол кардан"
+msgctxt "#24076"
+msgid "Add-on Required"
+msgstr "Барномаи иловагӣ лозим аÑÑ‚"
+
+msgctxt "#24080"
+msgid "Try to reconnect?"
+msgstr "Ðз нав пайваÑÑ‚ мешавед?"
+
+msgctxt "#24089"
+msgid "Add-on restarts"
+msgstr "Барномаи иловагӣ бозоғозӣ мешавад"
+
+msgctxt "#24090"
+msgid "Lock Add-on manager"
+msgstr "Мудири қулфи барномаи иловагӣ"
+
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Ин барномаи иловагӣ ғайрифаъол карда намешавад"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(ҷорӣ)"
@@ -9021,6 +10109,26 @@ msgctxt "#24095"
msgid "(blacklisted)"
msgstr "(манъшуда)"
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Барномаи иловагӣ номувофиқ аÑÑ‚ Ñ‘ ҳамчун вайноршуда дар анбори нармафзор қайд карда шуд."
+
+msgctxt "#24097"
+msgid "Would you like to disable it on your system?"
+msgstr "Шумо мехоҳед, ки онро дар ÑиÑтемаи худ ғайрифаъол кунед?"
+
+msgctxt "#24098"
+msgid "Broken"
+msgstr "Вайроншуда"
+
+msgctxt "#24099"
+msgid "Would you like to switch to this skin?"
+msgstr "Шумо мехоҳед, ки ин пӯÑтро иÑтифода баред?"
+
+msgctxt "#24100"
+msgid "To use this feature you must download an Add-on:"
+msgstr "Барои иÑтифодаи ин хуÑуÑиÑÑ‚ шумо боÑд барномаи иловагиро боргирӣ кунед:"
+
msgctxt "#24101"
msgid "Would you like to download this Add-on?"
msgstr "Шумо мехоҳед, ки ин барномаи иловагиро боргирӣ кунед?"
@@ -9033,6 +10141,54 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "Ин пӯÑÑ‚ дорои беъзе файлҳои намераÑидагӣ мебошад"
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Барномаи иловагӣ номувофиқ аÑÑ‚, зеро ки вобаÑтагиҳои он мувофиқат намекунанд."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Таваққуф кардан ҳангоми ҷуÑтуҷӯи зерунвонҳо"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Ðгар ба ҷузвдони филм захира карда нашавад, зерунвонҳо ба ҷузвдони интихобии зерунвонҳо боргирӣ карда мешаванд."
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Дар ҳоли ҷуÑтуҷӯи зерунвонҳо..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d зерунфон ёфт шудаанд"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Ягон зерунфон Ñ‘Ñ„Ñ‚ шудааÑÑ‚"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Боргирии зерунвонҳо..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Интихоби забонҳо барои боргирии зерунвонҳо"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Барои ҷуÑтуҷӯи зерунвонҳо забонеро танзим кунед. Ðа ҳамаи хидматҳои таъмини зерунвон тамоми забонҳои ҷаҳонро даÑтгирӣ мекунанд."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Боргирии зерунвонҳо қатъ шудааÑÑ‚"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Ягон хидмати зерунвонҳо наÑб нашудааÑÑ‚"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Захира кардани зерунвонҳо ба ҷузвдони филм"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Огоҳиҳо"
@@ -9129,10 +10285,18 @@ msgctxt "#33014"
msgid "Use DVD player instead of regular player"
msgstr "ИÑтифодаи плеери DVD ба ивази плеери муқаррар"
+msgctxt "#33015"
+msgid "Ask for download before playing video"
+msgstr "Пешниҳод кардани боргирии видео пеш аз пашкунӣ"
+
msgctxt "#33016"
msgid "Clips"
msgstr "Лаҳзаҳо"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Барои фаъол кардани плагин бозоғозӣ кунед"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Имшаб"
@@ -9185,6 +10349,10 @@ msgctxt "#33030"
msgid "Outlook"
msgstr "Пешгӯии обу ҳаво"
+msgctxt "#33031"
+msgid "Coverflow"
+msgstr "Ðамоиши поÑтерҳо"
+
msgctxt "#33032"
msgid "Translate text"
msgstr "Тарҷумаи матн"
@@ -9305,6 +10473,30 @@ msgctxt "#33072"
msgid "View Readme"
msgstr "Ðамоиш додани иттилоот"
+msgctxt "#33073"
+msgid "View Changelog"
+msgstr "Ðамоиши қайди тағйирот"
+
+msgctxt "#33074"
+msgid "This version of %s requires an"
+msgstr "Барои иҷро кардани ин верÑиÑи %s,"
+
+msgctxt "#33075"
+msgid "XBMC revision of %s or greater to run."
+msgstr "верÑÐ¸Ñ XBMC %s Ñ‘ навтар лозим аÑÑ‚."
+
+msgctxt "#33076"
+msgid "Please update XBMC."
+msgstr "Лутфан, XBMC-ро навÑозӣ кунед."
+
+msgctxt "#33077"
+msgid "No data found!"
+msgstr "Ягон иттилоот ёфт нашуд!"
+
+msgctxt "#33078"
+msgid "Next page"
+msgstr "Саҳифаи навбатӣ"
+
msgctxt "#33079"
msgid "Love"
msgstr "Маъқул"
@@ -9317,6 +10509,46 @@ msgctxt "#33081"
msgid "This file is stacked, select the part you want to play from."
msgstr "Ин файли таркибӣ мебошад, қиÑмеро, ки мехоҳед пахш кунед, интихоб намоед."
+msgctxt "#33082"
+msgid "Path to script"
+msgstr "МаÑир ба Ñкрипт"
+
+msgctxt "#33083"
+msgid "Enable custom script button"
+msgstr "Фаъол кардани тугмаи Ñкрипти иловагӣ"
+
+msgctxt "#33084"
+msgid "Auto login"
+msgstr "Воридшавии худкор"
+
+msgctxt "#33100"
+msgid "Failed to start"
+msgstr "Оғоз қатъ карда шуд"
+
+msgctxt "#33101"
+msgid "Webserver"
+msgstr "Сервери веб"
+
+msgctxt "#33102"
+msgid "Event Server"
+msgstr "Сервери рӯйдодҳо"
+
+msgctxt "#33103"
+msgid "Remote communication server"
+msgstr "Сервери алоқаи дурдаÑÑ‚"
+
+msgctxt "#33200"
+msgid "Detected New Connection"
+msgstr "ПайваÑти нав муайÑн шудааÑÑ‚"
+
+msgctxt "#34000"
+msgid "Lame"
+msgstr "Lame"
+
+msgctxt "#34001"
+msgid "Vorbis"
+msgstr "Vorbis"
+
msgctxt "#34002"
msgid "Wav"
msgstr "Wav"
@@ -9329,6 +10561,22 @@ msgctxt "#34004"
msgid "VAAPI"
msgstr "VAAPI"
+msgctxt "#34005"
+msgid "Flac"
+msgstr "Flac"
+
+msgctxt "#34006"
+msgid "MPEG-4 Audio (FFmpeg M4A AAC)"
+msgstr "Ðудиои MPEG-4 (FFmpeg M4A AAC)"
+
+msgctxt "#34007"
+msgid "Windows Media Audio 2 (FFmpeg wmav2)"
+msgstr "Ðудиои Windows Media 2 (FFmpeg wmav2)"
+
+msgctxt "#34100"
+msgid "Speaker Configuration"
+msgstr "Танзимоти динамикҳо"
+
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
@@ -9369,10 +10617,162 @@ msgctxt "#34110"
msgid "7.1"
msgstr "7.1"
+msgctxt "#34111"
+msgid "Select the behaviour when no sound is required for either playback or GUI sounds. [Always] - continuous inaudible signal is output, this keeps the receiving audio device alive for any new sounds, however this might also block sound from other applications. [1- 10 Minutes] - same as Always except that after the selected period of time audio enters a suspended state [Off] - audio output enters a suspended state. Note - sounds can be missed if audio enters suspended state."
+msgstr "Рафтореро дар мавриди иÑтифода накардани Ñадо ҳангоми пахш Ñ‘ пахши Ñадоҳои интерфейÑ, интихоб намоед. [Ҳамеша] - барориши Ñигнали беÑадоеÑÑ‚, ки даÑтгоҳи аудиоиро барои Ñадоҳои нав ҳамеша фаъол нигоҳ медорад, вале метавонад Ñадоҳоро аз барномаҳои дигар қатъ кунад. [1- 10 дақиқа] - ба рафтори \"Ҳамеша\" монанд аÑÑ‚, лекин баъд аз фоÑилаи вақти муайÑншуда Ñадо ба ҳолати таваққуфшуда мегузарад. [Хомӯш] - барориш аудио ба ҳолати таваққуфшуда мегузарад. Ба назар гиред, ки Ñадо гум мешавад, агар аудио ба ҳолати таваққуфшуда гузарад."
+
+msgctxt "#34120"
+msgid "Play GUI sounds"
+msgstr "Пахши Ñадоҳои GUI"
+
+msgctxt "#34121"
+msgid "Only when playback stopped"
+msgstr "Танҳо вақте ки пахш манъ шудааÑÑ‚"
+
+msgctxt "#34122"
+msgid "Always"
+msgstr "Ҳамеша"
+
msgctxt "#34123"
msgid "Never"
msgstr "Ҳеҷ гоҳ"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
+msgctxt "#34201"
+msgid "Can't find a next item to play"
+msgstr "Объектӣ навбатӣ барои пахш ёфт нашуд"
+
+msgctxt "#34202"
+msgid "Can't find a previous item to play"
+msgstr "Объектӣ қаблӣ барои пахш ёфт нашуд"
+
+msgctxt "#34300"
+msgid "Failed to start Zeroconf"
+msgstr "Оғози Zeroconf қатъ шудааÑÑ‚"
+
+msgctxt "#34301"
+msgid "Is Apple's Bonjour Service installed? See log for more info."
+msgstr "Барномаи наÑбшудаи хидмати \"Apple Bonjour\" доред? Барои маълумоти муфаÑÑал, файли Ñабти рӯйдодҳоро мутолиа кунед."
+
+msgctxt "#34302"
+msgid "AirPlay requires Zeroconf to be enabled."
+msgstr "AirPlay фаъолÑозии Zeroconf-ро талаб мекунад."
+
+msgctxt "#34303"
+msgid "Unable to stop Zeroconf"
+msgstr "Zeroconf манъ карда нашуд"
+
+msgctxt "#34304"
+msgid "AirPlay and AirTunes depend on Zeroconf running."
+msgstr "AirPlay ва AirTunes аз иҷрошавии Zeroconf вобаÑта аÑÑ‚."
+
+msgctxt "#34400"
+msgid "Video Rendering"
+msgstr "Коркарди видео"
+
+msgctxt "#34401"
+msgid "Failed to init video filters/scalers, falling back to bilinear scaling"
+msgstr "Оғози филтри/миқиёÑбандии видеоӣ қатъ шудааÑÑ‚. Филтри миқиёÑбандии \"bilinear\" иÑтифода мешавад"
+
+msgctxt "#34402"
+msgid "Failed to initialise audio device"
+msgstr "Оғози даÑтгоҳи аудиоӣ қатъ шудааÑÑ‚"
+
+msgctxt "#34403"
+msgid "Check your audiosettings"
+msgstr "Танзимоти аудиоро Ñанҷед"
+
+msgctxt "#34404"
+msgid "Use gestures for navigation:"
+msgstr "ИÑтифодаи ишораҳо барои идоракунӣ"
+
+msgctxt "#34405"
+msgid "1 finger swipe left,right,up,down for cursors"
+msgstr "Идоракунии курÑори муш - Зарбазанӣ бо 1 ангушт ба тарафи чап, роÑÑ‚, боло, поён"
+
+msgctxt "#34406"
+msgid "2 finger swipe left for backspace"
+msgstr "Идоракунии тугмаи \"Backspace\" - Зарбазанӣ бо 2 ангушт ба тарафи чап"
+
+msgctxt "#34407"
+msgid "1 finger single tap for enter"
+msgstr "Идоракунии тугмаи \"Enter\" - Зарбазании Ñгона бо 1 ангушт"
+
+msgctxt "#34408"
+msgid "2 finger single tap or 1 finger long press for contextmenu"
+msgstr "Идоракунии менюи марбут - Зарбазании Ñгона бо 2 ангушт Ñ‘ зарбазании дароз бо Ñ‘ ангушт"
+
+msgctxt "#35000"
+msgid "Peripherals"
+msgstr "ДаÑтгоҳҳои ҷонибӣ"
+
+msgctxt "#35001"
+msgid "Generic HID device"
+msgstr "ДаÑтгоҳи умумии HID"
+
+msgctxt "#35002"
+msgid "Generic network adaptor"
+msgstr "Ðдаптери шабакавии умумӣ"
+
+msgctxt "#35003"
+msgid "Generic disk"
+msgstr "ДиÑки умумӣ"
+
+msgctxt "#35004"
+msgid "There are no settings available\nfor this peripheral."
+msgstr "Ягон танзим барои ин даÑтгоҳи\nҷонибӣ вуҷуд надорад."
+
+msgctxt "#35005"
+msgid "New device configured"
+msgstr "ДаÑтгоҳи нав танзим шудааÑÑ‚"
+
+msgctxt "#35006"
+msgid "Device removed"
+msgstr "ДаÑтгоҳ тоза карда шудааÑÑ‚"
+
+msgctxt "#35007"
+msgid "Keymap to use for this device"
+msgstr "Тарҳбандии клавиатура барои ин даÑтгоҳ"
+
+msgctxt "#35008"
+msgid "Keymap enabled"
+msgstr "Тарҳбандии клавиатура фаъол шудааÑÑ‚"
+
+msgctxt "#35009"
+msgid "Do not use the custom keymap for this device"
+msgstr "Тарҳбандии клавиатураи шахÑиро барои ин даÑтгоҳ иÑтифода набаред"
+
+msgctxt "#35100"
+msgid "Enable joystick and gamepad support"
+msgstr "Фаъол кардани даÑтгирии ҷойÑтик ва панели бозӣ"
+
+msgctxt "#35102"
+msgid "Disable joystick when this device is present"
+msgstr "Ғайрифаъол кардани ҷойÑтик ҳангоми фаъол будани ин даÑтгоҳ"
+
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Фаъол кардани тугмаҳои ÑиÑтемавӣ дар Ñкрани пурра"
+
msgctxt "#35500"
msgid "Location"
msgstr "Ҷойгиршавӣ"
@@ -9385,34 +10785,310 @@ msgctxt "#35502"
msgid "Name"
msgstr "Ðом"
+msgctxt "#35503"
+msgid "Vendor"
+msgstr "Фурӯшанда"
+
+msgctxt "#35504"
+msgid "Product ID"
+msgstr "Рақами маҳÑул"
+
+msgctxt "#36000"
+msgid "Pulse-Eight CEC adaptor"
+msgstr "Ðдаптери Pulse-Eight CEC"
+
+msgctxt "#36001"
+msgid "Pulse-Eight Nyxboard"
+msgstr "Pulse-Eight Nyxboard"
+
+msgctxt "#36002"
+msgid "Switch to keyboard side command"
+msgstr "Фаъол кардани фармонҳои иловагии клавиатура"
+
+msgctxt "#36003"
+msgid "Switch to remote side command"
+msgstr "Фаъол кардани фармонҳои иловагии пулт"
+
+msgctxt "#36004"
+msgid "Press \"user\" button command"
+msgstr "Тугмаи фармонии \"user\"-ро пахш кунед"
+
+msgctxt "#36005"
+msgid "Enable switch side commands"
+msgstr "Фаъол кардани фармонҳои иловагӣ"
+
+msgctxt "#36006"
+msgid "Could not open the adaptor"
+msgstr "Ðдаптер кушода нашуд"
+
+msgctxt "#36007"
+msgid "Devices to power on when starting XBMC"
+msgstr "Фаъол кардани даÑтгоҳҳои зерин ҳангоми оғози кори XBMC"
+
+msgctxt "#36008"
+msgid "Devices to power off when stopping XBMC"
+msgstr "Хомӯш кардани даÑтгоҳҳои зерин ҳангоми анҷоми кори XBMC"
+
+msgctxt "#36009"
+msgid "Put devices in standby mode when activating screensaver"
+msgstr "Гузаронидани даÑтгоҳҳо ба ҳолати интизорӣ ҳангоми фаъолÑозии пардаи Ñкран"
+
+msgctxt "#36010"
+msgid "Wake devices when deactivating screensaver"
+msgstr "Бедор кардани даÑтгоҳҳо ҳангоми ғайрифаъолÑозии пардаи Ñкран"
+
+msgctxt "#36011"
+msgid "Could not detect the CEC com port. Set it up manually."
+msgstr "Порти CEC Ñ‘Ñ„Ñ‚ карда нашуд. Онро ба таври даÑÑ‚Ó£ танзим кунед."
+
+msgctxt "#36012"
+msgid "Could not initialise the CEC adaptor. Please check your settings."
+msgstr "Ðдаптери CEC оғоз карда нашуд. Лутфан, танзимоти худро Ñанҷед."
+
+msgctxt "#36015"
+msgid "HDMI port number"
+msgstr "Рақами порти HDMI"
+
msgctxt "#36016"
msgid "Connected"
msgstr "ПайваÑтшуда"
+msgctxt "#36017"
+msgid "Could not initialise the CEC adaptor: libCEC was not found on your system."
+msgstr "Ðдаптери CEC оғоз карда нашуд: libCEC дар ÑиÑтемаи шумо Ñ‘Ñ„Ñ‚ нашуд."
+
+msgctxt "#36018"
+msgid "Use the TV's language setting"
+msgstr "ИÑтифодаи танзимоти забони ТВ"
+
+msgctxt "#36019"
+msgid "Connected to HDMI device"
+msgstr "Ба даÑтгоҳи HDMI пайваÑÑ‚ шудааÑÑ‚"
+
+msgctxt "#36020"
+msgid "Make XBMC the active source when starting"
+msgstr "ИÑтифодаи XBMC ҳамчун манбаи фаъол ҳангоми оғози кор"
+
+msgctxt "#36021"
+msgid "Physical address (overrules HDMI port)"
+msgstr "Суроғаи ҷиÑмонӣ (Порти HDMI-ро идора мекунад)"
+
+msgctxt "#36022"
+msgid "COM port (leave empty unless needed)"
+msgstr "Порти COM (ба қадри зарурӣ холӣ монед)"
+
+msgctxt "#36023"
+msgid "Configuration updated"
+msgstr "Танзимот навÑозӣ шудааÑÑ‚"
+
+msgctxt "#36024"
+msgid "Failed to set the new configuration. Please check your settings."
+msgstr "Танзимоти нав татбиқ карда нашуд. Лутфан, танзимоти худро Ñанҷед."
+
+msgctxt "#36025"
+msgid "Send 'inactive source' command when stopping XBMC"
+msgstr "ФириÑтодани фармони \"манбаи ғайрифаъол\" ҳангоми хуруҷ аз XBMC"
+
+msgctxt "#36026"
+msgid "Put devices in standby mode when putting the PC in standby"
+msgstr "Гузариши даÑтгоҳҳо ба ҳолати интизорӣ ҳангоми гузариши компютер ба ҳолати интизорӣ"
+
+msgctxt "#36027"
+msgid "This device needs servicing"
+msgstr "Ин даÑтгоҳ боÑд нигоҳубин карда шавад"
+
msgctxt "#36028"
msgid "Ignore"
msgstr "Рад кардан"
+msgctxt "#36029"
+msgid "When the TV is switched off"
+msgstr "Ҳангоми хомӯшкунии телевизор"
+
+msgctxt "#36030"
+msgid "Connection lost"
+msgstr "ПайваÑÑ‚ гум шудааÑÑ‚"
+
+msgctxt "#36031"
+msgid "This user does not have permissions to open the CEC adaptor"
+msgstr "Корбари ҷори барои кушодани адаптери CEC иҷозат надорад"
+
+msgctxt "#36032"
+msgid "The port is busy. Only one program can access the CEC adaptor"
+msgstr "Порт машғул аÑÑ‚. Танҳо Ñк барнома метавонад ба адаптери CEC даÑтраÑÓ£ пайдо кунад."
+
+msgctxt "#36033"
+msgid "Pause playback when switching to another source"
+msgstr "Таваққуф кардани пахш ҳангоми гузариш ба манбаи дигар"
+
+msgctxt "#36035"
+msgid "Always"
+msgstr "Ҳамеша"
+
+msgctxt "#36036"
+msgid "On start/stop"
+msgstr "Ҳангоми оғоз/иÑÑ‚"
+
msgctxt "#36037"
msgid "TV"
msgstr "ТВ"
+msgctxt "#36038"
+msgid "Amplifier / AVR device"
+msgstr "Қувватфизо / ДаÑтгоҳи AVR"
+
+msgctxt "#36039"
+msgid "TV and AVR device (explicit)"
+msgstr "ДаÑтгоҳи TV ва AVR (Ñамим)"
+
+msgctxt "#36040"
+msgid "Unsupported libCEC interface version. %x is lower than the version XBMC supports (%x)"
+msgstr "Ин верÑиÑи интерфейÑи libCEC даÑтгирӣ намешавад. %x қабл аз верÑиÑие, ки XBMC даÑтгирӣ мекунад (%x), мебошад"
+
+msgctxt "#36041"
+msgid "* Item folder"
+msgstr "* Ҷузвдони объект"
+
+msgctxt "#36042"
+msgid "Use limited colour range (16-235)"
+msgstr "ИÑтифодаи диапазони рангҳои маҳдудшуда (16—235)"
+
+msgctxt "#36101"
+msgid "Change the look and feel of the User Interface."
+msgstr "Тағйир додани намуди зоҳирии интерфейÑи корбарӣ."
+
msgctxt "#36102"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36103"
+msgid "Select the skin for the User Interface. This will define the look and feel of XBMC."
+msgstr "ПӯÑтеро барои интерфейÑи корбарӣ интихоб намоед. Ин амал Ñабки намуди зоҳирии XBMC-ро иваз мекунад."
+
+msgctxt "#36104"
+msgid "Change specific skin settings. The available options are dependent on the skin used."
+msgstr "Тағйир додани танзимоти махÑуÑи пӯÑÑ‚. Параметрҳои даÑÑ‚Ñ€Ð°Ñ Ð°Ð· пӯÑти интихобшуда вобаÑта аÑÑ‚."
+
+msgctxt "#36105"
+msgid "Change the theme associated with your selected skin."
+msgstr "Тағйир додани мавзӯи пӯÑти интихобшуда."
+
+msgctxt "#36106"
+msgid "Change the colours of your selected skin."
+msgstr "Тағйир додани рангҳои пӯÑти интихобшуда."
+
+msgctxt "#36107"
+msgid "Choose the fonts displayed in the User Interface. The font sets are configured by your skin."
+msgstr "Тағйир додани шрифтҳои интерфейÑи корбарӣ. Шрифтҳо бо пӯÑÑ‚ танзим карда шудаанд."
+
+msgctxt "#36108"
+msgid "Resize the view of the GUI."
+msgstr "Тағйир додани андозаи интерфейÑи графикӣ"
+
+msgctxt "#36109"
+msgid "Select the media window that XBMC displays on startup."
+msgstr "Интихоби равзанаи мултимедиавӣ барои намоиш ҳангоми оғози кори XBMC."
+
+msgctxt "#36110"
+msgid "Select or disable the sound scheme used in the User Interface."
+msgstr "Интихоб Ñ‘ ғайрифаъол кардани нақшаи Ñадо барои интерфейÑи корбарӣ."
+
+msgctxt "#36111"
+msgid "Turn this off to remove the scrolling RSS news ticker."
+msgstr "Фаъол Ñ‘ хомӯш кардани навори навÑозии RSS."
+
+msgctxt "#36112"
+msgid "Edit the RSS feeds."
+msgstr "Таҳрир кардани навори навÑозии RSS."
+
msgctxt "#36113"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36114"
+msgid "Chooses the language of the User Interface."
+msgstr "Забони интерфейÑи корбариро интихоб мекунад."
+
+msgctxt "#36115"
+msgid "Select the formats for temperature, time and date. The available options depend on the selected language."
+msgstr "Интихоби форматҳои ҳарорат, вақт ва Ñана. Танзимҳои даÑÑ‚Ñ€Ð°Ñ Ð°Ð· забони интихобшуда вобаÑта ҳаÑтанд."
+
+msgctxt "#36116"
+msgid "Choose which character set is used for displaying text in the GUI."
+msgstr "Интихоби маҷмӯи аломатҳо барои матни интерфейÑ."
+
+msgctxt "#36117"
+msgid "Select country location."
+msgstr "Интихоби кишвар."
+
+msgctxt "#36118"
+msgid "Select your current timezone."
+msgstr "Интихоби минтақаи ҷорӣ."
+
+msgctxt "#36119"
+msgid "Select the default audio track when different language tracks are available."
+msgstr "Интихоби роҳчаи аудиоии пешфарз ҳангоми даÑÑ‚Ñ€Ð°Ñ Ð±ÑƒÐ´Ð°Ð½Ð¸ роҳчаҳо дар забонҳои гуногун."
+
+msgctxt "#36120"
+msgid "Select the default subtitles when different languages are available."
+msgstr "Интихоб кардани зерунвонҳои пешфарз вақте ки забонҳои гуногун даÑтраÑанд."
+
msgctxt "#36121"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36122"
+msgid "Display the (..) item in lists for visiting the parent folder."
+msgstr "Ðамоиш додани аломати (..) дар рӯйхат барои гузариш ба ҷуÑвдони аÑоÑÓ£."
+
+msgctxt "#36123"
+msgid "Show file extensions on media files. For example, 'You Enjoy Myself.mp3' would be simply be shown as 'You Enjoy Myself'."
+msgstr "Ðамоиш додани паÑвандҳои файлҳои мултимедиавӣ. МаÑалан, файли \"You Enjoy Myself.mp3\" ҳамчун \"You Enjoy Myself\" намоиш дода мешавад."
+
+msgctxt "#36124"
+msgid "Ignore certain tokens during sort operations. For example, 'The Simpsons' would simply be sorted as 'Simpsons'. To configure tokens, see http://wiki.xbmc.org/index.php?title=Settings/Appearance."
+msgstr "ИÑтиÑно кардани намоиши артиклҳо ҳангоми мураттабкунӣ. МаÑалан, файли \"The Simpsons\" ҳамчун \"Simpsons\" мураттаб карда мешавад. Барои маълумоти муфаÑÑал ба вебÑайти http://wiki.xbmc.org/index.php?title=Settings/Appearance гузаред."
+
+msgctxt "#36125"
+msgid "Allow files to be deleted and renamed through the user interface, via the contextual menu (press C on a keyboard, for example, to bring up this menu)."
+msgstr "Иҷозати иваз кардани ном ва неÑÑ‚ кардани файлҳо таваÑÑути менюи марбут дар интерфейÑи корбарӣ (Барои намоиш додани менюи марбут, тугмаи \"С\"-ро дар клавиатура пахш кунед)."
+
+msgctxt "#36126"
+msgid "Show the add source button from root sections of the user interface."
+msgstr "Ðамоиш додани тугмаи \"Илова кардани манбаъ\" дар қиÑматҳои аÑоÑии интерфейÑи корбарӣ."
+
+msgctxt "#36127"
+msgid "Show hidden files and directories."
+msgstr "Ðамоиш додани файлҳо ва ҷузвдонҳои ноаён."
+
msgctxt "#36128"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36129"
+msgid "Set the amount of idle time required before displaying the screensaver."
+msgstr "Танзим кардани вақти бефаъолиÑÑ‚Ó£ пеш аз фаъол кардани пардаи Ñкран."
+
+msgctxt "#36130"
+msgid "Select the screensaver. XBMC will force the 'Dim' screensaver when fullscreen video playback is paused or a dialogue box is active."
+msgstr "Интихоб кардани пардаи Ñкран. Вақте ки пахши видео дар Ñкрани пурра таваққуф карда мешавад Ñ‘ диалог намоиш дода мешавад, XBMC пардаи Ñкрани \"камнурро\" намоиш медиҳад."
+
+msgctxt "#36131"
+msgid "Change specific screensaver settings. The available options are dependent on the screensaver used."
+msgstr "Тағйир додани танзимоти пардаи Ñкран. Танзимҳои даÑÑ‚Ñ€Ð°Ñ Ð°Ð· пардаи Ñкрани иÑтифодашуда вобаÑта ҳаÑтанд."
+
+msgctxt "#36132"
+msgid "Preview the selected screensaver."
+msgstr "Пешнамоиши пардаи Ñкрани интихобшуда."
+
+msgctxt "#36133"
+msgid "If music is being played, XBMC will start the selected visualisation instead of displaying the screensaver."
+msgstr "Ðгар файли муÑиқӣ пахш карда шавад, XBMC ба ивази пардаи Ñкран таҷаÑÑуми интихобшударо оғоз мекунад."
+
+msgctxt "#36134"
+msgid "Dim the display when media is paused. Not valid for the 'Dim' screensaver mode."
+msgstr "Камнур кардани диÑплей ҳангоми таваққуфи пахши мултимедиа. Ин имкон дар ҳолати пардаи Ñкрани \"Камнур\" иÑтифода намешавад."
+
msgctxt "#36135"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9437,18 +11113,66 @@ msgctxt "#36140"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36141"
+msgid "Show plot information for unwatched media in the Video Library."
+msgstr "Ðамоиш додани Ñужет барои фалҳои мултимедиавии тамошонашуда дар китобхонаи видеоӣ."
+
msgctxt "#36142"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36143"
+msgid "Get thumbnails for actors when scanning media."
+msgstr "Гирифтани ÑÑкизҳои актёрон ҳангоми Ñканкунии медиа."
+
+msgctxt "#36144"
+msgid "Remove the TV show season node, toggles between 'If only one season' (default), 'Always' and 'Never'."
+msgstr "Тоза кардани пайванди мавÑимҳои барномаҳои телевизионӣ. Пайванд танҳо байни имконоти 'Ðгар танҳои Ñк мавÑим' (пешфарз), 'ҳамеша' ва 'Ҳеҷ гоҳ' имконпазир аÑÑ‚."
+
+msgctxt "#36145"
+msgid "Group movies into 'Movie sets' when browsing the movie library."
+msgstr "Гурӯҳбандӣ кардани филмҳо ба 'КоллекÑиÑи филмҳо' ҳангоми тамошо кардани китобхонаи видеоӣ."
+
+msgctxt "#36146"
+msgid "Check for new media files on XBMC startup."
+msgstr "Санҷиши файлҳои мултимедиавии нав ҳангоми оғози кори XBMC."
+
+msgctxt "#36147"
+msgid "Hide the library scanning progress bar during scans."
+msgstr "Пинҳон кардани навори вазъиÑти Ñканкунии китобхона ҳангоми Ñканҳо."
+
+msgctxt "#36148"
+msgid "Remove items from your library that can't be found (either renamed, deleted, or on removable storage that is currently unplugged)."
+msgstr "Тоза кардани файлҳои ёфтнашуда аз китобхона (номивазшуда, неÑтшуда Ñ‘ файлҳое, ки танҳо дар захирагоҳ (флешка) даÑтраÑанд)."
+
+msgctxt "#36149"
+msgid "Export the Video Library database to XML files. This will optionally overwrite your current XML files."
+msgstr "Содир кардани пойгоҳи иттилоотии китобхонаи видеоӣ ба файлҳои XML. Ин амал ба қадри зарурӣ (интихобӣ) файлҳои XML-и ҷории шуморо рӯиҳамнавиÑÓ£ мекунад."
+
+msgctxt "#36150"
+msgid "Import a XML file into the Video Library database."
+msgstr "Ворид кардани файли XML ва пойгоҳи иттилоотии китобхонаи видеоӣ."
+
msgctxt "#36151"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36152"
+msgid "Enable automatic playback of the next file in the list of the selected item."
+msgstr "Фаъол кардани пахши худкори файли навбатӣ дар рӯйхат."
+
+msgctxt "#36153"
+msgid "Adjust the method used to process and display video."
+msgstr "Интихоби уÑули коркард ва намоиши видео."
+
msgctxt "#36154"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36155"
+msgid "Enable hardware decoding of video files."
+msgstr "Фаъол кардани рамзкушоии Ñахтафзорӣ барои файлҳои видеоӣ."
+
msgctxt "#36156"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9481,10 +11205,34 @@ msgctxt "#36163"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36164"
+msgid "Select when the refresh rate adjustments should take place."
+msgstr "ҳамоҳанг кардани Ñуръати навÑозии диÑплей вобаÑта аз Ñуръати навÑозии кадрҳои видеоӣ."
+
+msgctxt "#36166"
+msgid "Synchronise the video to the refresh rate of the monitor."
+msgstr "Ҳамоҳанг кардани видео бо Ñуръати навÑозии монитор."
+
+msgctxt "#36168"
+msgid "Maximum video speed adjust to match actual screen refresh rate."
+msgstr "Сатҳи акÑари Ñуръати видео барои ҳамоҳанг кардани Ñуръати навÑозии диÑплей."
+
+msgctxt "#36171"
+msgid "Select the zoom level that 4:3 videos are shown on widescreen displays."
+msgstr "Интихоби танзими андозаи видео бо таноÑуби 4:3 барои намоиш дар диÑплейҳои ваÑеъÑкран."
+
msgctxt "#36173"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36174"
+msgid "Enable Teletext when watching a live TV stream."
+msgstr "Фаъол кардани телетекÑÑ‚ ҳангоми тамошои ҷараёни телевизионии пахши муÑтақим."
+
+msgctxt "#36175"
+msgid "Scale Teletext to 4:3 ratio."
+msgstr "МиқиёÑбандии телетекÑÑ‚ ба 4:3."
+
msgctxt "#36176"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9525,14 +11273,46 @@ msgctxt "#36190"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36191"
+msgid "Set a custom directory for your subtitles. This can be a file share."
+msgstr "Танзим кардани директориÑи шахÑÓ£ барои зерунвонҳо. Шумо метавонед манбаи шабакавиро муайÑн кунед."
+
+msgctxt "#36192"
+msgid "Location of subtitles on the screen."
+msgstr "Ҷойгиршавии зерунвонҳо дар Ñкран."
+
msgctxt "#36193"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36194"
+msgid "Autorun DVD video when inserted in drive."
+msgstr "Пахш кардани диÑки DVD ба таври худкор баъд аз вориди он ба драйв."
+
+msgctxt "#36195"
+msgid "Force a region for DVD playback."
+msgstr "ИÑтифодаи минтақа барои пахши DVD."
+
+msgctxt "#36196"
+msgid "Attempt to skip 'unskippable' introductions before DVD menu."
+msgstr "Кӯшиши нодида гузарондани муқадимаи безоркунанда пеш аз менюи аÑоÑии DVD."
+
msgctxt "#36197"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36198"
+msgid "Select the default movie information source. See the Add-ons Manager for options."
+msgstr "Интихоби манбаи пешфарз барои иттилооти филмҳо. Хидматҳои даÑтраÑро дар мудири барномаҳои иловагӣ интихоб кунед."
+
+msgctxt "#36199"
+msgid "Select the default TV show information source. See the Add-ons Manager for options."
+msgstr "Интихоби манбаи пешфарз барои иттилооти барномаҳои телевизионӣ. Хидматҳои даÑтраÑро дар мудири барномаҳои иловагӣ интихоб кунед."
+
+msgctxt "#36200"
+msgid "Default scraper used for adding music videos to your library."
+msgstr "ИнфореÑурÑи пешфарз барои иловаунии видеоҳои муÑиқӣ ба китобхонаи худ."
+
msgctxt "#36201"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9541,6 +11321,22 @@ msgctxt "#36202"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36206"
+msgid "Use numbering from the backend, instead of configuring them manually over XBMC."
+msgstr "ИÑтифодаи рақамгузории шабакаҳо аз рӯи тартиб дар Ñервери мултимедиавӣ ба ивази танзим даÑÑ‚Ó£ дар ÑиÑтемаи XBMC."
+
+msgctxt "#36207"
+msgid "Open the channel manager, which allows modifying the channel order, channel name, icon, etc."
+msgstr "Кушодани мудири шабакаҳо барои тағйир додани тартиби шабакаҳо, номҳои шабакаҳо, нишонаҳои шабакаҳо ва ғайра."
+
+msgctxt "#36208"
+msgid "Instruct the backend to search for channels (if supported)."
+msgstr "Фармони Ò·Ó¯Ñтуҷӯи шабакаҳо дар Ñервери мултимедиваӣ (агар даÑÑ‚Ñ€Ð°Ñ Ð±Ð¾ÑˆÐ°Ð´)."
+
+msgctxt "#36209"
+msgid "Delete channel/EPG database and reimport the data from the backend afterwards."
+msgstr "ÐеÑÑ‚ кардани пойгоҳи иттилоотии шабакаҳо/EPG ва аз нав ворид кардани иттилоот аз Ñерверҳои мултимедиавӣ."
+
msgctxt "#36210"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9577,14 +11373,58 @@ msgctxt "#36218"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36219"
+msgid "Default EPG window to show. Defaults to Timeline."
+msgstr "Равзанаи пешфарзи EPG барои намоиш. Қимати пешфарз - Хати вақт."
+
+msgctxt "#36220"
+msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
+msgstr "Миқдори рӯзҳо барои воридоти иттилооти EPG аз Ñерверҳои мултимедиавӣ. Қимати пешфарз - 2 рӯз."
+
+msgctxt "#36221"
+msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
+msgstr "ФоÑилаи вақт байни воридотҳои иттилооти EPG аз Ñерверҳои мултимедиавӣ. Қимати пешфарз - 120 дақиқа."
+
+msgctxt "#36222"
+msgid "Do not import EPG data while playing TV to minimise CPU usage."
+msgstr "Ворид накардани иттилооти EPG ҳангоми пахши ТВ барои иÑтиÑнои Ñарбории CPU."
+
+msgctxt "#36223"
+msgid "By default, EPG data is stored in a local database to speed up importing when XBMC is restarted."
+msgstr "Иттилооти EPG дар пойгоҳи иттилоотии маҳаллӣ ба таври пешфарз нигоҳ дошта мешаванд, то ки Ñуръати воридот ҳангоми бозоғозии XBMC тезтар шавад."
+
+msgctxt "#36224"
+msgid "Hide \"no information available\" labels when no EPG data can be retrieved for a channel."
+msgstr "Пинҳон кардани барчаÑпҳои \"Ягон иттилоот даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚\", вақте ки бозёбии иттилооти EPG барои шабака имконпазир неÑÑ‚."
+
+msgctxt "#36225"
+msgid "Delete the EPG database in xbmc and reimport the data afterwards from the backend."
+msgstr "ÐеÑÑ‚ кардани пойгоҳи иттилоотии EPG дар XBMC ва аз нав ворид кардани иттилоот аз Ñерверҳои мултимедиавӣ."
+
msgctxt "#36226"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36227"
+msgid "Display stream of selected channel in a small box instead of fullscreen."
+msgstr "Ðамоиш додани ҷараёни шабакаи интихобшуда дар равзанаи хурд ба ивази Ñкрани пурра."
+
+msgctxt "#36228"
+msgid "Show the last viewed channel if switching to live tv."
+msgstr "Ðамоиш додани шабакаи тамошокардаи охирин ҳангоми гузариш ба Ñаҳифаи пахши муÑтақим."
+
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Ðамоиш додани иттилооти Ñифати Ñигнал дар равзанаи иттилоотии кодекҳо (агар бо барномаи иловагӣ ва Ñервери мултимедиавӣ даÑтгирӣ карда шавад)."
+
msgctxt "#36230"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36231"
+msgid "Pressing a number button in full screen mode will automatically switch to the channel number that was entered after 1 second."
+msgstr "Гузариши худкор ба шабкаи интихобшуда баъд аз 1 ÑÐ¾Ð½Ð¸Ñ Ò³Ð°Ð½Ð³Ð¾Ð¼Ð¸ зеркунии рақами шабака дар ҳолати Ñкрани пурра."
+
msgctxt "#36232"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9593,14 +11433,54 @@ msgctxt "#36233"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36234"
+msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
+msgstr "Давомнокии Ñабт ҳангоми зеркунии тугмаи Ñабт Ñ‘ ҳангоми Ñҷоди вақтÑанҷи нав ба таври даÑÑ‚Ó£. Қимати пешфарз — 180 дақиқа."
+
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "ÐввалиÑти Ñабт. Қимати баланд маънои муҳимиÑти баланд дорад. Қимати пешфарз - 50. Ин қимат бо ҳамаи барномаҳои иловагӣ ва Ñерверҳо даÑтгирӣ карда намешавад."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "ÐеÑÑ‚ кардани Ñабт баъд аз вақти муайÑншуда. Қимати пешфарз - 99 рӯз. Ин қимат бо ҳамаи барномаҳои иловагӣ ва Ñерверҳо даÑтгирӣ карда намешавад."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Оғоз кардани Ñабт пеш аз вақти муайÑншуда. Қимати пешфарз - 2 дақиқа пеш аз оғоз. Ин қимат бо ҳамаи барномаҳои иловагӣ ва Ñерверҳо даÑтгирӣ карда намешавад."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Ба анҷом раÑонидани Ñабт баъд аз вақти муайÑншуда. Қимати пешфарз - 10 дақиқа баъд аз анҷом. Ин қимат бо ҳамаи барномаҳои иловагӣ ва Ñерверҳо даÑтгирӣ карда намешавад."
+
+msgctxt "#36239"
+msgid "Display a notification when timers are added, finished or removed by the backend."
+msgstr "Ðамоиш додани огоҳиҳо ҳангоми иловакунӣ, неÑткунӣ Ñ‘ анҷомдиҳии вақтÑанҷҳои Ñервери мултимедиавӣ."
+
msgctxt "#36240"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36243"
+msgid "The command to execute. Defaults to '/usr/bin/setwakeup.sh'."
+msgstr "Ин фармонеÑÑ‚, ки иҷро мешавад. Фармони пешфарз — \"/usr/bin/setwakeup.sh\"."
+
+msgctxt "#36245"
+msgid "Execute the wakeup command every day at the given time."
+msgstr "Иҷро кардани фармони бедоршавӣ ҳар рӯз дар вақти таъиншуда."
+
+msgctxt "#36246"
+msgid "When to execute the daily wakeup command."
+msgstr "Вақти иҷрокунии фармони бедоршавии ҳаррӯза."
+
msgctxt "#36247"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36249"
+msgid "Enter a new pin code to unlock parental locked channels."
+msgstr "Барои кушодани шабакаҳои қулфшуда бо волидон рамзи қулфи наверо ворид кунед."
+
msgctxt "#36251"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9617,14 +11497,58 @@ msgctxt "#36254"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36256"
+msgid "Automatically fetch album and artist information via scrapers during scan."
+msgstr "Бозёбии иттилооти ҳунарманд ва албом ба таври худкор ҳангоми Ñканкунӣ таваÑÑути инфореÑурÑ."
+
+msgctxt "#36257"
+msgid "Select the default album information source"
+msgstr "Интихоб кардани манбаи пешфарз барои иттилооти албом"
+
+msgctxt "#36258"
+msgid "Select the default artist information source. See the Add-ons Manager for options."
+msgstr "Интихоб кардани манбаи пешфарз барои иттилооти ҳунарманд. Барои интихоби имконот ба Мудири барномаи иловагӣ гузаред."
+
+msgctxt "#36259"
+msgid "Check for new and removed media files on XBMC startup."
+msgstr "Санҷиши файлҳои мултимедиаи нав ва тозашуда ҳангоми оғози кори XBMC."
+
msgctxt "#36260"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36261"
+msgid "Path where taken screenshots will be stored."
+msgstr "Ҷузвдон барои нигоҳ доштани Ñуратҳои Ñкран."
+
+msgctxt "#36263"
+msgid "Import a XML file into the Music Library database."
+msgstr "Ворид кардани файли XML ба пойгоҳи иттилоотии китобхонаи муÑиқӣ"
+
msgctxt "#36264"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36268"
+msgid "Default is 89dB per standard. Change with caution."
+msgstr "Қимати пешфарз — 89 дБ, мувофиқи Ñтандарт. Бо Ñҳтиёт бошед, агар хоҳед, ки ин қиматро тағйир диҳед."
+
+msgctxt "#36269"
+msgid "Default is 89dB per standard. Change with caution."
+msgstr "Қимати пешфарз — 89 дБ, мувофиқи Ñтандарт. Бо Ñҳтиёт бошед, агар хоҳед, ки ин қиматро тағйир диҳед."
+
+msgctxt "#36270"
+msgid "Reduce the volume of the file if clipping is likely to occur."
+msgstr "ПаÑÑ‚ кардани баландии Ñадо дар ҳолати имкон будани буриши Ñатҳ."
+
+msgctxt "#36272"
+msgid "Allow crassfading to occur when both tracks are from the same album."
+msgstr "Иҷозати гузариши ҳамвор байни роҳчаҳо, ҳатто барои роҳчаҳо аз албоми агона."
+
+msgctxt "#36273"
+msgid "Select the visualisation that will be displayed while listening to music."
+msgstr "Интихоби таҷаÑÑуме, ки ҳангоми шунидани муÑиқӣ намоиш дода мешавад."
+
msgctxt "#36277"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9645,6 +11569,38 @@ msgctxt "#36282"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36283"
+msgid "Autorun CDs when inserted in drive."
+msgstr "Пахш кардани диÑки CD ба таври худкор баъд аз вориди он ба драйв."
+
+msgctxt "#36284"
+msgid "Read the information belonging to an audio CD from an internet database."
+msgstr "Ðамоиш додани иттилоот дар бораи диÑки CD-и аудиоӣ аз пойгоҳи иттилоотии интернетӣ."
+
+msgctxt "#36285"
+msgid "Select the location on your hard drive where ripped tracks will be saved to."
+msgstr "Интихоби макон дар диÑки компютерӣ барои нигоҳ доштани файлҳои гирифташуда."
+
+msgctxt "#36286"
+msgid "Tags: [B]%N[/B]: TrackNumber, [B]%S[/B]: DiscNumber, [B]%A[/B]: Artist, [B]%T[/B]: Title, [B]%B[/B]: Album, [B]%G[/B]: Genre, [B]%Y[/B]: Year, [B]%F[/B]: FileName, [B]%D[/B]: Duration, [B]%J[/B]: Date, [B]%R[/B]: Rating, [B]%I[/B]: FileSize."
+msgstr "БарчаÑпҳо: [B]%N[/B]: Рақами роҳча, [B]%S[/B]: Рақами диÑк, [B]%A[/B]: Ҳунарманд, [B]%T[/B]: Унвон, [B]%B[/B]: Ðлбом, [B]%G[/B]: Жанр, [B]%Y[/B]: Сол, [B]%F[/B]: Ðоми файл, [B]%D[/B]: Давомнокӣ, [B]%J[/B]: Сана, [B]%R[/B]: Рейтинг, [B]%I[/B]: Ðндозаи файл."
+
+msgctxt "#36287"
+msgid "Select which audio encoder to use when ripping."
+msgstr "Интихоби рамзгузор барои нуÑхабардории диÑк."
+
+msgctxt "#36288"
+msgid "Select which quality you want to rip your files."
+msgstr "Интихоби Ñифати файлҳо барои нуÑхабардории диÑк."
+
+msgctxt "#36290"
+msgid "For FLAC define compression level, default 5"
+msgstr "Барои Ñатҳи фушурдан бо рамзгузори FLAC, қимати пешфарз 5 мебошад"
+
+msgctxt "#36291"
+msgid "Auto eject disc after rip is complete."
+msgstr "Барориши худкор баъд аз анҷоми нуÑхабардории диÑк."
+
msgctxt "#36292"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9653,6 +11609,22 @@ msgctxt "#36294"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36295"
+msgid "Select the font used during karoake."
+msgstr "Интихоби шрифт барои матни караоке."
+
+msgctxt "#36296"
+msgid "Select the size of the font used during karoake."
+msgstr "Интихоби андозаи шрифт барои матни караоке."
+
+msgctxt "#36297"
+msgid "Select the font colour used during karoake."
+msgstr "Интихоби ранги шрифт барои матни караоке."
+
+msgctxt "#36298"
+msgid "Select the character set used during karoake."
+msgstr "Интихоби рамзгузории шрифт барои матни караоке."
+
msgctxt "#36299"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9681,6 +11653,18 @@ msgctxt "#36305"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36306"
+msgid "If EXIF information exists (date, time, camera used, etc.), it will be displayed."
+msgstr "Ðамоиш додани иттилооти EXIF (Ñана, вақт, модели фотоаппарат ва ғайга) ба қадри имкон."
+
+msgctxt "#36307"
+msgid "Automatically generate picture thumbnails when entering picture folder."
+msgstr "Эҷод кардани ÑÑкизҳои Ñуратҳо ҳангоми кушодани ҷузвдон бо Ñуратҳо."
+
+msgctxt "#36308"
+msgid "Pictures will automatically rotate according to information in the EXIF tag, if found."
+msgstr "Давр занондани Ñуратҳо ба таври худкор мувофиқи иттилоот дар барчаÑпи EXIF."
+
msgctxt "#36310"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9689,6 +11673,18 @@ msgctxt "#36311"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36312"
+msgid "Select the amount of time that each image is displayed in a slideshow."
+msgstr "Интихоби фоÑилаи вақт барои намоиши ҳар Ñк Ñурат дар намоиши Ñлайдҳо."
+
+msgctxt "#36313"
+msgid "Images in a slideshow will pan and zoom while displayed."
+msgstr "ТаÑвирҳо дар намоиши Ñлайдҳо хурд ва калон карда мешаванд."
+
+msgctxt "#36314"
+msgid "View slideshow images in a random order."
+msgstr "Ðамоиш додани Ñлайдҳои таÑвирӣ бо тартиби таÑодуфӣ."
+
msgctxt "#36315"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9697,6 +11693,14 @@ msgctxt "#36316"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36317"
+msgid "Select up to three locations for which the weather can be displayed."
+msgstr "Шумо метавонед барои намоиши иттилооти пешгӯии обу ҳаво Ñе минтақаро интихоб намоед."
+
+msgctxt "#36318"
+msgid "Specify the default weather information source. See the Add-ons Manager for options."
+msgstr "Интихоб кардани манбаи пешфарз барои гирифтани иттилооти пешгӯии обу ҳаво. Хидматҳои даÑтраÑро дар мудири барномаҳои иловагӣ интихоб кунед."
+
msgctxt "#36319"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9705,10 +11709,18 @@ msgctxt "#36320"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36321"
+msgid "Display name of the XBMC installation when using various network services."
+msgstr "Ðоми намоишии наÑби ҷории XBMC барои иÑтифода дар хидматҳои шабакавии гуногун."
+
msgctxt "#36322"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36323"
+msgid "Enable the UPnP server. This will allow you to stream media to any UPnP client."
+msgstr "Фаъол кардани Ñервери UPnP. Имкон медиҳад, ки шумо тавонед ҷараёни мултимедиавиро ба ҳамаи муштариёни UPnP пахш кунед."
+
msgctxt "#36325"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9717,6 +11729,22 @@ msgctxt "#36327"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36329"
+msgid "Define the webserver port."
+msgstr "Порти Ñервери вебро ворид кунед."
+
+msgctxt "#36330"
+msgid "Define the webserver username."
+msgstr "Ðоми корбари Ñервери вебро ворид кунед."
+
+msgctxt "#36331"
+msgid "Define webserver password."
+msgstr "Пароли Ñервери вебро ворид кунед."
+
+msgctxt "#36332"
+msgid "Select between web interfaces installed via the Add-on Manager."
+msgstr "Интихоби интерфейÑҳои веби наÑбшуда таваÑÑути мудири барномаҳои иловагӣ."
+
msgctxt "#36333"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9733,6 +11761,10 @@ msgctxt "#36337"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36338"
+msgid "Allow programs on the network to control XBMC."
+msgstr "Иҷозати идоракунии XBMC ба воÑитаи барномаҳо аз шабакаи пайваÑтшуда."
+
msgctxt "#36339"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9789,6 +11821,14 @@ msgctxt "#36353"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36356"
+msgid "Eliminate vertical tearing."
+msgstr "Тоза кардани қатъҳои амудии кадрҳо."
+
+msgctxt "#36358"
+msgid "Test patterns for display hardware calibration."
+msgstr "Шаклвораҳои Ñанҷишӣ барои Ñанҷиши Ñахтафзории диÑплей."
+
msgctxt "#36359"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9797,6 +11837,10 @@ msgctxt "#36360"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36363"
+msgid "Boost AC3 streams that have been downmixed to 2 channels."
+msgstr "Ðфзудани баландии Ñадои роҳчаҳои AC3 ҳангоми омезиши шабака то Ñатҳи Ñтерео (2 шабака)."
+
msgctxt "#36365"
msgid "Select this option if your receiver is capable of decoding AC3 streams."
msgstr "Ин имконотро интихоб кунед, агар реÑивери шумо тавонад ҷараёнҳои AC3-ро рамзкушоӣ кунад."
@@ -9821,18 +11865,86 @@ msgctxt "#36375"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36378"
+msgid "Use a joystick to control XBMC."
+msgstr "Идора кардани XBMC ба воÑитаи ҷойÑтик."
+
msgctxt "#36379"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36380"
+msgid "If your internet connection uses a proxy, configure it here."
+msgstr "Ðгар шумо Интернетро таваÑÑути Ñервери прокÑи иÑтифода баред, танзимоти онро ин ҷо татбиқ кунед."
+
+msgctxt "#36381"
+msgid "Configure which proxy type is used."
+msgstr "Ðавъи Ñервери прокÑиро ворид кунед."
+
+msgctxt "#36382"
+msgid "Configure the proxy server address."
+msgstr "Суроғаи ÑÑервери прокÑиро ворид кунед."
+
+msgctxt "#36383"
+msgid "Configure the proxy server port."
+msgstr "Порти Ñервери прокÑиро ворид кунед."
+
+msgctxt "#36384"
+msgid "Configure the proxy server username."
+msgstr "Корбари Ñервери прокÑиро ворид кунед."
+
+msgctxt "#36385"
+msgid "Configure the proxy server password."
+msgstr "Пароли Ñервери прокÑиро ворид кунед."
+
+msgctxt "#36386"
+msgid "If you have limited bandwidth available, XBMC will try to keep within these limits."
+msgstr "Ðгар паҳноии канали шабака маҳдуд бошад, XBMC дар ҳудуди муайÑншуда иҷро карда шавад."
+
msgctxt "#36388"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36389"
+msgid "Define how long XBMC should idle before shutting down."
+msgstr "Интихоб кардани фоÑилаи вақти бефаъолиÑÑ‚ баъд аз оне, ки XBMC хомӯш карда мешавад."
+
+msgctxt "#36390"
+msgid "Define what action XBMC should do when it has been idle for a long period of time."
+msgstr "Ðмалеро, ки XBMC баъд аз мурури фоÑилаи вақти бефаъолиÑÑ‚ иҷро мекунад, интихоб намоед."
+
+msgctxt "#36391"
+msgid "Turn debug logging on or off. Useful for troubleshooting."
+msgstr "Фаъол ва хомӯш кардани қайди иÑлоҳи хатоҳо. Барои ҷуÑтуҷӯи нуқÑонҳо муфид аÑÑ‚."
+
msgctxt "#36392"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36393"
+msgid "Folder used to save screenshots taken within XBMC."
+msgstr "Ҷузвдон барои захира кардани Ñуратҳои Ñкрани гирифташуда ҳангоми иÑтифодаи XBMC."
+
+msgctxt "#36394"
+msgid "Specify additional libraries to be included in the debug log."
+msgstr "Китобхонаҳои иловагиеро. ки мехоҳед ба коркарди иÑлоҳи хтоҳо илова кунед, интихоб намоед."
+
+msgctxt "#36395"
+msgid "Open the Master Lock dialogue, where you can configure your Master Lock options."
+msgstr "Кушодани диалоги ҳамаи қалфҳои ÑиÑтема барои танзими имконоти амниÑти гуногун."
+
+msgctxt "#36396"
+msgid "Define the PIN code used for the master lock."
+msgstr "Ворид кардани рамзи PIN барои қулфи мудири амниÑÑ‚."
+
+msgctxt "#36397"
+msgid "If enabled, the master lock code is required to unlock XBMC on startup "
+msgstr "Ðгар фаъол кунед, рамзи PIN-и амниÑти умумӣ боÑд ҳангоми оғози кори XBMC ворид карда шавад"
+
+msgctxt "#36398"
+msgid "Define the maximum number of retries before XBMC is closed down."
+msgstr "Интихоби меъёри иҷрои кӯшишҳо пеш аз XBMC пӯшида мешавад."
+
msgctxt "#36399"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9901,6 +12013,10 @@ msgctxt "#36415"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36416"
+msgid "Define the Apple remote standard used."
+msgstr "Интихоби Ñтандарти пулти Apple."
+
msgctxt "#36417"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9909,14 +12025,114 @@ msgctxt "#36418"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36419"
+msgid "Define locations used for retrieving weather information."
+msgstr "Интихоби минтақаҳо барои гирифтани иттилооти обу ҳаво."
+
msgctxt "#36420"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36422"
+msgid "Enable hardware video decode using AMLogic decoder"
+msgstr "Фаъол кардани рамзгузори Ñахтафзории видеоӣ таваÑÑути рамзгузори AMLogic."
+
+msgctxt "#36500"
+msgid "Stereoscopic mode (current)"
+msgstr "Ҳолати ÑтереоÑкопӣ (ҷорӣ)"
+
+msgctxt "#36501"
+msgid "Stereoscopic mode"
+msgstr "Ҳолати ÑтереоÑкопӣ "
+
msgctxt "#36502"
msgid "None"
msgstr "Ҳеҷ"
+msgctxt "#36503"
+msgid "Over/Under"
+msgstr "Боло/Поён"
+
+msgctxt "#36504"
+msgid "Side by side"
+msgstr "Паҳлӯ ба паҳлӯ"
+
+msgctxt "#36505"
+msgid "Anaglyph Red/Cyan"
+msgstr "Ðнаглифи Ñурх/кабуд"
+
+msgctxt "#36506"
+msgid "Anaglyph Green/Magenta"
+msgstr "Ðнаглифи Ñабз/лоҷувард"
+
+msgctxt "#36507"
+msgid "Interlaced"
+msgstr "Омехта"
+
+msgctxt "#36508"
+msgid "Hardware Based"
+msgstr "Дар аÑоÑи Ñахтафзор"
+
+msgctxt "#36509"
+msgid "Monoscopic - 2D"
+msgstr "МоноÑкопӣ - 2D"
+
+msgctxt "#36520"
+msgid "Playback mode of stereoscopic videos"
+msgstr "Ҳолати пахшии видеои ÑтереоÑкопӣ"
+
+msgctxt "#36521"
+msgid "Ask me"
+msgstr "Маро пурÑед"
+
+msgctxt "#36522"
+msgid "Use preferred mode"
+msgstr "ИÑтифодаи ҳолати дӯÑтдошта"
+
+msgctxt "#36524"
+msgid "Preferred mode"
+msgstr "Ҳолати дӯÑтдошта"
+
+msgctxt "#36525"
+msgid "Same as movie (autodetect)"
+msgstr "Монанди филм (худмуайÑнкунӣ)"
+
+msgctxt "#36526"
+msgid "Disable stereoscopic mode when playback is stopped"
+msgstr "Ғайрифаъол кардани ҳолати ÑтереоÑкопӣ баъд аз таваққуфи пахш"
+
+msgctxt "#36527"
+msgid "This video is stereoscopic. Select playback mode"
+msgstr "Ин видео ÑтереоÑкопӣ мебошад. ҳолати пахшро интихоб намоед."
+
+msgctxt "#36528"
+msgid "Select stereoscopic mode"
+msgstr "Ҳолати ÑтереоÑкопиро интихоб намоед"
+
+msgctxt "#36529"
+msgid "Mono (2D)"
+msgstr "Моно (2D)"
+
+msgctxt "#36530"
+msgid "Preferred mode"
+msgstr "Ҳолати дӯÑтдошта"
+
+msgctxt "#36531"
+msgid "Select alternate mode..."
+msgstr "Интихоби ҳолати иловагӣ..."
+
+msgctxt "#36532"
+msgid "Same as movie"
+msgstr "Монанди филм"
+
+msgctxt "#36535"
+msgid "Stereoscopic mode of video"
+msgstr "Ҳолати видеои ÑтереоÑкопӣ"
+
+msgctxt "#36536"
+msgid "Stereoscopic mode inverted"
+msgstr "Ҳолати ÑтереоÑкопии акÑшуда"
+
msgctxt "#36537"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
@@ -9933,6 +12149,22 @@ msgctxt "#36540"
msgid "No info available yet."
msgstr "Ягон маълумот ҳоло даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚."
+msgctxt "#36541"
+msgid "Allows volume control from AirPlay clients."
+msgstr "Иҷозати идоракунии баландии Ñадо аз муштариёни AirPlay."
+
+msgctxt "#36542"
+msgid "Output to both analogue (headphones) and HDMI"
+msgstr "Барориши Ñклухт аз динамикҳои аналогӣ (гӯшмонакҳо) ва HDMI"
+
+msgctxt "#36544"
+msgid "Enable hardware decoding of video files."
+msgstr "Фаъол кардани рамзкушоии Ñахтафзорӣ барои файлҳои видеоӣ."
+
+msgctxt "#37000"
+msgid "(Visually Impaired)"
+msgstr "(Барои нобино)"
+
msgctxt "#37001"
msgid "(Directors Comments)"
msgstr "(Шарҳҳои коргардон)"
@@ -9953,6 +12185,26 @@ msgctxt "#37013"
msgid "(Directors Comments)"
msgstr "(Шарҳҳои коргардон)"
+msgctxt "#37014"
+msgid "Last used profile"
+msgstr "Профили иÑтифодашудаи охирин"
+
+msgctxt "#37015"
+msgid "Browse Into"
+msgstr "Тамошо кардани иттилоот"
+
msgctxt "#37016"
msgid "Select this option if your receiver is capable of decoding E-AC3 streams."
msgstr "Ин имконотро интихоб кунед, агар реÑивери шумо тавонад ҷараёнҳои E-AC3-ро рамзкушоӣ кунад."
+
+msgctxt "#37017"
+msgid "Dual audio output"
+msgstr "Барориши аудиои дукарата"
+
+msgctxt "#37018"
+msgid "Boost centre channel when downmixing"
+msgstr "Баландкунии Ñадои шабакаи марказӣ ҳангми омезиш"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Тугмаҳои ÑиÑтемавиро монанди \"printscreen\", \"alt-tab\" ва \"тугмаҳои баландии Ñадо\" дар Ñкрани пурра фаъол мекунад"
diff --git a/language/Tamil (India)/strings.po b/language/Tamil (India)/strings.po
index fbeb05683d..000df6e174 100644
--- a/language/Tamil (India)/strings.po
+++ b/language/Tamil (India)/strings.po
@@ -1181,6 +1181,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "சடà¯à®Ÿà®µà®¿à®•à®¿à®¤à®®à¯ மாறà¯à®±à¯à®¤à®²à¯"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "சரிசெயà¯à®¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
msgctxt "#340"
msgid "Various artists"
msgstr "பலà¯à®µà¯‡à®±à¯ கலைஞரà¯à®•à®³à¯"
@@ -3437,6 +3441,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "மீடà¯à®Ÿà®®à¯ˆ"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "நிலையான"
+
msgctxt "#10042"
msgid "Are you sure you want to reset the settings in this category?"
msgstr "நீஙà¯à®•à®³à¯ இநà¯à®¤ பிரிவின௠அமைபà¯à®ªà¯à®•à®³à¯ˆ மீடà¯à®Ÿà®®à¯ˆà®•à¯à®• வேணà¯à®Ÿà¯à®®à®¾?"
diff --git a/language/Thai/strings.po b/language/Thai/strings.po
index 9f6c12a7fa..efa64f1f75 100644
--- a/language/Thai/strings.po
+++ b/language/Thai/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "à¹à¸›à¸¥à¸‡ เฟรมเรต"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "คงที่"
+
msgctxt "#340"
msgid "Various artists"
msgstr "ศิลปิน"
@@ -3485,6 +3489,10 @@ msgctxt "#10035"
msgid "Reset"
msgstr "คืนค่า"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "มาตรà¸à¸²à¸™"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "สืบค้น ส่วนเสริม"
diff --git a/language/Turkish/strings.po b/language/Turkish/strings.po
index 45bebd4637..0b978e8c12 100644
--- a/language/Turkish/strings.po
+++ b/language/Turkish/strings.po
@@ -1189,6 +1189,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Çerçeve hızı çeviricisi"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Sabit"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Çeşitli sanatçılar"
@@ -2921,6 +2925,10 @@ msgctxt "#1043"
msgid "Program Add-ons"
msgstr "Program Eklentileri"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Eklenti küçük resmini ayarla"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Eklenti ayarları"
@@ -3485,6 +3493,22 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Sıfırla"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Temel"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standart"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "GeliÅŸmiÅŸ"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Uzman"
+
msgctxt "#10040"
msgid "Add-on browser"
msgstr "Eklenti tarayıcısı"
@@ -4981,6 +5005,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f Saniye"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Dakika"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Dakika"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Apple kumanda"
@@ -5665,6 +5697,10 @@ msgctxt "#16105"
msgid "Edit title"
msgstr "Başlığı düzenle"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Yönet..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Sıralama başlığını düzenle"
@@ -6209,6 +6245,10 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Uyarı"
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Sağlayıcı"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Lütfen başka kanala geçiniz."
@@ -6657,6 +6697,10 @@ msgctxt "#19222"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19223"
+msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
+msgstr "PVR eklentisi etkin olmayabilir. Ayarlarınızı veya daha fazla bilgi için günlük dosyasını kontrol edin."
+
msgctxt "#19224"
msgid "Recording aborted"
msgstr "Kayıt durduruldu"
@@ -6697,6 +6741,10 @@ msgctxt "#19233"
msgid "Display a notification on timer updates"
msgstr "Zamanlayıcı güncellemelerinde bildirim göster"
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Arka uç kanal numaralarını kullan (sadece 1 tane etkin PVR eklentisi ile çalışır)"
+
msgctxt "#19235"
msgid "PVR manager is starting up"
msgstr "PVR yöneticisi başlatılıyor"
@@ -6717,6 +6765,10 @@ msgctxt "#19239"
msgid "Starting background threads"
msgstr "Arka plan iş parçacıkları başlatılıyor"
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Hiçbir PVR eklentisi etkin değil"
+
msgctxt "#19241"
msgid "The PVR manager has been enabled without any"
msgstr "PVR yöneticisi hiçbir PVR eklentisi olmadan"
@@ -6833,6 +6885,10 @@ msgctxt "#19270"
msgid "* All recordings"
msgstr "* Bütün kayıtlar"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Hiçbir PVR eklentisi bulunamadı"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "PVR'yi kullanabilmek için tv tarayıcısı, arka uç yazılımı"
@@ -9821,6 +9877,10 @@ msgctxt "#24045"
msgid "Add-on does not have the correct structure"
msgstr "Eklenti doğru bir yapıya sahip değil"
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Bu eklenti kaldırılamaz"
+
msgctxt "#24048"
msgid "Rollback"
msgstr "Geri alma"
@@ -9929,6 +9989,10 @@ msgctxt "#24090"
msgid "Lock Add-on manager"
msgstr "Eklenti yöneticisini kilitle"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Bu eklenti devre dışı bırakılamaz"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(geçerli)"
@@ -9965,6 +10029,22 @@ msgctxt "#24103"
msgid "Skin is missing some files"
msgstr "Bazı dış görünüm dosyaları eksik"
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d altyazı bulundu"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Altyazı bulunamadı"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Altyazılar indiriliyor..."
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Altyazıları film klasörüne kaydet"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Bildirimler"
@@ -10069,6 +10149,10 @@ msgctxt "#33016"
msgid "Clips"
msgstr "Klipler"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Etkinleştirmek için eklentiyi yeniden başlat"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Bu Gece"
@@ -10405,6 +10489,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Hiçbir zaman"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Çalınacak sonraki öğeyi bulamıyor"
diff --git a/language/Ukrainian/strings.po b/language/Ukrainian/strings.po
index 5edde56024..7bc516cfa3 100644
--- a/language/Ukrainian/strings.po
+++ b/language/Ukrainian/strings.po
@@ -1165,6 +1165,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‡Ð°Ñтоти кадрів"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "ФікÑоване"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Різноманітні виконавці"
@@ -3345,6 +3349,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ - Профілі"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Стандартний"
+
msgctxt "#10043"
msgid "Help"
msgstr "Допомога"
diff --git a/language/Vietnamese/strings.po b/language/Vietnamese/strings.po
index c14e90ace7..b6923b98c2 100644
--- a/language/Vietnamese/strings.po
+++ b/language/Vietnamese/strings.po
@@ -3217,6 +3217,10 @@ msgctxt "#10034"
msgid "Settings - Profiles"
msgstr "Cài đặt - Tài khoản"
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Chuẩn"
+
msgctxt "#10131"
msgid "Lock settings"
msgstr "Khóa cài đặt"
diff --git a/language/Welsh/strings.po b/language/Welsh/strings.po
index 5a502719db..9b84e5e3b9 100644
--- a/language/Welsh/strings.po
+++ b/language/Welsh/strings.po
@@ -1185,6 +1185,10 @@ msgctxt "#336"
msgid "Framerate conversion"
msgstr "Trosi'r raddfa fframiau"
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Sefydlog"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Artistiaid amrywiol"
@@ -1265,6 +1269,10 @@ msgctxt "#363"
msgid "Sort by: File"
msgstr "Trefnu: Ffeil"
+msgctxt "#364"
+msgid "Dolby Digital (AC3) capable receiver"
+msgstr "Derbynnydd Dolby Digital (AC3) galluog"
+
msgctxt "#365"
msgid "Sort by: Name"
msgstr "Trefnu: Enw"
@@ -3385,6 +3393,22 @@ msgctxt "#10035"
msgid "Reset"
msgstr "Ailosod"
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Sylfaenol"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Safonnol"
+
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Uwch"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Arbenigwr"
+
msgctxt "#10043"
msgid "Help"
msgstr "Cymorth"
@@ -3393,6 +3417,10 @@ msgctxt "#10044"
msgid "No help available"
msgstr "Dim cymorth ar gael"
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Dim categorïau ar gael"
+
msgctxt "#10126"
msgid "File browser"
msgstr "Porwr ffeiliau"
@@ -4725,6 +4753,14 @@ msgctxt "#13553"
msgid "%.1f Seconds"
msgstr "%.1f Eiliad"
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Munud"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Munud"
+
msgctxt "#13600"
msgid "Apple remote"
msgstr "Rheolwr Pell Apple"
@@ -5921,6 +5957,14 @@ msgctxt "#19098"
msgid "Warning"
msgstr "Rhybudd"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Gwasanaeth"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Darparwr"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "Newidiwch i sianel arall."
@@ -8737,6 +8781,10 @@ msgctxt "#21457"
msgid "Watched episode count"
msgstr "Cyfrif rhifyn gwyliwyd"
+msgctxt "#21458"
+msgid "Group by"
+msgstr "Grwpio yn ôl"
+
msgctxt "#21460"
msgid "Subtitle location"
msgstr "Lleoliad isdeitlau"
@@ -9941,6 +9989,14 @@ msgctxt "#34005"
msgid "Flac"
msgstr "Flac"
+msgctxt "#34006"
+msgid "MPEG-4 Audio (FFmpeg M4A AAC)"
+msgstr "Sain MPEG-4 (FFmpeg M4A AAC)"
+
+msgctxt "#34007"
+msgid "Windows Media Audio 2 (FFmpeg wmav2)"
+msgstr "Sain Windows Media 2 (FFmpeg wmav2)"
+
msgctxt "#34100"
msgid "Speaker Configuration"
msgstr "Ffurfweddu Seinydd"
@@ -10001,6 +10057,26 @@ msgctxt "#34123"
msgid "Never"
msgstr "Byth"
+msgctxt "#34124"
+msgid "44.1"
+msgstr "44.1"
+
+msgctxt "#34125"
+msgid "48.0"
+msgstr "48.0"
+
+msgctxt "#34126"
+msgid "88.2"
+msgstr "88.2"
+
+msgctxt "#34127"
+msgid "96.0"
+msgstr "96.0"
+
+msgctxt "#34128"
+msgid "192.0"
+msgstr "192.0"
+
msgctxt "#34201"
msgid "Can't find a next item to play"
msgstr "Methu canfod yr eitem nesaf i'w chwarae"
diff --git a/project/VS2010Express/XBMC.vcxproj b/project/VS2010Express/XBMC.vcxproj
index a7630098f5..96cf3ce51a 100644
--- a/project/VS2010Express/XBMC.vcxproj
+++ b/project/VS2010Express/XBMC.vcxproj
@@ -1130,6 +1130,7 @@
<ClInclude Include="..\..\xbmc\utils\LegacyPathTranslation.h" />
<ClInclude Include="..\..\xbmc\utils\RssManager.h" />
<ClInclude Include="..\..\xbmc\utils\StringValidation.h" />
+ <ClInclude Include="..\..\xbmc\utils\Utf8Utils.h" />
<ClInclude Include="..\..\xbmc\utils\uXstrings.h" />
<ClInclude Include="..\..\xbmc\utils\Vector.h" />
<ClInclude Include="..\..\xbmc\video\FFmpegVideoDecoder.h" />
@@ -1281,6 +1282,7 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">true</ExcludedFromBuild>
</ClCompile>
+ <ClCompile Include="..\..\xbmc\utils\Utf8Utils.cpp" />
<ClCompile Include="..\..\xbmc\utils\Vector.cpp" />
<ClCompile Include="..\..\xbmc\video\PlayerController.cpp" />
<ClCompile Include="..\..\xbmc\video\VideoThumbLoader.cpp" />
@@ -2911,4 +2913,4 @@
</VisualStudio>
</ProjectExtensions>
<Import Project="$(SolutionDir)\$(ProjectFileName).targets.user" Condition="Exists('$(SolutionDir)\$(ProjectFileName).targets.user')" />
-</Project>
+</Project> \ No newline at end of file
diff --git a/project/VS2010Express/XBMC.vcxproj.filters b/project/VS2010Express/XBMC.vcxproj.filters
index 6fd0457673..d35c0055ae 100644
--- a/project/VS2010Express/XBMC.vcxproj.filters
+++ b/project/VS2010Express/XBMC.vcxproj.filters
@@ -3104,6 +3104,9 @@
<ClCompile Include="..\..\xbmc\listproviders\StaticProvider.cpp">
<Filter>listproviders</Filter>
</ClCompile>
+ <ClCompile Include="..\..\xbmc\utils\Utf8Utils.cpp">
+ <Filter>utils</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\xbmc\win32\pch.h">
@@ -6097,6 +6100,9 @@
<ClInclude Include="..\..\xbmc\listproviders\StaticProvider.h">
<Filter>listproviders</Filter>
</ClInclude>
+ <ClInclude Include="..\..\xbmc\utils\Utf8Utils.h">
+ <Filter>utils</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc">
@@ -6126,4 +6132,4 @@
<Filter>interfaces\swig</Filter>
</None>
</ItemGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/system/settings/settings.xml b/system/settings/settings.xml
index f224c7073e..4b69b388a4 100644
--- a/system/settings/settings.xml
+++ b/system/settings/settings.xml
@@ -2127,7 +2127,12 @@
<control type="button" format="action" />
</setting>
<setting id="videoscreen.testpattern" type="action" label="226" help="36358">
- <requirement>HAS_GL</requirement>
+ <requirement>
+ <or>
+ <condition>HAS_GL</condition>
+ <condition>HAS_DX</condition>
+ </or>
+ </requirement>
<level>1</level>
<control type="button" format="action" />
</setting>
diff --git a/tools/android/packaging/xbmc/AndroidManifest.xml b/tools/android/packaging/xbmc/AndroidManifest.xml
index bd7766f06d..5ecbc96f38 100644
--- a/tools/android/packaging/xbmc/AndroidManifest.xml
+++ b/tools/android/packaging/xbmc/AndroidManifest.xml
@@ -2,8 +2,8 @@
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.xbmc.xbmc"
- android:versionCode="16"
- android:versionName="13.0-ALPHA10" >
+ android:versionCode="17"
+ android:versionName="13.0-ALPHA11" >
<!-- This is the platform API where NativeActivity was introduced. -->
<uses-sdk android:minSdkVersion="14" />
diff --git a/tools/android/packaging/xbmc/src/org/xbmc/xbmc/Main.java b/tools/android/packaging/xbmc/src/org/xbmc/xbmc/Main.java
index a94f9254ad..35ad6084ed 100644
--- a/tools/android/packaging/xbmc/src/org/xbmc/xbmc/Main.java
+++ b/tools/android/packaging/xbmc/src/org/xbmc/xbmc/Main.java
@@ -3,10 +3,12 @@ package org.xbmc.xbmc;
import android.app.NativeActivity;
import android.content.Intent;
import android.os.Bundle;
+import android.util.Log;
public class Main extends NativeActivity
{
native void _onNewIntent(Intent intent);
+
public Main()
{
super();
@@ -22,7 +24,11 @@ public class Main extends NativeActivity
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
- _onNewIntent(intent);
+ try {
+ _onNewIntent(intent);
+ } catch (UnsatisfiedLinkError e) {
+ Log.e("Main", "Native not registered");
+ }
}
}
diff --git a/tools/android/packaging/xbmc/src/org/xbmc/xbmc/XBMCBroadcastReceiver.java b/tools/android/packaging/xbmc/src/org/xbmc/xbmc/XBMCBroadcastReceiver.java
index a3c7886de4..93e37a43de 100644
--- a/tools/android/packaging/xbmc/src/org/xbmc/xbmc/XBMCBroadcastReceiver.java
+++ b/tools/android/packaging/xbmc/src/org/xbmc/xbmc/XBMCBroadcastReceiver.java
@@ -13,6 +13,10 @@ public class XBMCBroadcastReceiver extends BroadcastReceiver
public void onReceive(Context context, Intent intent)
{
Log.d("XBMCBroadcastReceiver", "Received Intent");
- _onReceive(intent);
+ try {
+ _onReceive(intent);
+ } catch (UnsatisfiedLinkError e) {
+ Log.e("XBMCBroadcastReceiver", "Native not registered");
+ }
}
}
diff --git a/tools/darwin/packaging/xbmc-atv2/mkdeb-xbmc-atv2.sh b/tools/darwin/packaging/xbmc-atv2/mkdeb-xbmc-atv2.sh
index ae6e313bfd..2e29bdd05e 100755
--- a/tools/darwin/packaging/xbmc-atv2/mkdeb-xbmc-atv2.sh
+++ b/tools/darwin/packaging/xbmc-atv2/mkdeb-xbmc-atv2.sh
@@ -45,7 +45,7 @@ fi
PACKAGE=org.xbmc.xbmc-atv2
VERSION=13.0
-REVISION=0~alpha10
+REVISION=0~alpha11
ARCHIVE=${PACKAGE}_${VERSION}-${REVISION}_iphoneos-arm.deb
echo Creating $PACKAGE package version $VERSION revision $REVISION
diff --git a/tools/darwin/packaging/xbmc-ios/mkdeb-xbmc-ios.sh b/tools/darwin/packaging/xbmc-ios/mkdeb-xbmc-ios.sh
index 960dd317fa..846b306716 100755
--- a/tools/darwin/packaging/xbmc-ios/mkdeb-xbmc-ios.sh
+++ b/tools/darwin/packaging/xbmc-ios/mkdeb-xbmc-ios.sh
@@ -46,7 +46,7 @@ fi
PACKAGE=org.xbmc.xbmc-ios
VERSION=13.0
-REVISION=0~alpha10
+REVISION=0~alpha11
ARCHIVE=${PACKAGE}_${VERSION}-${REVISION}_iphoneos-arm.deb
echo Creating $PACKAGE package version $VERSION revision $REVISION
diff --git a/tools/darwin/packaging/xbmc-osx/mkdmg-xbmc-osx.sh b/tools/darwin/packaging/xbmc-osx/mkdmg-xbmc-osx.sh
index 36d68ab748..d8ead6a033 100755
--- a/tools/darwin/packaging/xbmc-osx/mkdmg-xbmc-osx.sh
+++ b/tools/darwin/packaging/xbmc-osx/mkdmg-xbmc-osx.sh
@@ -25,7 +25,7 @@ ARCHITECTURE=`file $XBMC/Contents/MacOS/XBMC | awk '{print $NF}'`
PACKAGE=org.xbmc.xbmc-osx
VERSION=13.0
-REVISION=0~alpha10
+REVISION=0~alpha11
ARCHIVE=${PACKAGE}_${VERSION}-${REVISION}_macosx-intel-${ARCHITECTURE}
echo Creating $PACKAGE package version $VERSION revision $REVISION
diff --git a/tools/depends/native/pcre-native/Makefile b/tools/depends/native/pcre-native/Makefile
index 2dc2c2bcfc..34b07540a6 100644
--- a/tools/depends/native/pcre-native/Makefile
+++ b/tools/depends/native/pcre-native/Makefile
@@ -5,12 +5,15 @@ DEPS= ../../Makefile.include.in Makefile
# lib name, version
LIBNAME=pcre
-VERSION=7.9
+VERSION=8.33
SOURCE=$(LIBNAME)-$(VERSION)
ARCHIVE=$(SOURCE).tar.gz
# configuration settings
-CONFIGURE=./configure --prefix=$(PREFIX) --disable-cpp --disable-shared
+CONFIGURE=./configure --prefix=$(PREFIX) --disable-cpp \
+ --disable-shared --disable-stack-for-recursion \
+ --enable-pcre8 --disable-pcre16 --disable-pcre32 \
+ --enable-jit --enable-utf --enable-unicode-properties
LIBDYLIB=$(PLATFORM)/.libs/lib$(LIBNAME).so
diff --git a/tools/depends/target/pcre/Makefile b/tools/depends/target/pcre/Makefile
index 730453dd2c..141573493d 100644
--- a/tools/depends/target/pcre/Makefile
+++ b/tools/depends/target/pcre/Makefile
@@ -3,12 +3,16 @@ DEPS= ../../Makefile.include Makefile
# lib name, version
LIBNAME=pcre
-VERSION=7.9
+VERSION=8.33
SOURCE=$(LIBNAME)-$(VERSION)
ARCHIVE=$(SOURCE).tar.gz
# configuration settings
-CONFIGURE=cp -f $(CONFIG_SUB) $(CONFIG_GUESS) .; ./configure --prefix=$(PREFIX) --disable-stack-for-recursion --disable-shared
+CONFIGURE=cp -f $(CONFIG_SUB) $(CONFIG_GUESS) .; ./configure --prefix=$(PREFIX) \
+ --disable-shared --disable-stack-for-recursion \
+ --enable-pcre8 --disable-pcre16 --disable-pcre32 \
+ --enable-jit --enable-utf --enable-unicode-properties \
+ --enable-newline-is-anycrlf
LIBDYLIB=$(PLATFORM)/.libs/lib$(LIBNAME).a
diff --git a/userdata/RssFeeds.xml b/userdata/RssFeeds.xml
index 0d853397f5..6169113ea5 100644
--- a/userdata/RssFeeds.xml
+++ b/userdata/RssFeeds.xml
@@ -4,5 +4,7 @@
<!-- To use different sets in your skin, each must be called from skin with a unique id. !-->
<set id="1">
<feed updateinterval="30">http://feeds.xbmc.org/xbmc</feed>
+ <feed updateinterval="30">http://feeds.xbmc.org/latest_xbmc_addons</feed>
+ <feed updateinterval="30">http://feeds.xbmc.org/updated_xbmc_addons</feed>
</set>
</rssfeeds>
diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
index 240bbecf4a..8e7f7a3ac2 100644
--- a/xbmc/Application.cpp
+++ b/xbmc/Application.cpp
@@ -1723,11 +1723,8 @@ bool CApplication::OnSettingUpdate(CSetting* &setting, const char *oldSettingId,
}
else if (settingId == "videoplayer.usestagefright")
{
- if (CAndroidFeatures::GetVersion() >= 19)
- {
- CSettingBool *usestagefright = (CSettingBool*)setting;
- usestagefright->SetValue(false);
- }
+ CSettingBool *usestagefright = (CSettingBool*)setting;
+ usestagefright->SetValue(false);
}
#endif
@@ -3185,8 +3182,8 @@ bool CApplication::ProcessEventServer(float frameTime)
newEvent.motion.yrel = 0;
newEvent.motion.state = 0;
newEvent.motion.which = 0x10; // just a different value to distinguish between mouse and event client device.
- newEvent.motion.x = pos.x;
- newEvent.motion.y = pos.y;
+ newEvent.motion.x = (uint16_t)pos.x;
+ newEvent.motion.y = (uint16_t)pos.y;
OnEvent(newEvent); // had to call this to update g_Mouse position
return OnAction(CAction(ACTION_MOUSE_MOVE, pos.x, pos.y));
}
diff --git a/xbmc/ApplicationPlayer.cpp b/xbmc/ApplicationPlayer.cpp
index b3a770ea60..1dd8df6eeb 100644
--- a/xbmc/ApplicationPlayer.cpp
+++ b/xbmc/ApplicationPlayer.cpp
@@ -280,33 +280,6 @@ int64_t CApplicationPlayer::GetTime() const
return 0;
}
-int CApplicationPlayer::GetPictureHeight()
-{
- boost::shared_ptr<IPlayer> player = GetInternal();
- if (player)
- return player->GetPictureHeight();
- else
- return 0;
-}
-
-int CApplicationPlayer::GetPictureWidth()
-{
- boost::shared_ptr<IPlayer> player = GetInternal();
- if (player)
- return player->GetPictureWidth();
- else
- return 0;
-}
-
-int CApplicationPlayer::GetSampleRate()
-{
- boost::shared_ptr<IPlayer> player = GetInternal();
- if (player)
- return player->GetSampleRate();
- else
- return 0;
-}
-
bool CApplicationPlayer::IsCaching() const
{
boost::shared_ptr<IPlayer> player = GetInternal();
@@ -343,15 +316,6 @@ int CApplicationPlayer::GetSubtitleCount()
return 0;
}
-int CApplicationPlayer::GetBitsPerSample()
-{
- boost::shared_ptr<IPlayer> player = GetInternal();
- if (player)
- return player->GetBitsPerSample();
- else
- return 0;
-}
-
int CApplicationPlayer::GetAudioStream()
{
boost::shared_ptr<IPlayer> player = GetInternal();
diff --git a/xbmc/ApplicationPlayer.h b/xbmc/ApplicationPlayer.h
index a44c0a9edf..212389f06a 100644
--- a/xbmc/ApplicationPlayer.h
+++ b/xbmc/ApplicationPlayer.h
@@ -84,7 +84,6 @@ public:
int GetAudioStream();
int GetAudioStreamCount();
void GetAudioStreamInfo(int index, SPlayerAudioStreamInfo &info);
- int GetBitsPerSample();
int GetCacheLevel() const;
float GetCachePercentage() const;
int GetChapterCount();
@@ -94,12 +93,9 @@ public:
void GetDeinterlaceModes(std::vector<int> &deinterlaceModes);
void GetGeneralInfo( CStdString& strVideoInfo);
float GetPercentage() const;
- int GetPictureHeight();
- int GetPictureWidth();
CStdString GetPlayerState();
CStdString GetPlayingTitle();
void GetRenderFeatures(std::vector<int> &renderFeatures);
- int GetSampleRate();
void GetScalingMethods(std::vector<int> &scalingMethods);
bool GetStreamDetails(CStreamDetails &details);
int GetSubtitle();
diff --git a/xbmc/FileItem.cpp b/xbmc/FileItem.cpp
index f58309b09a..f734222704 100644
--- a/xbmc/FileItem.cpp
+++ b/xbmc/FileItem.cpp
@@ -1543,6 +1543,40 @@ void CFileItem::SetFromSong(const CSong &song)
FillInMimeType(false);
}
+std::string CFileItem::GetOpticalMediaPath() const
+{
+ std::string path;
+ std::string dvdPath;
+ path = URIUtils::AddFileToFolder(GetPath(), "VIDEO_TS.IFO");
+ if (CFile::Exists(path))
+ dvdPath = path;
+ else
+ {
+ dvdPath = URIUtils::AddFileToFolder(GetPath(), "VIDEO_TS");
+ path = URIUtils::AddFileToFolder(dvdPath, "VIDEO_TS.IFO");
+ dvdPath.clear();
+ if (CFile::Exists(path))
+ dvdPath = path;
+ }
+#ifdef HAVE_LIBBLURAY
+ if (dvdPath.empty())
+ {
+ path = URIUtils::AddFileToFolder(GetPath(), "index.bdmv");
+ if (CFile::Exists(path))
+ dvdPath = path;
+ else
+ {
+ dvdPath = URIUtils::AddFileToFolder(GetPath(), "BDMV");
+ path = URIUtils::AddFileToFolder(dvdPath, "index.bdmv");
+ dvdPath.clear();
+ if (CFile::Exists(path))
+ dvdPath = path;
+ }
+ }
+#endif
+ return dvdPath;
+}
+
/////////////////////////////////////////////////////////////////////////////////
/////
///// CFileItemList
@@ -2359,35 +2393,8 @@ void CFileItemList::StackFolders()
// check for dvd folders
if (!bMatch)
{
- CStdString path;
- CStdString dvdPath;
- path = URIUtils::AddFileToFolder(item->GetPath(), "VIDEO_TS.IFO");
- if (CFile::Exists(path))
- dvdPath = path;
- else
- {
- dvdPath = URIUtils::AddFileToFolder(item->GetPath(), "VIDEO_TS");
- path = URIUtils::AddFileToFolder(dvdPath, "VIDEO_TS.IFO");
- dvdPath.clear();
- if (CFile::Exists(path))
- dvdPath = path;
- }
-#ifdef HAVE_LIBBLURAY
- if (dvdPath.empty())
- {
- path = URIUtils::AddFileToFolder(item->GetPath(), "index.bdmv");
- if (CFile::Exists(path))
- dvdPath = path;
- else
- {
- dvdPath = URIUtils::AddFileToFolder(item->GetPath(), "BDMV");
- path = URIUtils::AddFileToFolder(dvdPath, "index.bdmv");
- dvdPath.clear();
- if (CFile::Exists(path))
- dvdPath = path;
- }
- }
-#endif
+ std::string dvdPath = item->GetOpticalMediaPath();
+
if (!dvdPath.empty())
{
// NOTE: should this be done for the CD# folders too?
diff --git a/xbmc/FileItem.h b/xbmc/FileItem.h
index 4113dba762..43b202283b 100644
--- a/xbmc/FileItem.h
+++ b/xbmc/FileItem.h
@@ -120,6 +120,14 @@ public:
bool Exists(bool bUseCache = true) const;
/*!
+ \brief Check whether an item is an optical media folder or its parent.
+ This will return the non-empty path to the playable entry point of the media
+ one or two levels down (VIDEO_TS.IFO for DVDs or index.bdmv for BDs).
+ The returned path will be empty if folder does not meet this criterion.
+ \return non-empty string if item is optical media folder, empty otherwise.
+ */
+ std::string GetOpticalMediaPath() const;
+ /*!
\brief Check whether an item is a video item. Note that this returns true for
anything with a video info tag, so that may include eg. folders.
\return true if item is video, false otherwise.
diff --git a/xbmc/GUIInfoManager.cpp b/xbmc/GUIInfoManager.cpp
index 4a59f4ea46..2f3ad2f649 100644
--- a/xbmc/GUIInfoManager.cpp
+++ b/xbmc/GUIInfoManager.cpp
@@ -1588,7 +1588,10 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow, CStdString *fa
break;
case VIDEOPLAYER_VIDEO_RESOLUTION:
if(g_application.m_pPlayer->IsPlaying())
- return CStreamDetails::VideoDimsToResolutionDescription(g_application.m_pPlayer->GetPictureWidth(), g_application.m_pPlayer->GetPictureHeight());
+ {
+ UpdateAVInfo();
+ return CStreamDetails::VideoDimsToResolutionDescription(m_videoInfo.width, m_videoInfo.height);
+ }
break;
case VIDEOPLAYER_AUDIO_CODEC:
if(g_application.m_pPlayer->IsPlaying())
@@ -3620,20 +3623,16 @@ CStdString CGUIInfoManager::GetMusicLabel(int item)
case MUSICPLAYER_BITSPERSAMPLE:
{
CStdString strBitsPerSample = "";
- if (g_application.m_pPlayer->GetBitsPerSample() > 0)
- {
- strBitsPerSample = StringUtils::Format("%i", g_application.m_pPlayer->GetBitsPerSample());
- }
+ if (m_audioInfo.bitspersample > 0)
+ strBitsPerSample = StringUtils::Format("%i", m_audioInfo.bitspersample);
return strBitsPerSample;
}
break;
case MUSICPLAYER_SAMPLERATE:
{
CStdString strSampleRate = "";
- if (g_application.m_pPlayer->GetSampleRate() > 0)
- {
- strSampleRate = StringUtils::Format("%.5g", ((double)g_application.m_pPlayer->GetSampleRate() / 1000.0));
- }
+ if (m_audioInfo.samplerate > 0)
+ strSampleRate = StringUtils::Format("%.5g", ((double)m_audioInfo.samplerate / 1000.0));
return strSampleRate;
}
break;
diff --git a/xbmc/GUIInfoManager.h b/xbmc/GUIInfoManager.h
index 8a9d6294cb..ab9a4615b1 100644
--- a/xbmc/GUIInfoManager.h
+++ b/xbmc/GUIInfoManager.h
@@ -498,7 +498,7 @@ namespace INFO
#define VERSION_MAJOR 13
#define VERSION_MINOR 0
-#define VERSION_TAG "-ALPHA10"
+#define VERSION_TAG "-ALPHA11"
#define LISTITEM_START 35000
#define LISTITEM_THUMB (LISTITEM_START)
diff --git a/xbmc/LangInfo.cpp b/xbmc/LangInfo.cpp
index ed3e6a076f..2222a759ae 100644
--- a/xbmc/LangInfo.cpp
+++ b/xbmc/LangInfo.cpp
@@ -483,7 +483,10 @@ const CStdString& CLangInfo::GetAudioLanguage() const
void CLangInfo::SetAudioLanguage(const std::string& language)
{
- if (language.empty() || StringUtils::EqualsNoCase(language, "default") || !g_LangCodeExpander.ConvertToThreeCharCode(m_audioLanguage, language))
+ if (language.empty()
+ || StringUtils::EqualsNoCase(language, "default")
+ || StringUtils::EqualsNoCase(language, "original")
+ || !g_LangCodeExpander.ConvertToThreeCharCode(m_audioLanguage, language))
m_audioLanguage.clear();
}
@@ -498,7 +501,10 @@ const CStdString& CLangInfo::GetSubtitleLanguage() const
void CLangInfo::SetSubtitleLanguage(const std::string& language)
{
- if (language.empty() || StringUtils::EqualsNoCase(language, "default") || !g_LangCodeExpander.ConvertToThreeCharCode(m_subtitleLanguage, language))
+ if (language.empty()
+ || StringUtils::EqualsNoCase(language, "default")
+ || StringUtils::EqualsNoCase(language, "original")
+ || !g_LangCodeExpander.ConvertToThreeCharCode(m_subtitleLanguage, language))
m_subtitleLanguage.clear();
}
diff --git a/xbmc/Temperature.cpp b/xbmc/Temperature.cpp
index 98b9ebc84c..240af9dd06 100644
--- a/xbmc/Temperature.cpp
+++ b/xbmc/Temperature.cpp
@@ -483,7 +483,7 @@ double CTemperature::ToLocale() const
}
// Returns temperature as localized string
-CStdString CTemperature::ToString() const
+std::string CTemperature::ToString() const
{
if (!IsValid())
return g_localizeStrings.Get(13205); // "Unknown"
diff --git a/xbmc/Temperature.h b/xbmc/Temperature.h
index 6c3fe72684..88ae4da92b 100644
--- a/xbmc/Temperature.h
+++ b/xbmc/Temperature.h
@@ -19,6 +19,7 @@
*
*/
+#include <string>
#include "utils/Archive.h"
class CTemperature : public IArchivable
@@ -95,7 +96,7 @@ public:
double ToNewton() const;
double ToLocale() const;
- CStdString ToString() const;
+ std::string ToString() const;
protected:
CTemperature(double value);
diff --git a/xbmc/URL.cpp b/xbmc/URL.cpp
index cb07d38e7f..99fc6c2042 100644
--- a/xbmc/URL.cpp
+++ b/xbmc/URL.cpp
@@ -336,8 +336,7 @@ void CURL::Parse(const CStdString& strURL1)
if(URIUtils::ProtocolHasEncodedHostname(m_strProtocol))
{
Decode(m_strHostName);
- // Validate it as it is likely to contain a filename
- SetHostName(CUtil::ValidatePath(m_strHostName));
+ SetHostName(m_strHostName);
}
Decode(m_strUserName);
diff --git a/xbmc/Util.cpp b/xbmc/Util.cpp
index bf9f864780..ae6eaa6a0f 100644
--- a/xbmc/Util.cpp
+++ b/xbmc/Util.cpp
@@ -1154,6 +1154,9 @@ int CUtil::GetMatchingSource(const CStdString& strPath1, VECSOURCES& VECSOURCES,
// Check for special protocols
CURL checkURL(strPath);
+ if (StringUtils::StartsWith(strPath, "special://skin/"))
+ return 1;
+
// stack://
if (checkURL.GetProtocol() == "stack")
strPath.erase(0, 8); // remove the stack protocol
@@ -1207,7 +1210,7 @@ int CUtil::GetMatchingSource(const CStdString& strPath1, VECSOURCES& VECSOURCES,
if (!URIUtils::HasSlashAtEnd(strDest))
strDest += "/";
- size_t iLength = std::string::npos;
+ size_t iLength = 0;
size_t iLenPath = strDest.size();
for (int i = 0; i < (int)VECSOURCES.size(); ++i)
{
@@ -2154,26 +2157,26 @@ void CUtil::GetExternalStreamDetailsFromFilename(const CStdString& strVideo, con
continue;
}
}
- if (info.flag == 0x1111)
+
+ // try to recognize a flag
+ std::string flag_tmp(*it);
+ StringUtils::ToLower(flag_tmp);
+ if (!flag_tmp.compare("none"))
{
- std::string flag_tmp(*it);
- StringUtils::ToLower(flag_tmp);
- if (!flag_tmp.compare("none"))
- {
- info.flag = CDemuxStream::FLAG_NONE;
- continue;
- }
- else if (!flag_tmp.compare("default"))
- {
- info.flag = CDemuxStream::FLAG_DEFAULT;
- continue;
- }
- else if (!flag_tmp.compare("forced"))
- {
- info.flag = CDemuxStream::FLAG_FORCED;
- continue;
- }
+ info.flag |= CDemuxStream::FLAG_NONE;
+ continue;
+ }
+ else if (!flag_tmp.compare("default"))
+ {
+ info.flag |= CDemuxStream::FLAG_DEFAULT;
+ continue;
}
+ else if (!flag_tmp.compare("forced"))
+ {
+ info.flag |= CDemuxStream::FLAG_FORCED;
+ continue;
+ }
+
name += " " + (*it);
}
}
@@ -2181,7 +2184,7 @@ void CUtil::GetExternalStreamDetailsFromFilename(const CStdString& strVideo, con
name += g_localizeStrings.Get(21602); // External
StringUtils::Trim(name);
info.name = StringUtils::RemoveDuplicatedSpacesAndTabs(name);
- if (info.flag == 0x1111)
+ if (info.flag == 0)
info.flag = CDemuxStream::FLAG_NONE;
CLog::Log(LOGDEBUG, "%s - Language = '%s' / Name = '%s' / Flag = '%u' from %s", __FUNCTION__, info.language.c_str(), info.name.c_str(), info.flag, strStream.c_str());
diff --git a/xbmc/Util.h b/xbmc/Util.h
index f2133ec54f..2851897ca4 100644
--- a/xbmc/Util.h
+++ b/xbmc/Util.h
@@ -59,7 +59,7 @@ struct ExternalStreamInfo
std::string language;
unsigned int flag;
- ExternalStreamInfo() : flag(0x1111){};
+ ExternalStreamInfo() : flag(0){};
};
class CUtil
diff --git a/xbmc/XBDateTime.h b/xbmc/XBDateTime.h
index 063d2e43d9..969531c1f6 100644
--- a/xbmc/XBDateTime.h
+++ b/xbmc/XBDateTime.h
@@ -20,6 +20,7 @@
*
*/
+#include "utils/StdString.h"
#include "utils/Archive.h"
/*! \brief TIME_FORMAT enum/bitmask used for formatting time strings
diff --git a/xbmc/addons/GUIDialogAddonInfo.cpp b/xbmc/addons/GUIDialogAddonInfo.cpp
index 7ee39fb01a..69ebb05c08 100644
--- a/xbmc/addons/GUIDialogAddonInfo.cpp
+++ b/xbmc/addons/GUIDialogAddonInfo.cpp
@@ -216,7 +216,7 @@ void CGUIDialogAddonInfo::OnUninstall()
return;
// prompt user to be sure
- if (CGUIDialogYesNo::ShowAndGetInput(24037, 750, 0, 0))
+ if (!CGUIDialogYesNo::ShowAndGetInput(24037, 750, 0, 0))
return;
// ensure the addon isn't disabled in our database
diff --git a/xbmc/addons/Repository.cpp b/xbmc/addons/Repository.cpp
index 19c48d767b..de67eb0bb4 100644
--- a/xbmc/addons/Repository.cpp
+++ b/xbmc/addons/Repository.cpp
@@ -236,7 +236,8 @@ bool CRepositoryUpdateJob::DoWork()
if (ShouldCancel(0,0))
break;
- if (!CAddonInstaller::Get().CheckDependencies(addons[i]))
+ bool deps_met = CAddonInstaller::Get().CheckDependencies(addons[i]);
+ if (!deps_met && addons[i]->Props().broken.empty())
addons[i]->Props().broken = "DEPSNOTMET";
// invalidate the art associated with this item
@@ -248,7 +249,8 @@ bool CRepositoryUpdateJob::DoWork()
AddonPtr addon;
CAddonMgr::Get().GetAddon(addons[i]->ID(),addon);
if (addon && addons[i]->Version() > addon->Version() &&
- !database.IsAddonBlacklisted(addons[i]->ID(),addons[i]->Version().c_str()))
+ !database.IsAddonBlacklisted(addons[i]->ID(),addons[i]->Version().c_str()) &&
+ deps_met)
{
if (CSettings::Get().GetBool("general.addonautoupdate") || addon->Type() >= ADDON_VIZ_LIBRARY)
{
diff --git a/xbmc/android/activity/AndroidExtra.h b/xbmc/android/activity/AndroidExtra.h
index ea1b1f0522..7b1c9ffa72 100644
--- a/xbmc/android/activity/AndroidExtra.h
+++ b/xbmc/android/activity/AndroidExtra.h
@@ -26,6 +26,11 @@ extern float AMotionEvent_getAxisValue(const AInputEvent* motion_event, int32_t
extern typeof(AMotionEvent_getAxisValue) *p_AMotionEvent_getAxisValue;
#define AMotionEvent_getAxisValue (*p_AMotionEvent_getAxisValue)
+// missing in NDK
+extern int32_t AMotionEvent_getButtonState(const AInputEvent* motion_event);
+extern typeof(AMotionEvent_getButtonState) *p_AMotionEvent_getButtonState;
+#define AMotionEvent_getButtonState (*p_AMotionEvent_getButtonState)
+
//Additional defines from android.view.KeyEvent (http://developer.android.com/reference/android/view/KeyEvent.html)
#define AKEYCODE_ESCAPE 111
#define AKEYCODE_FORWARD_DEL 112
@@ -41,6 +46,12 @@ extern typeof(AMotionEvent_getAxisValue) *p_AMotionEvent_getAxisValue;
//Additional defines from android.view.MotionEvent (http://developer.android.com/reference/android/view/MotionEvent.html)
#define AMOTION_EVENT_ACTION_SCROLL 0x08
+#define AMOTION_EVENT_BUTTON_PRIMARY 0x00000001
+#define AMOTION_EVENT_BUTTON_SECONDARY 0x00000002
+#define AMOTION_EVENT_BUTTON_TERTIARY 0x00000004
+#define AMOTION_EVENT_BUTTON_BACK 0x00000008
+#define AMOTION_EVENT_BUTTON_FORWARD 0x00000010
+
#define AINPUT_SOURCE_CLASS_JOYSTICK 0x00000010
#define AINPUT_SOURCE_GAMEPAD (0x00000400 | AINPUT_SOURCE_CLASS_BUTTON)
diff --git a/xbmc/android/activity/AndroidMouse.cpp b/xbmc/android/activity/AndroidMouse.cpp
index a25c255948..0665bbb05a 100644
--- a/xbmc/android/activity/AndroidMouse.cpp
+++ b/xbmc/android/activity/AndroidMouse.cpp
@@ -29,6 +29,7 @@
//#define DEBUG_VERBOSE
CAndroidMouse::CAndroidMouse()
+ : m_lastButtonState(0)
{
}
@@ -43,22 +44,23 @@ bool CAndroidMouse::onMouseEvent(AInputEvent* event)
int32_t eventAction = AMotionEvent_getAction(event);
int8_t mouseAction = eventAction & AMOTION_EVENT_ACTION_MASK;
- size_t mousePointer = eventAction >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
+ size_t mousePointerIdx = eventAction >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
+ int32_t mousePointerId = AMotionEvent_getPointerId(event, mousePointerIdx);
#ifdef DEBUG_VERBOSE
- CXBMCApp::android_printf("%s pointer:%i", __PRETTY_FUNCTION__, mousePointer);
+ CXBMCApp::android_printf("%s idx:%i, id:%i", __PRETTY_FUNCTION__, mousePointerIdx, mousePointerId);
#endif
- float x = AMotionEvent_getX(event, mousePointer);
- float y = AMotionEvent_getY(event, mousePointer);
+ float x = AMotionEvent_getX(event, mousePointerIdx);
+ float y = AMotionEvent_getY(event, mousePointerIdx);
switch (mouseAction)
{
case AMOTION_EVENT_ACTION_UP:
case AMOTION_EVENT_ACTION_DOWN:
- MouseButton(x,y,mouseAction);
+ MouseButton(x,y,mouseAction,AMotionEvent_getButtonState(event));
return true;
case AMOTION_EVENT_ACTION_SCROLL:
- MouseWheel(x, y, AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_VSCROLL, mousePointer));
+ MouseWheel(x, y, AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_VSCROLL, mousePointerIdx));
return true;
default:
MouseMove(x,y);
@@ -87,22 +89,33 @@ void CAndroidMouse::MouseMove(float x, float y)
CWinEvents::MessagePush(&newEvent);
}
-void CAndroidMouse::MouseButton(float x, float y, int32_t action)
+void CAndroidMouse::MouseButton(float x, float y, int32_t action, int32_t buttons)
{
#ifdef DEBUG_VERBOSE
- CXBMCApp::android_printf("%s: x:%f, y:%f, action:%i", __PRETTY_FUNCTION__, x, y, action);
+ CXBMCApp::android_printf("%s: x:%f, y:%f, action:%i, buttons:%i", __PRETTY_FUNCTION__, x, y, action, buttons);
#endif
XBMC_Event newEvent;
memset(&newEvent, 0, sizeof(newEvent));
+ int32_t checkButtons = buttons;
+ if (action == AMOTION_EVENT_ACTION_UP)
+ checkButtons = m_lastButtonState;
+
newEvent.type = (action == AMOTION_EVENT_ACTION_DOWN) ? XBMC_MOUSEBUTTONDOWN : XBMC_MOUSEBUTTONUP;
newEvent.button.state = (action == AMOTION_EVENT_ACTION_DOWN) ? XBMC_PRESSED : XBMC_RELEASED;
newEvent.button.type = newEvent.type;
newEvent.button.x = x;
newEvent.button.y = y;
- newEvent.button.button = XBMC_BUTTON_LEFT;
+ if (checkButtons & AMOTION_EVENT_BUTTON_PRIMARY)
+ newEvent.button.button = XBMC_BUTTON_LEFT;
+ else if (checkButtons & AMOTION_EVENT_BUTTON_SECONDARY)
+ newEvent.button.button = XBMC_BUTTON_RIGHT;
+ else if (checkButtons & AMOTION_EVENT_BUTTON_TERTIARY)
+ newEvent.button.button = XBMC_BUTTON_MIDDLE;
CWinEvents::MessagePush(&newEvent);
+
+ m_lastButtonState = buttons;
}
void CAndroidMouse::MouseWheel(float x, float y, float value)
diff --git a/xbmc/android/activity/AndroidMouse.h b/xbmc/android/activity/AndroidMouse.h
index f1746a6d80..10199a25f4 100644
--- a/xbmc/android/activity/AndroidMouse.h
+++ b/xbmc/android/activity/AndroidMouse.h
@@ -33,6 +33,9 @@ protected:
private:
void MouseMove(float x, float y);
- void MouseButton(float x, float y, int32_t type);
+ void MouseButton(float x, float y, int32_t type, int32_t buttons);
void MouseWheel(float x, float y, float value);
+
+private:
+ int32_t m_lastButtonState;
};
diff --git a/xbmc/android/activity/EventLoop.cpp b/xbmc/android/activity/EventLoop.cpp
index 851ff5173c..fdf3358415 100644
--- a/xbmc/android/activity/EventLoop.cpp
+++ b/xbmc/android/activity/EventLoop.cpp
@@ -25,6 +25,7 @@
#include <dlfcn.h>
typeof(AMotionEvent_getAxisValue) *p_AMotionEvent_getAxisValue;
+typeof(AMotionEvent_getButtonState) *p_AMotionEvent_getButtonState;
CEventLoop::CEventLoop(android_app* application)
: m_enabled(false),
@@ -50,7 +51,9 @@ void CEventLoop::run(IActivityHandler &activityHandler, IInputHandler &inputHand
// missing in early NDKs, is present in r9b+
p_AMotionEvent_getAxisValue = (typeof(AMotionEvent_getAxisValue)*) dlsym(RTLD_DEFAULT, "AMotionEvent_getAxisValue");
- CXBMCApp::android_printf("CEventLoop: AMotionEvent_getAxisValue: %p", p_AMotionEvent_getAxisValue);
+ // missing in NDK
+ p_AMotionEvent_getButtonState = (typeof(AMotionEvent_getButtonState)*) dlsym(RTLD_DEFAULT, "AMotionEvent_getButtonState");
+ CXBMCApp::android_printf("CEventLoop: AMotionEvent_getAxisValue: %p, AMotionEvent_getButtonState: %p", p_AMotionEvent_getAxisValue, p_AMotionEvent_getButtonState);
CXBMCApp::android_printf("CEventLoop: starting event loop");
while (1)
diff --git a/xbmc/android/activity/XBMCApp.cpp b/xbmc/android/activity/XBMCApp.cpp
index 036601a0cc..1b95381410 100644
--- a/xbmc/android/activity/XBMCApp.cpp
+++ b/xbmc/android/activity/XBMCApp.cpp
@@ -401,17 +401,32 @@ bool CXBMCApp::HasLaunchIntent(const string &package)
// Note intent, dataType, dataURI all default to ""
bool CXBMCApp::StartActivity(const string &package, const string &intent, const string &dataType, const string &dataURI)
{
- CJNIIntent newIntent = GetPackageManager().getLaunchIntentForPackage(package);
+ CJNIIntent newIntent = intent.empty() ?
+ GetPackageManager().getLaunchIntentForPackage(package) :
+ CJNIIntent(intent);
+
if (!newIntent)
return false;
if (!dataURI.empty())
- newIntent.setData(dataURI);
+ {
+ CJNIURI jniURI = CJNIURI::parse(dataURI);
+
+ if (!jniURI)
+ return false;
+
+ newIntent.setDataAndType(jniURI, dataType);
+ }
- if (!intent.empty())
- newIntent.setAction(intent);
+ newIntent.setPackage(package);
+ startActivity(newIntent);
+ if (xbmc_jnienv()->ExceptionOccurred())
+ {
+ CLog::Log(LOGERROR, "CXBMCApp::StartActivity - ExceptionOccurred launching %s", package.c_str());
+ xbmc_jnienv()->ExceptionClear();
+ return false;
+ }
- startActivity(newIntent);
return true;
}
diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp
index 20fd56e555..a3a61647f6 100644
--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp
+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp
@@ -1322,7 +1322,7 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett
case 10: stdLayout = AE_CH_LAYOUT_7_1; break;
}
- if (m_settings.config == AE_CONFIG_FIXED)
+ if (m_settings.config == AE_CONFIG_FIXED || (settings.stereoupmix && format.m_channelLayout.Count() <= 2))
format.m_channelLayout = stdLayout;
else
format.m_channelLayout.ResolveChannels(stdLayout);;
@@ -1649,9 +1649,11 @@ bool CActiveAE::RunStages()
fadingStep = delta / samples;
}
- // for streams amplification of turned off downmix normalization
+ // for stream amplification,
+ // turned off downmix normalization,
+ // or if sink format is float (in order to prevent from clipping)
// we need to run on a per sample basis
- if ((*it)->m_amplify != 1.0 || !(*it)->m_resampleBuffers->m_normalize)
+ if ((*it)->m_amplify != 1.0 || !(*it)->m_resampleBuffers->m_normalize || (m_sinkFormat.m_dataFormat == AE_FMT_FLOAT))
{
nb_floats = out->pkt->config.channels / out->pkt->planes;
nb_loops = out->pkt->nb_samples;
@@ -1994,7 +1996,7 @@ void CActiveAE::LoadSettings()
m_settings.passthoughdevice = CSettings::Get().GetString("audiooutput.passthroughdevice");
m_settings.config = CSettings::Get().GetInt("audiooutput.config");
- m_settings.channels = CSettings::Get().GetInt("audiooutput.channels");
+ m_settings.channels = (m_sink.GetDeviceType(m_settings.device) == AE_DEVTYPE_IEC958) ? AE_CH_LAYOUT_2_0 : CSettings::Get().GetInt("audiooutput.channels");
m_settings.samplerate = CSettings::Get().GetInt("audiooutput.samplerate");
m_settings.stereoupmix = (m_settings.channels > AE_CH_LAYOUT_2_0) ? CSettings::Get().GetBool("audiooutput.stereoupmix") : false;
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
index b02581d888..4f63535d2c 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
@@ -45,6 +45,12 @@ static enum AEChannel ALSAChannelMap[ALSA_MAX_CHANNELS + 1] = {
AE_CH_NULL
};
+static enum AEChannel ALSAChannelMapWide[ALSA_MAX_CHANNELS + 1] = {
+ AE_CH_FL , AE_CH_FR , AE_CH_SL , AE_CH_SR , AE_CH_FC , AE_CH_LFE , AE_CH_BL , AE_CH_BR ,
+ AE_CH_UNKNOWN1, AE_CH_UNKNOWN2, AE_CH_UNKNOWN3, AE_CH_UNKNOWN4, AE_CH_UNKNOWN5, AE_CH_UNKNOWN6, AE_CH_UNKNOWN7, AE_CH_UNKNOWN8, /* for p16v devices */
+ AE_CH_NULL
+};
+
static unsigned int ALSASampleRateList[] =
{
5512,
@@ -94,9 +100,15 @@ inline CAEChannelInfo CAESinkALSA::GetChannelLayout(AEAudioFormat format)
count = 8;
else
{
+ // According to CEA-861-D only RL and RR are known. In case of a format having SL and SR channels
+ // but no BR BL channels, we use the wide map in order to open only the num of channels really
+ // needed.
+ enum AEChannel* channelMap = ALSAChannelMap;
+ if (format.m_channelLayout.HasChannel(AE_CH_SL) && !format.m_channelLayout.HasChannel(AE_CH_BL))
+ channelMap = ALSAChannelMapWide;
for (unsigned int c = 0; c < 8; ++c)
for (unsigned int i = 0; i < format.m_channelLayout.Count(); ++i)
- if (format.m_channelLayout[i] == ALSAChannelMap[c])
+ if (format.m_channelLayout[i] == channelMap[c])
{
count = c + 1;
break;
diff --git a/xbmc/cores/IPlayer.h b/xbmc/cores/IPlayer.h
index 13fa3bef9c..21345ae653 100644
--- a/xbmc/cores/IPlayer.h
+++ b/xbmc/cores/IPlayer.h
@@ -79,6 +79,8 @@ struct SPlayerAudioStreamInfo
{
int bitrate;
int channels;
+ int samplerate;
+ int bitspersample;
std::string language;
std::string name;
std::string audioCodecName;
@@ -87,6 +89,8 @@ struct SPlayerAudioStreamInfo
{
bitrate = 0;
channels = 0;
+ samplerate = 0;
+ bitspersample = 0;
}
};
@@ -100,6 +104,8 @@ struct SPlayerVideoStreamInfo
{
int bitrate;
float videoAspectRatio;
+ int height;
+ int width;
std::string language;
std::string name;
std::string videoCodecName;
@@ -111,6 +117,8 @@ struct SPlayerVideoStreamInfo
{
bitrate = 0;
videoAspectRatio = 1.0f;
+ height = 0;
+ width = 0;
}
};
@@ -189,10 +197,6 @@ public:
virtual int64_t GetTotalTime() { return 0; }
virtual void GetVideoStreamInfo(SPlayerVideoStreamInfo &info){};
virtual int GetSourceBitrate(){ return 0;}
- virtual int GetBitsPerSample(){ return 0;};
- virtual int GetSampleRate(){ return 0;};
- virtual int GetPictureWidth(){ return 0;}
- virtual int GetPictureHeight(){ return 0;}
virtual bool GetStreamDetails(CStreamDetails &details){ return false;}
virtual void ToFFRW(int iSpeed = 0){};
// Skip to next track/item inside the current media (if supported).
diff --git a/xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp b/xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp
index 82b9a77b88..0a294822c1 100644
--- a/xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp
+++ b/xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp
@@ -151,8 +151,7 @@ void COverlayText::Render(OVERLAY::SRenderState &state)
if(m_layout == NULL)
return;
- CRect rs, rd;
- g_renderManager.GetVideoRect(rs, rd);
+ CRect rd = g_graphicsContext.GetViewWindow();
RESOLUTION_INFO res = g_graphicsContext.GetResInfo();
/* our coordinates are in screen coordinates constrained to rd, but the font is sized suitably for fullscreen,
@@ -163,8 +162,8 @@ void COverlayText::Render(OVERLAY::SRenderState &state)
float scale = rd.Width() / (res.Overscan.right - res.Overscan.left);
TransformMatrix mat;
mat.m[0][0] = mat.m[1][1] = scale;
- mat.m[3][0] = rd.x1;
- mat.m[3][1] = rd.y1;
+ mat.m[0][3] = rd.x1;
+ mat.m[1][3] = rd.y1;
float x = state.x, y = state.y;
mat.InverseTransformPosition(x, y);
@@ -179,9 +178,7 @@ void COverlayText::Render(OVERLAY::SRenderState &state)
if (m_subalign == SUBTITLE_ALIGN_MANUAL
|| m_subalign == SUBTITLE_ALIGN_TOP_OUTSIDE
|| m_subalign == SUBTITLE_ALIGN_BOTTOM_INSIDE)
- y = state.y - height;
- else
- y = state.y;
+ y -= height;
// clamp inside screen
y = std::max(y, (float) res.Overscan.top);
diff --git a/xbmc/cores/VideoRenderers/WinRenderer.cpp b/xbmc/cores/VideoRenderers/WinRenderer.cpp
index 6825627007..599f3f42d0 100644
--- a/xbmc/cores/VideoRenderers/WinRenderer.cpp
+++ b/xbmc/cores/VideoRenderers/WinRenderer.cpp
@@ -438,9 +438,9 @@ void CWinRenderer::UnInit()
m_processor.UnInit();
}
-bool CWinRenderer::CreateIntermediateRenderTarget()
+bool CWinRenderer::CreateIntermediateRenderTarget(unsigned int width, unsigned int height)
{
- // Initialize a render target for intermediate rendering - same size as the video source
+ // Initialize a render target for intermediate rendering
LPDIRECT3DDEVICE9 pD3DDevice = g_Windowing.Get3DDevice();
D3DFORMAT format = D3DFMT_X8R8G8B8;
DWORD usage = D3DUSAGE_RENDERTARGET;
@@ -454,11 +454,19 @@ bool CWinRenderer::CreateIntermediateRenderTarget()
else if (g_Windowing.IsTextureFormatOk(D3DFMT_X8B8G8R8, usage)) format = D3DFMT_X8B8G8R8;
else if (g_Windowing.IsTextureFormatOk(D3DFMT_R8G8B8, usage)) format = D3DFMT_R8G8B8;
+ // don't create new one if it exists with requested size and format
+ if ( m_IntermediateTarget.Get() && m_IntermediateTarget.GetFormat() == format
+ && m_IntermediateTarget.GetWidth() == width && m_IntermediateTarget.GetHeight() == height)
+ return true;
+
+ if (m_IntermediateTarget.Get())
+ m_IntermediateTarget.Release();
+
CLog::Log(LOGDEBUG, __FUNCTION__": format %i", format);
- if(!m_IntermediateTarget.Create(m_sourceWidth, m_sourceHeight, 1, usage, format, D3DPOOL_DEFAULT))
+ if(!m_IntermediateTarget.Create(width, height, 1, usage, format, D3DPOOL_DEFAULT))
{
- CLog::Log(LOGERROR, __FUNCTION__": render target creation failed. Going back to bilinear scaling.", format);
+ CLog::Log(LOGERROR, __FUNCTION__": intermediate render target creation failed.", format);
return false;
}
return true;
@@ -568,10 +576,7 @@ void CWinRenderer::UpdatePSVideoFilter()
}
}
- if(m_IntermediateTarget.Get())
- m_IntermediateTarget.Release();
-
- if (m_bUseHQScaler && !CreateIntermediateRenderTarget())
+ if (m_bUseHQScaler && !CreateIntermediateRenderTarget(m_sourceWidth, m_sourceHeight))
{
SAFE_DELETE(m_scalerShader);
m_bUseHQScaler = false;
@@ -579,9 +584,15 @@ void CWinRenderer::UpdatePSVideoFilter()
SAFE_DELETE(m_colorShader);
- // When using DXVA, we are already setup at this point, color shader is not needed
if (m_renderMethod == RENDER_DXVA)
+ {
+ // we'd use m_IntermediateTarget as rendering target for possible anaglyph stereo with dxva processor.
+ if (!m_bUseHQScaler)
+ CreateIntermediateRenderTarget(m_destWidth, m_destHeight);
+
+ // When using DXVA, we are already setup at this point, color shader is not needed
return;
+ }
if (m_bUseHQScaler)
{
@@ -921,7 +932,20 @@ void CWinRenderer::Stage1()
void CWinRenderer::Stage2()
{
- m_scalerShader->Render(m_IntermediateTarget, m_sourceWidth, m_sourceHeight, m_destWidth, m_destHeight, m_sourceRect, g_graphicsContext.StereoCorrection(m_destRect));
+ CRect sourceRect;
+
+ // fixup stereo+dxva+hq scaling issue
+ if (m_renderMethod == RENDER_DXVA)
+ {
+ sourceRect.y1 = 0.0f;
+ sourceRect.y2 = m_sourceHeight;
+ sourceRect.x1 = 0.0f;
+ sourceRect.x2 = m_sourceWidth;
+ }
+ else
+ sourceRect = m_sourceRect;
+
+ m_scalerShader->Render(m_IntermediateTarget, m_sourceWidth, m_sourceHeight, m_destWidth, m_destHeight, sourceRect, g_graphicsContext.StereoCorrection(m_destRect));
}
void CWinRenderer::RenderProcessor(DWORD flags)
@@ -938,13 +962,17 @@ void CWinRenderer::RenderProcessor(DWORD flags)
destRect.x2 = m_sourceWidth;
}
else
- destRect = m_destRect;
+ destRect = g_graphicsContext.StereoCorrection(m_destRect);
DXVABuffer *image = (DXVABuffer*)m_VideoBuffers[m_iYV12RenderBuffer];
IDirect3DSurface9* target;
- if (m_bUseHQScaler)
+ if ( m_bUseHQScaler
+ || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN
+ || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA)
+ {
m_IntermediateTarget.GetSurfaceLevel(0, &target);
+ }
else
{
if(FAILED(hr = g_Windowing.Get3DDevice()->GetRenderTarget(0, &target)))
@@ -954,12 +982,52 @@ void CWinRenderer::RenderProcessor(DWORD flags)
}
}
- m_processor.Render(m_sourceRect, g_graphicsContext.StereoCorrection(destRect), target, image->id, flags);
+ m_processor.Render(m_sourceRect, destRect, target, image->id, flags);
target->Release();
if (m_bUseHQScaler)
+ {
Stage2();
+ }
+ else if ( g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN
+ || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA)
+ {
+ IDirect3DDevice9 *pD3DDev = g_Windowing.Get3DDevice();
+
+ struct VERTEX
+ {
+ FLOAT x,y,z;
+ FLOAT tu,tv;
+ };
+
+ VERTEX vertex[] =
+ {
+ {destRect.x1 - 0.5f, destRect.y1 - 0.5f, 0.0f, m_destRect.x1 / m_destWidth, m_destRect.y1 / m_destHeight},
+ {destRect.x2 - 0.5f, destRect.y1 - 0.5f, 0.0f, m_destRect.x2 / m_destWidth, m_destRect.y1 / m_destHeight},
+ {destRect.x2 - 0.5f, destRect.y2 - 0.5f, 0.0f, m_destRect.x2 / m_destWidth, m_destRect.y2 / m_destHeight},
+ {destRect.x1 - 0.5f, destRect.y2 - 0.5f, 0.0f, m_destRect.x1 / m_destWidth, m_destRect.y2 / m_destHeight},
+ };
+
+ pD3DDev->SetTexture(0, m_IntermediateTarget.Get());
+
+ pD3DDev->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
+ pD3DDev->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
+ pD3DDev->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
+ pD3DDev->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
+ pD3DDev->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
+ pD3DDev->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
+
+ pD3DDev->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
+ pD3DDev->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
+
+ pD3DDev->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1);
+
+ if (FAILED(hr = pD3DDev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, vertex, sizeof(VERTEX))))
+ CLog::Log(LOGERROR, __FUNCTION__": DrawPrimitiveUP failed. %s", CRenderSystemDX::GetErrorDescription(hr).c_str());
+
+ pD3DDev->SetTexture(0, NULL);
+ }
}
bool CWinRenderer::RenderCapture(CRenderCapture* capture)
diff --git a/xbmc/cores/VideoRenderers/WinRenderer.h b/xbmc/cores/VideoRenderers/WinRenderer.h
index 70751e2254..045a010b61 100644
--- a/xbmc/cores/VideoRenderers/WinRenderer.h
+++ b/xbmc/cores/VideoRenderers/WinRenderer.h
@@ -194,7 +194,7 @@ protected:
void SelectSWVideoFilter();
void SelectPSVideoFilter();
void UpdatePSVideoFilter();
- bool CreateIntermediateRenderTarget();
+ bool CreateIntermediateRenderTarget(unsigned int width, unsigned int height);
void RenderProcessor(DWORD flags);
int m_iYV12RenderBuffer;
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp
index 5ff1c95d8a..f950a34283 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp
@@ -54,32 +54,51 @@ static bool CanSurfaceRenderWhiteList(const std::string &name)
// All devices 'should' be capiable of surface rendering
// but that seems to be hit or miss as most odd name devices
// cannot surface render.
- static const char *cansurfacerender_decoders[] = {
- "OMX.Nvidia",
- "OMX.rk",
- NULL
- };
- for (const char **ptr = cansurfacerender_decoders; *ptr; ptr++)
- {
- if (!strncmp(*ptr, name.c_str(), strlen(*ptr)))
- return true;
- }
- return false;
+ static const char *cansurfacerender_decoders[] = {
+ "OMX.Nvidia",
+ "OMX.rk",
+ "OMX.qcom",
+ NULL
+ };
+ for (const char **ptr = cansurfacerender_decoders; *ptr; ptr++)
+ {
+ if (!strnicmp(*ptr, name.c_str(), strlen(*ptr)))
+ return true;
+ }
+ return false;
}
static bool IsBlacklisted(const std::string &name)
{
- static const char *blacklisted_decoders[] = {
- // No software decoders
- "OMX.google",
- NULL
- };
- for (const char **ptr = blacklisted_decoders; *ptr; ptr++)
- {
- if (!strncmp(*ptr, name.c_str(), strlen(*ptr)))
- return true;
- }
- return false;
+ static const char *blacklisted_decoders[] = {
+ // No software decoders
+ "OMX.google",
+ NULL
+ };
+ for (const char **ptr = blacklisted_decoders; *ptr; ptr++)
+ {
+ if (!strnicmp(*ptr, name.c_str(), strlen(*ptr)))
+ return true;
+ }
+ return false;
+}
+
+static bool IsSupportedColorFormat(int color_format)
+{
+ static const int supported_colorformats[] = {
+ CJNIMediaCodecInfoCodecCapabilities::COLOR_FormatYUV420Planar,
+ CJNIMediaCodecInfoCodecCapabilities::COLOR_TI_FormatYUV420PackedSemiPlanar,
+ CJNIMediaCodecInfoCodecCapabilities::COLOR_FormatYUV420SemiPlanar,
+ CJNIMediaCodecInfoCodecCapabilities::COLOR_QCOM_FormatYUV420SemiPlanar,
+ CJNIMediaCodecInfoCodecCapabilities::OMX_QCOM_COLOR_FormatYVU420SemiPlanarInterlace,
+ -1
+ };
+ for (const int *ptr = supported_colorformats; *ptr != -1; ptr++)
+ {
+ if (color_format == *ptr)
+ return true;
+ }
+ return false;
}
/*****************************************************************************/
@@ -339,6 +358,7 @@ bool CDVDVideoCodecAndroidMediaCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptio
// CJNIMediaCodec::createDecoderByXXX doesn't handle errors nicely,
// it crashes if the codec isn't found. This is fixed in latest AOSP,
// but not in current 4.1 devices. So 1st search for a matching codec, then create it.
+ bool hasSupportedColorFormat = false;
int num_codecs = CJNIMediaCodecList::getCodecCount();
for (int i = 0; i < num_codecs; i++)
{
@@ -359,11 +379,6 @@ bool CDVDVideoCodecAndroidMediaCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptio
CJNIMediaCodecInfoCodecCapabilities codec_caps = codec_info.getCapabilitiesForType(m_mime);
std::vector<int> color_formats = codec_caps.colorFormats();
- for (size_t k = 0; k < color_formats.size(); ++k)
- {
- CLog::Log(LOGDEBUG, "CDVDVideoCodecAndroidMediaCodec::Open "
- "m_codecname(%s), colorFormat(%d)", m_codecname.c_str(), color_formats[k]);
- }
// clear any jni exceptions, jni gets upset if we do not.
if (xbmc_jnienv()->ExceptionOccurred())
@@ -373,6 +388,14 @@ bool CDVDVideoCodecAndroidMediaCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptio
m_codec.reset();
continue;
}
+ hasSupportedColorFormat = false;
+ for (size_t k = 0; k < color_formats.size(); ++k)
+ {
+ CLog::Log(LOGDEBUG, "CDVDVideoCodecAndroidMediaCodec::Open "
+ "m_codecname(%s), colorFormat(%d)", m_codecname.c_str(), color_formats[k]);
+ if (IsSupportedColorFormat(color_formats[k]))
+ hasSupportedColorFormat = true;
+ }
break;
}
}
@@ -388,6 +411,16 @@ bool CDVDVideoCodecAndroidMediaCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptio
// whitelist of devices that can surface render.
m_render_sw = !CanSurfaceRenderWhiteList(m_codecname);
+ if (m_render_sw)
+ {
+ if (!hasSupportedColorFormat)
+ {
+ CLog::Log(LOGERROR, "CDVDVideoCodecAndroidMediaCodec:: No supported color format");
+ m_codec.reset();
+ SAFE_DELETE(m_bitstream);
+ return false;
+ }
+ }
ConfigureMediaCodec();
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecVDA.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecVDA.cpp
index 4faf1bdeaa..134f29b6c4 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecVDA.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecVDA.cpp
@@ -248,7 +248,8 @@ bool CDVDVideoCodecVDA::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
{
// Nvidia gpu's are all powerful and work the way god intended
m_decode_async = true;
- m_use_cvBufferRef = true;
+ // The gods are liars, ignore the sirens for now.
+ m_use_cvBufferRef = false;
}
else if (rendervendor.find("intel") != std::string::npos)
{
@@ -260,7 +261,8 @@ bool CDVDVideoCodecVDA::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
{
// ATI gpu's are borked when using async decode
m_decode_async = false;
- m_use_cvBufferRef = true;
+ // They lie here too.
+ m_use_cvBufferRef = false;
}
if (!m_use_cvBufferRef)
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in b/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in
index 23261f188c..fdeb98df2f 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in
@@ -16,6 +16,7 @@ SRCS += DVDVideoCodecCrystalHD.cpp
endif
ifeq ($(findstring osx,@ARCH@),osx)
SRCS += DVDVideoCodecVDA.cpp
+SRCS += VDA.cpp
endif
ifeq (@USE_OPENMAX@,1)
SRCS += OpenMax.cpp
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/libstagefrightICS/StageFrightVideo.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/libstagefrightICS/StageFrightVideo.cpp
index 089b3e9003..9ca224519a 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/libstagefrightICS/StageFrightVideo.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/libstagefrightICS/StageFrightVideo.cpp
@@ -55,8 +55,6 @@
#define EGL_NATIVE_BUFFER_ANDROID 0x3140
#define EGL_IMAGE_PRESERVED_KHR 0x30D2
-const char *MEDIA_MIMETYPE_VIDEO_WMV = "video/x-ms-wmv";
-
using namespace android;
static int64_t pts_dtoi(double pts)
@@ -430,33 +428,37 @@ bool CStageFrightVideo::Open(CDVDStreamInfo &hints)
case CODEC_ID_H264:
if (p->m_g_advancedSettings->m_stagefrightConfig.useAVCcodec == 0)
return false;
- mimetype = MEDIA_MIMETYPE_VIDEO_AVC;
+ mimetype = "video/avc";
if ( *(char*)hints.extradata == 1 )
p->meta->setData(kKeyAVCC, kTypeAVCC, hints.extradata, hints.extrasize);
break;
case CODEC_ID_MPEG4:
if (p->m_g_advancedSettings->m_stagefrightConfig.useMP4codec == 0)
return false;
- mimetype = MEDIA_MIMETYPE_VIDEO_MPEG4;
+ mimetype = "video/mp4v-es";
break;
case CODEC_ID_MPEG2VIDEO:
if (p->m_g_advancedSettings->m_stagefrightConfig.useMPEG2codec == 0)
return false;
- mimetype = MEDIA_MIMETYPE_VIDEO_MPEG2;
+ mimetype = "video/mpeg2";
break;
case CODEC_ID_VP3:
case CODEC_ID_VP6:
case CODEC_ID_VP6F:
+ if (p->m_g_advancedSettings->m_stagefrightConfig.useVPXcodec == 0)
+ return false;
+ mimetype = "video/vp6";
+ break;
case CODEC_ID_VP8:
if (p->m_g_advancedSettings->m_stagefrightConfig.useVPXcodec == 0)
return false;
- mimetype = MEDIA_MIMETYPE_VIDEO_VPX;
+ mimetype = "video/x-vnd.on2.vp8";
break;
case CODEC_ID_VC1:
case CODEC_ID_WMV3:
if (p->m_g_advancedSettings->m_stagefrightConfig.useVC1codec == 0)
return false;
- mimetype = MEDIA_MIMETYPE_VIDEO_WMV;
+ mimetype = "video/vc1";
break;
default:
return false;
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/libstagefrightICS/StageFrightVideoPrivate.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/libstagefrightICS/StageFrightVideoPrivate.cpp
index 0390233df7..5031df8536 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/libstagefrightICS/StageFrightVideoPrivate.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/libstagefrightICS/StageFrightVideoPrivate.cpp
@@ -352,54 +352,31 @@ bool CStageFrightVideoPrivate::InitSurfaceTexture()
if (mVideoNativeWindow != NULL)
return false;
- mVideoTextureId = -1;
-
- // We MUST create the GLES texture on the main thread
- // to match where the valid GLES context is located.
- // It would be nice to move this out of here, we would need
- // to create/fetch/create from g_RenderMananger. But g_RenderMananger
- // does not know we are using MediaCodec until Configure and we
- // we need m_surfaceTexture valid before then. Chicken, meet Egg.
- if (m_g_application->IsCurrentThread())
- {
- // localize GLuint so we do not spew gles includes in our header
- GLuint texture_id;
-
- glGenTextures(1, &texture_id);
- glBindTexture( GL_TEXTURE_EXTERNAL_OES, texture_id);
- glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glBindTexture( GL_TEXTURE_EXTERNAL_OES, 0);
- mVideoTextureId = texture_id;
- }
- else
- {
- ThreadMessageCallback callbackData;
- callbackData.callback = &CallbackInitSurfaceTexture;
- callbackData.userptr = (void*)this;
-
- ThreadMessage msg;
- msg.dwMessage = TMSG_CALLBACK;
- msg.lpVoid = (void*)&callbackData;
-
- // wait for it.
- m_g_applicationMessenger->SendMessage(msg, true);
-
- mSurfTexture = new CJNISurfaceTexture(mVideoTextureId);
- mSurface = new CJNISurface(*mSurfTexture);
+ //FIXME: Playing back-to-back vids induces a bug when properly generating textures between runs.
+ // Symptoms are upside down vid, "updateTexImage: error binding external texture" in log, and crash
+ // after stopping.
+ // Workaround is to always use the same, arbitrary chosen, texture ids.
+ mVideoTextureId = 0xbaad;
+
+ glBindTexture( GL_TEXTURE_EXTERNAL_OES, mVideoTextureId);
+ glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glBindTexture( GL_TEXTURE_EXTERNAL_OES, 0);
+
+ mSurfTexture = new CJNISurfaceTexture(mVideoTextureId);
+ mSurface = new CJNISurface(*mSurfTexture);
+
+ JNIEnv* env = xbmc_jnienv();
+ mVideoNativeWindow = ANativeWindow_fromSurface(env, mSurface->get_raw());
+ native_window_api_connect(mVideoNativeWindow.get(), NATIVE_WINDOW_API_MEDIA);
- JNIEnv* env = xbmc_jnienv();
- mVideoNativeWindow = ANativeWindow_fromSurface(env, mSurface->get_raw());
- native_window_api_connect(mVideoNativeWindow.get(), NATIVE_WINDOW_API_MEDIA);
-
- #if defined(DEBUG_VERBOSE)
- CLog::Log(LOGDEBUG, "%s: <<< InitSurfaceTexture texid(%d) natwin(%p)\n", CLASSNAME, mVideoTextureId, mVideoNativeWindow.get());
- #endif
- }
+#if defined(DEBUG_VERBOSE)
+ CLog::Log(LOGDEBUG, "%s: <<< InitSurfaceTexture texid(%d) natwin(%p)\n", CLASSNAME, mVideoTextureId, mVideoNativeWindow.get());
+#endif
- return (mVideoTextureId != -1);
+ return true;
}
void CStageFrightVideoPrivate::ReleaseSurfaceTexture()
@@ -420,8 +397,6 @@ void CStageFrightVideoPrivate::ReleaseSurfaceTexture()
delete mSurface;
delete mSurfTexture;
- if (mVideoTextureId > 0)
- glDeleteTextures(1, &mVideoTextureId);
#if defined(DEBUG_VERBOSE)
CLog::Log(LOGDEBUG, "%s: <<< ReleaseSurfaceTexture\n", CLASSNAME);
#endif
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
index 16c75321eb..de4f3d32a2 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
@@ -354,6 +354,14 @@ int CDVDInputStreamNavigator::ProcessBlock(uint8_t* dest_buffer, int* read)
//libdvdnav never sets logical, why.. don't know..
event->logical = GetActiveSubtitleStream();
+ /* correct stream ids for disabled subs if needed */
+ if(!IsSubtitleStreamEnabled())
+ {
+ event->physical_letterbox |= 0x80;
+ event->physical_pan_scan |= 0x80;
+ event->physical_wide |= 0x80;
+ }
+
if(event->logical<0 && GetSubTitleStreamCount()>0)
{
/* this will not take effect in this event */
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 1dbc73201b..4e5e6fdd13 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -820,8 +820,8 @@ void CDVDPlayer::OpenDefaultStreams(bool reset)
if(!valid)
CloseAudioStream(true);
- // enable subtitles
- m_dvdPlayerVideo.EnableSubtitle(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn);
+ // enable or disable subtitles
+ SetSubtitleVisible(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn);
// open subtitle stream
SelectionStream as = m_SelectionStreams.Get(STREAM_AUDIO, GetAudioStream());
@@ -842,7 +842,12 @@ void CDVDPlayer::OpenDefaultStreams(bool reset)
if(!valid)
{
CloseSubtitleStream(true);
- SetSubtitleVisible(false);
+ if (m_pInputStream && !(m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD) || m_pInputStream->IsStreamType(DVDSTREAM_TYPE_BLURAY)))
+ {
+ SetSubtitleVisible(false);
+ if (GetSubtitleCount() > 0 && CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream == -1)
+ CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream = 0;
+ }
}
// open teletext stream
@@ -2799,8 +2804,6 @@ float CDVDPlayer::GetSubTitleDelay()
// priority: 1: libdvdnav, 2: external subtitles, 3: muxed subtitles
int CDVDPlayer::GetSubtitleCount()
{
- StreamLock lock(this);
- m_SelectionStreams.Update(m_pInputStream, m_pDemuxer);
return m_SelectionStreams.Count(STREAM_SUBTITLE);
}
@@ -2852,8 +2855,6 @@ void CDVDPlayer::SetSubtitleVisible(bool bVisible)
int CDVDPlayer::GetAudioStreamCount()
{
- StreamLock lock(this);
- m_SelectionStreams.Update(m_pInputStream, m_pDemuxer);
return m_SelectionStreams.Count(STREAM_AUDIO);
}
@@ -2985,7 +2986,7 @@ bool CDVDPlayer::OpenAudioStream(int iStream, int source, bool reset)
/* audio normally won't consume full cpu, so let it have prio */
m_dvdPlayerAudio.SetPriority(GetPriority()+1);
- CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream = m_SelectionStreams.IndexOf(STREAM_AUDIO, source, iStream);
+ CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream = GetAudioStream();
return true;
}
@@ -3170,7 +3171,7 @@ bool CDVDPlayer::OpenSubtitleStream(int iStream, int source)
m_CurrentSubtitle.stream = (void*)pStream;
m_CurrentSubtitle.started = false;
- CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream = m_SelectionStreams.IndexOf(STREAM_SUBTITLE, source, iStream);
+ CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream = GetSubtitle();
return true;
}
@@ -3485,7 +3486,7 @@ int CDVDPlayer::OnDVDNavResult(void* pData, int iMessage)
int iStream = event->physical_wide;
bool visible = !(iStream & 0x80);
- m_dvdPlayerVideo.EnableSubtitle(visible);
+ SetSubtitleVisible(visible);
if (iStream >= 0)
m_dvd.iSelectedSPUStream = (iStream & ~0x80);
@@ -3940,7 +3941,15 @@ void CDVDPlayer::GetVideoStreamInfo(SPlayerVideoStreamInfo &info)
CStdString retVal;
if (m_pDemuxer && (m_CurrentVideo.id != -1))
+ {
m_pDemuxer->GetStreamCodecName(m_CurrentVideo.id, retVal);
+ CDemuxStreamVideo* stream = static_cast<CDemuxStreamVideo*>(m_pDemuxer->GetStream(m_CurrentVideo.id));
+ if (stream)
+ {
+ info.width = stream->iWidth;
+ info.height = stream->iHeight;
+ }
+ }
info.videoCodecName = retVal;
info.videoAspectRatio = m_dvdPlayerVideo.GetAspectRatio();
m_dvdPlayerVideo.GetVideoRect(info.SrcRect, info.DestRect);
@@ -4219,28 +4228,6 @@ bool CDVDPlayer::Record(bool bOnOff)
return false;
}
-int CDVDPlayer::GetPictureWidth()
-{
- if (m_pDemuxer && (m_CurrentVideo.id != -1))
- {
- CDemuxStreamVideo* stream = static_cast<CDemuxStreamVideo*>(m_pDemuxer->GetStream(m_CurrentVideo.id));
- if (stream)
- return stream->iWidth;
- }
- return 0;
-}
-
-int CDVDPlayer::GetPictureHeight()
-{
- if (m_pDemuxer && (m_CurrentVideo.id != -1))
- {
- CDemuxStreamVideo* stream = static_cast<CDemuxStreamVideo*>(m_pDemuxer->GetStream(m_CurrentVideo.id));
- if (stream)
- return stream->iHeight;
- }
- return 0;
-}
-
bool CDVDPlayer::GetStreamDetails(CStreamDetails &details)
{
if (m_pDemuxer)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.h b/xbmc/cores/dvdplayer/DVDPlayer.h
index 97a6d85862..5ae5f9fc82 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.h
+++ b/xbmc/cores/dvdplayer/DVDPlayer.h
@@ -240,8 +240,6 @@ public:
virtual int GetSourceBitrate();
virtual void GetVideoStreamInfo(SPlayerVideoStreamInfo &info);
- virtual int GetPictureWidth();
- virtual int GetPictureHeight();
virtual bool GetStreamDetails(CStreamDetails &details);
virtual void GetAudioStreamInfo(int index, SPlayerAudioStreamInfo &info);
diff --git a/xbmc/cores/omxplayer/OMXAudio.cpp b/xbmc/cores/omxplayer/OMXAudio.cpp
index 9634c81c32..5f0ccc193f 100644
--- a/xbmc/cores/omxplayer/OMXAudio.cpp
+++ b/xbmc/cores/omxplayer/OMXAudio.cpp
@@ -148,7 +148,7 @@ bool COMXAudio::PortSettingsChanged()
// round up to power of 2
m_pcm_output.nChannels = m_OutputChannels > 4 ? 8 : m_OutputChannels > 2 ? 4 : m_OutputChannels;
/* limit samplerate (through resampling) if requested */
- m_pcm_output.nSamplingRate = std::min((int)m_pcm_output.nSamplingRate, CSettings::Get().GetInt("audiooutput.samplerate"));
+ m_pcm_output.nSamplingRate = std::min(std::max((int)m_pcm_output.nSamplingRate, 8000), CSettings::Get().GetInt("audiooutput.samplerate"));
m_pcm_output.nPortIndex = m_omx_mixer.GetOutputPort();
omx_err = m_omx_mixer.SetParameter(OMX_IndexParamAudioPcm, &m_pcm_output);
@@ -215,7 +215,7 @@ bool COMXAudio::PortSettingsChanged()
m_omx_tunnel_clock_analog.Initialize(m_omx_clock, m_omx_clock->GetInputPort(),
&m_omx_render_analog, m_omx_render_analog.GetInputPort()+1);
- omx_err = m_omx_tunnel_clock_analog.Establish(false);
+ omx_err = m_omx_tunnel_clock_analog.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel_clock_analog.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
@@ -228,7 +228,7 @@ bool COMXAudio::PortSettingsChanged()
m_omx_tunnel_clock_hdmi.Initialize(m_omx_clock, m_omx_clock->GetInputPort() + (m_omx_render_analog.IsInitialized() ? 2 : 0),
&m_omx_render_hdmi, m_omx_render_hdmi.GetInputPort()+1);
- omx_err = m_omx_tunnel_clock_hdmi.Establish(false);
+ omx_err = m_omx_tunnel_clock_hdmi.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel_clock_hdmi.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
@@ -292,7 +292,7 @@ bool COMXAudio::PortSettingsChanged()
if( m_omx_splitter.IsInitialized() )
{
m_omx_tunnel_splitter_analog.Initialize(&m_omx_splitter, m_omx_splitter.GetOutputPort(), &m_omx_render_analog, m_omx_render_analog.GetInputPort());
- omx_err = m_omx_tunnel_splitter_analog.Establish(false);
+ omx_err = m_omx_tunnel_splitter_analog.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "COMXAudio::Initialize - Error m_omx_tunnel_splitter_analog.Establish 0x%08x", omx_err);
@@ -300,7 +300,7 @@ bool COMXAudio::PortSettingsChanged()
}
m_omx_tunnel_splitter_hdmi.Initialize(&m_omx_splitter, m_omx_splitter.GetOutputPort() + 1, &m_omx_render_hdmi, m_omx_render_hdmi.GetInputPort());
- omx_err = m_omx_tunnel_splitter_hdmi.Establish(false);
+ omx_err = m_omx_tunnel_splitter_hdmi.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "COMXAudio::Initialize - Error m_omx_tunnel_splitter_hdmi.Establish 0x%08x", omx_err);
@@ -342,7 +342,7 @@ bool COMXAudio::PortSettingsChanged()
0, 0, 0, 0);
}
- omx_err = m_omx_tunnel_decoder.Establish(false);
+ omx_err = m_omx_tunnel_decoder.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel_decoder.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
@@ -360,7 +360,7 @@ bool COMXAudio::PortSettingsChanged()
if( m_omx_mixer.IsInitialized() )
{
- omx_err = m_omx_tunnel_mixer.Establish(false);
+ omx_err = m_omx_tunnel_mixer.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel_decoder.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
@@ -727,15 +727,15 @@ bool COMXAudio::Deinitialize()
m_omx_decoder.FlushInput();
- m_omx_decoder.Deinitialize(true);
+ m_omx_decoder.Deinitialize();
if ( m_omx_mixer.IsInitialized() )
- m_omx_mixer.Deinitialize(true);
+ m_omx_mixer.Deinitialize();
if ( m_omx_splitter.IsInitialized() )
- m_omx_splitter.Deinitialize(true);
+ m_omx_splitter.Deinitialize();
if ( m_omx_render_hdmi.IsInitialized() )
- m_omx_render_hdmi.Deinitialize(true);
+ m_omx_render_hdmi.Deinitialize();
if ( m_omx_render_analog.IsInitialized() )
- m_omx_render_analog.Deinitialize(true);
+ m_omx_render_analog.Deinitialize();
m_BytesPerSec = 0;
m_BufferLen = 0;
@@ -1018,9 +1018,6 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
if(m_setStartTime)
{
omx_buffer->nFlags = OMX_BUFFERFLAG_STARTTIME;
- if(pts == DVD_NOPTS_VALUE)
- omx_buffer->nFlags |= OMX_BUFFERFLAG_TIME_UNKNOWN;
-
m_last_pts = pts;
CLog::Log(LOGDEBUG, "COMXAudio::Decode ADec : setStartTime %f\n", (float)val / DVD_TIME_BASE);
diff --git a/xbmc/cores/omxplayer/OMXImage.cpp b/xbmc/cores/omxplayer/OMXImage.cpp
index 89e82d8270..16fc05ce26 100644
--- a/xbmc/cores/omxplayer/OMXImage.cpp
+++ b/xbmc/cores/omxplayer/OMXImage.cpp
@@ -917,9 +917,9 @@ void COMXImageDec::Close()
if(m_omx_tunnel_decode.IsInitialized())
m_omx_tunnel_decode.Deestablish();
if(m_omx_decoder.IsInitialized())
- m_omx_decoder.Deinitialize(true);
+ m_omx_decoder.Deinitialize();
if(m_omx_resize.IsInitialized())
- m_omx_resize.Deinitialize(true);
+ m_omx_resize.Deinitialize();
}
bool COMXImageDec::HandlePortSettingChange(unsigned int resize_width, unsigned int resize_height)
@@ -941,7 +941,7 @@ bool COMXImageDec::HandlePortSettingChange(unsigned int resize_width, unsigned i
m_omx_tunnel_decode.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_resize, m_omx_resize.GetInputPort());
- omx_err = m_omx_tunnel_decode.Establish(false);
+ omx_err = m_omx_tunnel_decode.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_decode.Establish\n", CLASSNAME, __func__);
@@ -1189,7 +1189,7 @@ COMXImageEnc::~COMXImageEnc()
OMX_INIT_STRUCTURE(m_encoded_format);
m_encoded_buffer = NULL;
if(m_omx_encoder.IsInitialized())
- m_omx_encoder.Deinitialize(true);
+ m_omx_encoder.Deinitialize();
}
bool COMXImageEnc::Encode(unsigned char *buffer, int size, unsigned width, unsigned height, unsigned int pitch)
@@ -1435,11 +1435,11 @@ void COMXImageReEnc::Close()
if(m_omx_tunnel_resize.IsInitialized())
m_omx_tunnel_resize.Deestablish();
if(m_omx_decoder.IsInitialized())
- m_omx_decoder.Deinitialize(true);
+ m_omx_decoder.Deinitialize();
if(m_omx_resize.IsInitialized())
- m_omx_resize.Deinitialize(true);
+ m_omx_resize.Deinitialize();
if(m_omx_encoder.IsInitialized())
- m_omx_encoder.Deinitialize(true);
+ m_omx_encoder.Deinitialize();
}
@@ -1576,7 +1576,7 @@ bool COMXImageReEnc::HandlePortSettingChange(unsigned int resize_width, unsigned
m_omx_tunnel_decode.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_resize, m_omx_resize.GetInputPort());
- omx_err = m_omx_tunnel_decode.Establish(false);
+ omx_err = m_omx_tunnel_decode.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_decode.Establish\n", CLASSNAME, __func__);
@@ -1585,7 +1585,7 @@ bool COMXImageReEnc::HandlePortSettingChange(unsigned int resize_width, unsigned
m_omx_tunnel_resize.Initialize(&m_omx_resize, m_omx_resize.GetOutputPort(), &m_omx_encoder, m_omx_encoder.GetInputPort());
- omx_err = m_omx_tunnel_resize.Establish(false);
+ omx_err = m_omx_tunnel_resize.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_resize.Establish\n", CLASSNAME, __func__);
@@ -1824,11 +1824,11 @@ void COMXTexture::Close()
m_omx_tunnel_egl.Deestablish();
// delete components
if (m_omx_decoder.IsInitialized())
- m_omx_decoder.Deinitialize(true);
+ m_omx_decoder.Deinitialize();
if (m_omx_resize.IsInitialized())
- m_omx_resize.Deinitialize(true);
+ m_omx_resize.Deinitialize();
if (m_omx_egl_render.IsInitialized())
- m_omx_egl_render.Deinitialize(true);
+ m_omx_egl_render.Deinitialize();
}
bool COMXTexture::HandlePortSettingChange(unsigned int resize_width, unsigned int resize_height, void *egl_image, void *egl_display, bool port_settings_changed)
@@ -1928,7 +1928,7 @@ bool COMXTexture::HandlePortSettingChange(unsigned int resize_width, unsigned in
m_omx_tunnel_decode.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_resize, m_omx_resize.GetInputPort());
- omx_err = m_omx_tunnel_decode.Establish(false);
+ omx_err = m_omx_tunnel_decode.Establish();
if (omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_decode.Establish (%x)", CLASSNAME, __func__, omx_err);
@@ -1937,7 +1937,7 @@ bool COMXTexture::HandlePortSettingChange(unsigned int resize_width, unsigned in
m_omx_tunnel_egl.Initialize(&m_omx_resize, m_omx_resize.GetOutputPort(), &m_omx_egl_render, m_omx_egl_render.GetInputPort());
- omx_err = m_omx_tunnel_egl.Establish(false);
+ omx_err = m_omx_tunnel_egl.Establish();
if (omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_egl.Establish (%x)", CLASSNAME, __func__, omx_err);
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index c926ee3bf4..5e77059e8d 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -539,7 +539,8 @@ COMXPlayer::COMXPlayer(IPlayerCallback &callback)
m_omxPlayerAudio(&m_av_clock, m_messenger),
m_dvdPlayerSubtitle(&m_overlayContainer),
m_dvdPlayerTeletext(),
- m_ready(true)
+ m_ready(true),
+ m_DemuxerPausePending(false)
{
m_pDemuxer = NULL;
m_pSubtitleDemuxer = NULL;
@@ -870,8 +871,8 @@ void COMXPlayer::OpenDefaultStreams(bool reset)
if(!valid)
CloseAudioStream(true);
- // enable subtitles
- m_omxPlayerVideo.EnableSubtitle(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn);
+ // enable or disable subtitles
+ SetSubtitleVisible(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn);
// open subtitle stream
OMXSelectionStream as = m_SelectionStreams.Get(STREAM_AUDIO, GetAudioStream());
@@ -892,7 +893,12 @@ void COMXPlayer::OpenDefaultStreams(bool reset)
if(!valid)
{
CloseSubtitleStream(true);
- SetSubtitleVisible(false);
+ if (m_pInputStream && !(m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD) || m_pInputStream->IsStreamType(DVDSTREAM_TYPE_BLURAY)))
+ {
+ SetSubtitleVisible(false);
+ if (GetSubtitleCount() > 0 && CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream == -1)
+ CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream = 0;
+ }
}
// open teletext stream
@@ -1392,6 +1398,12 @@ void COMXPlayer::Process()
if ((!m_omxPlayerAudio.AcceptsData() && m_CurrentAudio.id >= 0) ||
(!m_omxPlayerVideo.AcceptsData() && m_CurrentVideo.id >= 0))
{
+ if(m_pDemuxer && m_DemuxerPausePending)
+ {
+ m_DemuxerPausePending = false;
+ m_pDemuxer->SetSpeed(DVD_PLAYSPEED_PAUSE);
+ }
+
Sleep(10);
continue;
}
@@ -2572,11 +2584,14 @@ void COMXPlayer::HandleMessages()
m_omxPlayerAudio.SetSpeed(speed);
m_omxPlayerVideo.SetSpeed(speed);
- // TODO - we really shouldn't pause demuxer
- // until our buffers are somewhat filled
+ // We can't pause demuxer until our buffers are full. Doing so will result in continued
+ // calls to Read() which may then block indefinitely (CDVDInputStreamRTMP for example).
if(m_pDemuxer)
- m_pDemuxer->SetSpeed(speed);
-
+ {
+ m_DemuxerPausePending = (speed == DVD_PLAYSPEED_PAUSE);
+ if (!m_DemuxerPausePending)
+ m_pDemuxer->SetSpeed(speed);
+ }
CLog::Log(LOGDEBUG, "COMXPlayer - CDVDMsg::PLAYER_SETSPEED speed : %d", speed);
}
else if (pMsg->IsType(CDVDMsg::PLAYER_CHANNEL_SELECT_NUMBER) && m_messenger.GetPacketCount(CDVDMsg::PLAYER_CHANNEL_SELECT_NUMBER) == 0)
@@ -3042,8 +3057,6 @@ float COMXPlayer::GetSubTitleDelay()
// priority: 1: libdvdnav, 2: external subtitles, 3: muxed subtitles
int COMXPlayer::GetSubtitleCount()
{
- OMXStreamLock lock(this);
- m_SelectionStreams.Update(m_pInputStream, m_pDemuxer);
return m_SelectionStreams.Count(STREAM_SUBTITLE);
}
@@ -3095,8 +3108,6 @@ void COMXPlayer::SetSubtitleVisible(bool bVisible)
int COMXPlayer::GetAudioStreamCount()
{
- OMXStreamLock lock(this);
- m_SelectionStreams.Update(m_pInputStream, m_pDemuxer);
return m_SelectionStreams.Count(STREAM_AUDIO);
}
@@ -3235,7 +3246,7 @@ bool COMXPlayer::OpenAudioStream(int iStream, int source, bool reset)
/* software decoding normaly consumes full cpu time so prio it */
m_omxPlayerAudio.SetPriority(GetPriority()+1);
- CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream = m_SelectionStreams.IndexOf(STREAM_AUDIO, source, iStream);
+ CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream = GetAudioStream();
return true;
}
@@ -3425,7 +3436,7 @@ bool COMXPlayer::OpenSubtitleStream(int iStream, int source)
m_CurrentSubtitle.stream = (void*)pStream;
m_CurrentSubtitle.started = false;
- CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream = m_SelectionStreams.IndexOf(STREAM_SUBTITLE, source, iStream);
+ CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream = GetSubtitle();
return true;
}
@@ -3435,7 +3446,7 @@ bool COMXPlayer::AdaptForcedSubtitles()
OMXSelectionStream ss = m_SelectionStreams.Get(STREAM_SUBTITLE, GetSubtitle());
if (ss.flags & CDemuxStream::FLAG_FORCED || !GetSubtitleVisible())
{
- OMXSelectionStream as = m_SelectionStreams.Get(STREAM_SUBTITLE, GetAudioStream());
+ OMXSelectionStream as = m_SelectionStreams.Get(STREAM_AUDIO, GetAudioStream());
OMXSelectionStreams streams = m_SelectionStreams.Get(STREAM_SUBTITLE);
for(OMXSelectionStreams::iterator it = streams.begin(); it != streams.end() && !valid; ++it)
@@ -3749,7 +3760,7 @@ int COMXPlayer::OnDVDNavResult(void* pData, int iMessage)
int iStream = event->physical_wide;
bool visible = !(iStream & 0x80);
- m_omxPlayerVideo.EnableSubtitle(visible);
+ SetSubtitleVisible(visible);
if (iStream >= 0)
m_dvd.iSelectedSPUStream = (iStream & ~0x80);
@@ -4204,7 +4215,15 @@ void COMXPlayer::GetVideoStreamInfo(SPlayerVideoStreamInfo &info)
CStdString retVal;
if (m_pDemuxer && (m_CurrentVideo.id != -1))
+ {
m_pDemuxer->GetStreamCodecName(m_CurrentVideo.id, retVal);
+ CDemuxStreamVideo* stream = static_cast<CDemuxStreamVideo*>(m_pDemuxer->GetStream(m_CurrentVideo.id));
+ if (stream)
+ {
+ info.width = stream->iWidth;
+ info.height = stream->iHeight;
+ }
+ }
info.videoCodecName = retVal;
info.videoAspectRatio = g_renderManager.GetAspectRatio();
g_renderManager.GetVideoRect(info.SrcRect, info.DestRect);
@@ -4484,28 +4503,6 @@ bool COMXPlayer::Record(bool bOnOff)
return false;
}
-int COMXPlayer::GetPictureWidth()
-{
- if (m_pDemuxer && (m_CurrentVideo.id != -1))
- {
- CDemuxStreamVideo* stream = static_cast<CDemuxStreamVideo*>(m_pDemuxer->GetStream(m_CurrentVideo.id));
- if (stream)
- return stream->iWidth;
- }
- return 0;
-}
-
-int COMXPlayer::GetPictureHeight()
-{
- if (m_pDemuxer && (m_CurrentVideo.id != -1))
- {
- CDemuxStreamVideo* stream = static_cast<CDemuxStreamVideo*>(m_pDemuxer->GetStream(m_CurrentVideo.id));
- if (stream)
- return stream->iHeight;
- }
- return 0;
-}
-
bool COMXPlayer::GetStreamDetails(CStreamDetails &details)
{
if (m_pDemuxer)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h
index a4c3160481..96eed11367 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.h
+++ b/xbmc/cores/omxplayer/OMXPlayer.h
@@ -238,8 +238,6 @@ public:
virtual int GetSourceBitrate();
virtual void GetVideoStreamInfo(SPlayerVideoStreamInfo &info);
- virtual int GetPictureWidth();
- virtual int GetPictureHeight();
virtual bool GetStreamDetails(CStreamDetails &details);
virtual void GetAudioStreamInfo(int index, SPlayerAudioStreamInfo &info);
@@ -517,4 +515,6 @@ protected:
bool m_HasVideo;
bool m_HasAudio;
+
+ bool m_DemuxerPausePending;
};
diff --git a/xbmc/cores/omxplayer/OMXVideo.cpp b/xbmc/cores/omxplayer/OMXVideo.cpp
index cb7d5d130a..03ffb948d3 100644
--- a/xbmc/cores/omxplayer/OMXVideo.cpp
+++ b/xbmc/cores/omxplayer/OMXVideo.cpp
@@ -282,14 +282,14 @@ bool COMXVideo::PortSettingsChanged()
m_omx_tunnel_clock.Initialize(m_omx_clock, m_omx_clock->GetInputPort() + 1, &m_omx_sched, m_omx_sched.GetOutputPort() + 1);
- omx_err = m_omx_tunnel_clock.Establish(false);
+ omx_err = m_omx_tunnel_clock.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel_clock.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
return false;
}
- omx_err = m_omx_tunnel_decoder.Establish(false);
+ omx_err = m_omx_tunnel_decoder.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel_decoder.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
@@ -298,7 +298,7 @@ bool COMXVideo::PortSettingsChanged()
if(m_deinterlace)
{
- omx_err = m_omx_tunnel_image_fx.Establish(false);
+ omx_err = m_omx_tunnel_image_fx.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel_image_fx.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
@@ -313,7 +313,7 @@ bool COMXVideo::PortSettingsChanged()
}
}
- omx_err = m_omx_tunnel_sched.Establish(false);
+ omx_err = m_omx_tunnel_sched.Establish();
if(omx_err != OMX_ErrorNone)
{
CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel_sched.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
@@ -686,11 +686,11 @@ void COMXVideo::Close()
m_omx_decoder.FlushInput();
- m_omx_sched.Deinitialize(true);
- m_omx_decoder.Deinitialize(true);
+ m_omx_sched.Deinitialize();
+ m_omx_decoder.Deinitialize();
if(m_deinterlace)
- m_omx_image_fx.Deinitialize(true);
- m_omx_render.Deinitialize(true);
+ m_omx_image_fx.Deinitialize();
+ m_omx_render.Deinitialize();
m_is_open = false;
@@ -756,7 +756,7 @@ int COMXVideo::Decode(uint8_t *pData, int iSize, double pts)
CLog::Log(LOGDEBUG, "OMXVideo::Decode VDec : setStartTime %f\n", (pts == DVD_NOPTS_VALUE ? 0.0 : pts) / DVD_TIME_BASE);
m_setStartTime = false;
}
- if(pts == DVD_NOPTS_VALUE)
+ else if(pts == DVD_NOPTS_VALUE)
omx_buffer->nFlags |= OMX_BUFFERFLAG_TIME_UNKNOWN;
omx_buffer->nTimeStamp = ToOMXTime((uint64_t)(pts == DVD_NOPTS_VALUE) ? 0 : pts);
diff --git a/xbmc/cores/paplayer/PAPlayer.cpp b/xbmc/cores/paplayer/PAPlayer.cpp
index 75e0dd5f18..1785b73ee6 100644
--- a/xbmc/cores/paplayer/PAPlayer.cpp
+++ b/xbmc/cores/paplayer/PAPlayer.cpp
@@ -948,21 +948,13 @@ int PAPlayer::GetCacheLevel() const
return m_playerGUIData.m_cacheLevel;
}
-int PAPlayer::GetBitsPerSample()
-{
- return m_playerGUIData.m_bitsPerSample;
-}
-
-int PAPlayer::GetSampleRate()
-{
- return m_playerGUIData.m_sampleRate;
-}
-
void PAPlayer::GetAudioStreamInfo(int index, SPlayerAudioStreamInfo &info)
{
info.bitrate = m_playerGUIData.m_audioBitrate;
info.channels = m_playerGUIData.m_channelCount;
info.audioCodecName = m_playerGUIData.m_codec;
+ info.samplerate = m_playerGUIData.m_sampleRate;
+ info.bitspersample = m_playerGUIData.m_bitsPerSample;
}
bool PAPlayer::CanSeek()
diff --git a/xbmc/cores/paplayer/PAPlayer.h b/xbmc/cores/paplayer/PAPlayer.h
index c28b9c9390..8321ce2520 100644
--- a/xbmc/cores/paplayer/PAPlayer.h
+++ b/xbmc/cores/paplayer/PAPlayer.h
@@ -65,8 +65,6 @@ public:
virtual int GetCacheLevel() const;
virtual int64_t GetTotalTime();
virtual void GetAudioStreamInfo(int index, SPlayerAudioStreamInfo &info);
- virtual int GetBitsPerSample();
- virtual int GetSampleRate();
virtual int64_t GetTime();
virtual void SeekTime(int64_t iTime = 0);
virtual bool SkipNext();
diff --git a/xbmc/epg/GUIEPGGridContainer.cpp b/xbmc/epg/GUIEPGGridContainer.cpp
index ecd46a77ae..f035115ebf 100644
--- a/xbmc/epg/GUIEPGGridContainer.cpp
+++ b/xbmc/epg/GUIEPGGridContainer.cpp
@@ -937,26 +937,16 @@ void CGUIEPGGridContainer::UpdateItems()
continue;
}
- if (tag->EpgID() != iEpgId)
+ if (tag->EpgID() != iEpgId || gridCursor < tag->StartAsUTC() || m_gridEnd <= tag->StartAsUTC())
break;
- if (m_gridEnd <= tag->StartAsUTC())
- {
- break;
- }
- else if (gridCursor >= tag->EndAsUTC())
- {
- progIdx++;
- }
- else if (gridCursor < tag->EndAsUTC())
+ if (gridCursor < tag->EndAsUTC())
{
m_gridIndex[row][block].item = item;
break;
}
- else
- {
- progIdx++;
- }
+
+ progIdx++;
}
gridCursor += blockDuration;
diff --git a/xbmc/guilib/D3DResource.h b/xbmc/guilib/D3DResource.h
index a9267361de..7e21dbd275 100644
--- a/xbmc/guilib/D3DResource.h
+++ b/xbmc/guilib/D3DResource.h
@@ -52,6 +52,7 @@ public:
LPDIRECT3DTEXTURE9 Get() const { return m_texture; };
UINT GetWidth() const { return m_width; }
UINT GetHeight() const { return m_height; }
+ D3DFORMAT GetFormat() const { return m_format; }
virtual void OnDestroyDevice();
virtual void OnCreateDevice();
diff --git a/xbmc/guilib/DDSImage.cpp b/xbmc/guilib/DDSImage.cpp
index 9d1cbbaa8a..6a8eae6c69 100644
--- a/xbmc/guilib/DDSImage.cpp
+++ b/xbmc/guilib/DDSImage.cpp
@@ -119,6 +119,8 @@ bool CDDSImage::ReadFile(const std::string &inputFile)
bool CDDSImage::Create(const std::string &outputFile, unsigned int width, unsigned int height, unsigned int pitch, unsigned char const *brga, double maxMSE)
{
+ if (!brga)
+ return false;
if (!Compress(width, height, pitch, brga, maxMSE))
{ // use ARGB
Allocate(width, height, XB_FMT_A8R8G8B8);
diff --git a/xbmc/guilib/JpegIO.cpp b/xbmc/guilib/JpegIO.cpp
index 314e1fd1de..ee59d9f019 100644
--- a/xbmc/guilib/JpegIO.cpp
+++ b/xbmc/guilib/JpegIO.cpp
@@ -374,8 +374,9 @@ bool CJpegIO::Read(unsigned char* buffer, unsigned int bufSize, unsigned int min
m_cinfo.scale_denom = 8;
m_cinfo.out_color_space = JCS_RGB;
unsigned int maxtexsize = g_Windowing.GetMaxTextureSize();
- for (m_cinfo.scale_num = 1; m_cinfo.scale_num <= 8; m_cinfo.scale_num++)
+ for (unsigned int scale = 1; scale <= 8; scale++)
{
+ m_cinfo.scale_num = scale;
jpeg_calc_output_dimensions(&m_cinfo);
if ((m_cinfo.output_width > maxtexsize) || (m_cinfo.output_height > maxtexsize))
{
diff --git a/xbmc/guilib/StereoscopicsManager.cpp b/xbmc/guilib/StereoscopicsManager.cpp
index c4e50d2b4b..cb5e3fdeb1 100644
--- a/xbmc/guilib/StereoscopicsManager.cpp
+++ b/xbmc/guilib/StereoscopicsManager.cpp
@@ -170,8 +170,9 @@ std::string CStereoscopicsManager::DetectStereoModeByString(const std::string &n
if (stereoMode.empty())
stereoMode = "mono";
+ else
+ CLog::Log(LOGDEBUG, "StereoscopicsManager: Detected stereo mode in string '%s' is '%s'", CURL::GetRedacted(needle).c_str(), stereoMode.c_str());
- CLog::Log(LOGDEBUG, "StereoscopicsManager: Detected stereo mode in string '%s' is '%s'", CURL::GetRedacted(needle).c_str(), stereoMode.c_str());
return stereoMode;
}
diff --git a/xbmc/guilib/Texture.cpp b/xbmc/guilib/Texture.cpp
index 0dc2561a31..57d7c4e38f 100644
--- a/xbmc/guilib/Texture.cpp
+++ b/xbmc/guilib/Texture.cpp
@@ -175,7 +175,7 @@ void CBaseTexture::ClampToEdge()
}
}
-CBaseTexture *CBaseTexture::LoadFromFile(const CStdString& texturePath, unsigned int idealWidth, unsigned int idealHeight, bool autoRotate)
+CBaseTexture *CBaseTexture::LoadFromFile(const CStdString& texturePath, unsigned int idealWidth, unsigned int idealHeight, bool autoRotate, bool requirePixels)
{
#if defined(TARGET_ANDROID)
CURL url(texturePath);
@@ -203,7 +203,7 @@ CBaseTexture *CBaseTexture::LoadFromFile(const CStdString& texturePath, unsigned
}
#endif
CTexture *texture = new CTexture();
- if (texture->LoadFromFileInternal(texturePath, idealWidth, idealHeight, autoRotate))
+ if (texture->LoadFromFileInternal(texturePath, idealWidth, idealHeight, autoRotate, requirePixels))
return texture;
delete texture;
return NULL;
@@ -218,7 +218,7 @@ CBaseTexture *CBaseTexture::LoadFromFileInMemory(unsigned char *buffer, size_t b
return NULL;
}
-bool CBaseTexture::LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate)
+bool CBaseTexture::LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate, bool requirePixels)
{
if (URIUtils::HasExtension(texturePath, ".dds"))
{ // special case for DDS images
diff --git a/xbmc/guilib/Texture.h b/xbmc/guilib/Texture.h
index aaec96f071..112d6ba580 100644
--- a/xbmc/guilib/Texture.h
+++ b/xbmc/guilib/Texture.h
@@ -57,7 +57,7 @@ public:
\return a CBaseTexture pointer to the created texture - NULL if the texture failed to load.
*/
static CBaseTexture *LoadFromFile(const CStdString& texturePath, unsigned int idealWidth = 0, unsigned int idealHeight = 0,
- bool autoRotate = false);
+ bool autoRotate = false, bool requirePixels = false);
/*! \brief Load a texture from a file in memory
Loads a texture from a file in memory, restricting in size if needed based on maxHeight and maxWidth.
@@ -111,7 +111,7 @@ private:
protected:
bool LoadFromFileInMem(unsigned char* buffer, size_t size, const std::string& mimeType,
unsigned int maxWidth, unsigned int maxHeight);
- bool LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate);
+ bool LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate, bool requirePixels);
bool LoadIImage(IImage* pImage, unsigned char* buffer, unsigned int bufSize, unsigned int width, unsigned int height, bool autoRotate=false);
// helpers for computation of texture parameters for compressed textures
unsigned int GetPitch(unsigned int width) const;
diff --git a/xbmc/guilib/TexturePi.cpp b/xbmc/guilib/TexturePi.cpp
index 156f3d0664..4e7430c4b6 100644
--- a/xbmc/guilib/TexturePi.cpp
+++ b/xbmc/guilib/TexturePi.cpp
@@ -112,7 +112,7 @@ void CPiTexture::Update(unsigned int width, unsigned int height, unsigned int pi
CGLTexture::Update(width, height, pitch, format, pixels, loadToGPU);
}
-bool CPiTexture::LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate)
+bool CPiTexture::LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate, bool requirePixels)
{
if (URIUtils::HasExtension(texturePath, ".jpg|.tbn"))
{
@@ -123,20 +123,32 @@ bool CPiTexture::LoadFromFileInternal(const CStdString& texturePath, unsigned in
int orientation = file->GetOrientation();
// limit the sizes of jpegs (even if we fail to decode)
g_OMXImage.ClampLimits(maxWidth, maxHeight, file->GetWidth(), file->GetHeight(), orientation & 4);
- if (g_OMXImage.DecodeJpegToTexture(file, maxWidth, maxHeight, &m_egl_image) && m_egl_image)
+
+ if (requirePixels)
{
- m_hasAlpha = false;
- if (autoRotate && orientation)
- m_orientation = orientation - 1;
Allocate(maxWidth, maxHeight, XB_FMT_A8R8G8B8);
- okay = true;
+ if (m_pixels && COMXImage::DecodeJpeg(file, maxWidth, GetRows(), GetPitch(), (void *)m_pixels))
+ okay = true;
+ }
+ else
+ {
+ if (g_OMXImage.DecodeJpegToTexture(file, maxWidth, maxHeight, &m_egl_image) && m_egl_image)
+ {
+ Allocate(maxWidth, maxHeight, XB_FMT_A8R8G8B8);
+ okay = true;
+ }
}
g_OMXImage.CloseJpeg(file);
if (okay)
+ {
+ m_hasAlpha = false;
+ if (autoRotate && orientation)
+ m_orientation = orientation - 1;
return true;
+ }
}
}
- return CGLTexture::LoadFromFileInternal(texturePath, maxWidth, maxHeight, autoRotate);
+ return CGLTexture::LoadFromFileInternal(texturePath, maxWidth, maxHeight, autoRotate, requirePixels);
}
#endif
diff --git a/xbmc/guilib/TexturePi.h b/xbmc/guilib/TexturePi.h
index 8df1cf250a..47095b9428 100644
--- a/xbmc/guilib/TexturePi.h
+++ b/xbmc/guilib/TexturePi.h
@@ -38,7 +38,7 @@ public:
void LoadToGPU();
void Update(unsigned int width, unsigned int height, unsigned int pitch, unsigned int format, const unsigned char *pixels, bool loadToGPU);
void Allocate(unsigned int width, unsigned int height, unsigned int format);
- bool LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate);
+ bool LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate, bool requirePixels);
protected:
diff --git a/xbmc/interfaces/json-rpc/ProfilesOperations.cpp b/xbmc/interfaces/json-rpc/ProfilesOperations.cpp
index 3edb628649..3d171ad4a1 100644
--- a/xbmc/interfaces/json-rpc/ProfilesOperations.cpp
+++ b/xbmc/interfaces/json-rpc/ProfilesOperations.cpp
@@ -96,7 +96,7 @@ JSONRPC_STATUS CProfilesOperations::LoadProfile(const CStdString &method, ITrans
bool bPrompt = false;
bPrompt = parameterObject["prompt"].asBoolean();
- bool bCanceled;
+ bool bCanceled(false);
bool bLoadProfile(false);
if (CProfilesManager::Get().GetMasterProfile().getLockMode() == LOCK_MODE_EVERYONE || // Password not needed
diff --git a/xbmc/interfaces/legacy/Player.h b/xbmc/interfaces/legacy/Player.h
index 28e38ed677..ae6c2bc696 100644
--- a/xbmc/interfaces/legacy/Player.h
+++ b/xbmc/interfaces/legacy/Player.h
@@ -75,11 +75,12 @@ namespace XBMCAddon
virtual ~Player(void);
/**
- * play([item, listitem, windowed]) -- Play this item.\n
+ * play([item, listitem, windowed, startpos]) -- Play this item.\n
* \n
* item : [opt] string - filename, url or playlist.\n
* listitem : [opt] listitem - used with setInfo() to set different infolabels.\n
* windowed : [opt] bool - true=play video windowed, false=play users preference.(default)\n
+ * startpos : [opt] int - starting position when playing a playlist. Default = -1\n
* \n
* *Note, If item is not given then the Player will try to play the current item\n
* in the current playlist.\n
@@ -91,6 +92,7 @@ namespace XBMCAddon
* - listitem = xbmcgui.ListItem('Ironman')\n
* - listitem.setInfo('video', {'Title': 'Ironman', 'Genre': 'Science Fiction'})\n
* - xbmc.Player().play(url, listitem, windowed)\n
+ * - xbmc.Player().play(playlist, listitem, windowed, startpos)\n
*/
void play(const PlayParameter& item = Player::defaultPlayParameter,
const XBMCAddon::xbmcgui::ListItem* listitem = NULL, bool windowed = false, int startpos = -1);
diff --git a/xbmc/linux/OMXClock.cpp b/xbmc/linux/OMXClock.cpp
index ef121d9969..4e31e3806c 100644
--- a/xbmc/linux/OMXClock.cpp
+++ b/xbmc/linux/OMXClock.cpp
@@ -131,8 +131,6 @@ bool OMXClock::OMXInitialize(CDVDClock *clock)
if(!m_omx_clock.Initialize((const std::string)componentName, OMX_IndexParamOtherInit))
return false;
- m_omx_clock.DisableAllPorts();
-
return true;
}
diff --git a/xbmc/linux/OMXCore.cpp b/xbmc/linux/OMXCore.cpp
index db01a33132..6e7d9a955d 100644
--- a/xbmc/linux/OMXCore.cpp
+++ b/xbmc/linux/OMXCore.cpp
@@ -63,7 +63,6 @@ COMXCoreTunel::COMXCoreTunel()
m_dst_component = NULL;
m_src_port = 0;
m_dst_port = 0;
- m_portSettingsChanged = false;
m_tunnel_set = false;
m_DllOMX = g_RBP.GetDllOMX();
}
@@ -92,9 +91,6 @@ OMX_ERRORTYPE COMXCoreTunel::Deestablish(bool noWait)
OMX_ERRORTYPE omx_err = OMX_ErrorNone;
- if(m_src_component->GetComponent() && m_portSettingsChanged && !noWait)
- omx_err = m_src_component->WaitForEvent(OMX_EventPortSettingsChanged);
-
if(m_src_component->GetComponent())
{
omx_err = m_src_component->DisablePort(m_src_port, false);
@@ -162,7 +158,7 @@ OMX_ERRORTYPE COMXCoreTunel::Deestablish(bool noWait)
return OMX_ErrorNone;
}
-OMX_ERRORTYPE COMXCoreTunel::Establish(bool portSettingsChanged, bool enable_ports /* = true */, bool disable_ports /* = false */)
+OMX_ERRORTYPE COMXCoreTunel::Establish(bool enable_ports /* = true */, bool disable_ports /* = false */)
{
OMX_ERRORTYPE omx_err = OMX_ErrorNone;
OMX_PARAM_U32TYPE param;
@@ -184,15 +180,6 @@ OMX_ERRORTYPE COMXCoreTunel::Establish(bool portSettingsChanged, bool enable_por
}
}
- if(portSettingsChanged)
- {
- omx_err = m_src_component->WaitForEvent(OMX_EventPortSettingsChanged);
- if(omx_err != OMX_ErrorNone)
- {
- return omx_err;
- }
- }
-
if(m_src_component->GetComponent() && disable_ports)
{
omx_err = m_src_component->DisablePort(m_src_port, false);
@@ -304,8 +291,6 @@ OMX_ERRORTYPE COMXCoreTunel::Establish(bool portSettingsChanged, bool enable_por
}
}
- m_portSettingsChanged = portSettingsChanged;
-
return OMX_ErrorNone;
}
@@ -351,7 +336,7 @@ COMXCoreComponent::COMXCoreComponent()
COMXCoreComponent::~COMXCoreComponent()
{
- Deinitialize(true);
+ Deinitialize();
pthread_mutex_destroy(&m_omx_input_mutex);
pthread_mutex_destroy(&m_omx_output_mutex);
@@ -1442,7 +1427,7 @@ bool COMXCoreComponent::Initialize( const std::string &component_name, OMX_INDEX
{
CLog::Log(LOGERROR, "COMXCoreComponent::Initialize - could not get component handle for %s omx_err(0x%08x)\n",
component_name.c_str(), (int)omx_err);
- Deinitialize(true);
+ Deinitialize();
return false;
}
}
@@ -1457,14 +1442,11 @@ bool COMXCoreComponent::Initialize( const std::string &component_name, OMX_INDEX
component_name.c_str(), (int)omx_err);
}
- if(m_componentName != "OMX.broadcom.clock")
+ omx_err = DisableAllPorts();
+ if (omx_err != OMX_ErrorNone)
{
- omx_err = DisableAllPorts();
- if (omx_err != OMX_ErrorNone)
- {
- CLog::Log(LOGERROR, "COMXCoreComponent::Initialize - error disable ports on component %s omx_err(0x%08x)\n",
- component_name.c_str(), (int)omx_err);
- }
+ CLog::Log(LOGERROR, "COMXCoreComponent::Initialize - error disable ports on component %s omx_err(0x%08x)\n",
+ component_name.c_str(), (int)omx_err);
}
m_input_port = port_param.nStartPortNumber;
@@ -1501,7 +1483,7 @@ void COMXCoreComponent::ResetEos()
pthread_mutex_unlock(&m_omx_eos_mutex);
}
-bool COMXCoreComponent::Deinitialize(bool free_component /* = false */)
+bool COMXCoreComponent::Deinitialize()
{
OMX_ERRORTYPE omx_err;
@@ -1519,23 +1501,20 @@ bool COMXCoreComponent::Deinitialize(bool free_component /* = false */)
TransitionToStateLoaded();
- if(free_component)
+ CLog::Log(LOGDEBUG, "COMXCoreComponent::Deinitialize : %s handle %p\n",
+ m_componentName.c_str(), m_handle);
+ omx_err = m_DllOMX->OMX_FreeHandle(m_handle);
+ if (omx_err != OMX_ErrorNone)
{
- CLog::Log(LOGDEBUG, "COMXCoreComponent::Deinitialize : %s handle %p\n",
- m_componentName.c_str(), m_handle);
- omx_err = m_DllOMX->OMX_FreeHandle(m_handle);
- if (omx_err != OMX_ErrorNone)
- {
- CLog::Log(LOGERROR, "COMXCoreComponent::Deinitialize - failed to free handle for component %s omx_err(0x%08x)",
- m_componentName.c_str(), omx_err);
- }
- m_handle = NULL;
-
- m_input_port = 0;
- m_output_port = 0;
- m_componentName = "";
- m_resource_error = false;
+ CLog::Log(LOGERROR, "COMXCoreComponent::Deinitialize - failed to free handle for component %s omx_err(0x%08x)",
+ m_componentName.c_str(), omx_err);
}
+ m_handle = NULL;
+
+ m_input_port = 0;
+ m_output_port = 0;
+ m_componentName = "";
+ m_resource_error = false;
}
return true;
diff --git a/xbmc/linux/OMXCore.h b/xbmc/linux/OMXCore.h
index 5057a0d27e..54d35aa745 100644
--- a/xbmc/linux/OMXCore.h
+++ b/xbmc/linux/OMXCore.h
@@ -72,9 +72,8 @@ public:
void Initialize(COMXCoreComponent *src_component, unsigned int src_port, COMXCoreComponent *dst_component, unsigned int dst_port);
bool IsInitialized();
OMX_ERRORTYPE Deestablish(bool noWait = false);
- OMX_ERRORTYPE Establish(bool portSettingsChanged, bool enable_ports = true, bool disable_ports = false);
+ OMX_ERRORTYPE Establish(bool enable_ports = true, bool disable_ports = false);
private:
- bool m_portSettingsChanged;
COMXCoreComponent *m_src_component;
COMXCoreComponent *m_dst_component;
unsigned int m_src_port;
@@ -112,7 +111,7 @@ public:
bool Initialize( const std::string &component_name, OMX_INDEXTYPE index);
bool IsInitialized();
- bool Deinitialize(bool free_component = false);
+ bool Deinitialize();
// OMXCore Decoder delegate callback routines.
static OMX_ERRORTYPE DecoderEventHandlerCallback(OMX_HANDLETYPE hComponent, OMX_PTR pAppData,
diff --git a/xbmc/music/infoscanner/MusicInfoScanner.cpp b/xbmc/music/infoscanner/MusicInfoScanner.cpp
index adc946c2e8..95abb29bcd 100644
--- a/xbmc/music/infoscanner/MusicInfoScanner.cpp
+++ b/xbmc/music/infoscanner/MusicInfoScanner.cpp
@@ -1114,7 +1114,7 @@ INFO_RET CMusicInfoScanner::DownloadAlbumInfo(const CAlbum& album, ADDON::Scrape
if (!album.strMusicBrainzAlbumID.empty())
{
CScraperUrl musicBrainzURL;
- if (ResolveMusicBrainz(album.strMusicBrainzAlbumID, info, scraper, musicBrainzURL))
+ if (ResolveMusicBrainz(album.strMusicBrainzAlbumID, info, musicBrainzURL))
{
CMusicAlbumInfo albumNfo("nfo", musicBrainzURL);
scraper.GetAlbums().clear();
@@ -1326,7 +1326,7 @@ INFO_RET CMusicInfoScanner::DownloadArtistInfo(const CArtist& artist, ADDON::Scr
if (!artist.strMusicBrainzArtistID.empty())
{
CScraperUrl musicBrainzURL;
- if (ResolveMusicBrainz(artist.strMusicBrainzArtistID, info, scraper, musicBrainzURL))
+ if (ResolveMusicBrainz(artist.strMusicBrainzArtistID, info, musicBrainzURL))
{
CMusicArtistInfo artistNfo("nfo", musicBrainzURL);
scraper.GetArtists().clear();
@@ -1463,75 +1463,31 @@ INFO_RET CMusicInfoScanner::DownloadArtistInfo(const CArtist& artist, ADDON::Scr
return INFO_ADDED;
}
-bool CMusicInfoScanner::ResolveMusicBrainz(const CStdString strMusicBrainzID, ScraperPtr &preferredScraper, CMusicInfoScraper &musicInfoScraper, CScraperUrl &musicBrainzURL)
+bool CMusicInfoScanner::ResolveMusicBrainz(const CStdString strMusicBrainzID, const ScraperPtr &preferredScraper, CScraperUrl &musicBrainzURL)
{
// We have a MusicBrainz ID
// Get a scraper that can resolve it to a MusicBrainz URL & force our
// search directly to the specific album.
bool bMusicBrainz = false;
- ADDON::TYPE type = ScraperTypeFromContent(preferredScraper->Content());
-
- CFileItemList items;
- ADDON::AddonPtr addon;
- ADDON::ScraperPtr defaultScraper;
- if (ADDON::CAddonMgr::Get().GetDefault(type, addon))
- defaultScraper = boost::dynamic_pointer_cast<CScraper>(addon);
-
- vector<ScraperPtr> vecScrapers;
-
- // add selected scraper - first proirity
- if (preferredScraper)
- vecScrapers.push_back(preferredScraper);
-
- // Add all scrapers except selected and default
- VECADDONS addons;
- CAddonMgr::Get().GetAddons(type, addons);
-
- for (unsigned i = 0; i < addons.size(); ++i)
+ try
{
- ScraperPtr scraper = boost::dynamic_pointer_cast<CScraper>(addons[i]);
-
- // skip if scraper requires settings and there's nothing set yet
- if (!scraper || (scraper->RequiresSettings() && !scraper->HasUserSettings()))
- continue;
-
- if((!preferredScraper || preferredScraper->ID() != scraper->ID()) && (!defaultScraper || defaultScraper->ID() != scraper->ID()) )
- vecScrapers.push_back(scraper);
+ musicBrainzURL = preferredScraper->ResolveIDToUrl(strMusicBrainzID);
}
-
- // add default scraper - not user selectable so it's last priority
- if(defaultScraper &&
- (!preferredScraper || preferredScraper->ID() != defaultScraper->ID()) &&
- (!defaultScraper->RequiresSettings() || defaultScraper->HasUserSettings()))
- vecScrapers.push_back(defaultScraper);
-
- for (unsigned int i=0; i < vecScrapers.size(); ++i)
+ catch (const ADDON::CScraperError &sce)
{
- if (vecScrapers[i]->Type() != type)
- continue;
+ if (sce.FAborted())
+ return false;
+ }
- vecScrapers[i]->ClearCache();
- try
- {
- musicBrainzURL = vecScrapers[i]->ResolveIDToUrl(strMusicBrainzID);
- }
- catch (const ADDON::CScraperError &sce)
- {
- if (!sce.FAborted())
- continue;
- }
- if (!musicBrainzURL.m_url.empty())
- {
- Sleep(2000); // MusicBrainz rate-limits queries to 1 p.s - once we hit the rate-limiter
- // they start serving up the 'you hit the rate-limiter' page fast - meaning
- // we will never get below the rate-limit threshold again in a specific run.
- // This helps us to avoidthe rate-limiter as far as possible.
- CLog::Log(LOGDEBUG,"-- nfo-scraper: %s",vecScrapers[i]->Name().c_str());
- CLog::Log(LOGDEBUG,"-- nfo url: %s", musicBrainzURL.m_url[0].m_url.c_str());
- musicInfoScraper.SetScraperInfo(vecScrapers[i]);
- bMusicBrainz = true;
- break;
- }
+ if (!musicBrainzURL.m_url.empty())
+ {
+ Sleep(2000); // MusicBrainz rate-limits queries to 1 p.s - once we hit the rate-limiter
+ // they start serving up the 'you hit the rate-limiter' page fast - meaning
+ // we will never get below the rate-limit threshold again in a specific run.
+ // This helps us to avoidthe rate-limiter as far as possible.
+ CLog::Log(LOGDEBUG,"-- nfo-scraper: %s",preferredScraper->Name().c_str());
+ CLog::Log(LOGDEBUG,"-- nfo url: %s", musicBrainzURL.m_url[0].m_url.c_str());
+ bMusicBrainz = true;
}
return bMusicBrainz;
diff --git a/xbmc/music/infoscanner/MusicInfoScanner.h b/xbmc/music/infoscanner/MusicInfoScanner.h
index 899a991ab9..09d5ef5da2 100644
--- a/xbmc/music/infoscanner/MusicInfoScanner.h
+++ b/xbmc/music/infoscanner/MusicInfoScanner.h
@@ -198,7 +198,7 @@ protected:
\param preferredScraper [in] A ScraperPtr to the preferred album/artist scraper.
\param musicBrainzURL [out] will be populated with the MB URL for the artist/album.
*/
- bool ResolveMusicBrainz(const CStdString strMusicBrainzID, ADDON::ScraperPtr &preferredScraper, MUSIC_GRABBER::CMusicInfoScraper &musicInfoScraper, CScraperUrl &musicBrainzURL);
+ bool ResolveMusicBrainz(const CStdString strMusicBrainzID, const ADDON::ScraperPtr &preferredScraper, CScraperUrl &musicBrainzURL);
protected:
bool m_showDialog;
diff --git a/xbmc/music/windows/GUIWindowMusicNav.cpp b/xbmc/music/windows/GUIWindowMusicNav.cpp
index 38148b6e8f..d3d2aacaca 100644
--- a/xbmc/music/windows/GUIWindowMusicNav.cpp
+++ b/xbmc/music/windows/GUIWindowMusicNav.cpp
@@ -671,7 +671,7 @@ bool CGUIWindowMusicNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
}
else
{
- CGUIWindowVideoNav::DeleteItem(item.get());
+ CGUIDialogVideoInfo::DeleteVideoItemFromDatabase(item);
CUtil::DeleteVideoDatabaseDirectoryCache();
}
Refresh();
diff --git a/xbmc/osx/Info.plist b/xbmc/osx/Info.plist
index 2c6073295a..2705d2343c 100644
--- a/xbmc/osx/Info.plist
+++ b/xbmc/osx/Info.plist
@@ -9,7 +9,7 @@
<key>CFBundleExecutable</key>
<string>XBMC</string>
<key>CFBundleGetInfoString</key>
- <string>13.0.alpha10</string>
+ <string>13.0.alpha11</string>
<key>CFBundleIconFile</key>
<string>xbmc.icns</string>
<key>CFBundleIdentifier</key>
@@ -19,7 +19,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>13.0.alpha10</string>
+ <string>13.0.alpha11</string>
<key>CFBundleVersion</key>
<string>r####</string>
<key>CFBundleSignature</key>
diff --git a/xbmc/osx/Makefile.in b/xbmc/osx/Makefile.in
index ccf87cdb4b..5a8e861190 100644
--- a/xbmc/osx/Makefile.in
+++ b/xbmc/osx/Makefile.in
@@ -10,6 +10,10 @@ SRCS += DarwinUtils.mm
SRCS += CocoaInterface.mm
SRCS += HotKeyController.m
SRCS += OSXGNUReplacements.c
+SRCS += OSXTextInputResponder.mm
+ifeq ($(findstring osx,@ARCH@), osx)
+SRCS += smc.c
+endif
LIB = osx.a
diff --git a/xbmc/pictures/Picture.cpp b/xbmc/pictures/Picture.cpp
index 7736e360b0..93664149bd 100644
--- a/xbmc/pictures/Picture.cpp
+++ b/xbmc/pictures/Picture.cpp
@@ -179,7 +179,7 @@ bool CPicture::CreateTiledThumb(const std::vector<std::string> &files, const std
int y = i / num_across;
// load in the image
unsigned int width = tile_width - 2*tile_gap, height = tile_height - 2*tile_gap;
- CBaseTexture *texture = CTexture::LoadFromFile(files[i], width, height, CSettings::Get().GetBool("pictures.useexifrotation"));
+ CBaseTexture *texture = CTexture::LoadFromFile(files[i], width, height, CSettings::Get().GetBool("pictures.useexifrotation"), true);
if (texture && texture->GetWidth() && texture->GetHeight())
{
GetScale(texture->GetWidth(), texture->GetHeight(), width, height);
diff --git a/xbmc/playlists/PlayListM3U.cpp b/xbmc/playlists/PlayListM3U.cpp
index ad37918017..3b11efd092 100644
--- a/xbmc/playlists/PlayListM3U.cpp
+++ b/xbmc/playlists/PlayListM3U.cpp
@@ -86,7 +86,7 @@ bool CPlayListM3U::Load(const CStdString& strFileName)
return false;
}
- while (file.ReadString(szLine, 1024))
+ while (file.ReadString(szLine, 4095))
{
strLine = szLine;
StringUtils::Trim(strLine);
diff --git a/xbmc/pvr/channels/PVRChannelGroups.cpp b/xbmc/pvr/channels/PVRChannelGroups.cpp
index 565c0304ec..2582a9b233 100644
--- a/xbmc/pvr/channels/PVRChannelGroups.cpp
+++ b/xbmc/pvr/channels/PVRChannelGroups.cpp
@@ -294,8 +294,7 @@ bool CPVRChannelGroups::Load(void)
}
// set the internal group as selected at startup
- internalChannels->SetSelectedGroup(true);
- m_selectedGroup = internalChannels;
+ SetSelectedGroup(internalChannels);
CLog::Log(LOGDEBUG, "PVR - %s - %d %s channel groups loaded", __FUNCTION__, (int) m_groups.size(), m_bRadio ? "radio" : "TV");
diff --git a/xbmc/rendering/dx/GUIWindowTestPatternDX.cpp b/xbmc/rendering/dx/GUIWindowTestPatternDX.cpp
index b4bc81f696..9cb87ab694 100644
--- a/xbmc/rendering/dx/GUIWindowTestPatternDX.cpp
+++ b/xbmc/rendering/dx/GUIWindowTestPatternDX.cpp
@@ -21,6 +21,12 @@
*/
#include "GUIWindowTestPatternDX.h"
+#include "windowing/WindowingFactory.h"
+#ifndef M_PI
+ #define M_PI 3.14159265358979323846
+#endif
+
+#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
CGUIWindowTestPatternDX::CGUIWindowTestPatternDX(void) : CGUIWindowTestPattern()
{
@@ -32,44 +38,241 @@ CGUIWindowTestPatternDX::~CGUIWindowTestPatternDX(void)
void CGUIWindowTestPatternDX::DrawVerticalLines(int top, int left, int bottom, int right)
{
- // TODO: write dx code
+ CUSTOMVERTEX* vert = new CUSTOMVERTEX[2+(right-left)];
+ int p = 0;
+ for (int i = left; i <= right; i += 2)
+ {
+ vert[p].x = (float)i;
+ vert[p].y = (float)top;
+ vert[p].z = 0.5f;
+ vert[p].rhw = 1.0f;
+ vert[p].color = 0xffffffff;
+ ++p;
+ vert[p].x = (float)i;
+ vert[p].y = (float)bottom;
+ vert[p].z = 0.5f;
+ vert[p].rhw = 1.0f;
+ vert[p].color = 0xffffffff;
+ ++p;
+ }
+ g_Windowing.Get3DDevice()->SetFVF(D3DFVF_CUSTOMVERTEX);
+ g_Windowing.Get3DDevice()->DrawPrimitiveUP(D3DPT_LINELIST, p/2, vert, sizeof(CUSTOMVERTEX));
+
+ delete [] vert;
}
void CGUIWindowTestPatternDX::DrawHorizontalLines(int top, int left, int bottom, int right)
{
- // TODO: write dx code
+ CUSTOMVERTEX* vert = new CUSTOMVERTEX[2+(bottom-top)];
+ int p = 0;
+ for (int i = top; i <= bottom; i += 2)
+ {
+ vert[p].x = (float)left;
+ vert[p].y = (float)i;
+ vert[p].z = 0.5f;
+ vert[p].rhw = 1.0f;
+ vert[p].color = 0xffffffff;
+ ++p;
+ vert[p].x = (float)right;
+ vert[p].y = (float)i;
+ vert[p].z = 0.5f;
+ vert[p].rhw = 1.0f;
+ vert[p].color = 0xffffffff;
+ ++p;
+ }
+ g_Windowing.Get3DDevice()->SetFVF(D3DFVF_CUSTOMVERTEX);
+ g_Windowing.Get3DDevice()->DrawPrimitiveUP(D3DPT_LINELIST, p/2, vert, sizeof(CUSTOMVERTEX));
+ delete [] vert;
}
void CGUIWindowTestPatternDX::DrawCheckers(int top, int left, int bottom, int right)
{
- // TODO: write dx code
+ int c = (bottom-top+1)*(1+(right-left)/2);
+ CUSTOMVERTEX* vert = new CUSTOMVERTEX[c];
+ int i=0;
+ for (int y = top; y <= bottom; y++)
+ {
+ for (int x = left; x <= right; x += 2)
+ {
+ if (y % 2 == 0)
+ {
+ vert[i].x = (float)x;
+ vert[i].y = (float)y;
+ vert[i].z = 0.5f;
+ vert[i].rhw = 1.0f;
+ vert[i].color = 0xffffffff;
+ }
+ else
+ {
+ vert[i].x = (float)x+1.0f;
+ vert[i].y = (float)y;
+ vert[i].z = 0.5f;
+ vert[i].rhw = 1.0f;
+ vert[i].color = 0xffffffff;
+ }
+ ++i;
+ }
+ }
+ g_Windowing.Get3DDevice()->SetFVF(D3DFVF_CUSTOMVERTEX);
+ g_Windowing.Get3DDevice()->DrawPrimitiveUP(D3DPT_POINTLIST, i, vert, sizeof(CUSTOMVERTEX));
+ delete [] vert;
}
void CGUIWindowTestPatternDX::DrawBouncingRectangle(int top, int left, int bottom, int right)
{
- // TODO: write dx code
+ m_bounceX += m_bounceDirectionX;
+ m_bounceY += m_bounceDirectionY;
+
+ if ((m_bounceDirectionX == 1 && m_bounceX + TEST_PATTERNS_BOUNCE_SQUARE_SIZE == right) || (m_bounceDirectionX == -1 && m_bounceX == left))
+ m_bounceDirectionX = -m_bounceDirectionX;
+ if ((m_bounceDirectionY == 1 && m_bounceY + TEST_PATTERNS_BOUNCE_SQUARE_SIZE == bottom) || (m_bounceDirectionY == -1 && m_bounceY == top))
+ m_bounceDirectionY = -m_bounceDirectionY;
+
+ DrawRectangle((float)m_bounceX, (float)m_bounceY, (float)(m_bounceX + TEST_PATTERNS_BOUNCE_SQUARE_SIZE), (float)(m_bounceY + TEST_PATTERNS_BOUNCE_SQUARE_SIZE), 0xffffffff);
}
void CGUIWindowTestPatternDX::DrawContrastBrightnessPattern(int top, int left, int bottom, int right)
{
- // TODO: write dx code
+ DWORD color = 0xffffffff;
+ float x5p = (float) (left + (0.05f * (right - left)));
+ float y5p = (float) (top + (0.05f * (bottom - top)));
+ float x12p = (float) (left + (0.125f * (right - left)));
+ float y12p = (float) (top + (0.125f * (bottom - top)));
+ float x25p = (float) (left + (0.25f * (right - left)));
+ float y25p = (float) (top + (0.25f * (bottom - top)));
+ float x37p = (float) (left + (0.375f * (right - left)));
+ float y37p = (float) (top + (0.375f * (bottom - top)));
+ float x50p = (float)(left + (right - left) / 2);
+ float y50p = (float)(top + (bottom - top) / 2);
+ float x62p = (float) (left + (0.625f * (right - left)));
+ float y62p = (float) (top + (0.625f * (bottom - top)));
+ float x75p = (float) (left + (0.75f * (right - left)));
+ float y75p = (float) (top + (0.75f * (bottom - top)));
+ float x87p = (float) (left + (0.875f * (right - left)));
+ float y87p = (float) (top + (0.875f * (bottom - top)));
+ float x95p = (float) (left + (0.95f * (right - left)));
+ float y95p = (float) (top + (0.95f * (bottom - top)));
+
+ m_blinkFrame = (m_blinkFrame + 1) % TEST_PATTERNS_BLINK_CYCLE;
+
+ // draw main quadrants
+ DrawRectangle(x50p, (float)top, (float)right, y50p, 0xffffffff);
+ DrawRectangle((float)left, (float)y50p, x50p, (float)bottom, 0xffffffff);
+
+ // draw border lines
+ CUSTOMVERTEX vert[] =
+ {
+ {(float)left, y5p, 0.5f, 1.0f, 0xffffffff},
+ {x50p, y5p, 0.5f, 1.0f, 0xffffffff},
+ {x5p, (float)top, 0.5f, 1.0f, 0xffffffff},
+ {x5p, y50p, 0.5f, 1.0f, 0xffffffff},
+ {x50p, y95p, 0.5f, 1.0f, 0xffffffff},
+ {(float)right, y95p, 0.5f, 1.0f, 0xffffffff},
+ {x95p, y50p, 0.5f, 1.0f, 0xffffffff},
+ {x95p, (float)bottom, 0.5f, 1.0f, 0xffffffff},
+
+ {x50p, y5p, 0.5f, 1.0f, 0xff000000},
+ {(float)right, y5p, 0.5f, 1.0f, 0xff000000},
+ {x5p, y50p, 0.5f, 1.0f, 0xff000000},
+ {x5p, (float)bottom, 0.5f, 1.0f, 0xff000000},
+ {(float)left, y95p, 0.5f, 1.0f, 0xff000000},
+ {x50p, y95p, 0.5f, 1.0f, 0xff000000},
+ {x95p, (float)top, 0.5f, 1.0f, 0xff000000},
+ {x95p, y50p, 0.5f, 1.0f, 0xff000000}
+ };
+ g_Windowing.Get3DDevice()->SetFVF(D3DFVF_CUSTOMVERTEX);
+ g_Windowing.Get3DDevice()->DrawPrimitiveUP(D3DPT_LINELIST, 8, vert, sizeof(CUSTOMVERTEX));
+
+ // draw inner rectangles
+ DrawRectangle(x12p, y12p, x37p, y37p, 0xffffffff);
+ DrawRectangle(x62p, y62p, x87p, y87p, 0xffffffff);
+
+ DrawRectangle(x62p, y12p, x87p, y37p, 0xff000000);
+ DrawRectangle(x12p, y62p, x37p, y87p, 0xff000000);
+
+ // draw inner circles
+ if (m_blinkFrame < TEST_PATTERNS_BLINK_CYCLE / 2)
+ color = D3DCOLOR_COLORVALUE(0.05f, 0.05f, 0.05f, 1.0f);
+ else
+ color = D3DCOLOR_COLORVALUE(0.0f, 0.0f, 0.0f, 1.0f);
+ DrawCircleEx(x25p, y75p, (y37p - y12p) / 3, color);
+ DrawCircleEx(x75p, y25p, (y37p - y12p) / 3, color);
+
+ if (m_blinkFrame < TEST_PATTERNS_BLINK_CYCLE / 2)
+ color = D3DCOLOR_COLORVALUE(0.95f, 0.95f, 0.95f, 1.0f);
+ else
+ color = D3DCOLOR_COLORVALUE(1.0f, 1.0f, 1.0f, 1.0f);
+ DrawCircleEx(x25p, y25p, (y37p - y12p) / 3, color);
+ DrawCircleEx(x75p, y75p, (y37p - y12p) / 3, color);
}
void CGUIWindowTestPatternDX::DrawCircle(int originX, int originY, int radius)
{
- // TODO: write dx code
+ DrawCircleEx((float)originX, (float)originY, (float)radius, 0xffffffff);
+}
+
+void CGUIWindowTestPatternDX::DrawCircleEx(float originX, float originY, float radius, DWORD color)
+{
+ float angle;
+ float vectorX;
+ float vectorY;
+ float vectorY1 = originY;
+ float vectorX1 = originX;
+ CUSTOMVERTEX vert[1083]; // 361*3
+ int p = 0;
+
+ for (int i = 0; i <= 360; i++)
+ {
+ angle = (float)(((double)i)/57.29577957795135);
+ vectorX = originX + (radius*(float)sin((double)angle));
+ vectorY = originY + (radius*(float)cos((double)angle));
+ vert[p].x = originX;
+ vert[p].y = originY;
+ vert[p].z = 0.5f;
+ vert[p].rhw = 1.0f;
+ vert[p].color = color;
+ ++p;
+ vert[p].x = vectorX1;
+ vert[p].y = vectorY1;
+ vert[p].z = 0.5f;
+ vert[p].rhw = 1.0f;
+ vert[p].color = color;
+ ++p;
+ vert[p].x = vectorX;
+ vert[p].y = vectorY;
+ vert[p].z = 0.5f;
+ vert[p].rhw = 1.0f;
+ vert[p].color = color;
+ ++p;
+ vectorY1 = vectorY;
+ vectorX1 = vectorX;
+ }
+ g_Windowing.Get3DDevice()->SetFVF(D3DFVF_CUSTOMVERTEX);
+ g_Windowing.Get3DDevice()->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 361, vert, sizeof(CUSTOMVERTEX));
}
void CGUIWindowTestPatternDX::BeginRender()
{
- // TODO: write dx code
+ g_Windowing.Get3DDevice()->Clear(0, NULL, D3DCLEAR_TARGET, 0, 0, 0);
}
void CGUIWindowTestPatternDX::EndRender()
{
- // TODO: write dx code
}
+void CGUIWindowTestPatternDX::DrawRectangle(float x, float y, float x2, float y2, DWORD color)
+{
+ CUSTOMVERTEX vert[] =
+ {
+ {x, y, 0.5f, 1.0f, color},
+ {x2, y, 0.5f, 1.0f, color},
+ {x2, y2, 0.5f, 1.0f, color},
+ {x, y2, 0.5f, 1.0f, color},
+ {x, y, 0.5f, 1.0f, color},
+ };
+ g_Windowing.Get3DDevice()->SetFVF(D3DFVF_CUSTOMVERTEX);
+ g_Windowing.Get3DDevice()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 3, vert, sizeof(CUSTOMVERTEX));
+}
diff --git a/xbmc/rendering/dx/GUIWindowTestPatternDX.h b/xbmc/rendering/dx/GUIWindowTestPatternDX.h
index a176f81177..40035f13e8 100644
--- a/xbmc/rendering/dx/GUIWindowTestPatternDX.h
+++ b/xbmc/rendering/dx/GUIWindowTestPatternDX.h
@@ -39,5 +39,14 @@ private:
virtual void DrawCircle(int originX, int originY, int radius);
virtual void BeginRender();
virtual void EndRender();
+
+ struct CUSTOMVERTEX
+ {
+ FLOAT x, y, z, rhw; // The transformed position for the vertex
+ DWORD color; // The vertex color
+ };
+
+ void DrawRectangle(float x, float y, float x2, float y2, DWORD color);
+ void DrawCircleEx(float originX, float originY, float radius, DWORD color);
};
diff --git a/xbmc/rendering/dx/RenderSystemDX.cpp b/xbmc/rendering/dx/RenderSystemDX.cpp
index ad3a4428ab..654c23fbd9 100644
--- a/xbmc/rendering/dx/RenderSystemDX.cpp
+++ b/xbmc/rendering/dx/RenderSystemDX.cpp
@@ -704,7 +704,9 @@ bool CRenderSystemDX::BeginRender()
}
IDirect3DSurface9 *pBackBuffer;
- m_pD3DDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer);
+ if(m_pD3DDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer) != D3D_OK)
+ return false;
+
m_pD3DDevice->SetRenderTarget(0, pBackBuffer);
pBackBuffer->Release();
@@ -809,10 +811,8 @@ void CRenderSystemDX::SetCameraPosition(const CPoint &camera, int screenWidth, i
return;
// grab the viewport dimensions and location
- D3DVIEWPORT9 viewport;
- m_pD3DDevice->GetViewport(&viewport);
- float w = viewport.Width*0.5f;
- float h = viewport.Height*0.5f;
+ float w = m_viewPort.Width*0.5f;
+ float h = m_viewPort.Height*0.5f;
CPoint offset = camera - CPoint(screenWidth*0.5f, screenHeight*0.5f);
@@ -838,7 +838,6 @@ void CRenderSystemDX::SetCameraPosition(const CPoint &camera, int screenWidth, i
m_world = mtxWorld;
m_view = mtxView;
m_projection = mtxProjection;
- m_viewPort = viewport;
}
void CRenderSystemDX::Project(float &x, float &y, float &z)
@@ -935,13 +934,10 @@ void CRenderSystemDX::GetViewPort(CRect& viewPort)
if (!m_bRenderCreated)
return;
- D3DVIEWPORT9 d3dviewport;
- m_pD3DDevice->GetViewport(&d3dviewport);
-
- viewPort.x1 = (float)d3dviewport.X;
- viewPort.y1 = (float)d3dviewport.Y;
- viewPort.x2 = (float)d3dviewport.X + d3dviewport.Width;
- viewPort.y2 = (float)d3dviewport.Y + d3dviewport.Height;
+ viewPort.x1 = (float)m_viewPort.X;
+ viewPort.y1 = (float)m_viewPort.Y;
+ viewPort.x2 = (float)m_viewPort.X + m_viewPort.Width;
+ viewPort.y2 = (float)m_viewPort.Y + m_viewPort.Height;
}
void CRenderSystemDX::SetViewPort(CRect& viewPort)
@@ -949,15 +945,13 @@ void CRenderSystemDX::SetViewPort(CRect& viewPort)
if (!m_bRenderCreated)
return;
- D3DVIEWPORT9 newviewport;
-
- newviewport.MinZ = 0.0f;
- newviewport.MaxZ = 1.0f;
- newviewport.X = (DWORD)viewPort.x1;
- newviewport.Y = (DWORD)viewPort.y1;
- newviewport.Width = (DWORD)(viewPort.x2 - viewPort.x1);
- newviewport.Height = (DWORD)(viewPort.y2 - viewPort.y1);
- m_pD3DDevice->SetViewport(&newviewport);
+ m_viewPort.MinZ = 0.0f;
+ m_viewPort.MaxZ = 1.0f;
+ m_viewPort.X = (DWORD)viewPort.x1;
+ m_viewPort.Y = (DWORD)viewPort.y1;
+ m_viewPort.Width = (DWORD)(viewPort.x2 - viewPort.x1);
+ m_viewPort.Height = (DWORD)(viewPort.y2 - viewPort.y1);
+ m_pD3DDevice->SetViewport(&m_viewPort);
}
void CRenderSystemDX::SetScissors(const CRect& rect)
@@ -1002,7 +996,7 @@ void CRenderSystemDX::Unregister(ID3DResource* resource)
m_resources.erase(i);
}
-CStdString CRenderSystemDX::GetErrorDescription(HRESULT hr)
+std::string CRenderSystemDX::GetErrorDescription(HRESULT hr)
{
return StringUtils::Format("%X - %s (%s)", hr, DXGetErrorString(hr), DXGetErrorDescription(hr));
}
diff --git a/xbmc/rendering/dx/RenderSystemDX.h b/xbmc/rendering/dx/RenderSystemDX.h
index 28851ffd3d..197fc8f3af 100644
--- a/xbmc/rendering/dx/RenderSystemDX.h
+++ b/xbmc/rendering/dx/RenderSystemDX.h
@@ -107,7 +107,7 @@ public:
*/
void Unregister(ID3DResource *resource);
- static CStdString GetErrorDescription(HRESULT hr);
+ static std::string GetErrorDescription(HRESULT hr);
protected:
bool CreateDevice();
diff --git a/xbmc/rendering/gles/RenderSystemGLES.cpp b/xbmc/rendering/gles/RenderSystemGLES.cpp
index 88d57a61d5..12b7c32cd0 100644
--- a/xbmc/rendering/gles/RenderSystemGLES.cpp
+++ b/xbmc/rendering/gles/RenderSystemGLES.cpp
@@ -395,11 +395,8 @@ void CRenderSystemGLES::SetCameraPosition(const CPoint &camera, int screenWidth,
CPoint offset = camera - CPoint(screenWidth*0.5f, screenHeight*0.5f);
- GLint viewport[4];
- glGetIntegerv(GL_VIEWPORT, viewport);
-
- float w = (float)viewport[2]*0.5f;
- float h = (float)viewport[3]*0.5f;
+ float w = (float)m_viewPort[2]*0.5f;
+ float h = (float)m_viewPort[3]*0.5f;
g_matrices.MatrixMode(MM_MODELVIEW);
g_matrices.LoadIdentity();
@@ -410,7 +407,6 @@ void CRenderSystemGLES::SetCameraPosition(const CPoint &camera, int screenWidth,
g_matrices.Frustum( (-w - offset.x)*0.5f, (w - offset.x)*0.5f, (-h + offset.y)*0.5f, (h + offset.y)*0.5f, h, 100*h);
g_matrices.MatrixMode(MM_MODELVIEW);
- glGetIntegerv(GL_VIEWPORT, m_viewPort);
GLfloat* matx;
matx = g_matrices.GetMatrix(MM_MODELVIEW);
memcpy(m_view, matx, 16 * sizeof(GLfloat));
@@ -516,14 +512,11 @@ void CRenderSystemGLES::GetViewPort(CRect& viewPort)
{
if (!m_bRenderCreated)
return;
-
- GLint glvp[4];
- glGetIntegerv(GL_VIEWPORT, glvp);
-
- viewPort.x1 = glvp[0];
- viewPort.y1 = m_height - glvp[1] - glvp[3];
- viewPort.x2 = glvp[0] + glvp[2];
- viewPort.y2 = viewPort.y1 + glvp[3];
+
+ viewPort.x1 = m_viewPort[0];
+ viewPort.y1 = m_height - m_viewPort[1] - m_viewPort[3];
+ viewPort.x2 = m_viewPort[0] + m_viewPort[2];
+ viewPort.y2 = viewPort.y1 + m_viewPort[3];
}
// FIXME make me const so that I can accept temporary objects
@@ -534,6 +527,10 @@ void CRenderSystemGLES::SetViewPort(CRect& viewPort)
glScissor((GLint) viewPort.x1, (GLint) (m_height - viewPort.y1 - viewPort.Height()), (GLsizei) viewPort.Width(), (GLsizei) viewPort.Height());
glViewport((GLint) viewPort.x1, (GLint) (m_height - viewPort.y1 - viewPort.Height()), (GLsizei) viewPort.Width(), (GLsizei) viewPort.Height());
+ m_viewPort[0] = viewPort.x1;
+ m_viewPort[1] = viewPort.y1;
+ m_viewPort[2] = viewPort.x2;
+ m_viewPort[3] = viewPort.y2;
}
void CRenderSystemGLES::SetScissors(const CRect &rect)
diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp
index 614e86924b..79ce3158af 100644
--- a/xbmc/settings/AdvancedSettings.cpp
+++ b/xbmc/settings/AdvancedSettings.cpp
@@ -1040,8 +1040,9 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file)
XMLUtils::GetFloat(pRootElement, "controllerdeadzone", m_controllerDeadzone, 0.0f, 1.0f);
XMLUtils::GetUInt(pRootElement, "fanartres", m_fanartRes, 0, 1080);
XMLUtils::GetUInt(pRootElement, "imageres", m_imageRes, 0, 1080);
+#if !defined(TARGET_RASPBERRY_PI)
XMLUtils::GetBoolean(pRootElement, "useddsfanart", m_useDDSFanart);
-
+#endif
XMLUtils::GetBoolean(pRootElement, "playlistasfolders", m_playlistAsFolders);
XMLUtils::GetBoolean(pRootElement, "detectasudf", m_detectAsUdf);
diff --git a/xbmc/settings/Settings.cpp b/xbmc/settings/Settings.cpp
index 13fd23600a..9c1c1dbb1b 100644
--- a/xbmc/settings/Settings.cpp
+++ b/xbmc/settings/Settings.cpp
@@ -911,6 +911,9 @@ void CSettings::InitializeConditions()
if (CAndroidFeatures::GetVersion() > 15)
m_settingsManager->AddCondition("has_mediacodec");
#endif
+#ifdef HAS_LIBSTAGEFRIGHT
+ m_settingsManager->AddCondition("have_libstagefrightdecoder");
+#endif
#ifdef HAVE_VIDEOTOOLBOXDECODER
m_settingsManager->AddCondition("have_videotoolboxdecoder");
if (g_sysinfo.HasVideoToolBoxDecoder())
@@ -920,10 +923,6 @@ void CSettings::InitializeConditions()
if (aml_present())
m_settingsManager->AddCondition("have_amcodec");
#endif
-#ifdef HAS_LIBSTAGEFRIGHT
- if (CAndroidFeatures::GetVersion() < 19)
- m_settingsManager->AddCondition("have_libstagefrightdecoder");
-#endif
#ifdef TARGET_DARWIN_IOS_ATV2
if (g_sysinfo.IsAppleTV2())
m_settingsManager->AddCondition("isappletv2");
diff --git a/xbmc/storage/cdioSupport.cpp b/xbmc/storage/cdioSupport.cpp
index 22d273ceda..801627dd85 100644
--- a/xbmc/storage/cdioSupport.cpp
+++ b/xbmc/storage/cdioSupport.cpp
@@ -400,8 +400,8 @@ void CCdIoSupport::PrintAnalysis(int fs, int num_audio)
case FS_ISO_9660_INTERACTIVE:
case FS_ISO_HFS:
case FS_ISO_UDF:
- CLog::Log(LOGINFO, "ISO 9660: %i blocks, label `%.32s'\n",
- m_nIsofsSize, buffer[0] + 40);
+ CLog::Log(LOGINFO, "ISO 9660: %i blocks, label %s",
+ m_nIsofsSize, m_strDiscLabel.c_str());
break;
}
@@ -882,8 +882,8 @@ CCdInfo* CCdIoSupport::GetCdInfo(char* cDeviceFileName)
" ISO 9660 blocks: %6i",
j++, i, m_nStartTrack, m_nIsofsSize);
- CLog::Log(LOGINFO, "ISO 9660: %i blocks, label '%.32s'\n",
- m_nIsofsSize, buffer[0] + 40);
+ CLog::Log(LOGINFO, "ISO 9660: %i blocks, label %s",
+ m_nIsofsSize, m_strDiscLabel.c_str());
m_nFs |= MULTISESSION;
ti.nfsInfo = m_nFs;
}
diff --git a/xbmc/utils/Archive.cpp b/xbmc/utils/Archive.cpp
index 122c41b0c2..a5d3cd4372 100644
--- a/xbmc/utils/Archive.cpp
+++ b/xbmc/utils/Archive.cpp
@@ -22,6 +22,10 @@
#include "filesystem/File.h"
#include "Variant.h"
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wlong-long"
+#endif
+
using namespace XFILE;
#define BUFFER_MAX 4096
@@ -31,7 +35,7 @@ CArchive::CArchive(CFile* pFile, int mode)
m_pFile = pFile;
m_iMode = mode;
- m_pBuffer = new BYTE[BUFFER_MAX];
+ m_pBuffer = new uint8_t[BUFFER_MAX];
memset(m_pBuffer, 0, BUFFER_MAX);
m_BufferPos = 0;
@@ -61,7 +65,7 @@ bool CArchive::IsStoring()
CArchive& CArchive::operator<<(float f)
{
- int size = sizeof(float);
+ const size_t size = sizeof(float);
if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
@@ -73,7 +77,7 @@ CArchive& CArchive::operator<<(float f)
CArchive& CArchive::operator<<(double d)
{
- int size = sizeof(double);
+ const size_t size = sizeof(double);
if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
@@ -83,9 +87,33 @@ CArchive& CArchive::operator<<(double d)
return *this;
}
+CArchive& CArchive::operator<<(short int s)
+{
+ int size = sizeof(s);
+ if (m_BufferPos + size >= BUFFER_MAX)
+ FlushBuffer();
+
+ memcpy(&m_pBuffer[m_BufferPos], &s, size);
+ m_BufferPos += size;
+
+ return *this;
+}
+
+CArchive& CArchive::operator<<(unsigned short int us)
+{
+ int size = sizeof(us);
+ if (m_BufferPos + size >= BUFFER_MAX)
+ FlushBuffer();
+
+ memcpy(&m_pBuffer[m_BufferPos], &us, size);
+ m_BufferPos += size;
+
+ return *this;
+}
+
CArchive& CArchive::operator<<(int i)
{
- int size = sizeof(int);
+ const size_t size = sizeof(int);
if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
@@ -97,7 +125,7 @@ CArchive& CArchive::operator<<(int i)
CArchive& CArchive::operator<<(unsigned int i)
{
- int size = sizeof(unsigned int);
+ const size_t size = sizeof(unsigned int);
if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
@@ -107,81 +135,81 @@ CArchive& CArchive::operator<<(unsigned int i)
return *this;
}
-CArchive& CArchive::operator<<(int64_t i64)
+CArchive& CArchive::operator<<(long int l)
{
- int size = sizeof(int64_t);
+ const size_t size = sizeof(l);
if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
- memcpy(&m_pBuffer[m_BufferPos], &i64, size);
+ memcpy(&m_pBuffer[m_BufferPos], &l, size);
m_BufferPos += size;
return *this;
}
-CArchive& CArchive::operator<<(uint64_t ui64)
+CArchive& CArchive::operator<<(unsigned long int ul)
{
- int size = sizeof(uint64_t);
+ const size_t size = sizeof(ul);
if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
- memcpy(&m_pBuffer[m_BufferPos], &ui64, size);
+ memcpy(&m_pBuffer[m_BufferPos], &ul, size);
m_BufferPos += size;
return *this;
}
-CArchive& CArchive::operator<<(bool b)
+CArchive& CArchive::operator<<(long long int ll)
{
- int size = sizeof(bool);
+ const size_t size = sizeof(ll);
if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
- memcpy(&m_pBuffer[m_BufferPos], &b, size);
+ memcpy(&m_pBuffer[m_BufferPos], &ll, size);
m_BufferPos += size;
return *this;
}
-CArchive& CArchive::operator<<(char c)
+CArchive& CArchive::operator<<(unsigned long long int ull)
{
- int size = sizeof(char);
+ const size_t size = sizeof(ull);
if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
- memcpy(&m_pBuffer[m_BufferPos], &c, size);
+ memcpy(&m_pBuffer[m_BufferPos], &ull, size);
m_BufferPos += size;
return *this;
}
-CArchive& CArchive::operator<<(const std::string& str)
+CArchive& CArchive::operator<<(bool b)
{
- *this << (int)str.size();
-
- int size = str.size();
+ const size_t size = sizeof(bool);
if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
- int iBufferMaxParts=size/BUFFER_MAX;
- for (int i=0; i<iBufferMaxParts; i++)
- {
- memcpy(&m_pBuffer[m_BufferPos], str.c_str()+(i*BUFFER_MAX), BUFFER_MAX);
- m_BufferPos+=BUFFER_MAX;
+ memcpy(&m_pBuffer[m_BufferPos], &b, size);
+ m_BufferPos += size;
+
+ return *this;
+}
+
+CArchive& CArchive::operator<<(char c)
+{
+ const size_t size = sizeof(char);
+ if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
- }
- int iPos=iBufferMaxParts*BUFFER_MAX;
- int iSizeLeft=size-iPos;
- memcpy(&m_pBuffer[m_BufferPos], str.c_str()+iPos, iSizeLeft);
- m_BufferPos+=iSizeLeft;
+ memcpy(&m_pBuffer[m_BufferPos], &c, size);
+ m_BufferPos += size;
return *this;
}
-CArchive& CArchive::operator<<(const CStdString& str)
+CArchive& CArchive::operator<<(const std::string& str)
{
- *this << (unsigned int)str.size();
+ *this << str.size();
int size = str.size();
if (m_BufferPos + size >= BUFFER_MAX)
@@ -203,33 +231,35 @@ CArchive& CArchive::operator<<(const CStdString& str)
return *this;
}
-CArchive& CArchive::operator<<(const CStdStringW& str)
+CArchive& CArchive::operator<<(const std::wstring& wstr)
{
- *this << (unsigned int)str.size();
+ *this << wstr.size();
- int size = str.size() * sizeof(wchar_t);
- if (m_BufferPos + size >= BUFFER_MAX)
- FlushBuffer();
+ unsigned int size = wstr.size() * sizeof(wchar_t);
+ const uint8_t* ptr = (const uint8_t*)wstr.data();
- int iBufferMaxParts=size/BUFFER_MAX;
- for (int i=0; i<iBufferMaxParts; ++i)
+ if (size + m_BufferPos >= BUFFER_MAX)
{
- memcpy(&m_pBuffer[m_BufferPos], str.c_str()+(i*BUFFER_MAX), BUFFER_MAX);
- m_BufferPos+=BUFFER_MAX;
FlushBuffer();
+ while (size >= BUFFER_MAX)
+ {
+ memcpy(m_pBuffer, ptr, BUFFER_MAX);
+ m_BufferPos = BUFFER_MAX;
+ ptr += BUFFER_MAX;
+ size -= BUFFER_MAX;
+ FlushBuffer();
+ }
}
- int iPos=iBufferMaxParts*BUFFER_MAX;
- int iSizeLeft=size-iPos;
- memcpy(&m_pBuffer[m_BufferPos], str.c_str()+iPos, iSizeLeft);
- m_BufferPos+=iSizeLeft;
+ memcpy(m_pBuffer + m_BufferPos, ptr, size);
+ m_BufferPos += size;
return *this;
}
CArchive& CArchive::operator<<(const SYSTEMTIME& time)
{
- int size = sizeof(SYSTEMTIME);
+ const size_t size = sizeof(SYSTEMTIME);
if (m_BufferPos + size >= BUFFER_MAX)
FlushBuffer();
@@ -263,6 +293,9 @@ CArchive& CArchive::operator<<(const CVariant& variant)
case CVariant::VariantTypeString:
*this << variant.asString();
break;
+ case CVariant::VariantTypeWideString:
+ *this << variant.asWideString();
+ break;
case CVariant::VariantTypeDouble:
*this << variant.asDouble();
break;
@@ -290,8 +323,8 @@ CArchive& CArchive::operator<<(const CVariant& variant)
CArchive& CArchive::operator<<(const std::vector<std::string>& strArray)
{
- *this << (unsigned int)strArray.size();
- for (unsigned int index = 0; index < strArray.size(); index++)
+ *this << strArray.size();
+ for (size_t index = 0; index < strArray.size(); index++)
*this << strArray.at(index);
return *this;
@@ -299,8 +332,8 @@ CArchive& CArchive::operator<<(const std::vector<std::string>& strArray)
CArchive& CArchive::operator<<(const std::vector<int>& iArray)
{
- *this << (unsigned int)iArray.size();
- for (unsigned int index = 0; index < iArray.size(); index++)
+ *this << iArray.size();
+ for (size_t index = 0; index < iArray.size(); index++)
*this << iArray.at(index);
return *this;
@@ -320,6 +353,20 @@ CArchive& CArchive::operator>>(double& d)
return *this;
}
+CArchive& CArchive::operator>>(short int& s)
+{
+ m_pFile->Read((void*)&s, sizeof(s));
+
+ return *this;
+}
+
+CArchive& CArchive::operator>>(unsigned short int& us)
+{
+ m_pFile->Read((void*)&us, sizeof(us));
+
+ return *this;
+}
+
CArchive& CArchive::operator>>(int& i)
{
m_pFile->Read((void*)&i, sizeof(int));
@@ -334,16 +381,30 @@ CArchive& CArchive::operator>>(unsigned int& i)
return *this;
}
-CArchive& CArchive::operator>>(int64_t& i64)
+CArchive& CArchive::operator>>(long int& l)
{
- m_pFile->Read((void*)&i64, sizeof(int64_t));
+ m_pFile->Read((void*)&l, sizeof(long));
return *this;
}
-CArchive& CArchive::operator>>(uint64_t& ui64)
+CArchive& CArchive::operator>>(unsigned long int& ul)
{
- m_pFile->Read((void*)&ui64, sizeof(uint64_t));
+ m_pFile->Read((void*)&ul, sizeof(unsigned long));
+
+ return *this;
+}
+
+CArchive& CArchive::operator>>(long long int& ll)
+{
+ m_pFile->Read((void*)&ll, sizeof(ll));
+
+ return *this;
+}
+
+CArchive& CArchive::operator>>(unsigned long long int& ull)
+{
+ m_pFile->Read((void*)&ull, sizeof(ull));
return *this;
}
@@ -364,7 +425,7 @@ CArchive& CArchive::operator>>(char& c)
CArchive& CArchive::operator>>(std::string& str)
{
- int iLength = 0;
+ size_t iLength = 0;
*this >> iLength;
char *s = new char[iLength];
@@ -375,26 +436,15 @@ CArchive& CArchive::operator>>(std::string& str)
return *this;
}
-CArchive& CArchive::operator>>(CStdString& str)
-{
- unsigned int iLength = 0;
- *this >> iLength;
-
- m_pFile->Read((void*)str.GetBufferSetLength(iLength), iLength);
- str.ReleaseBuffer();
-
-
- return *this;
-}
-
-CArchive& CArchive::operator>>(CStdStringW& str)
+CArchive& CArchive::operator>>(std::wstring& wstr)
{
- unsigned int iLength = 0;
+ size_t iLength = 0;
*this >> iLength;
- m_pFile->Read((void*)str.GetBufferSetLength(iLength), iLength * sizeof(wchar_t));
- str.ReleaseBuffer();
-
+ wchar_t * const p = new wchar_t[iLength];
+ m_pFile->Read(p, iLength * sizeof(wchar_t));
+ wstr.assign(p, iLength);
+ delete[] p;
return *this;
}
@@ -415,7 +465,7 @@ CArchive& CArchive::operator>>(IArchivable& obj)
CArchive& CArchive::operator>>(CVariant& variant)
{
- int type;
+ size_t type;
*this >> type;
variant = CVariant((CVariant::VariantType)type);
@@ -449,6 +499,13 @@ CArchive& CArchive::operator>>(CVariant& variant)
variant = value;
break;
}
+ case CVariant::VariantTypeWideString:
+ {
+ std::wstring value;
+ *this >> value;
+ variant = value;
+ break;
+ }
case CVariant::VariantTypeDouble:
{
double value;
@@ -493,10 +550,10 @@ CArchive& CArchive::operator>>(CVariant& variant)
CArchive& CArchive::operator>>(std::vector<std::string>& strArray)
{
- int size;
+ size_t size;
*this >> size;
strArray.clear();
- for (int index = 0; index < size; index++)
+ for (size_t index = 0; index < size; index++)
{
std::string str;
*this >> str;
@@ -508,10 +565,10 @@ CArchive& CArchive::operator>>(std::vector<std::string>& strArray)
CArchive& CArchive::operator>>(std::vector<int>& iArray)
{
- int size;
+ size_t size;
*this >> size;
iArray.clear();
- for (int index = 0; index < size; index++)
+ for (size_t index = 0; index < size; index++)
{
int i;
*this >> i;
diff --git a/xbmc/utils/Archive.h b/xbmc/utils/Archive.h
index 97937c0a25..6ddfc401f0 100644
--- a/xbmc/utils/Archive.h
+++ b/xbmc/utils/Archive.h
@@ -20,7 +20,8 @@
*
*/
-#include "StdString.h"
+#include <string>
+#include <vector>
#include "system.h" // for SYSTEMTIME
namespace XFILE
@@ -43,18 +44,32 @@ class CArchive
public:
CArchive(XFILE::CFile* pFile, int mode);
~CArchive();
+
+ /* CArchive support storing and loading of all C basic integer types
+ * C basic types was chosen instead of fixed size ints (int16_t - int64_t) to support all integer typedefs
+ * For example size_t can be typedef of unsigned int, long or long long depending on platform
+ * while int32_t and int64_t are usually unsigned short, int or long long, but not long
+ * and even if int and long can have same binary representation they are different types for compiler
+ * According to section 5.2.4.2.1 of C99 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
+ * minimal size of short int is 16 bits
+ * minimal size of int is 16 bits (usually 32 or 64 bits, larger or equal to short int)
+ * minimal size of long int is 32 bits (larger or equal to int)
+ * minimal size of long long int is 64 bits (larger or equal to long int) */
// storing
CArchive& operator<<(float f);
CArchive& operator<<(double d);
+ CArchive& operator<<(short int s);
+ CArchive& operator<<(unsigned short int us);
CArchive& operator<<(int i);
CArchive& operator<<(unsigned int i);
- CArchive& operator<<(int64_t i64);
- CArchive& operator<<(uint64_t ui64);
+ CArchive& operator<<(long int l);
+ CArchive& operator<<(unsigned long int ul);
+ CArchive& operator<<(long long int ll);
+ CArchive& operator<<(unsigned long long int ull);
CArchive& operator<<(bool b);
CArchive& operator<<(char c);
CArchive& operator<<(const std::string &str);
- CArchive& operator<<(const CStdString& str);
- CArchive& operator<<(const CStdStringW& str);
+ CArchive& operator<<(const std::wstring& wstr);
CArchive& operator<<(const SYSTEMTIME& time);
CArchive& operator<<(IArchivable& obj);
CArchive& operator<<(const CVariant& variant);
@@ -64,15 +79,18 @@ public:
// loading
CArchive& operator>>(float& f);
CArchive& operator>>(double& d);
+ CArchive& operator>>(short int& i);
+ CArchive& operator>>(unsigned short int& i);
CArchive& operator>>(int& i);
CArchive& operator>>(unsigned int& i);
- CArchive& operator>>(int64_t& i64);
- CArchive& operator>>(uint64_t& ui64);
+ CArchive& operator>>(long int& l);
+ CArchive& operator>>(unsigned long int& ul);
+ CArchive& operator>>(long long int& ll);
+ CArchive& operator>>(unsigned long long int& ull);
CArchive& operator>>(bool& b);
CArchive& operator>>(char& c);
CArchive& operator>>(std::string &str);
- CArchive& operator>>(CStdString& str);
- CArchive& operator>>(CStdStringW& str);
+ CArchive& operator>>(std::wstring& wstr);
CArchive& operator>>(SYSTEMTIME& time);
CArchive& operator>>(IArchivable& obj);
CArchive& operator>>(CVariant& variant);
diff --git a/xbmc/utils/CPUInfo.cpp b/xbmc/utils/CPUInfo.cpp
index e10e7597ba..f47ab62aac 100644
--- a/xbmc/utils/CPUInfo.cpp
+++ b/xbmc/utils/CPUInfo.cpp
@@ -731,13 +731,13 @@ bool CCPUInfo::readProcStat(unsigned long long& user, unsigned long long& nice,
return true;
}
-CStdString CCPUInfo::GetCoresUsageString() const
+std::string CCPUInfo::GetCoresUsageString() const
{
- CStdString strCores;
+ std::string strCores;
map<int, CoreInfo>::const_iterator iter = m_cores.begin();
while (iter != m_cores.end())
{
- CStdString strCore;
+ std::string strCore;
#ifdef TARGET_WINDOWS
// atm we get only the average over all cores
strCore = StringUtils::Format("CPU %d core(s) average: %3.1f%% ", m_cpuCount, iter->second.m_fPct);
diff --git a/xbmc/utils/CPUInfo.h b/xbmc/utils/CPUInfo.h
index 49264a9e91..093884b12e 100644
--- a/xbmc/utils/CPUInfo.h
+++ b/xbmc/utils/CPUInfo.h
@@ -53,12 +53,12 @@ struct CoreInfo
unsigned long long m_system;
unsigned long long m_idle;
unsigned long long m_io;
- CStdString m_strVendor;
- CStdString m_strModel;
- CStdString m_strBogoMips;
- CStdString m_strHardware;
- CStdString m_strRevision;
- CStdString m_strSerial;
+ std::string m_strVendor;
+ std::string m_strModel;
+ std::string m_strBogoMips;
+ std::string m_strHardware;
+ std::string m_strRevision;
+ std::string m_strSerial;
CoreInfo() : m_id(0), m_fSpeed(.0), m_fPct(.0), m_user(0LL), m_nice(0LL), m_system(0LL), m_idle(0LL), m_io(0LL) {}
};
@@ -81,7 +81,7 @@ public:
const CoreInfo &GetCoreInfo(int nCoreId);
bool HasCoreId(int nCoreId) const;
- CStdString GetCoresUsageString() const;
+ std::string GetCoresUsageString() const;
unsigned int GetCPUFeatures() { return m_cpuFeatures; }
diff --git a/xbmc/utils/CharsetConverter.cpp b/xbmc/utils/CharsetConverter.cpp
index ab26fb4c99..bf8d61d34c 100644
--- a/xbmc/utils/CharsetConverter.cpp
+++ b/xbmc/utils/CharsetConverter.cpp
@@ -172,9 +172,10 @@ CConverterType::CConverterType(const CConverterType& other) : CCriticalSection()
CConverterType::~CConverterType()
{
- CSingleLock(*this);
+ CSingleLock lock(*this);
if (m_iconv != NO_ICONV)
iconv_close(m_iconv);
+ lock.Leave(); // ensure unlocking before final destruction
}
@@ -204,7 +205,7 @@ iconv_t CConverterType::GetConverter(CSingleLock& converterLock)
void CConverterType::Reset(void)
{
- CSingleLock(*this);
+ CSingleLock lock(*this);
if (m_iconv != NO_ICONV)
{
iconv_close(m_iconv);
@@ -220,7 +221,7 @@ void CConverterType::Reset(void)
void CConverterType::ReinitTo(const std::string& sourceCharset, const std::string& targetCharset, unsigned int targetSingleCharMaxLen /*= 1*/)
{
- CSingleLock(*this);
+ CSingleLock lock(*this);
if (sourceCharset != m_sourceCharset || targetCharset != m_targetCharset)
{
if (m_iconv != NO_ICONV)
diff --git a/xbmc/utils/CharsetDetection.h b/xbmc/utils/CharsetDetection.h
index 5f2ec6506f..6e6f47bc0d 100644
--- a/xbmc/utils/CharsetDetection.h
+++ b/xbmc/utils/CharsetDetection.h
@@ -40,7 +40,7 @@ public:
* @param content the text to analyze
* @return detected encoding or empty string if BOM not detected
*/
- static inline std::string GetBomEncoding(const std::string& content, std::string& detectedEncoding)
+ static inline std::string GetBomEncoding(const std::string& content)
{ return GetBomEncoding(content.c_str(), content.length()); }
static inline bool DetectXmlEncoding(const std::string& xmlContent, std::string& detectedEncoding)
diff --git a/xbmc/utils/LangCodeExpander.cpp b/xbmc/utils/LangCodeExpander.cpp
index 23023aa158..4d5f92a123 100644
--- a/xbmc/utils/LangCodeExpander.cpp
+++ b/xbmc/utils/LangCodeExpander.cpp
@@ -33,7 +33,7 @@ typedef struct LCENTRY
const char *name;
} LCENTRY;
-extern const struct LCENTRY g_iso639_1[145];
+extern const struct LCENTRY g_iso639_1[186];
extern const struct LCENTRY g_iso639_2[538];
struct CharCodeConvertionWithHack
@@ -50,7 +50,7 @@ struct CharCodeConvertion
};
// declared as extern to allow forward declaration
-extern const CharCodeConvertionWithHack CharCode2To3[184];
+extern const CharCodeConvertionWithHack CharCode2To3[189];
extern const CharCodeConvertion RegionCode2To3[246];
CLangCodeExpander::CLangCodeExpander(void)
@@ -497,33 +497,45 @@ CStdString CLangCodeExpander::ConvertToISO6392T(const CStdString& lang)
return lang;
}
-extern const LCENTRY g_iso639_1[145] =
+extern const LCENTRY g_iso639_1[186] =
{
{ MAKECODE('\0','\0','c','c'), "Closed Caption" },
{ MAKECODE('\0','\0','a','a'), "Afar" },
- { MAKECODE('\0','\0','a','b'), "Abkhaz" },
{ MAKECODE('\0','\0','a','b'), "Abkhazian" },
+ { MAKECODE('\0','\0','a','e'), "Avestan" },
{ MAKECODE('\0','\0','a','f'), "Afrikaans" },
+ { MAKECODE('\0','\0','a','k'), "Akan" },
{ MAKECODE('\0','\0','a','m'), "Amharic" },
+ { MAKECODE('\0','\0','a','n'), "Aragonese" },
{ MAKECODE('\0','\0','a','r'), "Arabic" },
{ MAKECODE('\0','\0','a','s'), "Assamese" },
+ { MAKECODE('\0','\0','a','v'), "Avaric" },
{ MAKECODE('\0','\0','a','y'), "Aymara" },
{ MAKECODE('\0','\0','a','z'), "Azerbaijani" },
{ MAKECODE('\0','\0','b','a'), "Bashkir" },
- { MAKECODE('\0','\0','b','e'), "Byelorussian" },
+ { MAKECODE('\0','\0','b','e'), "Belarusian" },
{ MAKECODE('\0','\0','b','g'), "Bulgarian" },
{ MAKECODE('\0','\0','b','h'), "Bihari" },
{ MAKECODE('\0','\0','b','i'), "Bislama" },
+ { MAKECODE('\0','\0','b','m'), "Bambara" },
{ MAKECODE('\0','\0','b','n'), "Bengali; Bangla" },
{ MAKECODE('\0','\0','b','o'), "Tibetan" },
{ MAKECODE('\0','\0','b','r'), "Breton" },
+ { MAKECODE('\0','\0','b','s'), "Bosnian" },
{ MAKECODE('\0','\0','c','a'), "Catalan" },
+ { MAKECODE('\0','\0','c','e'), "Chechen" },
+ { MAKECODE('\0','\0','c','h'), "Chamorro" },
{ MAKECODE('\0','\0','c','o'), "Corsican" },
+ { MAKECODE('\0','\0','c','r'), "Cree" },
{ MAKECODE('\0','\0','c','s'), "Czech" },
+ { MAKECODE('\0','\0','c','u'), "Church Slavic" },
+ { MAKECODE('\0','\0','c','v'), "Chuvash" },
{ MAKECODE('\0','\0','c','y'), "Welsh" },
{ MAKECODE('\0','\0','d','a'), "Danish" },
{ MAKECODE('\0','\0','d','e'), "German" },
- { MAKECODE('\0','\0','d','z'), "Bhutani" },
+ { MAKECODE('\0','\0','d','v'), "Dhivehi" },
+ { MAKECODE('\0','\0','d','z'), "Dzongkha" },
+ { MAKECODE('\0','\0','e','e'), "Ewe" },
{ MAKECODE('\0','\0','e','l'), "Greek" },
{ MAKECODE('\0','\0','e','n'), "English" },
{ MAKECODE('\0','\0','e','o'), "Esperanto" },
@@ -531,78 +543,104 @@ extern const LCENTRY g_iso639_1[145] =
{ MAKECODE('\0','\0','e','t'), "Estonian" },
{ MAKECODE('\0','\0','e','u'), "Basque" },
{ MAKECODE('\0','\0','f','a'), "Persian" },
+ { MAKECODE('\0','\0','f','f'), "Fulah" },
{ MAKECODE('\0','\0','f','i'), "Finnish" },
- { MAKECODE('\0','\0','f','j'), "Fiji" },
+ { MAKECODE('\0','\0','f','j'), "Fijian" },
{ MAKECODE('\0','\0','f','o'), "Faroese" },
{ MAKECODE('\0','\0','f','r'), "French" },
- { MAKECODE('\0','\0','f','y'), "Frisian" },
+ { MAKECODE('\0','\0','f','y'), "Western Frisian" },
{ MAKECODE('\0','\0','g','a'), "Irish" },
- { MAKECODE('\0','\0','g','d'), "Scots Gaelic" },
+ { MAKECODE('\0','\0','g','d'), "Scottish Gaelic" },
{ MAKECODE('\0','\0','g','l'), "Galician" },
{ MAKECODE('\0','\0','g','n'), "Guarani" },
{ MAKECODE('\0','\0','g','u'), "Gujarati" },
+ { MAKECODE('\0','\0','g','v'), "Manx" },
{ MAKECODE('\0','\0','h','a'), "Hausa" },
{ MAKECODE('\0','\0','h','e'), "Hebrew" },
{ MAKECODE('\0','\0','h','i'), "Hindi" },
+ { MAKECODE('\0','\0','h','o'), "Hiri Motu" },
{ MAKECODE('\0','\0','h','r'), "Croatian" },
+ { MAKECODE('\0','\0','h','t'), "Haitian" },
{ MAKECODE('\0','\0','h','u'), "Hungarian" },
{ MAKECODE('\0','\0','h','y'), "Armenian" },
+ { MAKECODE('\0','\0','h','z'), "Herero" },
{ MAKECODE('\0','\0','i','a'), "Interlingua" },
{ MAKECODE('\0','\0','i','d'), "Indonesian" },
{ MAKECODE('\0','\0','i','e'), "Interlingue" },
- { MAKECODE('\0','\0','i','k'), "Inupiak" },
- { MAKECODE('\0','\0','i','n'), "Indonesian" },
+ { MAKECODE('\0','\0','i','g'), "Igbo" },
+ { MAKECODE('\0','\0','i','i'), "Sichuan Yi" },
+ { MAKECODE('\0','\0','i','k'), "Inupiat" },
+ { MAKECODE('\0','\0','i','o'), "Ido" },
{ MAKECODE('\0','\0','i','s'), "Icelandic" },
{ MAKECODE('\0','\0','i','t'), "Italian" },
{ MAKECODE('\0','\0','i','u'), "Inuktitut" },
- { MAKECODE('\0','\0','i','w'), "Hebrew" },
{ MAKECODE('\0','\0','j','a'), "Japanese" },
- { MAKECODE('\0','\0','j','i'), "Yiddish" },
- { MAKECODE('\0','\0','j','w'), "Javanese" },
+ { MAKECODE('\0','\0','j','v'), "Javanese" },
{ MAKECODE('\0','\0','k','a'), "Georgian" },
+ { MAKECODE('\0','\0','k','g'), "Kongo" },
+ { MAKECODE('\0','\0','k','i'), "Kikuyu" },
+ { MAKECODE('\0','\0','k','j'), "Kuanyama" },
{ MAKECODE('\0','\0','k','k'), "Kazakh" },
- { MAKECODE('\0','\0','k','l'), "Greenlandic" },
- { MAKECODE('\0','\0','k','m'), "Cambodian" },
+ { MAKECODE('\0','\0','k','l'), "Kalaallisut" },
+ { MAKECODE('\0','\0','k','m'), "Khmer" },
{ MAKECODE('\0','\0','k','n'), "Kannada" },
{ MAKECODE('\0','\0','k','o'), "Korean" },
+ { MAKECODE('\0','\0','k','r'), "Kanuri" },
{ MAKECODE('\0','\0','k','s'), "Kashmiri" },
{ MAKECODE('\0','\0','k','u'), "Kurdish" },
+ { MAKECODE('\0','\0','k','v'), "Komi" },
+ { MAKECODE('\0','\0','k','w'), "Cornish" },
{ MAKECODE('\0','\0','k','y'), "Kirghiz" },
{ MAKECODE('\0','\0','l','a'), "Latin" },
+ { MAKECODE('\0','\0','l','b'), "Luxembourgish" },
+ { MAKECODE('\0','\0','l','g'), "Ganda" },
+ { MAKECODE('\0','\0','l','i'), "Limburgan" },
{ MAKECODE('\0','\0','l','n'), "Lingala" },
- { MAKECODE('\0','\0','l','o'), "Laothian" },
+ { MAKECODE('\0','\0','l','o'), "Lao" },
{ MAKECODE('\0','\0','l','t'), "Lithuanian" },
+ { MAKECODE('\0','\0','l','u'), "Luba-Katanga" },
{ MAKECODE('\0','\0','l','v'), "Latvian, Lettish" },
{ MAKECODE('\0','\0','m','g'), "Malagasy" },
+ { MAKECODE('\0','\0','m','h'), "Marshallese" },
{ MAKECODE('\0','\0','m','i'), "Maori" },
{ MAKECODE('\0','\0','m','k'), "Macedonian" },
{ MAKECODE('\0','\0','m','l'), "Malayalam" },
{ MAKECODE('\0','\0','m','n'), "Mongolian" },
- { MAKECODE('\0','\0','m','o'), "Moldavian" },
{ MAKECODE('\0','\0','m','r'), "Marathi" },
{ MAKECODE('\0','\0','m','s'), "Malay" },
{ MAKECODE('\0','\0','m','t'), "Maltese" },
{ MAKECODE('\0','\0','m','y'), "Burmese" },
{ MAKECODE('\0','\0','n','a'), "Nauru" },
+ { MAKECODE('\0','\0','n','b'), "Bokmål, Norwegian" },
+ { MAKECODE('\0','\0','n','d'), "Ndebele, North" },
{ MAKECODE('\0','\0','n','e'), "Nepali" },
+ { MAKECODE('\0','\0','n','g'), "Ndonga" },
{ MAKECODE('\0','\0','n','l'), "Dutch" },
+ { MAKECODE('\0','\0','n','n'), "Norwegian Nynorsk" },
{ MAKECODE('\0','\0','n','o'), "Norwegian" },
+ { MAKECODE('\0','\0','n','r'), "Ndebele, South" },
+ { MAKECODE('\0','\0','n','v'), "Navajo" },
+ { MAKECODE('\0','\0','n','y'), "Chichewa" },
{ MAKECODE('\0','\0','o','c'), "Occitan" },
- { MAKECODE('\0','\0','o','s'), "Ossetic" },
- { MAKECODE('\0','\0','o','m'), "(Afan) Oromo" },
+ { MAKECODE('\0','\0','o','j'), "Ojibwa" },
+ { MAKECODE('\0','\0','o','m'), "Oromo" },
{ MAKECODE('\0','\0','o','r'), "Oriya" },
+ { MAKECODE('\0','\0','o','s'), "Ossetic" },
{ MAKECODE('\0','\0','p','a'), "Punjabi" },
+ { MAKECODE('\0','\0','p','i'), "Pali" },
{ MAKECODE('\0','\0','p','l'), "Polish" },
{ MAKECODE('\0','\0','p','s'), "Pashto, Pushto" },
{ MAKECODE('\0','\0','p','t'), "Portuguese" },
{ MAKECODE('\0','\0','q','u'), "Quechua" },
- { MAKECODE('\0','\0','r','m'), "Rhaeto-Romance" },
+ { MAKECODE('\0','\0','r','m'), "Romansh" },
{ MAKECODE('\0','\0','r','n'), "Kirundi" },
{ MAKECODE('\0','\0','r','o'), "Romanian" },
{ MAKECODE('\0','\0','r','u'), "Russian" },
{ MAKECODE('\0','\0','r','w'), "Kinyarwanda" },
{ MAKECODE('\0','\0','s','a'), "Sanskrit" },
+ { MAKECODE('\0','\0','s','c'), "Sardinian" },
{ MAKECODE('\0','\0','s','d'), "Sindhi" },
+ { MAKECODE('\0','\0','s','e'), "Northern Sami" },
{ MAKECODE('\0','\0','s','g'), "Sangho" },
{ MAKECODE('\0','\0','s','h'), "Serbo-Croatian" },
{ MAKECODE('\0','\0','s','i'), "Sinhalese" },
@@ -613,7 +651,7 @@ extern const LCENTRY g_iso639_1[145] =
{ MAKECODE('\0','\0','s','o'), "Somali" },
{ MAKECODE('\0','\0','s','q'), "Albanian" },
{ MAKECODE('\0','\0','s','r'), "Serbian" },
- { MAKECODE('\0','\0','s','s'), "Siswati" },
+ { MAKECODE('\0','\0','s','s'), "Swati" },
{ MAKECODE('\0','\0','s','t'), "Sesotho" },
{ MAKECODE('\0','\0','s','u'), "Sundanese" },
{ MAKECODE('\0','\0','s','v'), "Swedish" },
@@ -625,18 +663,21 @@ extern const LCENTRY g_iso639_1[145] =
{ MAKECODE('\0','\0','t','i'), "Tigrinya" },
{ MAKECODE('\0','\0','t','k'), "Turkmen" },
{ MAKECODE('\0','\0','t','l'), "Tagalog" },
- { MAKECODE('\0','\0','t','n'), "Setswana" },
+ { MAKECODE('\0','\0','t','n'), "Tswana" },
{ MAKECODE('\0','\0','t','o'), "Tonga" },
{ MAKECODE('\0','\0','t','r'), "Turkish" },
{ MAKECODE('\0','\0','t','s'), "Tsonga" },
{ MAKECODE('\0','\0','t','t'), "Tatar" },
{ MAKECODE('\0','\0','t','w'), "Twi" },
+ { MAKECODE('\0','\0','t','y'), "Tahitian" },
{ MAKECODE('\0','\0','u','g'), "Uighur" },
{ MAKECODE('\0','\0','u','k'), "Ukrainian" },
{ MAKECODE('\0','\0','u','r'), "Urdu" },
{ MAKECODE('\0','\0','u','z'), "Uzbek" },
+ { MAKECODE('\0','\0','v','e'), "Venda" },
{ MAKECODE('\0','\0','v','i'), "Vietnamese" },
{ MAKECODE('\0','\0','v','o'), "Volapuk" },
+ { MAKECODE('\0','\0','w','a'), "Walloon" },
{ MAKECODE('\0','\0','w','o'), "Wolof" },
{ MAKECODE('\0','\0','x','h'), "Xhosa" },
{ MAKECODE('\0','\0','y','i'), "Yiddish" },
@@ -996,6 +1037,7 @@ extern const LCENTRY g_iso639_2[538] =
{ MAKECODE('\0','n','i','c'), "Niger-Kordofanian (Other)" },
{ MAKECODE('\0','s','s','a'), "Nilo-Saharan (Other)" },
{ MAKECODE('\0','n','i','u'), "Niuean" },
+ { MAKECODE('\0','z','x','x'), "No linguistic content" },
{ MAKECODE('\0','n','o','g'), "Nogai" },
{ MAKECODE('\0','n','o','n'), "Norse, Old" },
{ MAKECODE('\0','n','a','i'), "North American Indian (Other)" },
@@ -1186,10 +1228,9 @@ extern const LCENTRY g_iso639_2[538] =
{ MAKECODE('\0','z','h','a'), "Zhuang" },
{ MAKECODE('\0','z','u','l'), "Zulu" },
{ MAKECODE('\0','z','u','n'), "Zuni" },
- { MAKECODE('\0','u','n','d'), "Undetermined" }, // non-ISO entry for Matroska special language code
};
-const CharCodeConvertionWithHack CharCode2To3[184] =
+const CharCodeConvertionWithHack CharCode2To3[189] =
{
{ "aa", "aar", NULL },
{ "ab", "abk", NULL },
@@ -1327,6 +1368,7 @@ const CharCodeConvertionWithHack CharCode2To3[184] =
{ "ro", "rum", "ron" },
{ "rn", "run", NULL },
{ "ru", "rus", NULL },
+ { "sh", "scr", NULL },
{ "sg", "sag", NULL },
{ "sa", "san", NULL },
{ "si", "sin", NULL },
@@ -1374,7 +1416,11 @@ const CharCodeConvertionWithHack CharCode2To3[184] =
{ "yo", "yor", NULL },
{ "za", "zha", NULL },
{ "zh", "chi", NULL },
- { "zu", "zul", NULL }
+ { "zu", "zul", NULL },
+ { "zv", "und", NULL }, // XBMC intern mapping for missing "Undetermined" iso639-1 code
+ { "zx", "zxx", NULL }, // XBMC intern mapping for missing "No linguistic content" iso639-1 code
+ { "zy", "mis", NULL }, // XBMC intern mapping for missing "Miscellaneous languages" iso639-1 code
+ { "zz", "mul", NULL } // XBMC intern mapping for missing "Multiple languages" iso639-1 code
};
// Based on ISO 3166
diff --git a/xbmc/utils/Makefile.in b/xbmc/utils/Makefile.in
index 143937ffd4..851358ef20 100644
--- a/xbmc/utils/Makefile.in
+++ b/xbmc/utils/Makefile.in
@@ -72,6 +72,7 @@ SRCS += Vector.cpp
SRCS += Weather.cpp
SRCS += XBMCTinyXML.cpp
SRCS += XMLUtils.cpp
+SRCS += Utf8Utils.cpp
SRCS += ActorProtocol.cpp
ifeq (@USE_OPENGLES@,1)
diff --git a/xbmc/utils/RegExp.cpp b/xbmc/utils/RegExp.cpp
index 7db40df82b..5afa971c47 100644
--- a/xbmc/utils/RegExp.cpp
+++ b/xbmc/utils/RegExp.cpp
@@ -25,6 +25,7 @@
#include "StdString.h"
#include "log.h"
#include "utils/StringUtils.h"
+#include "utils/Utf8Utils.h"
using namespace PCRE;
@@ -226,6 +227,7 @@ int CRegExp::PrivateRegFind(size_t bufferLen, const char *str, unsigned int star
if (rc<1)
{
+ static const int fragmentLen = 80; // length of excerpt before erroneous char for log
switch(rc)
{
case PCRE_ERROR_NOMATCH:
@@ -237,11 +239,24 @@ int CRegExp::PrivateRegFind(size_t bufferLen, const char *str, unsigned int star
#ifdef PCRE_ERROR_SHORTUTF8
case PCRE_ERROR_SHORTUTF8:
+ {
+ const size_t startPos = (m_subject.length() > fragmentLen) ? CUtf8Utils::RFindValidUtf8Char(m_subject, m_subject.length() - fragmentLen) : 0;
+ if (startPos != std::string::npos)
+ CLog::Log(LOGERROR, "PCRE: Bad UTF-8 character at the end of string. Text before bad character: \"%s\"", m_subject.substr(startPos).c_str());
+ else
+ CLog::Log(LOGERROR, "PCRE: Bad UTF-8 character at the end of string");
+ return -1;
+ }
#endif
case PCRE_ERROR_BADUTF8:
- CLog::Log(LOGERROR, "PCRE: Bad UTF-8 character");
- return -1;
-
+ {
+ const size_t startPos = (m_iOvector[0] > fragmentLen) ? CUtf8Utils::RFindValidUtf8Char(m_subject, m_iOvector[0] - fragmentLen) : 0;
+ if (m_iOvector[0] >= 0 && startPos != std::string::npos)
+ CLog::Log(LOGERROR, "PCRE: Bad UTF-8 character, error code: %d, position: %d. Text before bad char: \"%s\"", m_iOvector[1], m_iOvector[0], m_subject.substr(startPos, m_iOvector[0] - startPos + 1).c_str());
+ else
+ CLog::Log(LOGERROR, "PCRE: Bad UTF-8 character, error code: %d, position: %d", m_iOvector[1], m_iOvector[0]);
+ return -1;
+ }
case PCRE_ERROR_BADUTF8_OFFSET:
CLog::Log(LOGERROR, "PCRE: Offset is pointing to the middle of UTF-8 character");
return -1;
diff --git a/xbmc/utils/StreamDetails.h b/xbmc/utils/StreamDetails.h
index 4f62ae780f..67aff50eba 100644
--- a/xbmc/utils/StreamDetails.h
+++ b/xbmc/utils/StreamDetails.h
@@ -19,6 +19,7 @@
*
*/
+#include "utils/StdString.h"
#include "Archive.h"
#include "ISerializable.h"
#include <vector>
diff --git a/xbmc/utils/StringUtils.cpp b/xbmc/utils/StringUtils.cpp
index c5ae6d8ed9..e34a2a5785 100644
--- a/xbmc/utils/StringUtils.cpp
+++ b/xbmc/utils/StringUtils.cpp
@@ -264,7 +264,7 @@ std::string& StringUtils::TrimLeft(std::string &str)
std::string& StringUtils::TrimLeft(std::string &str, const std::string& chars)
{
size_t nidx = str.find_first_not_of(chars);
- str.substr(nidx == str.npos ? 0 : nidx).swap(str);
+ str.erase(0, nidx);
return str;
}
diff --git a/xbmc/utils/Utf8Utils.cpp b/xbmc/utils/Utf8Utils.cpp
new file mode 100644
index 0000000000..cac02d4c46
--- /dev/null
+++ b/xbmc/utils/Utf8Utils.cpp
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 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 "Utf8Utils.h"
+
+
+size_t CUtf8Utils::FindValidUtf8Char(const std::string& str, const size_t startPos /*= 0*/)
+{
+ const char* strC = str.c_str();
+ const size_t len = str.length();
+
+ size_t pos = startPos;
+ while (pos < len)
+ {
+ if (SizeOfUtf8Char(strC + pos))
+ return pos;
+
+ pos++;
+ }
+
+ return std::string::npos;
+}
+
+size_t CUtf8Utils::RFindValidUtf8Char(const std::string& str, const size_t startPos)
+{
+ const size_t len = str.length();
+ if (!len)
+ return std::string::npos;
+
+ const char* strC = str.c_str();
+ size_t pos = (startPos >= len) ? len - 1 : startPos;
+ while (pos < len) // pos is unsigned, after zero pos becomes large then len
+ {
+ if (SizeOfUtf8Char(strC + pos))
+ return pos;
+
+ pos--;
+ }
+
+ return std::string::npos;
+}
+
+inline size_t CUtf8Utils::SizeOfUtf8Char(const std::string& str, const size_t charStart /*= 0*/)
+{
+ if (charStart >= str.length())
+ return std::string::npos;
+
+ return SizeOfUtf8Char(str.c_str() + charStart);
+}
+
+// must be used only internally in class!
+// str must be null-terminated
+inline size_t CUtf8Utils::SizeOfUtf8Char(const char* const str)
+{
+ if (!str)
+ return 0;
+
+ const unsigned char* const strU = (const unsigned char*)str;
+ const unsigned char chr = strU[0];
+
+ /* this is an implementation of http://www.unicode.org/versions/Unicode6.2.0/ch03.pdf#G27506 */
+
+ /* U+0000 - U+007F in UTF-8 */
+ if (chr <= 0x7F)
+ return 1;
+
+ /* U+0080 - U+07FF in UTF-8 */ /* binary representation and range */
+ if (chr >= 0xC2 && chr <= 0xDF /* C2=1100 0010 - DF=1101 1111 */
+ // as str is null terminated,
+ && ((strU[1] & 0xC0) == 0x80)) /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ return 2; // valid UTF-8 2 bytes sequence
+
+ /* U+0800 - U+0FFF in UTF-8 */
+ if (chr == 0xE0 /* E0=1110 0000 */
+ && (strU[1] & 0xE0) == 0xA0 /* E0=1110 0000, A0=1010 0000 - BF=1011 1111 */
+ && (strU[2] & 0xC0) == 0x80) /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ return 3; // valid UTF-8 3 bytes sequence
+
+ /* U+1000 - U+CFFF in UTF-8 */
+ /* skip U+D000 - U+DFFF (handled later) */
+ /* U+E000 - U+FFFF in UTF-8 */
+ if (((chr >= 0xE1 && chr <= 0xEC) /* E1=1110 0001 - EC=1110 1100 */
+ || chr == 0xEE || chr == 0xEF) /* EE=1110 1110 - EF=1110 1111 */
+ && (strU[1] & 0xC0) == 0x80 /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ && (strU[2] & 0xC0) == 0x80) /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ return 3; // valid UTF-8 3 bytes sequence
+
+ /* U+D000 - U+D7FF in UTF-8 */
+ /* note: range U+D800 - U+DFFF is reserved and invalid */
+ if (chr == 0xED /* ED=1110 1101 */
+ && (strU[1] & 0xE0) == 0x80 /* E0=1110 0000, 80=1000 0000 - 9F=1001 1111 */
+ && (strU[2] & 0xC0) == 0x80) /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ return 3; // valid UTF-8 3 bytes sequence
+
+ /* U+10000 - U+3FFFF in UTF-8 */
+ if (chr == 0xF0 /* F0=1111 0000 */
+ && (strU[1] & 0xE0) == 0x80 /* E0=1110 0000, 80=1000 0000 - 9F=1001 1111 */
+ && strU[2] >= 0x90 && strU[2] <= 0xBF /* 90=1001 0000 - BF=1011 1111 */
+ && (strU[3] & 0xC0) == 0x80) /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ return 4; // valid UTF-8 4 bytes sequence
+
+ /* U+40000 - U+FFFFF in UTF-8 */
+ if (chr >= 0xF1 && chr <= 0xF3 /* F1=1111 0001 - F3=1111 0011 */
+ && (strU[1] & 0xC0) == 0x80 /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ && (strU[2] & 0xC0) == 0x80 /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ && (strU[3] & 0xC0) == 0x80) /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ return 4; // valid UTF-8 4 bytes sequence
+
+ /* U+100000 - U+10FFFF in UTF-8 */
+ if (chr == 0xF4 /* F4=1111 0100 */
+ && (strU[1] & 0xF0) == 0x80 /* F0=1111 0000, 80=1000 0000 - 8F=1000 1111 */
+ && (strU[2] & 0xC0) == 0x80 /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ && (strU[3] & 0xC0) == 0x80) /* C0=1100 0000, 80=1000 0000 - BF=1011 1111 */
+ return 4; // valid UTF-8 4 bytes sequence
+
+ return 0; // invalid UTF-8 char sequence
+}
diff --git a/xbmc/utils/Utf8Utils.h b/xbmc/utils/Utf8Utils.h
new file mode 100644
index 0000000000..41c78d4297
--- /dev/null
+++ b/xbmc/utils/Utf8Utils.h
@@ -0,0 +1,35 @@
+#pragma once
+
+/*
+ * Copyright (C) 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 <string>
+
+class CUtf8Utils
+{
+public:
+ static size_t FindValidUtf8Char(const std::string& str, const size_t startPos = 0);
+ static size_t RFindValidUtf8Char(const std::string& str, const size_t startPos);
+
+ static size_t SizeOfUtf8Char(const std::string& str, const size_t charStart = 0);
+private:
+ static size_t SizeOfUtf8Char(const char* const str);
+};
diff --git a/xbmc/utils/XMLUtils.cpp b/xbmc/utils/XMLUtils.cpp
index 6216b35748..b0c86db222 100644
--- a/xbmc/utils/XMLUtils.cpp
+++ b/xbmc/utils/XMLUtils.cpp
@@ -336,10 +336,10 @@ void XMLUtils::SetPath(TiXmlNode* pRootNode, const char *strTag, const CStdStrin
void XMLUtils::SetDate(TiXmlNode* pRootNode, const char *strTag, const CDateTime& date)
{
- SetString(pRootNode, strTag, date.GetAsDBDate());
+ SetString(pRootNode, strTag, date.IsValid() ? date.GetAsDBDate() : "");
}
void XMLUtils::SetDateTime(TiXmlNode* pRootNode, const char *strTag, const CDateTime& dateTime)
{
- SetString(pRootNode, strTag, dateTime.GetAsDBDateTime());
+ SetString(pRootNode, strTag, dateTime.IsValid() ? dateTime.GetAsDBDateTime() : "");
}
diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp
index 3c04cf274c..8a634c19dd 100644
--- a/xbmc/video/VideoDatabase.cpp
+++ b/xbmc/video/VideoDatabase.cpp
@@ -18,6 +18,7 @@
*
*/
+#include "ApplicationMessenger.h"
#include "threads/SystemClock.h"
#include "VideoDatabase.h"
#include "video/windows/GUIWindowVideoBase.h"
@@ -3455,12 +3456,12 @@ CVideoInfoTag CVideoDatabase::GetDetailsForMovie(const dbiplus::sql_record* cons
return details;
}
-CVideoInfoTag CVideoDatabase::GetDetailsForTvShow(auto_ptr<Dataset> &pDS, bool getDetails /* = false */)
+CVideoInfoTag CVideoDatabase::GetDetailsForTvShow(auto_ptr<Dataset> &pDS, bool getDetails /* = false */, CFileItem* item /* = NULL */)
{
- return GetDetailsForTvShow(pDS->get_sql_record(), getDetails);
+ return GetDetailsForTvShow(pDS->get_sql_record(), getDetails, item);
}
-CVideoInfoTag CVideoDatabase::GetDetailsForTvShow(const dbiplus::sql_record* const record, bool getDetails /* = false */)
+CVideoInfoTag CVideoDatabase::GetDetailsForTvShow(const dbiplus::sql_record* const record, bool getDetails /* = false */, CFileItem* item /* = NULL */)
{
CVideoInfoTag details;
@@ -3480,6 +3481,8 @@ CVideoInfoTag CVideoDatabase::GetDetailsForTvShow(const dbiplus::sql_record* con
details.m_playCount = record->at(VIDEODB_DETAILS_TVSHOW_NUM_WATCHED).get_asInt();
details.m_strShowPath = details.m_strPath;
details.m_strShowTitle = details.m_strTitle;
+ if (details.m_premiered.IsValid())
+ details.m_iYear = details.m_premiered.GetYear();
movieTime += XbmcThreads::SystemClockMillis() - time; time = XbmcThreads::SystemClockMillis();
@@ -3499,6 +3502,18 @@ CVideoInfoTag CVideoDatabase::GetDetailsForTvShow(const dbiplus::sql_record* con
castTime += XbmcThreads::SystemClockMillis() - time; time = XbmcThreads::SystemClockMillis();
details.m_strPictureURL.Parse();
}
+
+ if (item != NULL)
+ {
+ item->m_dateTime = details.m_premiered;
+ item->SetProperty("totalseasons", record->at(VIDEODB_DETAILS_TVSHOW_NUM_SEASONS).get_asInt());
+ item->SetProperty("totalepisodes", details.m_iEpisode);
+ item->SetProperty("numepisodes", details.m_iEpisode); // will be changed later to reflect watchmode setting
+ item->SetProperty("watchedepisodes", details.m_playCount);
+ item->SetProperty("unwatchedepisodes", details.m_iEpisode - details.m_playCount);
+ }
+ details.m_playCount = (details.m_iEpisode <= details.m_playCount) ? 1 : 0;
+
return details;
}
@@ -6288,27 +6303,20 @@ bool CVideoDatabase::GetTvShowsByWhere(const CStdString& strBaseDir, const Filte
unsigned int targetRow = (unsigned int)it->at(FieldRow).asInteger();
const dbiplus::sql_record* const record = data.at(targetRow);
- CVideoInfoTag movie = GetDetailsForTvShow(record, false);
+ CFileItemPtr pItem(new CFileItem());
+ CVideoInfoTag movie = GetDetailsForTvShow(record, false, pItem.get());
if ((CProfilesManager::Get().GetMasterProfile().getLockMode() == LOCK_MODE_EVERYONE ||
g_passwordManager.bMasterUser ||
g_passwordManager.IsDatabasePathUnlocked(movie.m_strPath, *CMediaSourceSettings::Get().GetSources("video"))) &&
(!g_advancedSettings.m_bVideoLibraryHideEmptySeries || movie.m_iEpisode > 0))
{
- CFileItemPtr pItem(new CFileItem(movie));
+ pItem->SetFromVideoInfoTag(movie);
CVideoDbUrl itemUrl = videoUrl;
CStdString path = StringUtils::Format("%ld/", record->at(0).get_asInt());
itemUrl.AppendPath(path);
pItem->SetPath(itemUrl.ToString());
- pItem->m_dateTime = movie.m_premiered;
- pItem->GetVideoInfoTag()->m_iYear = pItem->m_dateTime.GetYear();
- pItem->SetProperty("totalseasons", record->at(VIDEODB_DETAILS_TVSHOW_NUM_SEASONS).get_asInt());
- pItem->SetProperty("totalepisodes", movie.m_iEpisode);
- pItem->SetProperty("numepisodes", movie.m_iEpisode); // will be changed later to reflect watchmode setting
- pItem->SetProperty("watchedepisodes", movie.m_playCount);
- pItem->SetProperty("unwatchedepisodes", movie.m_iEpisode - movie.m_playCount);
- pItem->GetVideoInfoTag()->m_playCount = (movie.m_iEpisode == movie.m_playCount) ? 1 : 0;
pItem->SetOverlayImage(CGUIListItem::ICON_OVERLAY_UNWATCHED, (pItem->GetVideoInfoTag()->m_playCount > 0) && (pItem->GetVideoInfoTag()->m_iEpisode > 0));
items.Add(pItem);
}
@@ -7995,10 +8003,10 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
BeginTransaction();
// find all the files
- CStdString sql;
+ CStdString sql = "SELECT files.idFile, files.strFileName, path.strPath FROM files, path WHERE files.idPath = path.idPath";
if (paths)
{
- if (paths->size() == 0)
+ if (paths->empty())
{
RollbackTransaction();
ANNOUNCEMENT::CAnnouncementManager::Announce(ANNOUNCEMENT::VideoLibrary, "xbmc", "OnCleanFinished");
@@ -8006,12 +8014,10 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
}
CStdString strPaths;
- for (std::set<int>::const_iterator i = paths->begin(); i != paths->end(); ++i)
- strPaths += StringUtils::Format(",%i",*i);
- sql = PrepareSQL("select * from files, path where files.idPath=path.idPath and path.idPath in (%s)", strPaths.substr(1).c_str());
+ for (std::set<int>::const_iterator it = paths->begin(); it != paths->end(); ++it)
+ strPaths += StringUtils::Format(",%i", *it);
+ sql += PrepareSQL(" AND path.idPath IN (%s)", strPaths.substr(1).c_str());
}
- else
- sql = "select * from files, path where files.idPath = path.idPath";
m_pDS->query(sql.c_str());
if (m_pDS->num_rows() == 0) return;
@@ -8036,24 +8042,17 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
}
}
- CStdString filesToDelete = "";
- CStdString moviesToDelete = "";
- CStdString episodesToDelete = "";
- CStdString musicVideosToDelete = "";
-
- std::vector<int> movieIDs;
- std::vector<int> episodeIDs;
- std::vector<int> musicVideoIDs;
+ std::string filesToTestForDelete;
int total = m_pDS->num_rows();
int current = 0;
while (!m_pDS->eof())
{
- CStdString path = m_pDS->fv("path.strPath").get_asString();
- CStdString fileName = m_pDS->fv("files.strFileName").get_asString();
+ std::string path = m_pDS->fv("path.strPath").get_asString();
+ std::string fileName = m_pDS->fv("files.strFileName").get_asString();
CStdString fullPath;
- ConstructPath(fullPath,path,fileName);
+ ConstructPath(fullPath, path, fileName);
// get the first stacked file
if (URIUtils::IsStack(fullPath))
@@ -8061,288 +8060,302 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
// remove optical, non-existing files
if (URIUtils::IsOnDVD(fullPath) || !CFile::Exists(fullPath, false))
- filesToDelete += m_pDS->fv("files.idFile").get_asString() + ",";
+ filesToTestForDelete += m_pDS->fv("files.idFile").get_asString() + ",";
- if (!handle)
+ if (handle == NULL && progress != NULL)
{
- if (progress)
+ progress->SetPercentage(current * 100 / total);
+ progress->Progress();
+ if (progress->IsCanceled())
{
- progress->SetPercentage(current * 100 / total);
- progress->Progress();
- if (progress->IsCanceled())
- {
- progress->Close();
- m_pDS->close();
- ANNOUNCEMENT::CAnnouncementManager::Announce(ANNOUNCEMENT::VideoLibrary, "xbmc", "OnCleanFinished");
- return;
- }
+ progress->Close();
+ m_pDS->close();
+ ANNOUNCEMENT::CAnnouncementManager::Announce(ANNOUNCEMENT::VideoLibrary, "xbmc", "OnCleanFinished");
+ return;
}
}
- else
- handle->SetPercentage(current/(float)total*100);
+ else if (handle != NULL)
+ handle->SetPercentage(current * 100 / (float)total);
m_pDS->next();
current++;
}
m_pDS->close();
+ std::string filesToDelete;
+
// Add any files that don't have a valid idPath entry to the filesToDelete list.
- sql = "select files.idFile from files where idPath not in (select idPath from path)";
- m_pDS->query(sql.c_str());
+ m_pDS->query("SELECT files.idFile FROM files WHERE NOT EXISTS (SELECT 1 FROM path WHERE path.idPath = files.idPath)");
while (!m_pDS->eof())
{
- filesToDelete += m_pDS->fv("files.idFile").get_asString() + ",";
+ string file = m_pDS->fv("files.idFile").get_asString() + ",";
+ filesToTestForDelete += file;
+ filesToDelete += file;
+
m_pDS->next();
}
m_pDS->close();
- if ( ! filesToDelete.empty() )
+ std::map<int, bool> pathsDeleteDecisions;
+ std::vector<int> movieIDs;
+ std::vector<int> tvshowIDs;
+ std::vector<int> episodeIDs;
+ std::vector<int> musicVideoIDs;
+
+ if (!filesToTestForDelete.empty())
{
- StringUtils::TrimRight(filesToDelete, ",");
- // now grab them movies
- sql = PrepareSQL("select idMovie from movie where idFile in (%s)",filesToDelete.c_str());
- m_pDS->query(sql.c_str());
- while (!m_pDS->eof())
- {
- movieIDs.push_back(m_pDS->fv(0).get_asInt());
- moviesToDelete += m_pDS->fv(0).get_asString() + ",";
- m_pDS->next();
- }
- m_pDS->close();
- // now grab them episodes
- sql = PrepareSQL("select idEpisode from episode where idFile in (%s)",filesToDelete.c_str());
- m_pDS->query(sql.c_str());
- while (!m_pDS->eof())
- {
- episodeIDs.push_back(m_pDS->fv(0).get_asInt());
- episodesToDelete += m_pDS->fv(0).get_asString() + ",";
- m_pDS->next();
- }
- m_pDS->close();
+ StringUtils::TrimRight(filesToTestForDelete, ",");
- // now grab them musicvideos
- sql = PrepareSQL("select idMVideo from musicvideo where idFile in (%s)",filesToDelete.c_str());
- m_pDS->query(sql.c_str());
- while (!m_pDS->eof())
- {
- musicVideoIDs.push_back(m_pDS->fv(0).get_asInt());
- musicVideosToDelete += m_pDS->fv(0).get_asString() + ",";
- m_pDS->next();
- }
- m_pDS->close();
+ movieIDs = CleanMediaType("movie", filesToTestForDelete, pathsDeleteDecisions, filesToDelete, !showProgress);
+ episodeIDs = CleanMediaType("episode", filesToTestForDelete, pathsDeleteDecisions, filesToDelete, !showProgress);
+ musicVideoIDs = CleanMediaType("musicvideo", filesToTestForDelete, pathsDeleteDecisions, filesToDelete, !showProgress);
}
- if (progress)
+ if (progress != NULL)
{
progress->SetPercentage(100);
progress->Progress();
}
- if ( ! filesToDelete.empty() )
+ if (!filesToDelete.empty())
{
- filesToDelete = "(" + filesToDelete + ")";
+ filesToDelete = "(" + StringUtils::TrimRight(filesToDelete, ",") + ")";
+
CLog::Log(LOGDEBUG, "%s: Cleaning files table", __FUNCTION__);
- sql = "delete from files where idFile in " + filesToDelete;
+ sql = "DELETE FROM files WHERE idFile IN " + filesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning streamdetails table", __FUNCTION__);
- sql = "delete from streamdetails where idFile in " + filesToDelete;
+ sql = "DELETE FROM streamdetails WHERE idFile IN " + filesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning bookmark table", __FUNCTION__);
- sql = "delete from bookmark where idFile in " + filesToDelete;
+ sql = "DELETE FROM bookmark WHERE idFile IN " + filesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning settings table", __FUNCTION__);
- sql = "delete from settings where idFile in " + filesToDelete;
+ sql = "DELETE FROM settings WHERE idFile IN " + filesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning stacktimes table", __FUNCTION__);
- sql = "delete from stacktimes where idFile in " + filesToDelete;
+ sql = "DELETE FROM stacktimes WHERE idFile IN " + filesToDelete;
m_pDS->exec(sql.c_str());
}
- if ( ! moviesToDelete.empty() )
+ if (!movieIDs.empty())
{
+ std::string moviesToDelete;
+ for (std::vector<int>::const_iterator it = movieIDs.begin(); it != movieIDs.end(); ++it)
+ moviesToDelete += StringUtils::Format("%i,", *it);
moviesToDelete = "(" + StringUtils::TrimRight(moviesToDelete, ",") + ")";
CLog::Log(LOGDEBUG, "%s: Cleaning movie table", __FUNCTION__);
- sql = "delete from movie where idMovie in " + moviesToDelete;
+ sql = "DELETE FROM movie WHERE idMovie IN " + moviesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning actorlinkmovie table", __FUNCTION__);
- sql = "delete from actorlinkmovie where idMovie in " + moviesToDelete;
+ sql = "DELETE FROM actorlinkmovie WHERE idMovie IN " + moviesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning directorlinkmovie table", __FUNCTION__);
- sql = "delete from directorlinkmovie where idMovie in " + moviesToDelete;
+ sql = "DELETE FROM directorlinkmovie WHERE idMovie IN " + moviesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning writerlinkmovie table", __FUNCTION__);
- sql = "delete from writerlinkmovie where idMovie in " + moviesToDelete;
+ sql = "DELETE FROM writerlinkmovie WHERE idMovie IN " + moviesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning genrelinkmovie table", __FUNCTION__);
- sql = "delete from genrelinkmovie where idMovie in " + moviesToDelete;
+ sql = "DELETE FROM genrelinkmovie WHERE idMovie IN " + moviesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning countrylinkmovie table", __FUNCTION__);
- sql = "delete from countrylinkmovie where idMovie in " + moviesToDelete;
+ sql = "DELETE FROM countrylinkmovie WHERE idMovie IN " + moviesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning studiolinkmovie table", __FUNCTION__);
- sql = "delete from studiolinkmovie where idMovie in " + moviesToDelete;
+ sql = "DELETE FROM studiolinkmovie WHERE idMovie IN " + moviesToDelete;
m_pDS->exec(sql.c_str());
}
- if ( ! episodesToDelete.empty() )
+ if (!episodeIDs.empty())
{
+ std::string episodesToDelete;
+ for (std::vector<int>::const_iterator it = episodeIDs.begin(); it != episodeIDs.end(); ++it)
+ episodesToDelete += StringUtils::Format("%i,", *it);
episodesToDelete = "(" + StringUtils::TrimRight(episodesToDelete, ",") + ")";
CLog::Log(LOGDEBUG, "%s: Cleaning episode table", __FUNCTION__);
- sql = "delete from episode where idEpisode in " + episodesToDelete;
+ sql = "DELETE FROM episode WHERE idEpisode IN " + episodesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning actorlinkepisode table", __FUNCTION__);
- sql = "delete from actorlinkepisode where idEpisode in " + episodesToDelete;
+ sql = "DELETE FROM actorlinkepisode WHERE idEpisode IN " + episodesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning directorlinkepisode table", __FUNCTION__);
- sql = "delete from directorlinkepisode where idEpisode in " + episodesToDelete;
+ sql = "DELETE FROM directorlinkepisode WHERE idEpisode IN " + episodesToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning writerlinkepisode table", __FUNCTION__);
- sql = "delete from writerlinkepisode where idEpisode in " + episodesToDelete;
+ sql = "DELETE FROM writerlinkepisode WHERE idEpisode IN " + episodesToDelete;
m_pDS->exec(sql.c_str());
}
CLog::Log(LOGDEBUG, "%s: Cleaning paths that don't exist and have content set...", __FUNCTION__);
- sql = "select * from path where not (strContent='' and strSettings='' and strHash='' and exclude!=1)";
+ sql = "SELECT path.idPath, path.strPath FROM path "
+ "WHERE NOT ((strContent IS NULL OR strContent = '') "
+ "AND (strSettings IS NULL OR strSettings = '') "
+ "AND (strHash IS NULL OR strHash = '') "
+ "AND (exclude IS NULL OR exclude != 1))";
m_pDS->query(sql.c_str());
- CStdString strIds;
+ std::string strIds;
while (!m_pDS->eof())
{
- if (!CDirectory::Exists(m_pDS->fv("path.strPath").get_asString()))
- strIds += StringUtils::Format("%i,", m_pDS->fv("path.idPath").get_asInt());
+ std::map<int, bool>::const_iterator pathsDeleteDecision = pathsDeleteDecisions.find(m_pDS->fv(0).get_asInt());
+ if ((pathsDeleteDecision != pathsDeleteDecisions.end() && pathsDeleteDecision->second) ||
+ (pathsDeleteDecision == pathsDeleteDecisions.end() && !CDirectory::Exists(m_pDS->fv(1).get_asString())))
+ strIds += m_pDS->fv(0).get_asString() + ",";
+
m_pDS->next();
}
m_pDS->close();
+
if (!strIds.empty())
{
- StringUtils::TrimRight(strIds, ",");
- sql = PrepareSQL("delete from path where idPath in (%s)",strIds.c_str());
+ sql = PrepareSQL("DELETE FROM path WHERE idPath IN (%s)", StringUtils::TrimRight(strIds, ",").c_str());
m_pDS->exec(sql.c_str());
- sql = PrepareSQL("delete from tvshowlinkpath where idPath in (%s)",strIds.c_str());
+ sql = "DELETE FROM tvshowlinkpath WHERE NOT EXISTS (SELECT 1 FROM path WHERE path.idPath = tvshowlinkpath.idPath)";
m_pDS->exec(sql.c_str());
}
- sql = "delete from tvshowlinkpath where idPath not in (select idPath from path)";
- m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning tvshow table", __FUNCTION__);
- sql = "delete from tvshow where idShow not in (select idShow from tvshowlinkpath)";
+ sql = "DELETE FROM tvshow WHERE NOT EXISTS (SELECT 1 FROM tvshowlinkpath WHERE tvshowlinkpath.idShow = tvshow.idShow)";
m_pDS->exec(sql.c_str());
- std::vector<int> tvshowIDs;
- CStdString showsToDelete;
- sql = "select tvshow.idShow from tvshow "
- "join tvshowlinkpath on tvshow.idShow=tvshowlinkpath.idShow "
- "join path on path.idPath=tvshowlinkpath.idPath "
- "where tvshow.idShow not in (select idShow from episode) "
- "and path.strContent=''";
+ std::string tvshowsToDelete;
+ sql = "SELECT tvshow.idShow FROM tvshow "
+ "JOIN tvshowlinkpath ON tvshow.idShow = tvshowlinkpath.idShow "
+ "JOIN path ON path.idPath = tvshowlinkpath.idPath "
+ "WHERE NOT EXISTS (SELECT 1 FROM episode WHERE episode.idShow = tvshow.idShow) "
+ "AND (path.strContent IS NULL OR path.strContent = '')";
m_pDS->query(sql.c_str());
while (!m_pDS->eof())
{
tvshowIDs.push_back(m_pDS->fv(0).get_asInt());
- showsToDelete += m_pDS->fv(0).get_asString() + ",";
+ tvshowsToDelete += m_pDS->fv(0).get_asString() + ",";
m_pDS->next();
}
m_pDS->close();
- if (!showsToDelete.empty())
+ if (!tvshowsToDelete.empty())
{
- sql = "delete from tvshow where idShow in (" + StringUtils::TrimRight(showsToDelete, ",") + ")";
+ sql = "DELETE FROM tvshow WHERE idShow IN (" + StringUtils::TrimRight(tvshowsToDelete, ",") + ")";
m_pDS->exec(sql.c_str());
- }
- CLog::Log(LOGDEBUG, "%s: Cleaning actorlinktvshow table", __FUNCTION__);
- sql = "delete from actorlinktvshow where idShow not in (select idShow from tvshow)";
- m_pDS->exec(sql.c_str());
+ CLog::Log(LOGDEBUG, "%s: Cleaning actorlinktvshow table", __FUNCTION__);
+ sql = "DELETE FROM actorlinktvshow WHERE NOT EXISTS (SELECT 1 FROM tvshow WHERE tvshow.idShow = actorlinktvshow.idShow)";
+ m_pDS->exec(sql.c_str());
- CLog::Log(LOGDEBUG, "%s: Cleaning directorlinktvshow table", __FUNCTION__);
- sql = "delete from directorlinktvshow where idShow not in (select idShow from tvshow)";
- m_pDS->exec(sql.c_str());
+ CLog::Log(LOGDEBUG, "%s: Cleaning directorlinktvshow table", __FUNCTION__);
+ sql = "DELETE FROM directorlinktvshow WHERE NOT EXISTS (SELECT 1 FROM tvshow WHERE tvshow.idShow = directorlinktvshow.idShow)";
+ m_pDS->exec(sql.c_str());
- CLog::Log(LOGDEBUG, "%s: Cleaning tvshowlinkpath table", __FUNCTION__);
- sql = "delete from tvshowlinkpath where idShow not in (select idShow from tvshow)";
- m_pDS->exec(sql.c_str());
+ CLog::Log(LOGDEBUG, "%s: Cleaning tvshowlinkpath table", __FUNCTION__);
+ sql = "DELETE FROM tvshowlinkpath WHERE NOT EXISTS (SELECT 1 FROM tvshow WHERE tvshow.idShow = tvshowlinkpath.idShow)";
+ m_pDS->exec(sql.c_str());
- CLog::Log(LOGDEBUG, "%s: Cleaning genrelinktvshow table", __FUNCTION__);
- sql = "delete from genrelinktvshow where idShow not in (select idShow from tvshow)";
- m_pDS->exec(sql.c_str());
+ CLog::Log(LOGDEBUG, "%s: Cleaning genrelinktvshow table", __FUNCTION__);
+ sql = "DELETE FROM genrelinktvshow WHERE NOT EXISTS (SELECT 1 FROM tvshow WHERE tvshow.idShow = genrelinktvshow.idShow)";
+ m_pDS->exec(sql.c_str());
- CLog::Log(LOGDEBUG, "%s: Cleaning seasons table", __FUNCTION__);
- sql = "delete from seasons where idShow not in (select idShow from tvshow)";
- m_pDS->exec(sql.c_str());
+ CLog::Log(LOGDEBUG, "%s: Cleaning seasons table", __FUNCTION__);
+ sql = "DELETE FROM seasons WHERE NOT EXISTS (SELECT 1 FROM tvshow WHERE tvshow.idShow = seasons.idShow)";
+ m_pDS->exec(sql.c_str());
- CLog::Log(LOGDEBUG, "%s: Cleaning movielinktvshow table", __FUNCTION__);
- sql = "delete from movielinktvshow where idShow not in (select idShow from tvshow)";
- m_pDS->exec(sql.c_str());
- sql = "delete from movielinktvshow where idMovie not in (select distinct idMovie from movie)";
- m_pDS->exec(sql.c_str());
+ CLog::Log(LOGDEBUG, "%s: Cleaning movielinktvshow table", __FUNCTION__);
+ sql = "DELETE FROM movielinktvshow WHERE NOT EXISTS (SELECT 1 FROM tvshow WHERE tvshow.idShow = movielinktvshow.idShow)";
+ m_pDS->exec(sql.c_str());
+ sql = "DELETE FROM movielinktvshow WHERE NOT EXISTS (SELECT 1 FROM movie WHERE movie.idMovie = movielinktvshow.idMovie)";
+ m_pDS->exec(sql.c_str());
+ }
- if ( ! musicVideosToDelete.empty() )
+ if (!musicVideoIDs.empty())
{
+ std::string musicVideosToDelete;
+ for (std::vector<int>::const_iterator it = musicVideoIDs.begin(); it != musicVideoIDs.end(); ++it)
+ musicVideosToDelete += StringUtils::Format("%i,", *it);
musicVideosToDelete = "(" + StringUtils::TrimRight(musicVideosToDelete, ",") + ")";
CLog::Log(LOGDEBUG, "%s: Cleaning musicvideo table", __FUNCTION__);
- sql = "delete from musicvideo where idMVideo in " + musicVideosToDelete;
+ sql = "DELETE FROM musicvideo WHERE idMVideo IN " + musicVideosToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning artistlinkmusicvideo table", __FUNCTION__);
- sql = "delete from artistlinkmusicvideo where idMVideo in " + musicVideosToDelete;
+ sql = "DELETE FROM artistlinkmusicvideo WHERE idMVideo IN " + musicVideosToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning directorlinkmusicvideo table" ,__FUNCTION__);
- sql = "delete from directorlinkmusicvideo where idMVideo in " + musicVideosToDelete;
+ sql = "DELETE FROM directorlinkmusicvideo WHERE idMVideo IN " + musicVideosToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning genrelinkmusicvideo table" ,__FUNCTION__);
- sql = "delete from genrelinkmusicvideo where idMVideo in " + musicVideosToDelete;
+ sql = "DELETE FROM genrelinkmusicvideo WHERE idMVideo IN " + musicVideosToDelete;
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning studiolinkmusicvideo table", __FUNCTION__);
- sql = "delete from studiolinkmusicvideo where idMVideo in " + musicVideosToDelete;
+ sql = "DELETE FROM studiolinkmusicvideo WHERE idMVideo IN " + musicVideosToDelete;
m_pDS->exec(sql.c_str());
}
CLog::Log(LOGDEBUG, "%s: Cleaning path table", __FUNCTION__);
- sql = StringUtils::Format("delete from path where strContent='' and strSettings='' and strHash='' and exclude!=1 "
- "and idPath not in (select distinct idPath from files) "
- "and idPath not in (select distinct idPath from tvshowlinkpath) "
- "and idPath not in (select distinct c%02d from movie) "
- "and idPath not in (select distinct c%02d from tvshow) "
- "and idPath not in (select distinct c%02d from episode) "
- "and idPath not in (select distinct c%02d from musicvideo)"
+ sql = StringUtils::Format("DELETE FROM path "
+ "WHERE (strContent IS NULL OR strContent = '') "
+ "AND (strSettings IS NULL OR strSettings = '') "
+ "and (strHash IS NULL OR strHash = '') "
+ "AND (exclude IS NULL OR exclude != 1) "
+ "AND NOT EXISTS (SELECT 1 FROM files WHERE files.idPath = path.idPath) "
+ "AND NOT EXISTS (SELECT 1 FROM tvshowlinkpath WHERE tvshowlinkpath.idPath = path.idPath) "
+ "AND NOT EXISTS (SELECT 1 FROM movie WHERE movie.c%02d = path.idPath) "
+ "AND NOT EXISTS (SELECT 1 FROM tvshow WHERE tvshow.c%02d = path.idPath) "
+ "AND NOT EXISTS (SELECT 1 FROM episode WHERE episode.c%02d = path.idPath) "
+ "AND NOT EXISTS (SELECT 1 FROM musicvideo WHERE musicvideo.c%02d = path.idPath)"
, VIDEODB_ID_PARENTPATHID, VIDEODB_ID_TV_PARENTPATHID, VIDEODB_ID_EPISODE_PARENTPATHID, VIDEODB_ID_MUSICVIDEO_PARENTPATHID );
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning genre table", __FUNCTION__);
- sql = "delete from genre where idGenre not in (select distinct idGenre from genrelinkmovie) and idGenre not in (select distinct idGenre from genrelinktvshow) and idGenre not in (select distinct idGenre from genrelinkmusicvideo)";
+ sql = "DELETE FROM genre "
+ "WHERE NOT EXISTS (SELECT 1 FROM genrelinkmovie WHERE genrelinkmovie.idGenre = genre.idGenre) "
+ "AND NOT EXISTS (SELECT 1 FROM genrelinktvshow WHERE genrelinktvshow.idGenre = genre.idGenre) "
+ "AND NOT EXISTS (SELECT 1 FROM genrelinkmusicvideo WHERE genrelinkmusicvideo.idGenre = genre.idGenre)";
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning country table", __FUNCTION__);
- sql = "delete from country where idCountry not in (select distinct idCountry from countrylinkmovie)";
+ sql = "DELETE FROM country WHERE NOT EXISTS (SELECT 1 FROM countrylinkmovie WHERE countrylinkmovie.idCountry = country.idCountry)";
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning actor table of actors, directors and writers", __FUNCTION__);
- sql = "delete from actors where idActor not in (select distinct idActor from actorlinkmovie) and idActor not in (select distinct idDirector from directorlinkmovie) and idActor not in (select distinct idWriter from writerlinkmovie) and idActor not in (select distinct idActor from actorlinktvshow) and idActor not in (select distinct idActor from actorlinkepisode) and idActor not in (select distinct idDirector from directorlinktvshow) and idActor not in (select distinct idDirector from directorlinkepisode) and idActor not in (select distinct idWriter from writerlinkepisode) and idActor not in (select distinct idArtist from artistlinkmusicvideo) and idActor not in (select distinct idDirector from directorlinkmusicvideo)";
+ sql = "DELETE FROM actors "
+ "WHERE NOT EXISTS (SELECT 1 FROM actorlinkmovie WHERE actorlinkmovie.idActor = actors.idActor) "
+ "AND NOT EXISTS (SELECT 1 FROM directorlinkmovie WHERE directorlinkmovie.idDirector = actors.idActor) "
+ "AND NOT EXISTS (SELECT 1 FROM writerlinkmovie WHERE writerlinkmovie.idWriter = actors.idActor) "
+ "AND NOT EXISTS (SELECT 1 FROM actorlinktvshow WHERE actorlinktvshow.idActor = actors.idActor) "
+ "AND NOT EXISTS (SELECT 1 FROM actorlinkepisode WHERE actorlinkepisode.idActor = actors.idActor) "
+ "AND NOT EXISTS (SELECT 1 FROM directorlinktvshow WHERE directorlinktvshow.idDirector = actors.idActor) "
+ "AND NOT EXISTS (SELECT 1 FROM directorlinkepisode WHERE directorlinkepisode.idDirector = actors.idActor) "
+ "AND NOT EXISTS (SELECT 1 FROM writerlinkepisode WHERE writerlinkepisode.idWriter = actors.idActor) "
+ "AND NOT EXISTS (SELECT 1 FROM artistlinkmusicvideo WHERE artistlinkmusicvideo.idArtist = actors.idActor) "
+ "AND NOT EXISTS (SELECT 1 FROM directorlinkmusicvideo WHERE directorlinkmusicvideo.idDirector = actors.idActor)";
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning studio table", __FUNCTION__);
- sql = "delete from studio where idStudio not in (select distinct idStudio from studiolinkmovie) and idStudio not in (select distinct idStudio from studiolinkmusicvideo) and idStudio not in (select distinct idStudio from studiolinktvshow)";
+ sql = "DELETE FROM studio "
+ "WHERE NOT EXISTS (SELECT 1 FROM studiolinkmovie WHERE studiolinkmovie.idStudio = studio.idStudio) "
+ "AND NOT EXISTS (SELECT 1 FROM studiolinkmusicvideo WHERE studiolinkmusicvideo.idStudio = studio.idStudio) "
+ "AND NOT EXISTS (SELECT 1 FROM studiolinktvshow WHERE studiolinktvshow.idStudio = studio.idStudio)";
m_pDS->exec(sql.c_str());
CLog::Log(LOGDEBUG, "%s: Cleaning set table", __FUNCTION__);
- sql = "delete from sets where idSet not in (select distinct idSet from movie)";
+ sql = "DELETE FROM sets WHERE NOT EXISTS (SELECT 1 FROM movie WHERE movie.idSet = sets.idSet)";
m_pDS->exec(sql.c_str());
CommitTransaction();
@@ -8357,17 +8370,17 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
time = XbmcThreads::SystemClockMillis() - time;
CLog::Log(LOGNOTICE, "%s: Cleaning videodatabase done. Operation took %s", __FUNCTION__, StringUtils::SecondsToTimeString(time / 1000).c_str());
- for (unsigned int i = 0; i < movieIDs.size(); i++)
- AnnounceRemove("movie", movieIDs[i]);
+ for (std::vector<int>::const_iterator it = movieIDs.begin(); it != movieIDs.end(); ++it)
+ AnnounceRemove("movie", *it);
- for (unsigned int i = 0; i < episodeIDs.size(); i++)
- AnnounceRemove("episode", episodeIDs[i]);
+ for (std::vector<int>::const_iterator it = episodeIDs.begin(); it != episodeIDs.end(); ++it)
+ AnnounceRemove("episode", *it);
- for (unsigned int i = 0; i < tvshowIDs.size(); i++)
- AnnounceRemove("tvshow", tvshowIDs[i]);
+ for (std::vector<int>::const_iterator it = tvshowIDs.begin(); it != tvshowIDs.end(); ++it)
+ AnnounceRemove("tvshow", *it);
- for (unsigned int i = 0; i < musicVideoIDs.size(); i++)
- AnnounceRemove("musicvideo", musicVideoIDs[i]);
+ for (std::vector<int>::const_iterator it = musicVideoIDs.begin(); it != musicVideoIDs.end(); ++it)
+ AnnounceRemove("musicvideo", *it);
}
catch (...)
{
@@ -8380,6 +8393,105 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
ANNOUNCEMENT::CAnnouncementManager::Announce(ANNOUNCEMENT::VideoLibrary, "xbmc", "OnCleanFinished");
}
+std::vector<int> CVideoDatabase::CleanMediaType(const std::string &mediaType, const std::string &cleanableFileIDs,
+ std::map<int, bool> &pathsDeleteDecisions, std::string &deletedFileIDs, bool silent)
+{
+ std::vector<int> cleanedIDs;
+ if (mediaType.empty() || cleanableFileIDs.empty())
+ return cleanedIDs;
+
+ std::string table = mediaType;
+ std::string idField;
+ std::string parentPathIdField;
+ bool isEpisode = false;
+ if (mediaType == "movie")
+ {
+ idField = "idMovie";
+ parentPathIdField = StringUtils::Format("%s.c%02d", table.c_str(), VIDEODB_ID_PARENTPATHID);
+ }
+ else if (mediaType == "episode")
+ {
+ idField = "idEpisode";
+ parentPathIdField = StringUtils::Format("tvshow.c%02d", VIDEODB_ID_TV_PARENTPATHID);
+ isEpisode = true;
+ }
+ else if (mediaType == "musicvideo")
+ {
+ idField = "idMVideo";
+ parentPathIdField = StringUtils::Format("%s.c%02d", table.c_str(), VIDEODB_ID_MUSICVIDEO_PARENTPATHID);
+ }
+ else
+ return cleanedIDs;
+
+ // now grab them media items
+ std::string sql = PrepareSQL("SELECT %s.%s, %s.idFile, %s, path.idPath, parentPath.strPath FROM %s "
+ "JOIN files ON files.idFile = %s.idFile "
+ "JOIN path ON path.idPath = files.idPath ",
+ table.c_str(), idField.c_str(), table.c_str(), parentPathIdField.c_str(), table.c_str(),
+ table.c_str());
+
+ if (isEpisode)
+ sql += "JOIN tvshow ON tvshow.idShow = episode.idShow ";
+
+ sql += PrepareSQL("JOIN path as parentPath ON parentPath.idPath = %s "
+ "WHERE %s.idFile IN (%s)",
+ parentPathIdField.c_str(),
+ table.c_str(), cleanableFileIDs.c_str());
+
+ m_pDS->query(sql.c_str());
+ while (!m_pDS->eof())
+ {
+ int parentPathID = m_pDS->fv(2).get_asInt();
+ std::map<int, bool>::const_iterator pathsDeleteDecision = pathsDeleteDecisions.find(parentPathID);
+ bool del = true;
+ if (pathsDeleteDecision == pathsDeleteDecisions.end())
+ {
+ std::string parentPath = m_pDS->fv(4).get_asString();
+ if (!CDirectory::Exists(parentPath, false))
+ {
+ // in silent mode assume that the files are just temporarily missing
+ if (silent)
+ del = false;
+ else
+ {
+ CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO);
+ if (pDialog != NULL)
+ {
+ pDialog->SetHeading(15012);
+ pDialog->SetLine(1, 15013);
+ pDialog->SetLine(2, parentPath);
+ pDialog->SetChoice(0, 15015);
+ pDialog->SetChoice(1, 15014);
+
+ //send message and wait for user input
+ ThreadMessage tMsg = { TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_YES_NO, (unsigned int)g_windowManager.GetActiveWindow() };
+ CApplicationMessenger::Get().SendMessage(tMsg, true);
+
+ del = !pDialog->IsConfirmed();
+ }
+ }
+ }
+
+ pathsDeleteDecisions.insert(make_pair(parentPathID, del));
+ }
+ else
+ del = pathsDeleteDecision->second;
+
+ pathsDeleteDecisions.insert(make_pair(m_pDS->fv(3).get_asInt(), del));
+
+ if (del)
+ {
+ deletedFileIDs += m_pDS->fv(1).get_asString() + ",";
+ cleanedIDs.push_back(m_pDS->fv(0).get_asInt());
+ }
+
+ m_pDS->next();
+ }
+ m_pDS->close();
+
+ return cleanedIDs;
+}
+
void CVideoDatabase::DumpToDummyFiles(const CStdString &path)
{
// get all tvshows
diff --git a/xbmc/video/VideoDatabase.h b/xbmc/video/VideoDatabase.h
index 4a78bd636f..44f94fa37e 100644
--- a/xbmc/video/VideoDatabase.h
+++ b/xbmc/video/VideoDatabase.h
@@ -770,8 +770,8 @@ protected:
CVideoInfoTag GetDetailsByTypeAndId(VIDEODB_CONTENT_TYPE type, int id);
CVideoInfoTag GetDetailsForMovie(std::auto_ptr<dbiplus::Dataset> &pDS, bool getDetails = false);
CVideoInfoTag GetDetailsForMovie(const dbiplus::sql_record* const record, bool getDetails = false);
- CVideoInfoTag GetDetailsForTvShow(std::auto_ptr<dbiplus::Dataset> &pDS, bool getDetails = false);
- CVideoInfoTag GetDetailsForTvShow(const dbiplus::sql_record* const record, bool getDetails = false);
+ CVideoInfoTag GetDetailsForTvShow(std::auto_ptr<dbiplus::Dataset> &pDS, bool getDetails = false, CFileItem* item = NULL);
+ CVideoInfoTag GetDetailsForTvShow(const dbiplus::sql_record* const record, bool getDetails = false, CFileItem* item = NULL);
CVideoInfoTag GetDetailsForEpisode(std::auto_ptr<dbiplus::Dataset> &pDS, bool getDetails = false);
CVideoInfoTag GetDetailsForEpisode(const dbiplus::sql_record* const record, bool getDetails = false);
CVideoInfoTag GetDetailsForMusicVideo(std::auto_ptr<dbiplus::Dataset> &pDS, bool getDetails = false);
@@ -843,6 +843,9 @@ private:
*/
CStdString GetSafeFile(const CStdString &dir, const CStdString &name) const;
+ std::vector<int> CleanMediaType(const std::string &mediaType, const std::string &cleanableFileIDs,
+ std::map<int, bool> &pathsDeleteDecisions, std::string &deletedFileIDs, bool silent);
+
void AnnounceRemove(std::string content, int id);
void AnnounceUpdate(std::string content, int id);
};
diff --git a/xbmc/video/VideoInfoTag.cpp b/xbmc/video/VideoInfoTag.cpp
index 07cba40373..b538603caf 100644
--- a/xbmc/video/VideoInfoTag.cpp
+++ b/xbmc/video/VideoInfoTag.cpp
@@ -237,7 +237,7 @@ bool CVideoInfoTag::Save(TiXmlNode *node, const CStdString &tag, bool savePathIn
XMLUtils::SetFloat(&resume, "total", (float)m_resumePoint.totalTimeInSeconds);
movie->InsertEndChild(resume);
- XMLUtils::SetString(movie, "dateadded", m_dateAdded.GetAsDBDateTime());
+ XMLUtils::SetDateTime(movie, "dateadded", m_dateAdded);
if (additionalNode)
movie->InsertEndChild(*additionalNode);
@@ -769,10 +769,7 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
XMLUtils::GetDouble(resume, "total", m_resumePoint.totalTimeInSeconds);
}
- // dateAdded
- CStdString dateAdded;
- XMLUtils::GetString(movie, "dateadded", dateAdded);
- m_dateAdded.SetFromDBDateTime(dateAdded);
+ XMLUtils::GetDateTime(movie, "dateadded", m_dateAdded);
}
bool CVideoInfoTag::HasStreamDetails() const
diff --git a/xbmc/video/dialogs/GUIDialogSubtitles.cpp b/xbmc/video/dialogs/GUIDialogSubtitles.cpp
index d57a91bdb2..c3e4bd333a 100644
--- a/xbmc/video/dialogs/GUIDialogSubtitles.cpp
+++ b/xbmc/video/dialogs/GUIDialogSubtitles.cpp
@@ -190,11 +190,16 @@ void CGUIDialogSubtitles::Process(unsigned int currentTime, CDirtyRegionList &di
m_updateSubsList = false;
}
- if (!m_subtitles->IsEmpty() && !GetFocusedControl())
+ if (!m_subtitles->IsEmpty())
{ // set focus to the list
CGUIMessage msg(GUI_MSG_SETFOCUS, GetID(), CONTROL_SUBLIST);
OnMessage(msg);
}
+ else
+ { // set focus to the service list if no subs are found
+ CGUIMessage msg(GUI_MSG_SETFOCUS, GetID(), CONTROL_SERVICELIST);
+ OnMessage(msg);
+ }
}
CGUIDialog::Process(currentTime, dirtyregions);
}
diff --git a/xbmc/video/dialogs/GUIDialogVideoInfo.cpp b/xbmc/video/dialogs/GUIDialogVideoInfo.cpp
index bed15320f4..cbcec74214 100644
--- a/xbmc/video/dialogs/GUIDialogVideoInfo.cpp
+++ b/xbmc/video/dialogs/GUIDialogVideoInfo.cpp
@@ -53,11 +53,14 @@
#include "video/VideoThumbLoader.h"
#include "filesystem/Directory.h"
#include "filesystem/VideoDatabaseDirectory.h"
+#include "filesystem/VideoDatabaseDirectory/QueryParams.h"
#ifdef HAS_UPNP
#include "network/upnp/UPnP.h"
#endif
+#include "utils/FileUtils.h"
using namespace std;
+using namespace XFILE::VIDEODATABASEDIRECTORY;
using namespace XFILE;
#define CONTROL_IMAGE 3
@@ -73,6 +76,12 @@ using namespace XFILE;
#define CONTROL_LIST 50
+// predicate used by sorting and set_difference
+bool compFileItemsByDbId(const CFileItemPtr& lhs, const CFileItemPtr& rhs)
+{
+ return lhs->HasVideoInfoTag() && rhs->HasVideoInfoTag() && lhs->GetVideoInfoTag()->m_iDbId < rhs->GetVideoInfoTag()->m_iDbId;
+}
+
CGUIDialogVideoInfo::CGUIDialogVideoInfo(void)
: CGUIDialog(WINDOW_DIALOG_VIDEO_INFO, "DialogVideoInfo.xml")
, m_movieItem(new CFileItem)
@@ -941,13 +950,16 @@ int CGUIDialogVideoInfo::ManageVideoItem(const CFileItemPtr &item)
if (!database.Open())
return -1;
- VIDEODB_CONTENT_TYPE type = (VIDEODB_CONTENT_TYPE)item->GetVideoContentType();
+ const std::string &type = item->GetVideoInfoTag()->m_type;
int dbId = item->GetVideoInfoTag()->m_iDbId;
CContextButtons buttons;
- buttons.Add(CONTEXT_BUTTON_EDIT, 16105);
+ if (type == "movie" || type == "set" ||
+ type == "tvshow" || type == "episode" ||
+ type == "musicvideo")
+ buttons.Add(CONTEXT_BUTTON_EDIT, 16105);
- if (type == VIDEODB_CONTENT_MOVIES || type == VIDEODB_CONTENT_TVSHOWS)
+ if (type == "movie" || type == "tvshow")
buttons.Add(CONTEXT_BUTTON_EDIT_SORTTITLE, 16107);
if (item->m_bIsFolder)
@@ -964,7 +976,7 @@ int CGUIDialogVideoInfo::ManageVideoItem(const CFileItemPtr &item)
buttons.Add(CONTEXT_BUTTON_MARK_WATCHED, 16103); //Mark as Watched
}
- if (type == VIDEODB_CONTENT_MOVIES)
+ if (type == "movie")
{
// only show link/unlink if there are tvshows available
if (database.HasContent(VIDEODB_CONTENT_TVSHOWS))
@@ -978,10 +990,32 @@ int CGUIDialogVideoInfo::ManageVideoItem(const CFileItemPtr &item)
buttons.Add(CONTEXT_BUTTON_SET_MOVIESET, 20465);
}
- if (type == VIDEODB_CONTENT_EPISODES &&
+ if (type == "episode" &&
item->GetVideoInfoTag()->m_iBookmarkId > 0)
buttons.Add(CONTEXT_BUTTON_UNLINK_BOOKMARK, 20405);
+ // movie sets
+ if (item->m_bIsFolder && type == "set")
+ {
+ buttons.Add(CONTEXT_BUTTON_SET_MOVIESET_ART, 13511);
+ buttons.Add(CONTEXT_BUTTON_MOVIESET_ADD_REMOVE_ITEMS, 20465);
+ }
+
+ // tags
+ if (item->m_bIsFolder && type == "tag")
+ {
+ CVideoDbUrl videoUrl;
+ if (videoUrl.FromString(item->GetPath()))
+ {
+ const std::string &mediaType = videoUrl.GetItemType();
+
+ buttons.Add(CONTEXT_BUTTON_TAGS_ADD_ITEMS, StringUtils::Format(g_localizeStrings.Get(20460), GetLocalizedVideoType(mediaType).c_str()));
+ buttons.Add(CONTEXT_BUTTON_TAGS_REMOVE_ITEMS, StringUtils::Format(g_localizeStrings.Get(20461), GetLocalizedVideoType(mediaType).c_str()));
+ }
+ }
+
+ buttons.Add(CONTEXT_BUTTON_DELETE, 646);
+
bool result = false;
int button = CGUIDialogContextMenu::ShowAndGetChoice(buttons);
if (button >= 0)
@@ -1025,6 +1059,26 @@ int CGUIDialogVideoInfo::ManageVideoItem(const CFileItemPtr &item)
result = true;
break;
+ case CONTEXT_BUTTON_DELETE:
+ result = DeleteVideoItem(item);
+ break;
+
+ case CONTEXT_BUTTON_SET_MOVIESET_ART:
+ result = ManageVideoItemArtwork(item, "set");
+ break;
+
+ case CONTEXT_BUTTON_MOVIESET_ADD_REMOVE_ITEMS:
+ result = ManageMovieSets(item);
+ break;
+
+ case CONTEXT_BUTTON_TAGS_ADD_ITEMS:
+ result = AddItemsToTag(item);
+ break;
+
+ case CONTEXT_BUTTON_TAGS_REMOVE_ITEMS:
+ result = RemoveItemsFromTag(item);
+ break;
+
default:
result = false;
break;
@@ -1042,6 +1096,9 @@ int CGUIDialogVideoInfo::ManageVideoItem(const CFileItemPtr &item)
//Add change a title's name
bool CGUIDialogVideoInfo::UpdateVideoItemTitle(const CFileItemPtr &pItem)
{
+ if (pItem == NULL || !pItem->HasVideoInfoTag())
+ return false;
+
// dont allow update while scanning
if (g_application.IsVideoScanning())
{
@@ -1077,7 +1134,7 @@ bool CGUIDialogVideoInfo::UpdateVideoItemTitle(const CFileItemPtr &pItem)
bool CGUIDialogVideoInfo::MarkWatched(const CFileItemPtr &item, bool bMark)
{
- if (!CProfilesManager::Get().GetCurrentProfile().canWriteDatabases())
+ if (item == NULL || !CProfilesManager::Get().GetCurrentProfile().canWriteDatabases())
return false;
// dont allow update while scanning
@@ -1131,8 +1188,205 @@ bool CGUIDialogVideoInfo::MarkWatched(const CFileItemPtr &item, bool bMark)
return true;
}
+bool CGUIDialogVideoInfo::CanDeleteVideoItem(const CFileItemPtr &item)
+{
+ if (item == NULL || !item->HasVideoInfoTag())
+ return false;
+
+ CQueryParams params;
+ CVideoDatabaseDirectory::GetQueryParams(item->GetPath(), params);
+
+ return params.GetMovieId() != -1 ||
+ params.GetEpisodeId() != -1 ||
+ params.GetMVideoId() != -1 ||
+ (params.GetTvShowId() != -1 && params.GetSeason() <= -1 &&
+ !CVideoDatabaseDirectory::IsAllItem(item->GetPath()));
+}
+
+bool CGUIDialogVideoInfo::DeleteVideoItemFromDatabase(const CFileItemPtr &item, bool unavailable /* = false */)
+{
+ if (item == NULL || !item->HasVideoInfoTag() ||
+ !CanDeleteVideoItem(item))
+ return false;
+
+ // dont allow update while scanning
+ if (g_application.IsVideoScanning())
+ {
+ CGUIDialogOK::ShowAndGetInput(257, 0, 14057, 0);
+ return false;
+ }
+
+ CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO);
+ if (pDialog == NULL)
+ return false;
+
+ int heading = -1;
+ VIDEODB_CONTENT_TYPE type = (VIDEODB_CONTENT_TYPE)item->GetVideoContentType();
+ switch (type)
+ {
+ case VIDEODB_CONTENT_MOVIES:
+ heading = 432;
+ break;
+ case VIDEODB_CONTENT_EPISODES:
+ heading = 20362;
+ break;
+ case VIDEODB_CONTENT_TVSHOWS:
+ heading = 20363;
+ break;
+ case VIDEODB_CONTENT_MUSICVIDEOS:
+ heading = 20392;
+ break;
+
+ default:
+ return false;
+ }
+
+ pDialog->SetHeading(heading);
+
+ if (unavailable)
+ {
+ pDialog->SetLine(0, g_localizeStrings.Get(662));
+ pDialog->SetLine(1, g_localizeStrings.Get(663));
+ }
+ else
+ {
+ pDialog->SetLine(0, StringUtils::Format(g_localizeStrings.Get(433), item->GetLabel().c_str()));
+ pDialog->SetLine(1, "");
+ }
+ pDialog->SetLine(2, "");
+ pDialog->DoModal();
+
+ if (!pDialog->IsConfirmed())
+ return false;
+
+ CStdString path;
+ CVideoDatabase database;
+ database.Open();
+
+ database.GetFilePathById(item->GetVideoInfoTag()->m_iDbId, path, type);
+ if (path.empty())
+ return false;
+
+ switch (type)
+ {
+ case VIDEODB_CONTENT_MOVIES:
+ database.DeleteMovie(path);
+ break;
+ case VIDEODB_CONTENT_EPISODES:
+ database.DeleteEpisode(path, item->GetVideoInfoTag()->m_iDbId);
+ break;
+ case VIDEODB_CONTENT_TVSHOWS:
+ database.DeleteTvShow(path);
+ break;
+ case VIDEODB_CONTENT_MUSICVIDEOS:
+ database.DeleteMusicVideo(path);
+ break;
+
+ default:
+ return false;
+ }
+
+ if (type == VIDEODB_CONTENT_TVSHOWS)
+ database.SetPathHash(path,"");
+ else
+ database.SetPathHash(URIUtils::GetDirectory(path), "");
+
+ return true;
+}
+
+bool CGUIDialogVideoInfo::DeleteVideoItem(const CFileItemPtr &item, bool unavailable /* = false */)
+{
+ if (item == NULL)
+ return false;
+
+ // delete the video item from the database
+ if (!DeleteVideoItemFromDatabase(item, unavailable))
+ return false;
+
+ bool result = true;
+ // check if the user is allowed to delete the actual file as well
+ if ((CProfilesManager::Get().GetCurrentProfile().getLockMode() == LOCK_MODE_EVERYONE ||
+ !CProfilesManager::Get().GetCurrentProfile().filesLocked() ||
+ g_passwordManager.IsMasterLockUnlocked(true)) &&
+ CSettings::Get().GetBool("filelists.allowfiledeletion"))
+ {
+ CStdString strDeletePath = item->GetVideoInfoTag()->GetPath();
+
+ if (URIUtils::GetFileName(strDeletePath).Equals("VIDEO_TS.IFO"))
+ {
+ strDeletePath = URIUtils::GetDirectory(strDeletePath);
+ if (StringUtils::EndsWithNoCase(strDeletePath, "video_ts/"))
+ {
+ URIUtils::RemoveSlashAtEnd(strDeletePath);
+ strDeletePath = URIUtils::GetDirectory(strDeletePath);
+ }
+ }
+ if (URIUtils::HasSlashAtEnd(strDeletePath))
+ item->m_bIsFolder = true;
+
+ // check if the file/directory can be deleted
+ if (CUtil::SupportsWriteFileOperations(strDeletePath))
+ {
+ item->SetPath(strDeletePath);
+
+ // HACK: stacked files need to be treated as folders in order to be deleted
+ if (item->IsStack())
+ item->m_bIsFolder = true;
+ result = CFileUtils::DeleteItem(item);
+ }
+ }
+
+ CUtil::DeleteVideoDatabaseDirectoryCache();
+
+ return result;
+}
+
+bool CGUIDialogVideoInfo::ManageMovieSets(const CFileItemPtr &item)
+{
+ if (item == NULL)
+ return false;
+
+ CFileItemList originalItems;
+ CFileItemList selectedItems;
+
+ if (!GetMoviesForSet(item.get(), originalItems, selectedItems) ||
+ selectedItems.Size() == 0) // need at least one item selected
+ return false;
+
+ VECFILEITEMS original = originalItems.GetList();
+ std::sort(original.begin(), original.end(), compFileItemsByDbId);
+ VECFILEITEMS selected = selectedItems.GetList();
+ std::sort(selected.begin(), selected.end(), compFileItemsByDbId);
+
+ bool refreshNeeded = false;
+ // update the "added" items
+ VECFILEITEMS addedItems;
+ set_difference(selected.begin(),selected.end(), original.begin(),original.end(), std::back_inserter(addedItems), compFileItemsByDbId);
+ for (VECFILEITEMS::const_iterator it = addedItems.begin(); it != addedItems.end(); ++it)
+ {
+ if (SetMovieSet(it->get(), item.get()))
+ refreshNeeded = true;
+ }
+
+ // update the "deleted" items
+ CFileItemPtr clearItem(new CFileItem());
+ clearItem->GetVideoInfoTag()->m_iDbId = -1; // -1 will be used to clear set
+ VECFILEITEMS deletedItems;
+ set_difference(original.begin(),original.end(), selected.begin(),selected.end(), std::back_inserter(deletedItems), compFileItemsByDbId);
+ for (VECFILEITEMS::iterator it = deletedItems.begin(); it != deletedItems.end(); ++it)
+ {
+ if (SetMovieSet(it->get(), clearItem.get()))
+ refreshNeeded = true;
+ }
+
+ return refreshNeeded;
+}
+
bool CGUIDialogVideoInfo::GetMoviesForSet(const CFileItem *setItem, CFileItemList &originalMovies, CFileItemList &selectedMovies)
{
+ if (setItem == NULL || !setItem->HasVideoInfoTag())
+ return false;
+
CVideoDatabase videodb;
if (!videodb.Open())
return false;
@@ -1184,6 +1438,10 @@ bool CGUIDialogVideoInfo::GetMoviesForSet(const CFileItem *setItem, CFileItemLis
bool CGUIDialogVideoInfo::GetSetForMovie(const CFileItem *movieItem, CFileItemPtr &selectedSet)
{
+ if (movieItem == NULL || !movieItem->HasVideoInfoTag() ||
+ selectedSet == NULL)
+ return false;
+
CVideoDatabase videodb;
if (!videodb.Open())
return false;
@@ -1267,6 +1525,10 @@ bool CGUIDialogVideoInfo::GetSetForMovie(const CFileItem *movieItem, CFileItemPt
bool CGUIDialogVideoInfo::SetMovieSet(const CFileItem *movieItem, const CFileItem *selectedSet)
{
+ if (movieItem == NULL || !movieItem->HasVideoInfoTag() ||
+ selectedSet == NULL || !selectedSet->HasVideoInfoTag())
+ return false;
+
CVideoDatabase videodb;
if (!videodb.Open())
return false;
@@ -1275,6 +1537,308 @@ bool CGUIDialogVideoInfo::SetMovieSet(const CFileItem *movieItem, const CFileIte
return true;
}
+bool CGUIDialogVideoInfo::GetItemsForTag(const CStdString &strHeading, const std::string &type, CFileItemList &items, int idTag /* = -1 */, bool showAll /* = true */)
+{
+ CVideoDatabase videodb;
+ if (!videodb.Open())
+ return false;
+
+ MediaType mediaType = MediaTypeNone;
+ std::string baseDir = "videodb://";
+ std::string idColumn;
+ if (type.compare("movie") == 0)
+ {
+ mediaType = MediaTypeMovie;
+ baseDir += "movies";
+ idColumn = "idMovie";
+ }
+ else if (type.compare("tvshow") == 0)
+ {
+ mediaType = MediaTypeTvShow;
+ baseDir += "tvshows";
+ idColumn = "idShow";
+ }
+ else if (type.compare("musicvideo") == 0)
+ {
+ mediaType = MediaTypeMusicVideo;
+ baseDir += "musicvideos";
+ idColumn = "idMVideo";
+ }
+
+ baseDir += "/titles/";
+ CVideoDbUrl videoUrl;
+ if (!videoUrl.FromString(baseDir))
+ return false;
+
+ CVideoDatabase::Filter filter;
+ if (idTag > 0)
+ {
+ if (!showAll)
+ videoUrl.AddOption("tagid", idTag);
+ else
+ filter.where = videodb.PrepareSQL("%sview.%s NOT IN (SELECT taglinks.idMedia FROM taglinks WHERE taglinks.idTag = %d AND taglinks.media_type = '%s')", type.c_str(), idColumn.c_str(), idTag, type.c_str());
+ }
+
+ CFileItemList listItems;
+ if (!videodb.GetSortedVideos(mediaType, videoUrl.ToString(), SortDescription(), listItems, filter) || listItems.Size() <= 0)
+ return false;
+
+ CGUIDialogSelect *dialog = (CGUIDialogSelect *)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT);
+ if (dialog == NULL)
+ return false;
+
+ listItems.Sort(SortByLabel, SortOrderAscending, SortAttributeIgnoreArticle);
+
+ dialog->Reset();
+ dialog->SetMultiSelection(true);
+ dialog->SetHeading(strHeading);
+ dialog->SetItems(&listItems);
+ dialog->EnableButton(true, 186);
+ dialog->DoModal();
+
+ items.Copy(dialog->GetSelectedItems());
+ return items.Size() > 0;
+}
+
+bool CGUIDialogVideoInfo::AddItemsToTag(const CFileItemPtr &tagItem)
+{
+ if (tagItem == NULL || !tagItem->HasVideoInfoTag())
+ return false;
+
+ CVideoDbUrl videoUrl;
+ if (!videoUrl.FromString(tagItem->GetPath()))
+ return false;
+
+ CVideoDatabase videodb;
+ if (!videodb.Open())
+ return true;
+
+ std::string mediaType = videoUrl.GetItemType();
+ mediaType = mediaType.substr(0, mediaType.length() - 1);
+
+ CFileItemList items;
+ std::string localizedType = GetLocalizedVideoType(mediaType);
+ std::string strLabel = StringUtils::Format(g_localizeStrings.Get(20464), localizedType.c_str());
+ if (!GetItemsForTag(strLabel, mediaType, items, tagItem->GetVideoInfoTag()->m_iDbId))
+ return true;
+
+ for (int index = 0; index < items.Size(); index++)
+ {
+ if (!items[index]->HasVideoInfoTag() || items[index]->GetVideoInfoTag()->m_iDbId <= 0)
+ continue;
+
+ videodb.AddTagToItem(items[index]->GetVideoInfoTag()->m_iDbId, tagItem->GetVideoInfoTag()->m_iDbId, mediaType);
+ }
+
+ return true;
+}
+
+bool CGUIDialogVideoInfo::RemoveItemsFromTag(const CFileItemPtr &tagItem)
+{
+ if (tagItem == NULL || !tagItem->HasVideoInfoTag())
+ return false;
+
+ CVideoDbUrl videoUrl;
+ if (!videoUrl.FromString(tagItem->GetPath()))
+ return false;
+
+ CVideoDatabase videodb;
+ if (!videodb.Open())
+ return true;
+
+ std::string mediaType = videoUrl.GetItemType();
+ mediaType = mediaType.substr(0, mediaType.length() - 1);
+
+ CFileItemList items;
+ std::string localizedType = GetLocalizedVideoType(mediaType);
+ std::string strLabel = StringUtils::Format(g_localizeStrings.Get(20464), localizedType.c_str());
+ if (!GetItemsForTag(strLabel, mediaType, items, tagItem->GetVideoInfoTag()->m_iDbId, false))
+ return true;
+
+ for (int index = 0; index < items.Size(); index++)
+ {
+ if (!items[index]->HasVideoInfoTag() || items[index]->GetVideoInfoTag()->m_iDbId <= 0)
+ continue;
+
+ videodb.RemoveTagFromItem(items[index]->GetVideoInfoTag()->m_iDbId, tagItem->GetVideoInfoTag()->m_iDbId, mediaType);
+ }
+
+ return true;
+}
+
+bool CGUIDialogVideoInfo::ManageVideoItemArtwork(const CFileItemPtr &item, const std::string &type)
+{
+ if (item == NULL || !item->HasVideoInfoTag() || type.empty())
+ return false;
+
+ CVideoDatabase videodb;
+ if (!videodb.Open())
+ return true;
+
+ // Grab the thumbnails from the web
+ CFileItemList items;
+ CFileItemPtr noneitem(new CFileItem("thumb://None", false));
+ std::string currentThumb;
+ int idArtist = -1;
+ CStdString artistPath;
+ string artType = "thumb";
+ if (type == "artist")
+ {
+ CMusicDatabase musicdb;
+ if (musicdb.Open())
+ {
+ idArtist = musicdb.GetArtistByName(item->GetLabel());
+ if (idArtist >= 0 && musicdb.GetArtistPath(idArtist, artistPath))
+ {
+ currentThumb = musicdb.GetArtForItem(idArtist, "artist", "thumb");
+ if (currentThumb.empty())
+ currentThumb = videodb.GetArtForItem(item->GetVideoInfoTag()->m_iDbId, item->GetVideoInfoTag()->m_type, artType);
+ }
+ }
+ }
+ else if (type == "actor")
+ currentThumb = videodb.GetArtForItem(item->GetVideoInfoTag()->m_iDbId, item->GetVideoInfoTag()->m_type, artType);
+ else
+ { // SEASON, SET
+ map<string, string> currentArt;
+ artType = ChooseArtType(*item, currentArt);
+ if (artType.empty())
+ return false;
+
+ if (artType == "fanart")
+ return OnGetFanart(item);
+
+ if (currentArt.find(artType) != currentArt.end())
+ currentThumb = currentArt[artType];
+ else if ((artType == "poster" || artType == "banner") && currentArt.find("thumb") != currentArt.end())
+ currentThumb = currentArt["thumb"];
+ }
+
+ if (!currentThumb.empty())
+ {
+ CFileItemPtr item(new CFileItem("thumb://Current", false));
+ item->SetArt("thumb", currentThumb);
+ item->SetLabel(g_localizeStrings.Get(13512));
+ items.Add(item);
+ }
+ noneitem->SetIconImage("DefaultFolder.png");
+ noneitem->SetLabel(g_localizeStrings.Get(13515));
+
+ bool local = false;
+ vector<CStdString> thumbs;
+ if (type != "artist")
+ {
+ CVideoInfoTag tag;
+ if (type == "season")
+ videodb.GetTvShowInfo("", tag, item->GetVideoInfoTag()->m_iIdShow);
+ else
+ tag = *item->GetVideoInfoTag();
+
+ tag.m_strPictureURL.GetThumbURLs(thumbs, artType, type == "season" ? item->GetVideoInfoTag()->m_iSeason : -1);
+
+ for (size_t i = 0; i < thumbs.size(); i++)
+ {
+ CFileItemPtr item(new CFileItem(StringUtils::Format("thumb://Remote%i", i), false));
+ item->SetArt("thumb", thumbs[i]);
+ item->SetIconImage("DefaultPicture.png");
+ item->SetLabel(g_localizeStrings.Get(13513));
+ items.Add(item);
+
+ // TODO: Do we need to clear the cached image?
+ // CTextureCache::Get().ClearCachedImage(thumbs[i]);
+ }
+
+ if (type == "actor")
+ {
+ CStdString picturePath;
+ CStdString strThumb = URIUtils::AddFileToFolder(picturePath, "folder.jpg");
+ if (XFILE::CFile::Exists(strThumb))
+ {
+ CFileItemPtr pItem(new CFileItem(strThumb,false));
+ pItem->SetLabel(g_localizeStrings.Get(13514));
+ pItem->SetArt("thumb", strThumb);
+ items.Add(pItem);
+ local = true;
+ }
+ else
+ noneitem->SetIconImage("DefaultActor.png");
+ }
+
+ if (type == "set")
+ noneitem->SetIconImage("DefaultVideo.png");
+ }
+ else
+ {
+ CStdString strThumb = URIUtils::AddFileToFolder(artistPath, "folder.jpg");
+ if (XFILE::CFile::Exists(strThumb))
+ {
+ CFileItemPtr pItem(new CFileItem(strThumb, false));
+ pItem->SetLabel(g_localizeStrings.Get(13514));
+ pItem->SetArt("thumb", strThumb);
+ items.Add(pItem);
+ local = true;
+ }
+ else
+ noneitem->SetIconImage("DefaultArtist.png");
+ }
+
+ if (!local)
+ items.Add(noneitem);
+
+ CStdString result;
+ VECSOURCES sources=*CMediaSourceSettings::Get().GetSources("video");
+ g_mediaManager.GetLocalDrives(sources);
+ AddItemPathToFileBrowserSources(sources, *item);
+ if (!CGUIDialogFileBrowser::ShowAndGetImage(items, sources, g_localizeStrings.Get(13511), result))
+ return false; // user cancelled
+
+ if (result == "thumb://Current")
+ result = currentThumb; // user chose the one they have
+
+ // delete the thumbnail if that's what the user wants, else overwrite with the
+ // new thumbnail
+ if (result == "thumb://None")
+ result.clear();
+ else if (StringUtils::StartsWith(result, "thumb://Remote"))
+ {
+ int number = atoi(StringUtils::Mid(result, 14).c_str());
+ result = thumbs[number];
+ }
+
+ // write the selected artwork to the database
+ if (type == "set" ||
+ type == "actor" ||
+ type == "season" ||
+ (type == "artist" && idArtist < 0))
+ videodb.SetArtForItem(item->GetVideoInfoTag()->m_iDbId, item->GetVideoInfoTag()->m_type, artType, result);
+ else
+ {
+ CMusicDatabase musicdb;
+ if (musicdb.Open())
+ musicdb.SetArtForItem(idArtist, "artist", artType, result);
+ }
+
+ CUtil::DeleteVideoDatabaseDirectoryCache();
+ CGUIMessage msg(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_REFRESH_THUMBS);
+ g_windowManager.SendMessage(msg);
+
+ return true;
+}
+
+std::string CGUIDialogVideoInfo::GetLocalizedVideoType(const std::string &strType)
+{
+ if (strType == "movie" || strType == "movies")
+ return g_localizeStrings.Get(20342);
+ else if (strType == "tvshow" || strType == "tvshows")
+ return g_localizeStrings.Get(20343);
+ else if (strType == "episode" || strType == "episodes")
+ return g_localizeStrings.Get(20359);
+ else if (strType == "musicvideo" || strType == "musicvideos")
+ return g_localizeStrings.Get(20391);
+
+ return "";
+}
+
bool CGUIDialogVideoInfo::UpdateVideoItemSortTitle(const CFileItemPtr &pItem)
{
// dont allow update while scanning
@@ -1369,3 +1933,56 @@ bool CGUIDialogVideoInfo::LinkMovieToTvShow(const CFileItemPtr &item, bool bRemo
return false;
}
+
+bool CGUIDialogVideoInfo::OnGetFanart(const CFileItemPtr &videoItem)
+{
+ if (videoItem == NULL || !videoItem->HasVideoInfoTag())
+ return false;
+
+ // update the db
+ CVideoDatabase videodb;
+ if (!videodb.Open())
+ return false;
+
+ CVideoThumbLoader loader;
+ CFileItem item(*videoItem);
+ loader.LoadItem(&item);
+
+ CFileItemList items;
+ if (item.HasArt("fanart"))
+ {
+ CFileItemPtr itemCurrent(new CFileItem("fanart://Current", false));
+ itemCurrent->SetArt("thumb", item.GetArt("fanart"));
+ itemCurrent->SetLabel(g_localizeStrings.Get(20440));
+ items.Add(itemCurrent);
+ }
+
+ // add the none option
+ {
+ CFileItemPtr itemNone(new CFileItem("fanart://None", false));
+ itemNone->SetIconImage("DefaultVideo.png");
+ itemNone->SetLabel(g_localizeStrings.Get(20439));
+ items.Add(itemNone);
+ }
+
+ CStdString result;
+ VECSOURCES sources(*CMediaSourceSettings::Get().GetSources("video"));
+ g_mediaManager.GetLocalDrives(sources);
+ AddItemPathToFileBrowserSources(sources, item);
+ bool flip = false;
+ if (!CGUIDialogFileBrowser::ShowAndGetImage(items, sources, g_localizeStrings.Get(20437), result, &flip, 20445) ||
+ StringUtils::EqualsNoCase(result, "fanart://Current"))
+ return false;
+
+ if (StringUtils::EqualsNoCase(result, "fanart://None") || !CFile::Exists(result))
+ result.clear();
+ if (!result.empty() && flip)
+ result = CTextureUtils::GetWrappedImageURL(result, "", "flipped");
+
+ videodb.SetArtForItem(item.GetVideoInfoTag()->m_iDbId, item.GetVideoInfoTag()->m_type, "fanart", result);
+
+ // clear view cache and reload images
+ CUtil::DeleteVideoDatabaseDirectoryCache();
+
+ return true;
+}
diff --git a/xbmc/video/dialogs/GUIDialogVideoInfo.h b/xbmc/video/dialogs/GUIDialogVideoInfo.h
index 2ce4aca43a..4440b5a651 100644
--- a/xbmc/video/dialogs/GUIDialogVideoInfo.h
+++ b/xbmc/video/dialogs/GUIDialogVideoInfo.h
@@ -49,10 +49,22 @@ public:
static int ManageVideoItem(const CFileItemPtr &item);
static bool UpdateVideoItemTitle(const CFileItemPtr &pItem);
static bool MarkWatched(const CFileItemPtr &item, bool bMark);
+ static bool CanDeleteVideoItem(const CFileItemPtr &item);
+ static bool DeleteVideoItemFromDatabase(const CFileItemPtr &item, bool unavailable = false);
+ static bool DeleteVideoItem(const CFileItemPtr &item, bool unavailable = false);
+ static bool ManageMovieSets(const CFileItemPtr &item);
static bool GetMoviesForSet(const CFileItem *setItem, CFileItemList &originalMovies, CFileItemList &selectedMovies);
static bool GetSetForMovie(const CFileItem *movieItem, CFileItemPtr &selectedSet);
static bool SetMovieSet(const CFileItem *movieItem, const CFileItem *selectedSet);
+
+ static bool GetItemsForTag(const CStdString &strHeading, const std::string &type, CFileItemList &items, int idTag = -1, bool showAll = true);
+ static bool AddItemsToTag(const CFileItemPtr &tagItem);
+ static bool RemoveItemsFromTag(const CFileItemPtr &tagItem);
+
+ static bool ManageVideoItemArtwork(const CFileItemPtr &item, const std::string &type);
+
+ static std::string GetLocalizedVideoType(const std::string &strType);
protected:
virtual void OnInitWindow();
void Update();
@@ -71,6 +83,11 @@ protected:
static bool UpdateVideoItemSortTitle(const CFileItemPtr &pItem);
static bool LinkMovieToTvShow(const CFileItemPtr &item, bool bRemove, CVideoDatabase &database);
+ /*! \brief Pop up a fanart chooser. Does not utilise remote URLs.
+ \param videoItem the item to choose fanart for.
+ */
+ static bool OnGetFanart(const CFileItemPtr &videoItem);
+
CFileItemPtr m_movieItem;
CFileItemList *m_castList;
bool m_bViewReview;
diff --git a/xbmc/video/windows/GUIWindowVideoBase.cpp b/xbmc/video/windows/GUIWindowVideoBase.cpp
index 812f1e086b..2c8abde432 100644
--- a/xbmc/video/windows/GUIWindowVideoBase.cpp
+++ b/xbmc/video/windows/GUIWindowVideoBase.cpp
@@ -755,6 +755,15 @@ void CGUIWindowVideoBase::AddItemToPlayList(const CFileItemPtr &pItem, CFileItem
if (pItem->IsParentFolder())
return;
+ // check if it's a folder with dvd or bluray files, then just add the relevant file
+ std::string mediapath(pItem->GetOpticalMediaPath());
+ if (!mediapath.empty())
+ {
+ CFileItemPtr item(new CFileItem(mediapath, false));
+ queuedItems.Add(item);
+ return;
+ }
+
// Check if we add a locked share
if ( pItem->m_bIsShareOrDrive )
{
@@ -1201,18 +1210,18 @@ void CGUIWindowVideoBase::GetContextButtons(int itemNumber, CContextButtons &but
buttons.Add(CONTEXT_BUTTON_PLAY_PART, 20324);
}
- if (!m_vecItems->GetPath().empty() && !StringUtils::StartsWithNoCase(item->GetPath(), "newsmartplaylist://") && !StringUtils::StartsWithNoCase(item->GetPath(), "newtag://")
- && !m_vecItems->IsSourcesPath())
- {
- buttons.Add(CONTEXT_BUTTON_QUEUE_ITEM, 13347); // Add to Playlist
- }
-
// allow a folder to be ad-hoc queued and played by the default player
if (item->m_bIsFolder || (item->IsPlayList() &&
!g_advancedSettings.m_playlistAsFolders))
{
buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 208);
}
+
+ if (!m_vecItems->GetPath().empty() && !StringUtils::StartsWithNoCase(item->GetPath(), "newsmartplaylist://") && !StringUtils::StartsWithNoCase(item->GetPath(), "newtag://")
+ && !m_vecItems->IsSourcesPath())
+ {
+ buttons.Add(CONTEXT_BUTTON_QUEUE_ITEM, 13347); // Add to Playlist
+ }
}
if (!m_vecItems->IsPlugin() && (item->IsPlugin() || item->IsScript()))
diff --git a/xbmc/video/windows/GUIWindowVideoNav.cpp b/xbmc/video/windows/GUIWindowVideoNav.cpp
index 21b3a12b5c..98150b21d5 100644
--- a/xbmc/video/windows/GUIWindowVideoNav.cpp
+++ b/xbmc/video/windows/GUIWindowVideoNav.cpp
@@ -645,21 +645,6 @@ void CGUIWindowVideoNav::OnInfo(CFileItem* pItem, ADDON::ScraperPtr& scraper)
CGUIWindowVideoBase::OnInfo(pItem,scraper);
}
-bool CGUIWindowVideoNav::CanDelete(const CStdString& strPath)
-{
- CQueryParams params;
- CVideoDatabaseDirectory::GetQueryParams(strPath,params);
-
- if (params.GetMovieId() != -1 ||
- params.GetEpisodeId() != -1 ||
- params.GetMVideoId() != -1 ||
- (params.GetTvShowId() != -1 && params.GetSeason() <= -1
- && !CVideoDatabaseDirectory::IsAllItem(strPath)))
- return true;
-
- return false;
-}
-
void CGUIWindowVideoNav::OnDeleteItem(CFileItemPtr pItem)
{
if (m_vecItems->IsParentFolder())
@@ -719,114 +704,13 @@ void CGUIWindowVideoNav::OnDeleteItem(CFileItemPtr pItem)
}
else
{
- if (!DeleteItem(pItem.get()))
+ if (!CGUIDialogVideoInfo::DeleteVideoItem(pItem))
return;
-
- CStdString strDeletePath;
- if (pItem->m_bIsFolder)
- strDeletePath=pItem->GetVideoInfoTag()->m_strPath;
- else
- strDeletePath=pItem->GetVideoInfoTag()->m_strFileNameAndPath;
-
- if (URIUtils::GetFileName(strDeletePath).Equals("VIDEO_TS.IFO"))
- {
- strDeletePath = URIUtils::GetDirectory(strDeletePath);
- if (StringUtils::EndsWithNoCase(strDeletePath, "video_ts/"))
- {
- URIUtils::RemoveSlashAtEnd(strDeletePath);
- strDeletePath = URIUtils::GetDirectory(strDeletePath);
- }
- }
- if (URIUtils::HasSlashAtEnd(strDeletePath))
- pItem->m_bIsFolder=true;
-
- if (CSettings::Get().GetBool("filelists.allowfiledeletion") &&
- CUtil::SupportsWriteFileOperations(strDeletePath))
- {
- pItem->SetPath(strDeletePath);
- CGUIWindowVideoBase::OnDeleteItem(pItem);
- }
}
CUtil::DeleteVideoDatabaseDirectoryCache();
}
-bool CGUIWindowVideoNav::DeleteItem(CFileItem* pItem, bool bUnavailable /* = false */)
-{
- if (!pItem->HasVideoInfoTag() || !CanDelete(pItem->GetPath()))
- return false;
-
- VIDEODB_CONTENT_TYPE iType=VIDEODB_CONTENT_MOVIES;
- if (pItem->HasVideoInfoTag() && !pItem->GetVideoInfoTag()->m_strShowTitle.empty())
- iType = VIDEODB_CONTENT_TVSHOWS;
- if (pItem->HasVideoInfoTag() && pItem->GetVideoInfoTag()->m_iSeason > -1 && !pItem->m_bIsFolder)
- iType = VIDEODB_CONTENT_EPISODES;
- if (pItem->HasVideoInfoTag() && !pItem->GetVideoInfoTag()->m_artist.empty())
- iType = VIDEODB_CONTENT_MUSICVIDEOS;
-
- // dont allow update while scanning
- if (g_application.IsVideoScanning())
- {
- CGUIDialogOK::ShowAndGetInput(257, 0, 14057, 0);
- return false;
- }
-
-
- CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO);
- if (!pDialog)
- return false;
- if (iType == VIDEODB_CONTENT_MOVIES)
- pDialog->SetHeading(432);
- if (iType == VIDEODB_CONTENT_EPISODES)
- pDialog->SetHeading(20362);
- if (iType == VIDEODB_CONTENT_TVSHOWS)
- pDialog->SetHeading(20363);
- if (iType == VIDEODB_CONTENT_MUSICVIDEOS)
- pDialog->SetHeading(20392);
-
- if(bUnavailable)
- {
- pDialog->SetLine(0, g_localizeStrings.Get(662));
- pDialog->SetLine(1, g_localizeStrings.Get(663));
- pDialog->SetLine(2, "");;
- pDialog->DoModal();
- }
- else
- {
- CStdString strLine = StringUtils::Format(g_localizeStrings.Get(433), pItem->GetLabel().c_str());
- pDialog->SetLine(0, strLine);
- pDialog->SetLine(1, "");
- pDialog->SetLine(2, "");;
- pDialog->DoModal();
- }
-
- if (!pDialog->IsConfirmed())
- return false;
-
- CStdString path;
- CVideoDatabase database;
- database.Open();
-
- database.GetFilePathById(pItem->GetVideoInfoTag()->m_iDbId, path, iType);
- if (path.empty())
- return false;
- if (iType == VIDEODB_CONTENT_MOVIES)
- database.DeleteMovie(path);
- if (iType == VIDEODB_CONTENT_EPISODES)
- database.DeleteEpisode(path, pItem->GetVideoInfoTag()->m_iDbId);
- if (iType == VIDEODB_CONTENT_TVSHOWS)
- database.DeleteTvShow(path);
- if (iType == VIDEODB_CONTENT_MUSICVIDEOS)
- database.DeleteMusicVideo(path);
-
- if (iType == VIDEODB_CONTENT_TVSHOWS)
- database.SetPathHash(path,"");
- else
- database.SetPathHash(URIUtils::GetDirectory(path), "");
-
- return true;
-}
-
void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &buttons)
{
CFileItemPtr item;
@@ -923,13 +807,6 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt
// can we update the database?
if (CProfilesManager::Get().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)
{
- if (node == NODE_TYPE_TITLE_TVSHOWS)
- {
- if (g_application.IsVideoScanning())
- buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353);
- else
- buttons.Add(CONTEXT_BUTTON_SCAN, 13349);
- }
if (!item->IsPlugin() && !item->IsScript() && !item->IsLiveTV() && !item->IsAddonsPath() &&
item->GetPath() != "sources://video/" &&
item->GetPath() != "special://videoplaylists/" &&
@@ -952,35 +829,25 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt
}
}
if (!g_application.IsVideoScanning() && item->IsVideoDb() && item->HasVideoInfoTag() &&
- (!item->m_bIsFolder || m_vecItems->GetContent().Equals("movies") || m_vecItems->GetContent().Equals("tvshows")))
+ (item->GetVideoInfoTag()->m_type == "movie" || // movies
+ item->GetVideoInfoTag()->m_type == "tvshow" || // tvshows
+ item->GetVideoInfoTag()->m_type == "episode" || // episodes
+ item->GetVideoInfoTag()->m_type == "musicvideo" || // musicvideos
+ item->GetVideoInfoTag()->m_type == "tag" || // tags
+ item->GetVideoInfoTag()->m_type == "set")) // sets
{
buttons.Add(CONTEXT_BUTTON_EDIT, 16106);
}
-
- if (node == NODE_TYPE_SEASONS && item->m_bIsFolder)
- buttons.Add(CONTEXT_BUTTON_SET_SEASON_ART, 13511);
-
- if (StringUtils::StartsWithNoCase(item->GetPath(), "videodb://movies/sets/") && item->GetPath().size() > 22 && item->m_bIsFolder) // sets
+ if (node == NODE_TYPE_TITLE_TVSHOWS)
{
- buttons.Add(CONTEXT_BUTTON_SET_MOVIESET_ART, 13511);
- buttons.Add(CONTEXT_BUTTON_MOVIESET_ADD_REMOVE_ITEMS, 20465);
- buttons.Add(CONTEXT_BUTTON_DELETE, 646);
+ if (g_application.IsVideoScanning())
+ buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353);
+ else
+ buttons.Add(CONTEXT_BUTTON_SCAN, 13349);
}
- if (m_vecItems->GetContent() == "tags" && item->m_bIsFolder) // tags
- {
- CVideoDbUrl videoUrl;
- if (videoUrl.FromString(item->GetPath()))
- {
- std::string mediaType = videoUrl.GetItemType();
-
- CStdString strLabelAdd = StringUtils::Format(g_localizeStrings.Get(20460), GetLocalizedType(videoUrl.GetItemType()).c_str());
- CStdString strLabelRemove = StringUtils::Format(g_localizeStrings.Get(20461), GetLocalizedType(videoUrl.GetItemType()).c_str());
- buttons.Add(CONTEXT_BUTTON_TAGS_ADD_ITEMS, strLabelAdd);
- buttons.Add(CONTEXT_BUTTON_TAGS_REMOVE_ITEMS, strLabelRemove);
- buttons.Add(CONTEXT_BUTTON_DELETE, 646);
- }
- }
+ if (node == NODE_TYPE_SEASONS && item->m_bIsFolder)
+ buttons.Add(CONTEXT_BUTTON_SET_SEASON_ART, 13511);
if (node == NODE_TYPE_ACTOR && !dir.IsAllItem(item->GetPath()) && item->m_bIsFolder)
{
@@ -989,9 +856,6 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt
else
buttons.Add(CONTEXT_BUTTON_SET_ACTOR_THUMB, 20403);
}
- if (item->IsVideoDb() && item->HasVideoInfoTag() &&
- (!item->m_bIsFolder || node == NODE_TYPE_TITLE_TVSHOWS))
- buttons.Add(CONTEXT_BUTTON_DELETE, 646);
}
if (!m_vecItems->IsVideoDb() && !m_vecItems->IsVirtualDirectoryRoot())
@@ -1025,12 +889,6 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt
}
}
-// predicate used by sorting and set_difference
-bool compFileItemsByDbId(const CFileItemPtr& lhs, const CFileItemPtr& rhs)
-{
- return lhs->HasVideoInfoTag() && rhs->HasVideoInfoTag() && lhs->GetVideoInfoTag()->m_iDbId < rhs->GetVideoInfoTag()->m_iDbId;
-}
-
bool CGUIWindowVideoNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
{
CFileItemPtr item;
@@ -1065,261 +923,17 @@ bool CGUIWindowVideoNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
case CONTEXT_BUTTON_SET_SEASON_ART:
case CONTEXT_BUTTON_SET_ACTOR_THUMB:
case CONTEXT_BUTTON_SET_ARTIST_THUMB:
- case CONTEXT_BUTTON_SET_MOVIESET_ART:
{
- // Grab the thumbnails from the web
- CFileItemList items;
- CFileItemPtr noneitem(new CFileItem("thumb://None", false));
- CStdString currentThumb;
- int idArtist = -1;
- CStdString artistPath;
- string artType = "thumb";
- if (button == CONTEXT_BUTTON_SET_ARTIST_THUMB)
- {
- CMusicDatabase database;
- database.Open();
- idArtist = database.GetArtistByName(m_vecItems->Get(itemNumber)->GetLabel());
- database.GetArtistPath(idArtist, artistPath);
- currentThumb = database.GetArtForItem(idArtist, "artist", "thumb");
- if (currentThumb.empty())
- currentThumb = m_database.GetArtForItem(m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_iDbId, m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_type, artType);
- }
- else if (button == CONTEXT_BUTTON_SET_ACTOR_THUMB)
- currentThumb = m_database.GetArtForItem(m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_iDbId, m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_type, artType);
- else
- { // SEASON, SET
- map<string, string> currentArt;
- artType = CGUIDialogVideoInfo::ChooseArtType(*m_vecItems->Get(itemNumber), currentArt);
- if (artType.empty())
- return false;
-
- if (artType == "fanart")
- {
- OnChooseFanart(*m_vecItems->Get(itemNumber));
- return true;
- }
-
- if (currentArt.find(artType) != currentArt.end())
- currentThumb = currentArt[artType];
- else if ((artType == "poster" || artType == "banner") && currentArt.find("thumb") != currentArt.end())
- currentThumb = currentArt["thumb"];
- }
- if (!currentThumb.empty())
- {
- CFileItemPtr item(new CFileItem("thumb://Current", false));
- item->SetArt("thumb", currentThumb);
- item->SetLabel(g_localizeStrings.Get(13512));
- items.Add(item);
- }
- noneitem->SetIconImage("DefaultFolder.png");
- noneitem->SetLabel(g_localizeStrings.Get(13515));
-
- vector<CStdString> thumbs;
- if (button != CONTEXT_BUTTON_SET_ARTIST_THUMB)
- {
- CVideoInfoTag tag;
- if (button == CONTEXT_BUTTON_SET_SEASON_ART)
- m_database.GetTvShowInfo("",tag,m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_iIdShow);
- else
- tag = *m_vecItems->Get(itemNumber)->GetVideoInfoTag();
- if (button == CONTEXT_BUTTON_SET_SEASON_ART)
- tag.m_strPictureURL.GetThumbURLs(thumbs, artType, m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_iSeason);
- else
- tag.m_strPictureURL.GetThumbURLs(thumbs, artType);
-
- for (unsigned int i = 0; i < thumbs.size(); i++)
- {
- CStdString strItemPath = StringUtils::Format("thumb://Remote%i",i);
- CFileItemPtr item(new CFileItem(strItemPath, false));
- item->SetArt("thumb", thumbs[i]);
- item->SetIconImage("DefaultPicture.png");
- item->SetLabel(g_localizeStrings.Get(13513));
- items.Add(item);
-
- // TODO: Do we need to clear the cached image?
- // CTextureCache::Get().ClearCachedImage(thumbs[i]);
- }
- }
-
- bool local=false;
- if (button == CONTEXT_BUTTON_SET_ARTIST_THUMB)
- {
- CStdString strThumb = URIUtils::AddFileToFolder(artistPath, "folder.jpg");
- if (XFILE::CFile::Exists(strThumb))
- {
- CFileItemPtr pItem(new CFileItem(strThumb,false));
- pItem->SetLabel(g_localizeStrings.Get(13514));
- pItem->SetArt("thumb", strThumb);
- items.Add(pItem);
- local = true;
- }
- else
- noneitem->SetIconImage("DefaultArtist.png");
- }
-
+ std::string type = "season";
if (button == CONTEXT_BUTTON_SET_ACTOR_THUMB)
- {
- CStdString picturePath;
- CStdString strThumb = URIUtils::AddFileToFolder(picturePath, "folder.jpg");
- if (XFILE::CFile::Exists(strThumb))
- {
- CFileItemPtr pItem(new CFileItem(strThumb,false));
- pItem->SetLabel(g_localizeStrings.Get(13514));
- pItem->SetArt("thumb", strThumb);
- items.Add(pItem);
- local = true;
- }
- else
- noneitem->SetIconImage("DefaultActor.png");
- }
-
- if (button == CONTEXT_BUTTON_SET_MOVIESET_ART)
- noneitem->SetIconImage("DefaultVideo.png");
-
- if (!local)
- items.Add(noneitem);
-
- VECSOURCES sources=*CMediaSourceSettings::Get().GetSources("video");
- g_mediaManager.GetLocalDrives(sources);
- CStdString result;
- CGUIDialogVideoInfo::AddItemPathToFileBrowserSources(sources, *item);
- if (!CGUIDialogFileBrowser::ShowAndGetImage(items, sources,
- g_localizeStrings.Get(13511), result))
- {
- return false; // user cancelled
- }
-
- if (result == "thumb://Current")
- result = currentThumb; // user chose the one they have
-
- // delete the thumbnail if that's what the user wants, else overwrite with the
- // new thumbnail
- if (StringUtils::StartsWith(result, "thumb://Remote"))
- {
- int number = atoi(result.substr(14).c_str());
- result = thumbs[number];
- }
- else if (result == "thumb://None")
- result.clear();
- if (button == CONTEXT_BUTTON_SET_MOVIESET_ART ||
- button == CONTEXT_BUTTON_SET_ACTOR_THUMB ||
- button == CONTEXT_BUTTON_SET_SEASON_ART ||
- (button == CONTEXT_BUTTON_SET_ARTIST_THUMB && idArtist < 0))
- m_database.SetArtForItem(m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_iDbId, m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_type, artType, result);
- else
- {
- CMusicDatabase db;
- if (db.Open())
- db.SetArtForItem(idArtist, "artist", artType, result);
- }
-
- CUtil::DeleteVideoDatabaseDirectoryCache();
- CGUIMessage msg(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_REFRESH_THUMBS);
- g_windowManager.SendMessage(msg);
- Refresh();
-
- return true;
- }
- case CONTEXT_BUTTON_TAGS_ADD_ITEMS:
- {
- CVideoDbUrl videoUrl;
- if (!videoUrl.FromString(item->GetPath()))
- return false;
-
- std::string mediaType = videoUrl.GetItemType();
- mediaType = mediaType.substr(0, mediaType.length() - 1);
-
- CFileItemList items;
- CStdString localizedType = GetLocalizedType(mediaType);
- CStdString strLabel = StringUtils::Format(g_localizeStrings.Get(20464), localizedType.c_str());
- if (!GetItemsForTag(strLabel, mediaType, items, item->GetVideoInfoTag()->m_iDbId))
- return true;
-
- CVideoDatabase videodb;
- if (!videodb.Open())
- return true;
-
- for (int index = 0; index < items.Size(); index++)
- {
- if (!items[index]->HasVideoInfoTag() || items[index]->GetVideoInfoTag()->m_iDbId <= 0)
- continue;
-
- videodb.AddTagToItem(items[index]->GetVideoInfoTag()->m_iDbId, item->GetVideoInfoTag()->m_iDbId, mediaType);
- }
-
- // we need to clear any cached version of this tag's listing
- items.SetPath(item->GetPath());
- items.RemoveDiscCache(GetID());
- return true;
- }
- case CONTEXT_BUTTON_TAGS_REMOVE_ITEMS:
- {
- CVideoDbUrl videoUrl;
- if (!videoUrl.FromString(item->GetPath()))
- return false;
+ type = "actor";
+ else if (button == CONTEXT_BUTTON_SET_ARTIST_THUMB)
+ type = "artist";
- std::string mediaType = videoUrl.GetItemType();
- mediaType = mediaType.substr(0, mediaType.length() - 1);
-
- CFileItemList items;
- CStdString localizedType = GetLocalizedType(mediaType);
- CStdString strLabel = StringUtils::Format(g_localizeStrings.Get(20464), localizedType.c_str());
- if (!GetItemsForTag(strLabel, mediaType, items, item->GetVideoInfoTag()->m_iDbId, false))
- return true;
-
- CVideoDatabase videodb;
- if (!videodb.Open())
- return true;
-
- for (int index = 0; index < items.Size(); index++)
- {
- if (!items[index]->HasVideoInfoTag() || items[index]->GetVideoInfoTag()->m_iDbId <= 0)
- continue;
-
- videodb.RemoveTagFromItem(items[index]->GetVideoInfoTag()->m_iDbId, item->GetVideoInfoTag()->m_iDbId, mediaType);
- }
-
- // we need to clear any cached version of this tag's listing
- items.SetPath(item->GetPath());
- items.RemoveDiscCache(GetID());
- return true;
- }
- case CONTEXT_BUTTON_MOVIESET_ADD_REMOVE_ITEMS:
- {
- CFileItemList originalItems;
- CFileItemList selectedItems;
-
- if (!CGUIDialogVideoInfo::GetMoviesForSet(item.get(), originalItems, selectedItems) || selectedItems.Size() == 0) // need at least one item selected
- return true;
- VECFILEITEMS original = originalItems.GetList();
- std::sort(original.begin(), original.end(), compFileItemsByDbId);
- VECFILEITEMS selected = selectedItems.GetList();
- std::sort(selected.begin(), selected.end(), compFileItemsByDbId);
-
- bool refreshNeeded = false;
- // update the "added" items
- VECFILEITEMS addedItems;
- set_difference(selected.begin(),selected.end(), original.begin(),original.end(), std::back_inserter(addedItems), compFileItemsByDbId);
- for (VECFILEITEMS::iterator it = addedItems.begin(); it != addedItems.end(); ++it)
- {
- if (CGUIDialogVideoInfo::SetMovieSet(it->get(), item.get()))
- refreshNeeded = true;
- }
- // update the "deleted" items
- CFileItemPtr clearItem(new CFileItem());
- clearItem->GetVideoInfoTag()->m_iDbId = -1; // -1 will be used to clear set
- VECFILEITEMS deletedItems;
- set_difference(original.begin(),original.end(), selected.begin(),selected.end(), std::back_inserter(deletedItems), compFileItemsByDbId);
- for (VECFILEITEMS::iterator it = deletedItems.begin(); it != deletedItems.end(); ++it)
- {
- if (CGUIDialogVideoInfo::SetMovieSet(it->get(), clearItem.get()))
- refreshNeeded = true;
- }
+ bool result = CGUIDialogVideoInfo::ManageVideoItemArtwork(m_vecItems->Get(itemNumber), type);
+ Refresh();
- // we need to clear any cached version of this tag's listing
- if (refreshNeeded)
- Refresh();
- return true;
+ return result;
}
case CONTEXT_BUTTON_GO_TO_ARTIST:
{
@@ -1362,68 +976,13 @@ bool CGUIWindowVideoNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
return CGUIWindowVideoBase::OnContextButton(itemNumber, button);
}
-void CGUIWindowVideoNav::OnChooseFanart(const CFileItem &videoItem)
-{
- if (!videoItem.HasVideoInfoTag())
- return;
-
- CFileItem item(videoItem);
-
- CFileItemList items;
-
- CVideoThumbLoader loader;
- loader.LoadItem(&item);
-
- if (item.HasArt("fanart"))
- {
- CFileItemPtr itemCurrent(new CFileItem("fanart://Current",false));
- itemCurrent->SetArt("thumb", item.GetArt("fanart"));
- itemCurrent->SetLabel(g_localizeStrings.Get(20440));
- items.Add(itemCurrent);
- }
-
- // add the none option
- {
- CFileItemPtr itemNone(new CFileItem("fanart://None", false));
- itemNone->SetIconImage("DefaultVideo.png");
- itemNone->SetLabel(g_localizeStrings.Get(20439));
- items.Add(itemNone);
- }
-
- CStdString result;
- VECSOURCES sources(*CMediaSourceSettings::Get().GetSources("video"));
- g_mediaManager.GetLocalDrives(sources);
- CGUIDialogVideoInfo::AddItemPathToFileBrowserSources(sources, item);
- bool flip=false;
- if (!CGUIDialogFileBrowser::ShowAndGetImage(items, sources, g_localizeStrings.Get(20437), result, &flip, 20445) || result.Equals("fanart://Current"))
- return;
-
- if (result.Equals("fanart://None") || !CFile::Exists(result))
- result.clear();
- if (!result.empty() && flip)
- result = CTextureUtils::GetWrappedImageURL(result, "", "flipped");
-
- // update the db
- CVideoDatabase db;
- if (db.Open())
- {
- db.SetArtForItem(item.GetVideoInfoTag()->m_iDbId, item.GetVideoInfoTag()->m_type, "fanart", result);
- db.Close();
- }
-
- // clear view cache and reload images
- CUtil::DeleteVideoDatabaseDirectoryCache();
-
- Refresh();
-}
-
bool CGUIWindowVideoNav::OnClick(int iItem)
{
CFileItemPtr item = m_vecItems->Get(iItem);
if (!item->m_bIsFolder && item->IsVideoDb() && !item->Exists())
{
CLog::Log(LOGDEBUG, "%s called on '%s' but file doesn't exist", __FUNCTION__, item->GetPath().c_str());
- if (!DeleteItem(item.get(), true))
+ if (!CGUIDialogVideoInfo::DeleteVideoItemFromDatabase(item, true))
return true;
// update list
@@ -1452,7 +1011,7 @@ bool CGUIWindowVideoNav::OnClick(int iItem)
// get the media type and convert from plural to singular (by removing the trailing "s")
CStdString mediaType = item->GetPath().substr(9);
mediaType = mediaType.substr(0, mediaType.size() - 1);
- CStdString localizedType = GetLocalizedType(mediaType);
+ CStdString localizedType = CGUIDialogVideoInfo::GetLocalizedVideoType(mediaType);
if (localizedType.empty())
return true;
@@ -1466,7 +1025,7 @@ bool CGUIWindowVideoNav::OnClick(int iItem)
int idTag = videodb.AddTag(strTag);
CFileItemList items;
CStdString strLabel = StringUtils::Format(g_localizeStrings.Get(20464), localizedType.c_str());
- if (GetItemsForTag(strLabel, mediaType, items, idTag))
+ if (CGUIDialogVideoInfo::GetItemsForTag(strLabel, mediaType, items, idTag))
{
for (int index = 0; index < items.Size(); index++)
{
@@ -1614,80 +1173,3 @@ bool CGUIWindowVideoNav::ApplyWatchedFilter(CFileItemList &items)
return listchanged;
}
-
-bool CGUIWindowVideoNav::GetItemsForTag(const CStdString &strHeading, const std::string &type, CFileItemList &items, int idTag /* = -1 */, bool showAll /* = true */)
-{
- CVideoDatabase videodb;
- if (!videodb.Open())
- return false;
-
- MediaType mediaType = MediaTypeNone;
- std::string baseDir = "videodb://";
- std::string idColumn;
- if (type.compare("movie") == 0)
- {
- mediaType = MediaTypeMovie;
- baseDir += "movies";
- idColumn = "idMovie";
- }
- else if (type.compare("tvshow") == 0)
- {
- mediaType = MediaTypeTvShow;
- baseDir += "tvshows";
- idColumn = "idShow";
- }
- else if (type.compare("musicvideo") == 0)
- {
- mediaType = MediaTypeMusicVideo;
- baseDir += "musicvideos";
- idColumn = "idMVideo";
- }
-
- baseDir += "/titles/";
- CVideoDbUrl videoUrl;
- if (!videoUrl.FromString(baseDir))
- return false;
-
- CVideoDatabase::Filter filter;
- if (idTag > 0)
- {
- if (!showAll)
- videoUrl.AddOption("tagid", idTag);
- else
- filter.where = videodb.PrepareSQL("%sview.%s NOT IN (SELECT taglinks.idMedia FROM taglinks WHERE taglinks.idTag = %d AND taglinks.media_type = '%s')", type.c_str(), idColumn.c_str(), idTag, type.c_str());
- }
-
- CFileItemList listItems;
- if (!videodb.GetSortedVideos(mediaType, videoUrl.ToString(), SortDescription(), listItems, filter) || listItems.Size() <= 0)
- return false;
-
- CGUIDialogSelect *dialog = (CGUIDialogSelect *)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT);
- if (dialog == NULL)
- return false;
-
- listItems.Sort(SortByLabel, SortOrderAscending, SortAttributeIgnoreArticle);
-
- dialog->Reset();
- dialog->SetMultiSelection(true);
- dialog->SetHeading(strHeading);
- dialog->SetItems(&listItems);
- dialog->EnableButton(true, 186);
- dialog->DoModal();
-
- items.Copy(dialog->GetSelectedItems());
- return items.Size() > 0;
-}
-
-CStdString CGUIWindowVideoNav::GetLocalizedType(const std::string &strType)
-{
- if (strType == "movie" || strType == "movies")
- return g_localizeStrings.Get(20342);
- else if (strType == "tvshow" || strType == "tvshows")
- return g_localizeStrings.Get(20343);
- else if (strType == "episode" || strType == "episodes")
- return g_localizeStrings.Get(20359);
- else if (strType == "musicvideo" || strType == "musicvideos")
- return g_localizeStrings.Get(20391);
- else
- return "";
-}
diff --git a/xbmc/video/windows/GUIWindowVideoNav.h b/xbmc/video/windows/GUIWindowVideoNav.h
index c17ce6e5e4..1854da3a7e 100644
--- a/xbmc/video/windows/GUIWindowVideoNav.h
+++ b/xbmc/video/windows/GUIWindowVideoNav.h
@@ -35,8 +35,6 @@ public:
virtual bool OnMessage(CGUIMessage& message);
virtual void OnInfo(CFileItem* pItem, ADDON::ScraperPtr &info);
- static bool CanDelete(const CStdString& strPath);
- static bool DeleteItem(CFileItem* pItem, bool bUnavailable=false);
/*! \brief Load video information from the database for these items (public static version)
Useful for grabbing information for file listings, from watched status to full metadata
@@ -53,11 +51,6 @@ protected:
*/
void LoadVideoInfo(CFileItemList &items);
- /*! \brief Pop up a fanart chooser. Does not utilise remote URLs.
- \param videoItem the item to choose fanart for.
- */
- void OnChooseFanart(const CFileItem &videoItem);
-
bool ApplyWatchedFilter(CFileItemList &items);
virtual bool GetFilteredItems(const CStdString &filter, CFileItemList &items);
@@ -75,8 +68,5 @@ protected:
virtual CStdString GetQuickpathName(const CStdString& strPath) const;
- bool GetItemsForTag(const CStdString &strHeading, const std::string &type, CFileItemList &items, int idTag = -1, bool showAll = true);
- static CStdString GetLocalizedType(const std::string &strType);
-
VECSOURCES m_shares;
};
diff --git a/xbmc/win32/WIN32Util.cpp b/xbmc/win32/WIN32Util.cpp
index 5782023bf6..03e71f01cf 100644
--- a/xbmc/win32/WIN32Util.cpp
+++ b/xbmc/win32/WIN32Util.cpp
@@ -34,7 +34,6 @@
#include "guilib/LocalizeStrings.h"
#include "utils/CharsetConverter.h"
#include "utils/log.h"
-#include "utils/StringUtils.h"
#include "DllPaths_win32.h"
#include "FileSystem/File.h"
#include "utils/URIUtils.h"
@@ -355,7 +354,7 @@ std::vector<CStdString> CWIN32Util::GetDiskUsage()
if( DRIVE_FIXED == GetDriveType( strDrive.c_str() ) &&
GetDiskFreeSpaceEx( ( strDrive.c_str() ), NULL, &ULTotal, &ULTotalFree ) )
{
- strRet = StringUtils::Format("%s %d MB %s",strDrive.c_str(), int(ULTotalFree.QuadPart/(1024*1024)),g_localizeStrings.Get(160));
+ strRet = StringUtils::Format("%s %d MB %s",strDrive.c_str(), int(ULTotalFree.QuadPart/(1024*1024)),g_localizeStrings.Get(160).c_str());
result.push_back(strRet);
}
iPos += (strlen( pcBuffer + iPos) + 1 );
@@ -534,16 +533,16 @@ HRESULT CWIN32Util::ToggleTray(const char cDriveLetter)
char cDL = cDriveLetter;
if( !cDL )
{
- CStdString dvdDevice = g_mediaManager.TranslateDevicePath("");
+ std::string dvdDevice = g_mediaManager.TranslateDevicePath("");
if(dvdDevice == "")
return S_FALSE;
cDL = dvdDevice[0];
}
- std::string strVolFormat = StringUtils::Format( _T("\\\\.\\%c:" ), cDL);
+ std::string strVolFormat = StringUtils::Format("\\\\.\\%c:", cDL);
HANDLE hDrive= CreateFile( strVolFormat.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- std::string strRootFormat = StringUtils::Format( _T("%c:\\"), cDL);
+ std::string strRootFormat = StringUtils::Format("%c:\\", cDL);
if( ( hDrive != INVALID_HANDLE_VALUE || GetLastError() == NO_ERROR) &&
( GetDriveType( strRootFormat.c_str() ) == DRIVE_CDROM ) )
{
@@ -556,7 +555,7 @@ HRESULT CWIN32Util::ToggleTray(const char cDriveLetter)
// unmount it here too as it won't hurt
if(dwReq == IOCTL_STORAGE_EJECT_MEDIA && bRet == 1)
{
- strRootFormat = StringUtils::Format( _T("%c:"), cDL);
+ strRootFormat = StringUtils::Format("%c:", cDL);
CMediaSource share;
share.strPath = strRootFormat;
share.strName = share.strPath;
@@ -576,7 +575,7 @@ HRESULT CWIN32Util::EjectTray(const char cDriveLetter)
cDL = dvdDevice[0];
}
- std::string strVolFormat = StringUtils::Format( _T("\\\\.\\%c:" ), cDL);
+ std::string strVolFormat = StringUtils::Format("\\\\.\\%c:", cDL);
if(GetDriveStatus(strVolFormat, true) != 1)
return ToggleTray(cDL);
@@ -595,7 +594,7 @@ HRESULT CWIN32Util::CloseTray(const char cDriveLetter)
cDL = dvdDevice[0];
}
- std::string strVolFormat = StringUtils::Format( _T("\\\\.\\%c:" ), cDL);
+ std::string strVolFormat = StringUtils::Format( "\\\\.\\%c:", cDL);
if(GetDriveStatus(strVolFormat, true) == 1)
return ToggleTray(cDL);
@@ -688,7 +687,7 @@ bool CWIN32Util::EjectDrive(const char cDriveLetter)
if( !cDriveLetter )
return false;
- std::string strVolFormat = StringUtils::Format( _T("\\\\.\\%c:" ), cDriveLetter);
+ std::string strVolFormat = StringUtils::Format("\\\\.\\%c:", cDriveLetter);
long DiskNumber = -1;
diff --git a/xbmc/win32/XBMC_PC.rc b/xbmc/win32/XBMC_PC.rc
index 721f058355..75c6b1d70b 100644
--- a/xbmc/win32/XBMC_PC.rc
+++ b/xbmc/win32/XBMC_PC.rc
@@ -53,8 +53,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 12,9,9,0
- PRODUCTVERSION 12,9,9,0
+ FILEVERSION 12,9,11,0
+ PRODUCTVERSION 12,9,11,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -71,12 +71,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Team XBMC"
VALUE "FileDescription", "XBMC"
- VALUE "FileVersion", "13.0-ALPHA10"
+ VALUE "FileVersion", "13.0-ALPHA11"
VALUE "InternalName", "XBMC.exe"
VALUE "LegalCopyright", "Copyright (c) Team XBMC. All rights reserved."
VALUE "OriginalFilename", "XBMC.exe"
VALUE "ProductName", "XBMC for Windows"
- VALUE "ProductVersion", "13.0-ALPHA10"
+ VALUE "ProductVersion", "13.0-ALPHA11"
END
END
BLOCK "VarFileInfo"
diff --git a/xbmc/windows/GUIMediaWindow.cpp b/xbmc/windows/GUIMediaWindow.cpp
index cd01d3371d..5b23ffd37d 100644
--- a/xbmc/windows/GUIMediaWindow.cpp
+++ b/xbmc/windows/GUIMediaWindow.cpp
@@ -1336,6 +1336,21 @@ bool CGUIMediaWindow::OnPlayAndQueueMedia(const CFileItemPtr &item)
g_playlistPlayer.ClearPlaylist(iPlaylist);
g_playlistPlayer.Reset();
int mediaToPlay = 0;
+
+ // first try to find mainDVD file (VIDEO_TS.IFO).
+ // If we find this we should not allow to queue VOB files
+ std::string mainDVD;
+ for (int i = 0; i < m_vecItems->Size(); i++)
+ {
+ std::string path = URIUtils::GetFileName(m_vecItems->Get(i)->GetPath());
+ if (StringUtils::EqualsNoCase(path, "VIDEO_TS.IFO"))
+ {
+ mainDVD = path;
+ break;
+ }
+ }
+
+ // now queue...
for ( int i = 0; i < m_vecItems->Size(); i++ )
{
CFileItemPtr nItem = m_vecItems->Get(i);
@@ -1343,7 +1358,7 @@ bool CGUIMediaWindow::OnPlayAndQueueMedia(const CFileItemPtr &item)
if (nItem->m_bIsFolder)
continue;
- if (!nItem->IsPlayList() && !nItem->IsZIP() && !nItem->IsRAR())
+ if (!nItem->IsPlayList() && !nItem->IsZIP() && !nItem->IsRAR() && (!nItem->IsDVDFile() || (URIUtils::GetFileName(nItem->GetPath()) == mainDVD)))
g_playlistPlayer.Add(iPlaylist, nItem);
if (item->IsSamePath(nItem.get()))